From 9e2f5c94840bdb4e5e44c45b334f024d2d4f55d1 Mon Sep 17 00:00:00 2001 From: Nicolas Bally Date: Wed, 17 Jul 2013 11:44:52 +0200 Subject: [PATCH] initial --- .gitignore | 9 + Capfile | 4 + Gemfile | 62 + Gemfile.lock | 196 + README.rdoc | 28 + Rakefile | 6 + .../admin/content_type/type_BlockContent.png | Bin 0 -> 2799 bytes .../admin/content_type/type_BreakContent.png | Bin 0 -> 2619 bytes .../content_type/type_DownloadContent.png | Bin 0 -> 3002 bytes .../content_type/type_DynamicContent.png | Bin 0 -> 3101 bytes .../admin/content_type/type_EventContent.png | Bin 0 -> 3225 bytes .../content_type/type_GalleryContent.png | Bin 0 -> 3099 bytes .../admin/content_type/type_HtmlContent.png | Bin 0 -> 3349 bytes .../admin/content_type/type_ImageContent.png | Bin 0 -> 3086 bytes .../content_type/type_ImgLinkContent.png | Bin 0 -> 3064 bytes .../admin/content_type/type_LinkContent.png | Bin 0 -> 3291 bytes .../admin/content_type/type_MapContent.png | Bin 0 -> 3401 bytes .../admin/content_type/type_TableContent.png | Bin 0 -> 3028 bytes .../admin/content_type/type_TextContent.png | Bin 0 -> 2954 bytes .../admin/content_type/type_TitleContent.png | Bin 0 -> 3047 bytes .../images/file_types/1358029801_css.png | Bin 0 -> 13439 bytes .../images/file_types/1358029807_docx.png | Bin 0 -> 19760 bytes .../images/file_types/1358029820_psd.png | Bin 0 -> 15137 bytes .../images/file_types/1358029824_jpg.png | Bin 0 -> 19545 bytes .../images/file_types/1358029827_generic.png | Bin 0 -> 10807 bytes .../images/file_types/1358029830_doc.png | Bin 0 -> 19440 bytes .../images/file_types/1358029834_aac.png | Bin 0 -> 18592 bytes .../images/file_types/1358029839_wmv.png | Bin 0 -> 14912 bytes .../images/file_types/1358029845_raw.png | Bin 0 -> 19867 bytes .../images/file_types/1358029848_tar.png | Bin 0 -> 12005 bytes .../images/file_types/1358029854_tiff.png | Bin 0 -> 19388 bytes .../images/file_types/1358029858_rtf.png | Bin 0 -> 19388 bytes .../images/file_types/1358029860_rtf.png | Bin 0 -> 19388 bytes .../images/file_types/1358029868_js.png | Bin 0 -> 14893 bytes .../images/file_types/1358029872_gif.png | Bin 0 -> 19425 bytes .../images/file_types/1358029874_aiff.png | Bin 0 -> 18453 bytes .../images/file_types/1358029878_gzip.png | Bin 0 -> 12139 bytes .../images/file_types/1358029881_ma.png | Bin 0 -> 18600 bytes .../images/file_types/1358029885_mp.png | Bin 0 -> 19107 bytes .../images/file_types/1358029888_php.png | Bin 0 -> 14436 bytes .../images/file_types/1358029892_mpeg.png | Bin 0 -> 15293 bytes .../images/file_types/1358029894_mov.png | Bin 0 -> 19275 bytes .../images/file_types/1358029899_html.png | Bin 0 -> 15836 bytes .../images/file_types/1358029903_avi.png | Bin 0 -> 14574 bytes .../images/file_types/1358029912_wav.png | Bin 0 -> 18702 bytes .../images/file_types/1358029916_generic.png | Bin 0 -> 10807 bytes app/assets/images/file_types/_blank.png | Bin 0 -> 558 bytes app/assets/images/file_types/_page.png | Bin 0 -> 1635 bytes app/assets/images/file_types/aac.png | Bin 0 -> 2092 bytes app/assets/images/file_types/ai.png | Bin 0 -> 9796 bytes app/assets/images/file_types/bmp.png | Bin 0 -> 463491 bytes app/assets/images/file_types/eps.png | Bin 0 -> 17318 bytes app/assets/images/file_types/gif.png | Bin 0 -> 17008 bytes app/assets/images/file_types/icns.png | Bin 0 -> 17657 bytes app/assets/images/file_types/ico.png | Bin 0 -> 17331 bytes app/assets/images/file_types/jpeg.png | Bin 0 -> 17473 bytes app/assets/images/file_types/jpg.png | Bin 0 -> 17473 bytes app/assets/images/file_types/key.png | Bin 0 -> 13305 bytes app/assets/images/file_types/kth.png | Bin 0 -> 17014 bytes app/assets/images/file_types/m4v.png | Bin 0 -> 19169 bytes app/assets/images/file_types/md.png | Bin 0 -> 5968 bytes app/assets/images/file_types/mpg.png | Bin 0 -> 14820 bytes app/assets/images/file_types/nmbtemplate.png | Bin 0 -> 16466 bytes app/assets/images/file_types/numbers.png | Bin 0 -> 12849 bytes app/assets/images/file_types/odf.png | Bin 0 -> 1384 bytes app/assets/images/file_types/ods.png | Bin 0 -> 1600 bytes app/assets/images/file_types/odt.png | Bin 0 -> 1594 bytes app/assets/images/file_types/otp.png | Bin 0 -> 1350 bytes app/assets/images/file_types/ots.png | Bin 0 -> 1511 bytes app/assets/images/file_types/ott.png | Bin 0 -> 1491 bytes app/assets/images/file_types/pages.png | Bin 0 -> 16881 bytes app/assets/images/file_types/pdf.png | Bin 0 -> 11840 bytes app/assets/images/file_types/php.png | Bin 0 -> 1510 bytes app/assets/images/file_types/png.png | Bin 0 -> 18137 bytes app/assets/images/file_types/psd.png | Bin 0 -> 12372 bytes app/assets/images/file_types/sql.png | Bin 0 -> 11721 bytes app/assets/images/file_types/tar.gz.png | Bin 0 -> 11784 bytes app/assets/images/file_types/tar.png | Bin 0 -> 11784 bytes app/assets/images/file_types/template.png | Bin 0 -> 20592 bytes app/assets/images/file_types/tiff.png | Bin 0 -> 16866 bytes app/assets/images/file_types/txt.png | Bin 0 -> 11302 bytes app/assets/images/file_types/zip.png | Bin 0 -> 11784 bytes app/assets/images/front/P1030073.JPG | Bin 0 -> 5092505 bytes app/assets/images/front/Sans-titre-3.png | Bin 0 -> 145563 bytes app/assets/images/front/blank.gif | Bin 0 -> 43 bytes app/assets/images/front/diapos/dia1.jpg | Bin 0 -> 1094661 bytes app/assets/images/front/diapos/dia2.jpg | Bin 0 -> 1420707 bytes app/assets/images/front/diapos/dia3.jpg | Bin 0 -> 871391 bytes .../front/dossier sans titre 3/dia3.jpg | Bin 0 -> 662869 bytes .../front/dossier sans titre 4/dia1.jpg | Bin 0 -> 433016 bytes .../front/dossier sans titre 4/dia2.jpg | Bin 0 -> 1219274 bytes .../front/dossier sans titre 4/dia3.jpg | Bin 0 -> 441131 bytes app/assets/images/front/fancybox_loading.gif | Bin 0 -> 3866 bytes app/assets/images/front/fancybox_overlay.png | Bin 0 -> 1003 bytes app/assets/images/front/fancybox_sprite.png | Bin 0 -> 1362 bytes app/assets/images/front/fond-bleu.png | Bin 0 -> 3242358 bytes app/assets/images/front/fond-gris.png | Bin 0 -> 4581 bytes app/assets/images/front/fond.jpg | Bin 0 -> 175334 bytes app/assets/images/front/fond.png | Bin 0 -> 10474 bytes app/assets/images/front/logo.ai | 1802 ++ app/assets/images/front/logo.png | Bin 0 -> 4230 bytes app/assets/images/front/paper.png | Bin 0 -> 145574 bytes app/assets/images/front/paper2.png | Bin 0 -> 7125 bytes app/assets/images/front/papier.png | Bin 0 -> 145563 bytes app/assets/images/front/reposoir.jpg | Bin 0 -> 558964 bytes app/assets/images/vendor/select2-spinner.gif | Bin 0 -> 1849 bytes app/assets/images/vendor/select2.png | Bin 0 -> 613 bytes app/assets/images/vendor/select2x2.png | Bin 0 -> 845 bytes app/assets/javascripts/admin.coffee | 273 + app/assets/javascripts/image_files.js | 190 + app/assets/javascripts/manager.js | 174 + app/assets/javascripts/pane_hover.js | 49 + app/assets/javascripts/public.coffee | 57 + app/assets/javascripts/redactor.js | 4210 ++++ .../javascripts/vendor/bootstrap-slider.js | 388 + .../javascripts/vendor/bootstrap.js.coffee | 4 + app/assets/javascripts/vendor/caroussel.js | 125 + app/assets/javascripts/vendor/filterable.js | 74 + .../javascripts/vendor/jquery-1.3.2.min.js | 19 + .../javascripts/vendor/jquery-sortable.js | 598 + .../vendor/jquery.backgroundPosition.js | 68 + .../javascripts/vendor/jquery.backstretch.js | 364 + .../vendor/jquery.carouFredSel-5.6.2.js | 2701 +++ .../javascripts/vendor/jquery.easing.1.3.js | 205 + .../javascripts/vendor/jquery.event.drag.js | 402 + .../vendor/jquery.fancybox-1.3.4.pack.js | 46 + .../vendor/jquery.fancybox.pack.js | 45 + .../vendor/jquery.fileupload-process.js | 164 + .../vendor/jquery.fileupload-ui.js | 638 + .../javascripts/vendor/jquery.fileupload.js | 1315 + .../vendor/jquery.iframe-transport.js | 205 + .../vendor/jquery.mousewheel-3.0.4.pack.js | 14 + .../javascripts/vendor/jquery.ui.widget.js | 530 + app/assets/javascripts/vendor/select2.min.js | 3137 +++ app/assets/javascripts/vendor/tmpl.min.js | 1 + .../javascripts/vendor/wysihtml5-0.4.0pre.js | 9579 ++++++++ .../javascripts/vendor/wysihtml5-parser.js | 553 + app/assets/stylesheets/admin.css.less | 504 + .../admin/framework/accordion.less | 34 + .../stylesheets/admin/framework/alerts.less | 79 + .../admin/framework/bootstrap.less | 67 + .../admin/framework/breadcrumbs.less | 24 + .../admin/framework/button-groups.less | 229 + .../stylesheets/admin/framework/buttons.less | 228 + .../stylesheets/admin/framework/carousel.less | 158 + .../stylesheets/admin/framework/close.less | 32 + .../stylesheets/admin/framework/code.less | 61 + .../admin/framework/component-animations.less | 22 + .../admin/framework/dropdowns.less | 248 + .../stylesheets/admin/framework/forms.less | 695 + .../stylesheets/admin/framework/formt.less | 310 + .../stylesheets/admin/framework/grid.less | 21 + .../admin/framework/hero-unit.less | 25 + .../admin/framework/labels-badges.less | 84 + .../stylesheets/admin/framework/layouts.less | 16 + .../stylesheets/admin/framework/media.less | 55 + .../stylesheets/admin/framework/mixins.less | 702 + .../stylesheets/admin/framework/modals.less | 95 + .../stylesheets/admin/framework/navbar.less | 497 + .../stylesheets/admin/framework/navs.less | 409 + .../stylesheets/admin/framework/pager.less | 43 + .../admin/framework/pagination.less | 123 + .../stylesheets/admin/framework/popovers.less | 133 + .../admin/framework/progress-bars.less | 122 + .../stylesheets/admin/framework/reset.less | 216 + .../framework/responsive-1200px-min.less | 28 + .../admin/framework/responsive-767px-max.less | 193 + .../framework/responsive-768px-979px.less | 19 + .../admin/framework/responsive-navbar.less | 189 + .../admin/framework/responsive-utilities.less | 59 + .../admin/framework/responsive.less | 48 + .../admin/framework/scaffolding.less | 53 + .../stylesheets/admin/framework/slider.less | 104 + .../stylesheets/admin/framework/sprites.less | 197 + .../stylesheets/admin/framework/tables.less | 244 + .../admin/framework/thumbnails.less | 53 + .../stylesheets/admin/framework/tooltip.less | 70 + .../stylesheets/admin/framework/type.less | 247 + .../admin/framework/utilities.less | 30 + .../admin/framework/variables.less | 301 + .../stylesheets/admin/framework/wells.less | 29 + app/assets/stylesheets/admin/lesshat.less | 2200 ++ app/assets/stylesheets/admin/pane_hover.less | 59 + app/assets/stylesheets/admin_auth.css.less | 29 + .../stylesheets/fontawesome/bootstrap.less | 78 + app/assets/stylesheets/fontawesome/core.less | 132 + .../stylesheets/fontawesome/extras.less | 79 + .../fontawesome/font-awesome-ie7.less | 413 + .../stylesheets/fontawesome/font-awesome.less | 32 + app/assets/stylesheets/fontawesome/icons.less | 330 + .../stylesheets/fontawesome/mixins.less | 34 + app/assets/stylesheets/fontawesome/path.less | 15 + .../stylesheets/fontawesome/variables.less | 9 + app/assets/stylesheets/manager.less | 123 + app/assets/stylesheets/public copy.less | 570 + app/assets/stylesheets/public.less | 47 + .../public/framework/accordion.less | 34 + .../stylesheets/public/framework/alerts.less | 79 + .../public/framework/bootstrap.less | 67 + .../public/framework/breadcrumbs.less | 24 + .../public/framework/button-groups.less | 229 + .../stylesheets/public/framework/buttons.less | 228 + .../public/framework/carousel.less | 158 + .../stylesheets/public/framework/close.less | 32 + .../stylesheets/public/framework/code.less | 61 + .../framework/component-animations.less | 22 + .../public/framework/dropdowns.less | 248 + .../stylesheets/public/framework/forms.less | 693 + .../stylesheets/public/framework/formt.less | 310 + .../stylesheets/public/framework/grid.less | 21 + .../public/framework/hero-unit.less | 25 + .../public/framework/labels-badges.less | 84 + .../stylesheets/public/framework/layouts.less | 16 + .../stylesheets/public/framework/media.less | 55 + .../stylesheets/public/framework/mixins.less | 702 + .../stylesheets/public/framework/modals.less | 95 + .../stylesheets/public/framework/navbar.less | 497 + .../stylesheets/public/framework/navs.less | 409 + .../stylesheets/public/framework/pager.less | 43 + .../public/framework/pagination.less | 123 + .../public/framework/popovers.less | 133 + .../public/framework/progress-bars.less | 122 + .../stylesheets/public/framework/reset.less | 216 + .../framework/responsive-1200px-min.less | 28 + .../framework/responsive-767px-max.less | 193 + .../framework/responsive-768px-979px.less | 19 + .../public/framework/responsive-navbar.less | 189 + .../framework/responsive-utilities.less | 59 + .../public/framework/responsive.less | 48 + .../public/framework/scaffolding.less | 53 + .../stylesheets/public/framework/slider.less | 104 + .../stylesheets/public/framework/sprites.less | 197 + .../stylesheets/public/framework/tables.less | 244 + .../public/framework/thumbnails.less | 53 + .../stylesheets/public/framework/tooltip.less | 70 + .../stylesheets/public/framework/type.less | 247 + .../public/framework/utilities.less | 30 + .../public/framework/variables.less | 301 + .../stylesheets/public/framework/wells.less | 29 + app/assets/stylesheets/public/inner.less | 492 + app/assets/stylesheets/public/structure.less | 335 + app/assets/stylesheets/redactor.less | 693 + app/assets/stylesheets/scaffolds.css.less | 62 + app/assets/stylesheets/shared/formtastic.less | 145 + .../stylesheets/shared/jquery.fancybox.less | 249 + app/assets/stylesheets/vendor/select2.less | 645 + .../admin/admin_auths_controller.rb | 38 + app/controllers/admin/admins_controller.rb | 67 + app/controllers/admin/albums_controller.rb | 43 + app/controllers/admin/articles_controller.rb | 113 + app/controllers/admin/artworks_controller.rb | 105 + app/controllers/admin/blocks_controller.rb | 28 + .../admin/categories_controller.rb | 77 + app/controllers/admin/cibles_controller.rb | 24 + app/controllers/admin/comments_controller.rb | 52 + app/controllers/admin/dashboard_controller.rb | 12 + .../admin/data_files_controller.rb | 60 + .../admin/external_links_controller.rb | 72 + .../admin/file_folders_controller.rb | 50 + .../admin/image_files_controller.rb | 66 + .../admin/menu_aliases_controller.rb | 15 + .../admin/menu_items_controller.rb | 269 + app/controllers/admin/menu_urls_controller.rb | 14 + app/controllers/admin/menus_controller.rb | 79 + app/controllers/admin/pages_controller.rb | 14 + .../admin/password_resets_controller.rb | 25 + app/controllers/admin/photos_controller.rb | 72 + .../admin/portfolios_controller.rb | 67 + app/controllers/admin/quotes_controller.rb | 74 + app/controllers/application_controller.rb | 38 + app/controllers/concerns/.keep | 0 .../download_data_files_controller.rb | 14 + .../portlet/block_contents_controller.rb | 111 + .../portlet/break_contents_controller.rb | 116 + .../portlet/download_contents_controller.rb | 109 + .../portlet/dynamic_contents_controller.rb | 116 + .../portlet/event_contents_controller.rb | 100 + .../portlet/gallery_contents_controller.rb | 109 + .../portlet/gallery_images_controller.rb | 82 + .../portlet/html_contents_controller.rb | 116 + .../portlet/image_contents_controller.rb | 100 + .../portlet/img_link_contents_controller.rb | 112 + .../portlet/link_contents_controller.rb | 110 + .../portlet/map_contents_controller.rb | 116 + .../portlet/portlets_controller.rb | 124 + .../portlet/table_cols_controller.rb | 35 + .../portlet/table_contents_controller.rb | 108 + .../portlet/table_rows_controller.rb | 106 + .../portlet/text_contents_controller.rb | 116 + .../portlet/title_contents_controller.rb | 116 + app/controllers/public/articles_controller.rb | 76 + app/controllers/public/comments_controller.rb | 19 + app/controllers/public/home_controller.rb | 16 + .../public/menu_items_controller.rb | 47 + app/controllers/public/photos_controller.rb | 19 + .../public/portfolios_controller.rb | 19 + app/controllers/public/quotes_controller.rb | 63 + app/helpers/application_helper.rb | 14 + app/helpers/icon_helper.rb | 21 + app/helpers/menu_items_helper.rb | 7 + app/mailers/.keep | 0 app/mailers/admin_mailer.rb | 6 + app/models/.keep | 0 app/models/admin.rb | 47 + app/models/album.rb | 5 + app/models/allowed_block_content.rb | 5 + app/models/article.rb | 56 + app/models/artwork.rb | 21 + app/models/artwork_image.rb | 14 + app/models/block.rb | 57 + app/models/block_content.rb | 56 + app/models/break_content.rb | 6 + app/models/category.rb | 12 + app/models/cel_table.rb | 90 + app/models/cible_alias.rb | 26 + app/models/cible_url.rb | 11 + app/models/concerns/.keep | 0 app/models/data_file.rb | 44 + app/models/download_content.rb | 9 + app/models/dynamic_content.rb | 9 + app/models/external_link.rb | 16 + app/models/file_folder.rb | 3 + app/models/gallery_content.rb | 45 + app/models/gallery_image.rb | 17 + app/models/html_content.rb | 7 + app/models/image_content.rb | 32 + app/models/image_file.rb | 43 + app/models/img_link_content.rb | 35 + app/models/link_content.rb | 41 + app/models/map_content.rb | 12 + app/models/menu.rb | 12 + app/models/menu_alias.rb | 13 + app/models/menu_folder.rb | 8 + app/models/menu_item.rb | 164 + app/models/menu_url.rb | 9 + app/models/page.rb | 43 + app/models/photo.rb | 60 + app/models/portfolio.rb | 9 + app/models/portlet.rb | 39 + app/models/quote.rb | 59 + app/models/table_content.rb | 48 + app/models/table_row.rb | 82 + app/models/tag.rb | 30 + app/models/tag_taggable.rb | 16 + app/models/text_content.rb | 6 + app/models/title_content.rb | 7 + app/uploaders/file_uploader.rb | 58 + app/uploaders/image_uploader.rb | 79 + app/views/admin/admin_auths/index.haml | 6 + app/views/admin/admin_auths/new.haml | 19 + app/views/admin/admins/_admin.html.haml | 16 + app/views/admin/admins/_form.html.haml | 41 + app/views/admin/admins/create.js.erb | 1 + app/views/admin/admins/destroy.js.erb | 1 + app/views/admin/admins/edit.js.erb | 1 + app/views/admin/admins/index.html.haml | 43 + app/views/admin/admins/index.js.erb | 2 + app/views/admin/admins/new.js.erb | 4 + app/views/admin/admins/update.js.erb | 1 + app/views/admin/albums/_album.html.haml | 9 + app/views/admin/albums/_albums.html.haml | 5 + app/views/admin/albums/create.js.erb | 2 + app/views/admin/albums/destroy.js.erb | 4 + app/views/admin/albums/edit.js.erb | 16 + app/views/admin/albums/new.js.erb | 16 + app/views/admin/albums/update.js.erb | 2 + app/views/admin/articles/_article.html.haml | 15 + app/views/admin/articles/_form.html.haml | 15 + .../admin/articles/_index_block.html.haml | 26 + app/views/admin/articles/_show.html.haml | 17 + app/views/admin/articles/create.js.erb | 5 + app/views/admin/articles/destroy.js.erb | 2 + app/views/admin/articles/edit.html.haml | 50 + app/views/admin/articles/edit.js.erb | 1 + app/views/admin/articles/index.html.haml | 11 + app/views/admin/articles/index.js.erb | 2 + app/views/admin/articles/new.js.erb | 2 + app/views/admin/articles/update.js.erb | 5 + app/views/admin/artworks/_artwork.html.haml | 20 + app/views/admin/artworks/_edit.html.haml | 117 + app/views/admin/artworks/_form.html.haml | 29 + app/views/admin/artworks/create.js.erb | 13 + app/views/admin/artworks/destroy.js.erb | 12 + app/views/admin/artworks/edit.js.erb | 2 + app/views/admin/artworks/index.html.haml | 38 + app/views/admin/artworks/new.js.erb | 4 + app/views/admin/artworks/reorder.js.erb | 0 app/views/admin/artworks/update.js.erb | 1 + app/views/admin/blocks/_block.html.haml | 8 + .../admin/blocks/_block_allowed.html.haml | 7 + app/views/admin/blocks/_edit.html.haml | 0 app/views/admin/blocks/_form.html.haml | 16 + app/views/admin/blocks/edit.html.haml | 1 + app/views/admin/blocks/edit.js.erb | 8 + app/views/admin/blocks/old.block | 5 + app/views/admin/blocks/old.show.html.haml | 19 + .../admin/categories/_category.html.haml | 10 + app/views/admin/categories/_form.html.haml | 8 + app/views/admin/categories/cible.html.haml | 6 + app/views/admin/categories/create.js.erb | 3 + app/views/admin/categories/destroy.js.erb | 3 + app/views/admin/categories/edit.js.erb | 1 + app/views/admin/categories/index.html.haml | 7 + app/views/admin/categories/new.js.erb | 1 + app/views/admin/categories/update.js.erb | 2 + app/views/admin/cibles/_cible_place.html.haml | 10 + app/views/admin/cibles/index.html.haml | 1 + app/views/admin/cibles/index.js.erb | 2 + app/views/admin/cibles/new.html.haml | 15 + app/views/admin/comments/_comment.html.haml | 11 + app/views/admin/comments/_form.html.haml | 15 + app/views/admin/comments/destroy.js.erb | 3 + app/views/admin/comments/edit.js.erb | 1 + app/views/admin/comments/index.html.haml | 6 + app/views/admin/comments/update.js.erb | 3 + .../admin/data_files/_data_file.html.haml | 20 + .../_data_files_container.html.haml | 3 + app/views/admin/data_files/_form.html.haml | 15 + .../admin/data_files/_index_block.html.haml | 147 + app/views/admin/data_files/_show.html.haml | 18 + app/views/admin/data_files/create.js.erb | 4 + app/views/admin/data_files/destroy.js.erb | 2 + app/views/admin/data_files/index.html.haml | 2 + app/views/admin/data_files/index.js.erb | 1 + app/views/admin/data_files/show.js.erb | 3 + app/views/admin/data_files/update.js.erb | 5 + .../external_links/_external_link.html.haml | 11 + .../admin/external_links/_form.html.haml | 14 + .../admin/external_links/cible.html.haml | 11 + app/views/admin/external_links/create.js.erb | 2 + app/views/admin/external_links/destroy.js.erb | 1 + app/views/admin/external_links/edit.html.haml | 6 + app/views/admin/external_links/edit.js.erb | 1 + app/views/admin/external_links/index.js.erb | 2 + app/views/admin/external_links/new.js.erb | 1 + app/views/admin/external_links/show.html.haml | 31 + app/views/admin/external_links/update.js.erb | 2 + .../admin/file_folders/_file_folder.html.haml | 14 + .../file_folders/_file_folders.html.haml | 6 + app/views/admin/file_folders/create.js.erb | 2 + app/views/admin/file_folders/destroy.js.erb | 1 + app/views/admin/file_folders/edit.js.erb | 16 + app/views/admin/file_folders/index.js.erb | 3 + app/views/admin/file_folders/new.js.erb | 16 + app/views/admin/file_folders/update.js.erb | 2 + app/views/admin/image_files/_form.html.haml | 17 + .../admin/image_files/_image_file.html.haml | 10 + .../_image_files_container.html.haml | 4 + .../admin/image_files/_index_block.html.haml | 159 + app/views/admin/image_files/_show.html.haml | 16 + app/views/admin/image_files/create.js.erb | 9 + app/views/admin/image_files/destroy.js.erb | 4 + app/views/admin/image_files/index.html.haml | 2 + app/views/admin/image_files/index.js.erb | 2 + app/views/admin/image_files/rotate.js.erb | 9 + app/views/admin/image_files/show.js.erb | 3 + app/views/admin/image_files/update.js.erb | 5 + app/views/admin/menu_aliases/_form.html.haml | 6 + .../admin/menu_aliases/_menu_alias.html.haml | 4 + app/views/admin/menu_aliases/edit.html.haml | 0 .../admin/menu_items/_cible_line.html.haml | 9 + .../admin/menu_items/_edit_form.html.haml | 12 + app/views/admin/menu_items/_form.html.haml | 10 + .../admin/menu_items/_form_line.html.haml | 7 + .../admin/menu_items/_index_block.html.haml | 55 + .../admin/menu_items/_menu_item.html.haml | 30 + .../_menu_item_content_form.html.haml | 7 + .../admin/menu_items/_new_form.html.haml | 36 + app/views/admin/menu_items/_show.html.haml | 7 + app/views/admin/menu_items/cible.html.haml | 5 + app/views/admin/menu_items/create.js.erb | 4 + app/views/admin/menu_items/edit.html.haml | 14 + app/views/admin/menu_items/edit.js.erb | 3 + app/views/admin/menu_items/index.html.haml | 9 + app/views/admin/menu_items/index.js.erb | 13 + app/views/admin/menu_items/new.html.haml | 4 + app/views/admin/menu_items/new.js.erb | 1 + app/views/admin/menu_items/reorder.js.erb | 4 + app/views/admin/menu_items/show.js.erb | 11 + app/views/admin/menu_items/update.js.erb | 4 + .../menu_items/update_reorder_failled.js.erb | 7 + app/views/admin/menu_urls/_form.html.haml | 5 + app/views/admin/menu_urls/_menu_url.html.haml | 4 + app/views/admin/menu_urls/edit.html.haml | 0 app/views/admin/menus/_form.html.haml | 8 + app/views/admin/menus/_index_block.html.haml | 43 + app/views/admin/menus/_menu.html.haml | 9 + app/views/admin/menus/edit.html.haml | 4 + app/views/admin/menus/index.html.haml | 5 + app/views/admin/menus/index.js.erb | 2 + app/views/admin/menus/new.html.haml | 4 + app/views/admin/menus/show.html.haml | 2 + app/views/admin/pages/_form.html.haml | 6 + app/views/admin/pages/_page.html.haml | 44 + app/views/admin/pages/edit.html.haml | 0 app/views/admin/pages/update.html.haml | 2 + .../admin/password_resets/edit.html.haml | 6 + app/views/admin/password_resets/new.html.haml | 6 + app/views/admin/passwords/edit.html.haml | 16 + app/views/admin/passwords/new.html.haml | 11 + app/views/admin/photos/_form.html.haml | 15 + app/views/admin/photos/_photo.html.haml | 21 + app/views/admin/photos/_tags.html.haml | 14 + app/views/admin/photos/create.js.erb | 2 + app/views/admin/photos/destroy.js.erb | 2 + app/views/admin/photos/edit.js.erb | 2 + app/views/admin/photos/index.html.haml | 206 + app/views/admin/photos/new.js.erb | 4 + app/views/admin/photos/show.html.haml | 184 + app/views/admin/photos/update.js.erb | 3 + app/views/admin/portfolios/_form.html.haml | 42 + .../admin/portfolios/_portfolio.html.haml | 15 + app/views/admin/portfolios/create.js.erb | 1 + app/views/admin/portfolios/destroy.js.erb | 1 + app/views/admin/portfolios/edit.js.erb | 1 + app/views/admin/portfolios/index.html.haml | 38 + app/views/admin/portfolios/new.js.erb | 4 + app/views/admin/portfolios/show.html.haml | 184 + app/views/admin/portfolios/update.js.erb | 1 + app/views/admin/quotes/_form.html.haml | 33 + app/views/admin/quotes/_quote.html.haml | 21 + app/views/admin/quotes/_tags.html.haml | 14 + app/views/admin/quotes/create.js.erb | 3 + app/views/admin/quotes/destroy.js.erb | 2 + app/views/admin/quotes/edit.js.erb | 2 + app/views/admin/quotes/index.html.haml | 81 + app/views/admin/quotes/new.js.erb | 2 + app/views/admin/quotes/show.html.haml | 0 app/views/admin/quotes/update.js.erb | 3 + app/views/admin/sessions/new.html.haml | 21 + .../admin_mailer/password_reset.text.erb | 9 + app/views/layouts/admin.html.haml | 77 + app/views/layouts/admin_auth.haml | 20 + app/views/layouts/application.html.erb | 90 + app/views/layouts/public.html.haml | 81 + .../block_contents/_block_content.html.haml | 20 + .../portlet/block_contents/_form.html.haml | 89 + .../break_contents/_break_content.html.haml | 1 + .../portlet/break_contents/_form.html.haml | 15 + .../_download_content.html.haml | 8 + .../portlet/download_contents/_form.html.haml | 39 + .../_dynamic_content.html.haml | 1 + .../portlet/dynamic_contents/_form.html.haml | 18 + .../event_contents/_event_content.html.haml | 48 + .../portlet/event_contents/_form.html.haml | 56 + .../portlet/gallery_contents/_form.html.haml | 9 + .../_gallery_content.html.haml | 18 + .../portlet/gallery_images/_form.html.haml | 32 + .../gallery_images/_gallery_image.html.haml | 9 + .../portlet/gallery_images/create.js.erb | 1 + .../portlet/gallery_images/destroy.js.erb | 4 + app/views/portlet/gallery_images/edit.js.erb | 2 + .../portlet/gallery_images/reorder.js.erb | 0 .../portlet/gallery_images/update.js.erb | 5 + .../portlet/html_contents/_form.html.haml | 60 + .../html_contents/_html_content.html.haml | 11 + .../portlet/image_contents/_form.html.haml | 32 + .../image_contents/_image_content.html.haml | 42 + .../portlet/img_link_contents/_form.html.haml | 20 + .../_img_link_content.html.haml | 16 + .../portlet/link_contents/_form.html.haml | 14 + .../link_contents/_link_content.html.haml | 10 + .../portlet/map_contents/_form.html.haml | 26 + .../map_contents/_map_content.html.haml | 64 + app/views/portlet/portlets/_portlet.html.haml | 34 + app/views/portlet/portlets/new.html.haml | 7 + app/views/portlet/portlets/new.js.erb | 12 + app/views/portlet/portlets/update.js.erb | 8 + app/views/portlet/shared/_new.html.haml | 6 + app/views/portlet/shared/create.js.erb | 13 + app/views/portlet/shared/destroy.js.erb | 4 + app/views/portlet/shared/edit.js.erb | 18 + app/views/portlet/shared/new.js.erb | 21 + app/views/portlet/shared/update.js.erb | 7 + app/views/portlet/table_cols/create.js.erb | 4 + app/views/portlet/table_cols/destroy.js.erb | 4 + .../portlet/table_contents/_form.html.haml | 22 + .../table_contents/_table_content.html.haml | 46 + .../_table_content_edit_pane.html.haml | 33 + .../portlet/table_contents/destroy_row.js.erb | 6 + app/views/portlet/table_rows/create.js.erb | 4 + app/views/portlet/table_rows/destroy.js.erb | 4 + .../portlet/text_contents/_form.html.haml | 35 + .../text_contents/_text_content.html.haml | 1 + .../portlet/title_contents/_form.html.haml | 15 + .../title_contents/_title_content.html.haml | 4 + .../render_public/_blockcontent.html.haml | 30 + .../render_public/_breakcontent.html.haml | 1 + .../render_public/_downloadcontent.html.haml | 11 + .../render_public/_dynamiccontent.html.haml | 3 + .../render_public/_eventcontent.html.haml | 106 + .../render_public/_gallerycontent.html.haml | 136 + .../render_public/_htmlcontent.html.haml | 5 + .../render_public/_imagecontent.html.haml | 51 + .../render_public/_imglinkcontent.html.haml | 27 + .../render_public/_linkcontent.html.haml | 6 + .../render_public/_mapcontent.html.haml | 64 + .../render_public/_tablecontent.html.haml | 74 + .../render_public/_textcontent.html.haml | 1 + .../render_public/_titlecontent.html.haml | 5 + app/views/public/articles/_article.html.haml | 19 + .../public/articles/_article_intro.html.haml | 35 + app/views/public/articles/_index.html.haml | 6 + .../articles/_sidebar_archives.html.haml | 16 + .../articles/_sidebar_categories.html.haml | 7 + .../articles/_sidebar_recents.html.haml | 8 + .../public/articles/_sidebar_tags.html.haml | 8 + app/views/public/articles/feed.rss.builder | 22 + app/views/public/articles/index.html.haml | 1 + app/views/public/articles/index.js.erb | 50 + app/views/public/articles/show.html.haml | 23 + app/views/public/artworks/_artwork.html.haml | 22 + app/views/public/blocks/_block.html.haml | 5 + app/views/public/comments/_comment.html.haml | 26 + app/views/public/comments/_form.html.haml | 32 + app/views/public/comments/create.js.erb | 12 + app/views/public/home/home.html.haml | 7 + app/views/public/menu_items/show.html.haml | 23 + app/views/public/menu_items/show.js.erb | 51 + app/views/public/photos/_bandeau.html.haml | 6 + app/views/public/photos/_form.html.haml | 15 + app/views/public/photos/_index.html.haml | 43 + app/views/public/photos/_photo.html.haml | 11 + app/views/public/photos/_show.html.haml | 122 + app/views/public/photos/index.html.haml | 1 + app/views/public/photos/index.js.erb | 51 + app/views/public/photos/show.js.erb | 4 + .../public/portfolios/_portfolio.html.haml | 15 + app/views/public/portfolios/_show.html.haml | 28 + app/views/public/portfolios/index.html.haml | 38 + app/views/public/portfolios/show.html.haml | 1 + app/views/public/portfolios/show.js.erb | 50 + app/views/public/quotes/_bandeau.html.haml | 6 + app/views/public/quotes/_create.html.haml | 22 + .../public/quotes/_create_photo.html.haml | 9 + app/views/public/quotes/_form.html.haml | 15 + app/views/public/quotes/_index.html.haml | 36 + app/views/public/quotes/_new.html.haml | 24 + app/views/public/quotes/_new_photo.html.haml | 11 + app/views/public/quotes/_quote.html.haml | 5 + app/views/public/quotes/_tags.html.haml | 14 + app/views/public/quotes/create.html.haml | 1 + app/views/public/quotes/create.js.erb | 50 + app/views/public/quotes/createphoto.js.erb | 3 + app/views/public/quotes/destroy.js.erb | 2 + app/views/public/quotes/edit.js.erb | 2 + app/views/public/quotes/index.html.haml | 1 + app/views/public/quotes/index.js.erb | 50 + app/views/public/quotes/new.html.haml | 1 + app/views/public/quotes/new.js.erb | 50 + app/views/public/quotes/newphoto.js.erb | 3 + app/views/public/quotes/show.html.haml | 0 app/views/public/quotes/update.js.erb | 3 + app/views/public/shared/_first_menu.html.haml | 16 + app/views/public/shared/_ga.html.erb | 13 + bin/bundle | 3 + bin/rails | 4 + bin/rake | 4 + config.ru | 4 + config/application.rb | 26 + config/boot.rb | 4 + config/compass.rb | 2 + config/database.yml | 25 + config/deploy.rb | 137 + config/environment.rb | 5 + config/environments/development.rb | 33 + config/environments/production.rb | 90 + config/environments/test.rb | 36 + config/initializers/backtrace_silencers.rb | 7 + .../initializers/filter_parameter_logging.rb | 4 + config/initializers/formtastic.rb | 94 + config/initializers/inflections.rb | 16 + config/initializers/mime_types.rb | 5 + config/initializers/secret_token.rb | 12 + config/initializers/session_store.rb | 3 + config/initializers/to_slug.rb | 43 + config/initializers/wrap_parameters.rb | 14 + config/locales/en.bootstrap.yml | 17 + config/locales/en.yml | 23 + config/locales/fr.yml | 244 + config/nginx.conf | 29 + config/routes.rb | 179 + config/unicorn.rb | 10 + config/unicorn_init_d | 64 + db/migrate/0001_create_admins.rb | 27 + db/migrate/0003_create_menu.rb | 15 + db/migrate/0004_menu_items.rb | 34 + db/migrate/0010_create_pages.rb | 19 + db/migrate/0065_create_blocks.rb | 19 + db/migrate/0070_create_portlets.rb | 19 + db/migrate/0075_create_title_contents.rb | 17 + db/migrate/0076_create_text_contents.rb | 16 + db/migrate/0077_create_image_contents.rb | 25 + db/migrate/0078_create_link_contents.rb | 24 + db/migrate/0079_create_break_contents.rb | 16 + db/migrate/0080_create_html_contents.rb | 16 + db/migrate/0081_create_download_contents.rb | 20 + db/migrate/0082_create_gallery_contents.rb | 19 + db/migrate/0101_create_gallery_images.rb | 20 + db/migrate/0102_create_dynamic_contents.rb | 15 + .../20110215144022_create_table_contents.rb | 17 + .../20110215144326_create_table_rows.rb | 15 + .../20110215144501_create_cel_tables.rb | 17 + db/migrate/20110412073417_create_tags.rb | 19 + .../20110412080316_create_image_files.rb | 22 + db/migrate/20110414184246_create_albums.rb | 17 + .../20110418153215_create_block_contents.rb | 20 + .../20110420132008_create_menu_aliases.rb | 15 + db/migrate/20110420132127_create_menu_urls.rb | 15 + .../20110421125532_create_file_folders.rb | 16 + .../20110421125631_create_data_files.rb | 19 + .../20110427164514_create_map_contents.rb | 19 + .../20110708093908_create_external_links.rb | 21 + db/migrate/20110710114840_create_articles.rb | 22 + .../20111125124808_create_tag_taggables.rb | 11 + .../20111128164327_create_categories.rb | 13 + .../20130707144152_create_portfolios.rb | 13 + db/migrate/20130707144511_create_artworks.rb | 18 + .../20130707160102_create_artwork_images.rb | 11 + db/migrate/20130707222341_create_photos.rb | 15 + db/migrate/20130707222444_create_quotes.rb | 15 + .../20130715171140_add_photo_to_quotes.rb | 5 + db/schema.rb | 394 + db/seeds.rb | 0 lib/assets/.keep | 0 lib/tasks/.keep | 0 log/.keep | 0 public/404.html | 58 + public/422.html | 58 + public/500.html | 57 + public/ace_editor/ace-compat-noconflict.js | 1 + .../ace-compat-uncompressed-noconflict.js | 480 + public/ace_editor/ace-compat-uncompressed.js | 480 + public/ace_editor/ace-compat.js | 1 + public/ace_editor/ace-noconflict.js | 10 + .../ace_editor/ace-uncompressed-noconflict.js | 19976 ++++++++++++++++ public/ace_editor/ace-uncompressed.js | 19976 ++++++++++++++++ public/ace_editor/ace.js | 10 + .../ace_editor/keybinding-emacs-noconflict.js | 1 + ...eybinding-emacs-uncompressed-noconflict.js | 150 + .../keybinding-emacs-uncompressed.js | 150 + public/ace_editor/keybinding-emacs.js | 1 + .../ace_editor/keybinding-vim-noconflict.js | 1 + .../keybinding-vim-uncompressed-noconflict.js | 138 + .../ace_editor/keybinding-vim-uncompressed.js | 138 + public/ace_editor/keybinding-vim.js | 1 + public/ace_editor/mode-c_cpp-noconflict.js | 1 + .../mode-c_cpp-uncompressed-noconflict.js | 919 + public/ace_editor/mode-c_cpp-uncompressed.js | 919 + public/ace_editor/mode-c_cpp.js | 1 + public/ace_editor/mode-clojure-noconflict.js | 1 + .../mode-clojure-uncompressed-noconflict.js | 422 + .../ace_editor/mode-clojure-uncompressed.js | 422 + public/ace_editor/mode-clojure.js | 1 + public/ace_editor/mode-coffee-noconflict.js | 1 + .../mode-coffee-uncompressed-noconflict.js | 607 + public/ace_editor/mode-coffee-uncompressed.js | 607 + public/ace_editor/mode-coffee.js | 1 + .../ace_editor/mode-coldfusion-noconflict.js | 1 + ...mode-coldfusion-uncompressed-noconflict.js | 2458 ++ .../mode-coldfusion-uncompressed.js | 2458 ++ public/ace_editor/mode-coldfusion.js | 1 + public/ace_editor/mode-csharp-noconflict.js | 1 + .../mode-csharp-uncompressed-noconflict.js | 769 + public/ace_editor/mode-csharp-uncompressed.js | 769 + public/ace_editor/mode-csharp.js | 1 + public/ace_editor/mode-css-noconflict.js | 1 + .../mode-css-uncompressed-noconflict.js | 641 + public/ace_editor/mode-css-uncompressed.js | 641 + public/ace_editor/mode-css.js | 1 + public/ace_editor/mode-golang-noconflict.js | 1 + .../mode-golang-uncompressed-noconflict.js | 378 + public/ace_editor/mode-golang-uncompressed.js | 378 + public/ace_editor/mode-golang.js | 1 + public/ace_editor/mode-groovy-noconflict.js | 1 + .../mode-groovy-uncompressed-noconflict.js | 1393 ++ public/ace_editor/mode-groovy-uncompressed.js | 1393 ++ public/ace_editor/mode-groovy.js | 1 + public/ace_editor/mode-haxe-noconflict.js | 1 + .../mode-haxe-uncompressed-noconflict.js | 769 + public/ace_editor/mode-haxe-uncompressed.js | 769 + public/ace_editor/mode-haxe.js | 1 + public/ace_editor/mode-html-noconflict.js | 1 + .../mode-html-uncompressed-noconflict.js | 2475 ++ public/ace_editor/mode-html-uncompressed.js | 2475 ++ public/ace_editor/mode-html.js | 1 + public/ace_editor/mode-java-noconflict.js | 1 + .../mode-java-uncompressed-noconflict.js | 1395 ++ public/ace_editor/mode-java-uncompressed.js | 1395 ++ public/ace_editor/mode-java.js | 1 + .../ace_editor/mode-javascript-noconflict.js | 1 + ...mode-javascript-uncompressed-noconflict.js | 1226 + .../mode-javascript-uncompressed.js | 1226 + public/ace_editor/mode-javascript.js | 1 + public/ace_editor/mode-json-noconflict.js | 1 + .../mode-json-uncompressed-noconflict.js | 701 + public/ace_editor/mode-json-uncompressed.js | 701 + public/ace_editor/mode-json.js | 1 + public/ace_editor/mode-latex-noconflict.js | 1 + .../mode-latex-uncompressed-noconflict.js | 95 + public/ace_editor/mode-latex-uncompressed.js | 95 + public/ace_editor/mode-latex.js | 1 + public/ace_editor/mode-less-noconflict.js | 1 + .../mode-less-uncompressed-noconflict.js | 655 + public/ace_editor/mode-less-uncompressed.js | 655 + public/ace_editor/mode-less.js | 1 + public/ace_editor/mode-liquid-noconflict.js | 1 + .../mode-liquid-uncompressed-noconflict.js | 1353 ++ public/ace_editor/mode-liquid-uncompressed.js | 1353 ++ public/ace_editor/mode-liquid.js | 1 + public/ace_editor/mode-lua-noconflict.js | 1 + .../mode-lua-uncompressed-noconflict.js | 523 + public/ace_editor/mode-lua-uncompressed.js | 523 + public/ace_editor/mode-lua.js | 1 + public/ace_editor/mode-markdown-noconflict.js | 1 + .../mode-markdown-uncompressed-noconflict.js | 2925 +++ .../ace_editor/mode-markdown-uncompressed.js | 2925 +++ public/ace_editor/mode-markdown.js | 1 + public/ace_editor/mode-ocaml-noconflict.js | 1 + .../mode-ocaml-uncompressed-noconflict.js | 539 + public/ace_editor/mode-ocaml-uncompressed.js | 539 + public/ace_editor/mode-ocaml.js | 1 + public/ace_editor/mode-perl-noconflict.js | 1 + .../mode-perl-uncompressed-noconflict.js | 574 + public/ace_editor/mode-perl-uncompressed.js | 574 + public/ace_editor/mode-perl.js | 1 + public/ace_editor/mode-pgsql-noconflict.js | 1 + .../mode-pgsql-uncompressed-noconflict.js | 1104 + public/ace_editor/mode-pgsql-uncompressed.js | 1104 + public/ace_editor/mode-pgsql.js | 1 + public/ace_editor/mode-php-noconflict.js | 1 + .../mode-php-uncompressed-noconflict.js | 1885 ++ public/ace_editor/mode-php-uncompressed.js | 1885 ++ public/ace_editor/mode-php.js | 1 + .../ace_editor/mode-powershell-noconflict.js | 1 + ...mode-powershell-uncompressed-noconflict.js | 710 + .../mode-powershell-uncompressed.js | 710 + public/ace_editor/mode-powershell.js | 1 + public/ace_editor/mode-python-noconflict.js | 1 + .../mode-python-uncompressed-noconflict.js | 507 + public/ace_editor/mode-python-uncompressed.js | 507 + public/ace_editor/mode-python.js | 1 + public/ace_editor/mode-ruby-noconflict.js | 1 + .../mode-ruby-uncompressed-noconflict.js | 391 + public/ace_editor/mode-ruby-uncompressed.js | 391 + public/ace_editor/mode-ruby.js | 1 + public/ace_editor/mode-scad-noconflict.js | 1 + .../mode-scad-uncompressed-noconflict.js | 907 + public/ace_editor/mode-scad-uncompressed.js | 907 + public/ace_editor/mode-scad.js | 1 + public/ace_editor/mode-scala-noconflict.js | 1 + .../mode-scala-uncompressed-noconflict.js | 1395 ++ public/ace_editor/mode-scala-uncompressed.js | 1395 ++ public/ace_editor/mode-scala.js | 1 + public/ace_editor/mode-scss-noconflict.js | 1 + .../mode-scss-uncompressed-noconflict.js | 679 + public/ace_editor/mode-scss-uncompressed.js | 679 + public/ace_editor/mode-scss.js | 1 + public/ace_editor/mode-sh-noconflict.js | 1 + .../mode-sh-uncompressed-noconflict.js | 289 + public/ace_editor/mode-sh-uncompressed.js | 289 + public/ace_editor/mode-sh.js | 1 + public/ace_editor/mode-sql-noconflict.js | 1 + .../mode-sql-uncompressed-noconflict.js | 159 + public/ace_editor/mode-sql-uncompressed.js | 159 + public/ace_editor/mode-sql.js | 1 + public/ace_editor/mode-svg-noconflict.js | 1 + .../mode-svg-uncompressed-noconflict.js | 2137 ++ public/ace_editor/mode-svg-uncompressed.js | 2137 ++ public/ace_editor/mode-svg.js | 1 + public/ace_editor/mode-text-noconflict.js | 0 .../mode-text-uncompressed-noconflict.js | 0 public/ace_editor/mode-text-uncompressed.js | 0 public/ace_editor/mode-text.js | 0 public/ace_editor/mode-textile-noconflict.js | 1 + .../mode-textile-uncompressed-noconflict.js | 254 + .../ace_editor/mode-textile-uncompressed.js | 254 + public/ace_editor/mode-textile.js | 1 + public/ace_editor/mode-xml-noconflict.js | 1 + .../mode-xml-uncompressed-noconflict.js | 1012 + public/ace_editor/mode-xml-uncompressed.js | 1012 + public/ace_editor/mode-xml.js | 1 + public/ace_editor/mode-xquery-noconflict.js | 1 + .../mode-xquery-uncompressed-noconflict.js | 540 + public/ace_editor/mode-xquery-uncompressed.js | 540 + public/ace_editor/mode-xquery.js | 1 + public/ace_editor/theme-chrome-noconflict.js | 1 + .../theme-chrome-uncompressed-noconflict.js | 207 + .../ace_editor/theme-chrome-uncompressed.js | 207 + public/ace_editor/theme-chrome.js | 1 + public/ace_editor/theme-clouds-noconflict.js | 1 + .../theme-clouds-uncompressed-noconflict.js | 160 + .../ace_editor/theme-clouds-uncompressed.js | 160 + public/ace_editor/theme-clouds.js | 1 + .../theme-clouds_midnight-noconflict.js | 1 + ...clouds_midnight-uncompressed-noconflict.js | 161 + .../theme-clouds_midnight-uncompressed.js | 161 + public/ace_editor/theme-clouds_midnight.js | 1 + public/ace_editor/theme-cobalt-noconflict.js | 1 + .../theme-cobalt-uncompressed-noconflict.js | 187 + .../ace_editor/theme-cobalt-uncompressed.js | 187 + public/ace_editor/theme-cobalt.js | 1 + .../theme-crimson_editor-noconflict.js | 1 + ...-crimson_editor-uncompressed-noconflict.js | 198 + .../theme-crimson_editor-uncompressed.js | 198 + public/ace_editor/theme-crimson_editor.js | 1 + public/ace_editor/theme-dawn-noconflict.js | 1 + .../theme-dawn-uncompressed-noconflict.js | 191 + public/ace_editor/theme-dawn-uncompressed.js | 191 + public/ace_editor/theme-dawn.js | 1 + .../theme-dreamweaver-noconflict.js | 1 + ...eme-dreamweaver-uncompressed-noconflict.js | 227 + .../theme-dreamweaver-uncompressed.js | 227 + public/ace_editor/theme-dreamweaver.js | 1 + public/ace_editor/theme-eclipse-noconflict.js | 1 + .../theme-eclipse-uncompressed-noconflict.js | 147 + .../ace_editor/theme-eclipse-uncompressed.js | 147 + public/ace_editor/theme-eclipse.js | 1 + .../theme-idle_fingers-noconflict.js | 1 + ...me-idle_fingers-uncompressed-noconflict.js | 179 + .../theme-idle_fingers-uncompressed.js | 179 + public/ace_editor/theme-idle_fingers.js | 1 + .../ace_editor/theme-kr_theme-noconflict.js | 1 + .../theme-kr_theme-uncompressed-noconflict.js | 182 + .../ace_editor/theme-kr_theme-uncompressed.js | 182 + public/ace_editor/theme-kr_theme.js | 1 + .../ace_editor/theme-merbivore-noconflict.js | 1 + ...theme-merbivore-uncompressed-noconflict.js | 182 + .../theme-merbivore-uncompressed.js | 182 + public/ace_editor/theme-merbivore.js | 1 + .../theme-merbivore_soft-noconflict.js | 1 + ...-merbivore_soft-uncompressed-noconflict.js | 188 + .../theme-merbivore_soft-uncompressed.js | 188 + public/ace_editor/theme-merbivore_soft.js | 1 + .../theme-mono_industrial-noconflict.js | 1 + ...mono_industrial-uncompressed-noconflict.js | 190 + .../theme-mono_industrial-uncompressed.js | 190 + public/ace_editor/theme-mono_industrial.js | 1 + public/ace_editor/theme-monokai-noconflict.js | 1 + .../theme-monokai-uncompressed-noconflict.js | 191 + .../ace_editor/theme-monokai-uncompressed.js | 191 + public/ace_editor/theme-monokai.js | 1 + .../theme-pastel_on_dark-noconflict.js | 1 + ...-pastel_on_dark-uncompressed-noconflict.js | 192 + .../theme-pastel_on_dark-uncompressed.js | 192 + public/ace_editor/theme-pastel_on_dark.js | 1 + .../theme-solarized_dark-noconflict.js | 1 + ...-solarized_dark-uncompressed-noconflict.js | 176 + .../theme-solarized_dark-uncompressed.js | 176 + public/ace_editor/theme-solarized_dark.js | 1 + .../theme-solarized_light-noconflict.js | 1 + ...solarized_light-uncompressed-noconflict.js | 172 + .../theme-solarized_light-uncompressed.js | 172 + public/ace_editor/theme-solarized_light.js | 1 + .../ace_editor/theme-textmate-noconflict.js | 0 .../theme-textmate-uncompressed-noconflict.js | 0 .../ace_editor/theme-textmate-uncompressed.js | 0 public/ace_editor/theme-textmate.js | 0 .../ace_editor/theme-tomorrow-noconflict.js | 1 + .../theme-tomorrow-uncompressed-noconflict.js | 206 + .../ace_editor/theme-tomorrow-uncompressed.js | 206 + public/ace_editor/theme-tomorrow.js | 1 + .../theme-tomorrow_night-noconflict.js | 1 + ...-tomorrow_night-uncompressed-noconflict.js | 206 + .../theme-tomorrow_night-uncompressed.js | 206 + public/ace_editor/theme-tomorrow_night.js | 1 + .../theme-tomorrow_night_blue-noconflict.js | 1 + ...rrow_night_blue-uncompressed-noconflict.js | 209 + .../theme-tomorrow_night_blue-uncompressed.js | 209 + .../ace_editor/theme-tomorrow_night_blue.js | 1 + .../theme-tomorrow_night_bright-noconflict.js | 1 + ...ow_night_bright-uncompressed-noconflict.js | 206 + ...heme-tomorrow_night_bright-uncompressed.js | 206 + .../ace_editor/theme-tomorrow_night_bright.js | 1 + ...heme-tomorrow_night_eighties-noconflict.js | 1 + ..._night_eighties-uncompressed-noconflict.js | 202 + ...me-tomorrow_night_eighties-uncompressed.js | 202 + .../theme-tomorrow_night_eighties.js | 1 + .../ace_editor/theme-twilight-noconflict.js | 1 + .../theme-twilight-uncompressed-noconflict.js | 204 + .../ace_editor/theme-twilight-uncompressed.js | 204 + public/ace_editor/theme-twilight.js | 1 + .../theme-vibrant_ink-noconflict.js | 1 + ...eme-vibrant_ink-uncompressed-noconflict.js | 183 + .../theme-vibrant_ink-uncompressed.js | 183 + public/ace_editor/theme-vibrant_ink.js | 1 + public/ace_editor/worker-coffee.js | 7997 +++++++ public/ace_editor/worker-css.js | 12228 ++++++++++ public/ace_editor/worker-javascript.js | 11132 +++++++++ public/ace_editor/worker-json.js | 3597 +++ public/background.png | Bin 0 -> 18746 bytes public/diapo/dia1.jpg | Bin 0 -> 783099 bytes public/favicon.ico | 0 public/fond2.png | Bin 0 -> 212678 bytes public/fonts/fontawesome-webfont.eot | Bin 0 -> 29360 bytes public/fonts/fontawesome-webfont.svg | 339 + public/fonts/fontawesome-webfont.ttf | Bin 0 -> 64960 bytes public/fonts/fontawesome-webfont.woff | Bin 0 -> 34420 bytes public/fonts/gondolasd/Gondola_SD-demo.html | 364 + public/fonts/gondolasd/Gondola_SD-webfont.eot | Bin 0 -> 23887 bytes public/fonts/gondolasd/Gondola_SD-webfont.svg | 333 + public/fonts/gondolasd/Gondola_SD-webfont.ttf | Bin 0 -> 46884 bytes .../fonts/gondolasd/Gondola_SD-webfont.woff | Bin 0 -> 25592 bytes .../specimen_files/Gondola_SD-cleartype.png | Bin 0 -> 112555 bytes .../gondolasd/specimen_files/easytabs.js | 7 + .../specimen_files/grid_12-825-55-15.css | 129 + .../specimen_files/specimen_stylesheet.css | 396 + public/fonts/gondolasd/stylesheet.css | 12 + public/foreground.png | Bin 0 -> 7768 bytes public/midground.png | Bin 0 -> 8041 bytes public/robots.txt | 5 + test/controllers/.keep | 0 test/fixtures/.keep | 0 test/fixtures/admins.yml | 23 + test/fixtures/artwork_images.yml | 9 + test/fixtures/artworks.yml | 27 + test/fixtures/photos.yml | 11 + test/fixtures/portfolios.yml | 13 + test/fixtures/quotes.yml | 9 + test/helpers/.keep | 0 test/integration/.keep | 0 test/mailers/.keep | 0 test/models/.keep | 0 test/models/admin_test.rb | 7 + test/models/artwork_image_test.rb | 7 + test/models/artwork_test.rb | 7 + test/models/photo_test.rb | 7 + test/models/portfolios_test.rb | 7 + test/models/quote_test.rb | 7 + test/test_helper.rb | 15 + vendor/assets/javascripts/.keep | 0 vendor/assets/stylesheets/.keep | 0 1032 files changed, 214793 insertions(+) create mode 100644 .gitignore create mode 100644 Capfile create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 README.rdoc create mode 100644 Rakefile create mode 100644 app/assets/images/admin/content_type/type_BlockContent.png create mode 100644 app/assets/images/admin/content_type/type_BreakContent.png create mode 100644 app/assets/images/admin/content_type/type_DownloadContent.png create mode 100644 app/assets/images/admin/content_type/type_DynamicContent.png create mode 100644 app/assets/images/admin/content_type/type_EventContent.png create mode 100644 app/assets/images/admin/content_type/type_GalleryContent.png create mode 100644 app/assets/images/admin/content_type/type_HtmlContent.png create mode 100644 app/assets/images/admin/content_type/type_ImageContent.png create mode 100644 app/assets/images/admin/content_type/type_ImgLinkContent.png create mode 100644 app/assets/images/admin/content_type/type_LinkContent.png create mode 100644 app/assets/images/admin/content_type/type_MapContent.png create mode 100644 app/assets/images/admin/content_type/type_TableContent.png create mode 100644 app/assets/images/admin/content_type/type_TextContent.png create mode 100644 app/assets/images/admin/content_type/type_TitleContent.png create mode 100644 app/assets/images/file_types/1358029801_css.png create mode 100644 app/assets/images/file_types/1358029807_docx.png create mode 100644 app/assets/images/file_types/1358029820_psd.png create mode 100644 app/assets/images/file_types/1358029824_jpg.png create mode 100644 app/assets/images/file_types/1358029827_generic.png create mode 100644 app/assets/images/file_types/1358029830_doc.png create mode 100644 app/assets/images/file_types/1358029834_aac.png create mode 100644 app/assets/images/file_types/1358029839_wmv.png create mode 100644 app/assets/images/file_types/1358029845_raw.png create mode 100644 app/assets/images/file_types/1358029848_tar.png create mode 100644 app/assets/images/file_types/1358029854_tiff.png create mode 100644 app/assets/images/file_types/1358029858_rtf.png create mode 100644 app/assets/images/file_types/1358029860_rtf.png create mode 100644 app/assets/images/file_types/1358029868_js.png create mode 100644 app/assets/images/file_types/1358029872_gif.png create mode 100644 app/assets/images/file_types/1358029874_aiff.png create mode 100644 app/assets/images/file_types/1358029878_gzip.png create mode 100644 app/assets/images/file_types/1358029881_ma.png create mode 100644 app/assets/images/file_types/1358029885_mp.png create mode 100644 app/assets/images/file_types/1358029888_php.png create mode 100644 app/assets/images/file_types/1358029892_mpeg.png create mode 100644 app/assets/images/file_types/1358029894_mov.png create mode 100644 app/assets/images/file_types/1358029899_html.png create mode 100644 app/assets/images/file_types/1358029903_avi.png create mode 100644 app/assets/images/file_types/1358029912_wav.png create mode 100644 app/assets/images/file_types/1358029916_generic.png create mode 100755 app/assets/images/file_types/_blank.png create mode 100755 app/assets/images/file_types/_page.png create mode 100755 app/assets/images/file_types/aac.png create mode 100644 app/assets/images/file_types/ai.png create mode 100644 app/assets/images/file_types/bmp.png create mode 100644 app/assets/images/file_types/eps.png create mode 100644 app/assets/images/file_types/gif.png create mode 100644 app/assets/images/file_types/icns.png create mode 100644 app/assets/images/file_types/ico.png create mode 100644 app/assets/images/file_types/jpeg.png create mode 100644 app/assets/images/file_types/jpg.png create mode 100644 app/assets/images/file_types/key.png create mode 100644 app/assets/images/file_types/kth.png create mode 100644 app/assets/images/file_types/m4v.png create mode 100644 app/assets/images/file_types/md.png create mode 100644 app/assets/images/file_types/mpg.png create mode 100644 app/assets/images/file_types/nmbtemplate.png create mode 100644 app/assets/images/file_types/numbers.png create mode 100755 app/assets/images/file_types/odf.png create mode 100755 app/assets/images/file_types/ods.png create mode 100755 app/assets/images/file_types/odt.png create mode 100755 app/assets/images/file_types/otp.png create mode 100755 app/assets/images/file_types/ots.png create mode 100755 app/assets/images/file_types/ott.png create mode 100644 app/assets/images/file_types/pages.png create mode 100644 app/assets/images/file_types/pdf.png create mode 100755 app/assets/images/file_types/php.png create mode 100644 app/assets/images/file_types/png.png create mode 100644 app/assets/images/file_types/psd.png create mode 100644 app/assets/images/file_types/sql.png create mode 100644 app/assets/images/file_types/tar.gz.png create mode 100644 app/assets/images/file_types/tar.png create mode 100644 app/assets/images/file_types/template.png create mode 100644 app/assets/images/file_types/tiff.png create mode 100644 app/assets/images/file_types/txt.png create mode 100644 app/assets/images/file_types/zip.png create mode 100644 app/assets/images/front/P1030073.JPG create mode 100644 app/assets/images/front/Sans-titre-3.png create mode 100755 app/assets/images/front/blank.gif create mode 100644 app/assets/images/front/diapos/dia1.jpg create mode 100644 app/assets/images/front/diapos/dia2.jpg create mode 100644 app/assets/images/front/diapos/dia3.jpg create mode 100644 app/assets/images/front/dossier sans titre 3/dia3.jpg create mode 100644 app/assets/images/front/dossier sans titre 4/dia1.jpg create mode 100644 app/assets/images/front/dossier sans titre 4/dia2.jpg create mode 100644 app/assets/images/front/dossier sans titre 4/dia3.jpg create mode 100755 app/assets/images/front/fancybox_loading.gif create mode 100755 app/assets/images/front/fancybox_overlay.png create mode 100755 app/assets/images/front/fancybox_sprite.png create mode 100644 app/assets/images/front/fond-bleu.png create mode 100644 app/assets/images/front/fond-gris.png create mode 100644 app/assets/images/front/fond.jpg create mode 100644 app/assets/images/front/fond.png create mode 100644 app/assets/images/front/logo.ai create mode 100644 app/assets/images/front/logo.png create mode 100644 app/assets/images/front/paper.png create mode 100644 app/assets/images/front/paper2.png create mode 100644 app/assets/images/front/papier.png create mode 100644 app/assets/images/front/reposoir.jpg create mode 100755 app/assets/images/vendor/select2-spinner.gif create mode 100755 app/assets/images/vendor/select2.png create mode 100755 app/assets/images/vendor/select2x2.png create mode 100644 app/assets/javascripts/admin.coffee create mode 100644 app/assets/javascripts/image_files.js create mode 100644 app/assets/javascripts/manager.js create mode 100644 app/assets/javascripts/pane_hover.js create mode 100644 app/assets/javascripts/public.coffee create mode 100755 app/assets/javascripts/redactor.js create mode 100755 app/assets/javascripts/vendor/bootstrap-slider.js create mode 100644 app/assets/javascripts/vendor/bootstrap.js.coffee create mode 100644 app/assets/javascripts/vendor/caroussel.js create mode 100755 app/assets/javascripts/vendor/filterable.js create mode 100644 app/assets/javascripts/vendor/jquery-1.3.2.min.js create mode 100644 app/assets/javascripts/vendor/jquery-sortable.js create mode 100644 app/assets/javascripts/vendor/jquery.backgroundPosition.js create mode 100644 app/assets/javascripts/vendor/jquery.backstretch.js create mode 100644 app/assets/javascripts/vendor/jquery.carouFredSel-5.6.2.js create mode 100644 app/assets/javascripts/vendor/jquery.easing.1.3.js create mode 100644 app/assets/javascripts/vendor/jquery.event.drag.js create mode 100755 app/assets/javascripts/vendor/jquery.fancybox-1.3.4.pack.js create mode 100755 app/assets/javascripts/vendor/jquery.fancybox.pack.js create mode 100755 app/assets/javascripts/vendor/jquery.fileupload-process.js create mode 100755 app/assets/javascripts/vendor/jquery.fileupload-ui.js create mode 100755 app/assets/javascripts/vendor/jquery.fileupload.js create mode 100755 app/assets/javascripts/vendor/jquery.iframe-transport.js create mode 100755 app/assets/javascripts/vendor/jquery.mousewheel-3.0.4.pack.js create mode 100755 app/assets/javascripts/vendor/jquery.ui.widget.js create mode 100755 app/assets/javascripts/vendor/select2.min.js create mode 100644 app/assets/javascripts/vendor/tmpl.min.js create mode 100644 app/assets/javascripts/vendor/wysihtml5-0.4.0pre.js create mode 100644 app/assets/javascripts/vendor/wysihtml5-parser.js create mode 100644 app/assets/stylesheets/admin.css.less create mode 100755 app/assets/stylesheets/admin/framework/accordion.less create mode 100755 app/assets/stylesheets/admin/framework/alerts.less create mode 100755 app/assets/stylesheets/admin/framework/bootstrap.less create mode 100755 app/assets/stylesheets/admin/framework/breadcrumbs.less create mode 100755 app/assets/stylesheets/admin/framework/button-groups.less create mode 100755 app/assets/stylesheets/admin/framework/buttons.less create mode 100755 app/assets/stylesheets/admin/framework/carousel.less create mode 100755 app/assets/stylesheets/admin/framework/close.less create mode 100755 app/assets/stylesheets/admin/framework/code.less create mode 100755 app/assets/stylesheets/admin/framework/component-animations.less create mode 100755 app/assets/stylesheets/admin/framework/dropdowns.less create mode 100755 app/assets/stylesheets/admin/framework/forms.less create mode 100644 app/assets/stylesheets/admin/framework/formt.less create mode 100755 app/assets/stylesheets/admin/framework/grid.less create mode 100755 app/assets/stylesheets/admin/framework/hero-unit.less create mode 100755 app/assets/stylesheets/admin/framework/labels-badges.less create mode 100755 app/assets/stylesheets/admin/framework/layouts.less create mode 100755 app/assets/stylesheets/admin/framework/media.less create mode 100755 app/assets/stylesheets/admin/framework/mixins.less create mode 100755 app/assets/stylesheets/admin/framework/modals.less create mode 100755 app/assets/stylesheets/admin/framework/navbar.less create mode 100755 app/assets/stylesheets/admin/framework/navs.less create mode 100755 app/assets/stylesheets/admin/framework/pager.less create mode 100755 app/assets/stylesheets/admin/framework/pagination.less create mode 100755 app/assets/stylesheets/admin/framework/popovers.less create mode 100755 app/assets/stylesheets/admin/framework/progress-bars.less create mode 100755 app/assets/stylesheets/admin/framework/reset.less create mode 100755 app/assets/stylesheets/admin/framework/responsive-1200px-min.less create mode 100755 app/assets/stylesheets/admin/framework/responsive-767px-max.less create mode 100755 app/assets/stylesheets/admin/framework/responsive-768px-979px.less create mode 100755 app/assets/stylesheets/admin/framework/responsive-navbar.less create mode 100755 app/assets/stylesheets/admin/framework/responsive-utilities.less create mode 100755 app/assets/stylesheets/admin/framework/responsive.less create mode 100755 app/assets/stylesheets/admin/framework/scaffolding.less create mode 100755 app/assets/stylesheets/admin/framework/slider.less create mode 100755 app/assets/stylesheets/admin/framework/sprites.less create mode 100755 app/assets/stylesheets/admin/framework/tables.less create mode 100755 app/assets/stylesheets/admin/framework/thumbnails.less create mode 100755 app/assets/stylesheets/admin/framework/tooltip.less create mode 100755 app/assets/stylesheets/admin/framework/type.less create mode 100755 app/assets/stylesheets/admin/framework/utilities.less create mode 100755 app/assets/stylesheets/admin/framework/variables.less create mode 100755 app/assets/stylesheets/admin/framework/wells.less create mode 100755 app/assets/stylesheets/admin/lesshat.less create mode 100644 app/assets/stylesheets/admin/pane_hover.less create mode 100644 app/assets/stylesheets/admin_auth.css.less create mode 100644 app/assets/stylesheets/fontawesome/bootstrap.less create mode 100644 app/assets/stylesheets/fontawesome/core.less create mode 100644 app/assets/stylesheets/fontawesome/extras.less create mode 100644 app/assets/stylesheets/fontawesome/font-awesome-ie7.less create mode 100644 app/assets/stylesheets/fontawesome/font-awesome.less create mode 100644 app/assets/stylesheets/fontawesome/icons.less create mode 100644 app/assets/stylesheets/fontawesome/mixins.less create mode 100644 app/assets/stylesheets/fontawesome/path.less create mode 100644 app/assets/stylesheets/fontawesome/variables.less create mode 100644 app/assets/stylesheets/manager.less create mode 100644 app/assets/stylesheets/public copy.less create mode 100644 app/assets/stylesheets/public.less create mode 100755 app/assets/stylesheets/public/framework/accordion.less create mode 100755 app/assets/stylesheets/public/framework/alerts.less create mode 100755 app/assets/stylesheets/public/framework/bootstrap.less create mode 100755 app/assets/stylesheets/public/framework/breadcrumbs.less create mode 100755 app/assets/stylesheets/public/framework/button-groups.less create mode 100755 app/assets/stylesheets/public/framework/buttons.less create mode 100755 app/assets/stylesheets/public/framework/carousel.less create mode 100755 app/assets/stylesheets/public/framework/close.less create mode 100755 app/assets/stylesheets/public/framework/code.less create mode 100755 app/assets/stylesheets/public/framework/component-animations.less create mode 100755 app/assets/stylesheets/public/framework/dropdowns.less create mode 100755 app/assets/stylesheets/public/framework/forms.less create mode 100644 app/assets/stylesheets/public/framework/formt.less create mode 100755 app/assets/stylesheets/public/framework/grid.less create mode 100755 app/assets/stylesheets/public/framework/hero-unit.less create mode 100755 app/assets/stylesheets/public/framework/labels-badges.less create mode 100755 app/assets/stylesheets/public/framework/layouts.less create mode 100755 app/assets/stylesheets/public/framework/media.less create mode 100755 app/assets/stylesheets/public/framework/mixins.less create mode 100755 app/assets/stylesheets/public/framework/modals.less create mode 100755 app/assets/stylesheets/public/framework/navbar.less create mode 100755 app/assets/stylesheets/public/framework/navs.less create mode 100755 app/assets/stylesheets/public/framework/pager.less create mode 100755 app/assets/stylesheets/public/framework/pagination.less create mode 100755 app/assets/stylesheets/public/framework/popovers.less create mode 100755 app/assets/stylesheets/public/framework/progress-bars.less create mode 100755 app/assets/stylesheets/public/framework/reset.less create mode 100755 app/assets/stylesheets/public/framework/responsive-1200px-min.less create mode 100755 app/assets/stylesheets/public/framework/responsive-767px-max.less create mode 100755 app/assets/stylesheets/public/framework/responsive-768px-979px.less create mode 100755 app/assets/stylesheets/public/framework/responsive-navbar.less create mode 100755 app/assets/stylesheets/public/framework/responsive-utilities.less create mode 100755 app/assets/stylesheets/public/framework/responsive.less create mode 100755 app/assets/stylesheets/public/framework/scaffolding.less create mode 100755 app/assets/stylesheets/public/framework/slider.less create mode 100755 app/assets/stylesheets/public/framework/sprites.less create mode 100755 app/assets/stylesheets/public/framework/tables.less create mode 100755 app/assets/stylesheets/public/framework/thumbnails.less create mode 100755 app/assets/stylesheets/public/framework/tooltip.less create mode 100755 app/assets/stylesheets/public/framework/type.less create mode 100755 app/assets/stylesheets/public/framework/utilities.less create mode 100755 app/assets/stylesheets/public/framework/variables.less create mode 100755 app/assets/stylesheets/public/framework/wells.less create mode 100644 app/assets/stylesheets/public/inner.less create mode 100644 app/assets/stylesheets/public/structure.less create mode 100755 app/assets/stylesheets/redactor.less create mode 100644 app/assets/stylesheets/scaffolds.css.less create mode 100644 app/assets/stylesheets/shared/formtastic.less create mode 100755 app/assets/stylesheets/shared/jquery.fancybox.less create mode 100755 app/assets/stylesheets/vendor/select2.less create mode 100644 app/controllers/admin/admin_auths_controller.rb create mode 100644 app/controllers/admin/admins_controller.rb create mode 100644 app/controllers/admin/albums_controller.rb create mode 100644 app/controllers/admin/articles_controller.rb create mode 100644 app/controllers/admin/artworks_controller.rb create mode 100644 app/controllers/admin/blocks_controller.rb create mode 100644 app/controllers/admin/categories_controller.rb create mode 100644 app/controllers/admin/cibles_controller.rb create mode 100644 app/controllers/admin/comments_controller.rb create mode 100644 app/controllers/admin/dashboard_controller.rb create mode 100644 app/controllers/admin/data_files_controller.rb create mode 100644 app/controllers/admin/external_links_controller.rb create mode 100644 app/controllers/admin/file_folders_controller.rb create mode 100644 app/controllers/admin/image_files_controller.rb create mode 100644 app/controllers/admin/menu_aliases_controller.rb create mode 100644 app/controllers/admin/menu_items_controller.rb create mode 100644 app/controllers/admin/menu_urls_controller.rb create mode 100644 app/controllers/admin/menus_controller.rb create mode 100644 app/controllers/admin/pages_controller.rb create mode 100644 app/controllers/admin/password_resets_controller.rb create mode 100644 app/controllers/admin/photos_controller.rb create mode 100644 app/controllers/admin/portfolios_controller.rb create mode 100644 app/controllers/admin/quotes_controller.rb create mode 100644 app/controllers/application_controller.rb create mode 100644 app/controllers/concerns/.keep create mode 100644 app/controllers/download_data_files_controller.rb create mode 100644 app/controllers/portlet/block_contents_controller.rb create mode 100644 app/controllers/portlet/break_contents_controller.rb create mode 100644 app/controllers/portlet/download_contents_controller.rb create mode 100644 app/controllers/portlet/dynamic_contents_controller.rb create mode 100644 app/controllers/portlet/event_contents_controller.rb create mode 100644 app/controllers/portlet/gallery_contents_controller.rb create mode 100644 app/controllers/portlet/gallery_images_controller.rb create mode 100644 app/controllers/portlet/html_contents_controller.rb create mode 100644 app/controllers/portlet/image_contents_controller.rb create mode 100644 app/controllers/portlet/img_link_contents_controller.rb create mode 100644 app/controllers/portlet/link_contents_controller.rb create mode 100644 app/controllers/portlet/map_contents_controller.rb create mode 100644 app/controllers/portlet/portlets_controller.rb create mode 100644 app/controllers/portlet/table_cols_controller.rb create mode 100644 app/controllers/portlet/table_contents_controller.rb create mode 100644 app/controllers/portlet/table_rows_controller.rb create mode 100644 app/controllers/portlet/text_contents_controller.rb create mode 100644 app/controllers/portlet/title_contents_controller.rb create mode 100644 app/controllers/public/articles_controller.rb create mode 100644 app/controllers/public/comments_controller.rb create mode 100644 app/controllers/public/home_controller.rb create mode 100644 app/controllers/public/menu_items_controller.rb create mode 100644 app/controllers/public/photos_controller.rb create mode 100644 app/controllers/public/portfolios_controller.rb create mode 100644 app/controllers/public/quotes_controller.rb create mode 100644 app/helpers/application_helper.rb create mode 100644 app/helpers/icon_helper.rb create mode 100644 app/helpers/menu_items_helper.rb create mode 100644 app/mailers/.keep create mode 100644 app/mailers/admin_mailer.rb create mode 100644 app/models/.keep create mode 100644 app/models/admin.rb create mode 100644 app/models/album.rb create mode 100644 app/models/allowed_block_content.rb create mode 100644 app/models/article.rb create mode 100644 app/models/artwork.rb create mode 100644 app/models/artwork_image.rb create mode 100644 app/models/block.rb create mode 100644 app/models/block_content.rb create mode 100644 app/models/break_content.rb create mode 100644 app/models/category.rb create mode 100644 app/models/cel_table.rb create mode 100644 app/models/cible_alias.rb create mode 100644 app/models/cible_url.rb create mode 100644 app/models/concerns/.keep create mode 100644 app/models/data_file.rb create mode 100644 app/models/download_content.rb create mode 100644 app/models/dynamic_content.rb create mode 100644 app/models/external_link.rb create mode 100644 app/models/file_folder.rb create mode 100644 app/models/gallery_content.rb create mode 100644 app/models/gallery_image.rb create mode 100644 app/models/html_content.rb create mode 100644 app/models/image_content.rb create mode 100644 app/models/image_file.rb create mode 100644 app/models/img_link_content.rb create mode 100644 app/models/link_content.rb create mode 100644 app/models/map_content.rb create mode 100644 app/models/menu.rb create mode 100644 app/models/menu_alias.rb create mode 100644 app/models/menu_folder.rb create mode 100644 app/models/menu_item.rb create mode 100644 app/models/menu_url.rb create mode 100644 app/models/page.rb create mode 100644 app/models/photo.rb create mode 100644 app/models/portfolio.rb create mode 100644 app/models/portlet.rb create mode 100644 app/models/quote.rb create mode 100644 app/models/table_content.rb create mode 100644 app/models/table_row.rb create mode 100644 app/models/tag.rb create mode 100644 app/models/tag_taggable.rb create mode 100644 app/models/text_content.rb create mode 100644 app/models/title_content.rb create mode 100644 app/uploaders/file_uploader.rb create mode 100644 app/uploaders/image_uploader.rb create mode 100644 app/views/admin/admin_auths/index.haml create mode 100644 app/views/admin/admin_auths/new.haml create mode 100644 app/views/admin/admins/_admin.html.haml create mode 100644 app/views/admin/admins/_form.html.haml create mode 100644 app/views/admin/admins/create.js.erb create mode 100644 app/views/admin/admins/destroy.js.erb create mode 100644 app/views/admin/admins/edit.js.erb create mode 100644 app/views/admin/admins/index.html.haml create mode 100644 app/views/admin/admins/index.js.erb create mode 100644 app/views/admin/admins/new.js.erb create mode 100644 app/views/admin/admins/update.js.erb create mode 100644 app/views/admin/albums/_album.html.haml create mode 100644 app/views/admin/albums/_albums.html.haml create mode 100644 app/views/admin/albums/create.js.erb create mode 100644 app/views/admin/albums/destroy.js.erb create mode 100644 app/views/admin/albums/edit.js.erb create mode 100644 app/views/admin/albums/new.js.erb create mode 100644 app/views/admin/albums/update.js.erb create mode 100644 app/views/admin/articles/_article.html.haml create mode 100644 app/views/admin/articles/_form.html.haml create mode 100644 app/views/admin/articles/_index_block.html.haml create mode 100644 app/views/admin/articles/_show.html.haml create mode 100644 app/views/admin/articles/create.js.erb create mode 100644 app/views/admin/articles/destroy.js.erb create mode 100644 app/views/admin/articles/edit.html.haml create mode 100644 app/views/admin/articles/edit.js.erb create mode 100644 app/views/admin/articles/index.html.haml create mode 100644 app/views/admin/articles/index.js.erb create mode 100644 app/views/admin/articles/new.js.erb create mode 100644 app/views/admin/articles/update.js.erb create mode 100644 app/views/admin/artworks/_artwork.html.haml create mode 100644 app/views/admin/artworks/_edit.html.haml create mode 100644 app/views/admin/artworks/_form.html.haml create mode 100644 app/views/admin/artworks/create.js.erb create mode 100644 app/views/admin/artworks/destroy.js.erb create mode 100644 app/views/admin/artworks/edit.js.erb create mode 100644 app/views/admin/artworks/index.html.haml create mode 100644 app/views/admin/artworks/new.js.erb create mode 100644 app/views/admin/artworks/reorder.js.erb create mode 100644 app/views/admin/artworks/update.js.erb create mode 100644 app/views/admin/blocks/_block.html.haml create mode 100644 app/views/admin/blocks/_block_allowed.html.haml create mode 100644 app/views/admin/blocks/_edit.html.haml create mode 100644 app/views/admin/blocks/_form.html.haml create mode 100644 app/views/admin/blocks/edit.html.haml create mode 100644 app/views/admin/blocks/edit.js.erb create mode 100644 app/views/admin/blocks/old.block create mode 100644 app/views/admin/blocks/old.show.html.haml create mode 100644 app/views/admin/categories/_category.html.haml create mode 100644 app/views/admin/categories/_form.html.haml create mode 100644 app/views/admin/categories/cible.html.haml create mode 100644 app/views/admin/categories/create.js.erb create mode 100644 app/views/admin/categories/destroy.js.erb create mode 100644 app/views/admin/categories/edit.js.erb create mode 100644 app/views/admin/categories/index.html.haml create mode 100644 app/views/admin/categories/new.js.erb create mode 100644 app/views/admin/categories/update.js.erb create mode 100644 app/views/admin/cibles/_cible_place.html.haml create mode 100644 app/views/admin/cibles/index.html.haml create mode 100644 app/views/admin/cibles/index.js.erb create mode 100644 app/views/admin/cibles/new.html.haml create mode 100644 app/views/admin/comments/_comment.html.haml create mode 100644 app/views/admin/comments/_form.html.haml create mode 100644 app/views/admin/comments/destroy.js.erb create mode 100644 app/views/admin/comments/edit.js.erb create mode 100644 app/views/admin/comments/index.html.haml create mode 100644 app/views/admin/comments/update.js.erb create mode 100644 app/views/admin/data_files/_data_file.html.haml create mode 100644 app/views/admin/data_files/_data_files_container.html.haml create mode 100644 app/views/admin/data_files/_form.html.haml create mode 100644 app/views/admin/data_files/_index_block.html.haml create mode 100644 app/views/admin/data_files/_show.html.haml create mode 100644 app/views/admin/data_files/create.js.erb create mode 100644 app/views/admin/data_files/destroy.js.erb create mode 100644 app/views/admin/data_files/index.html.haml create mode 100644 app/views/admin/data_files/index.js.erb create mode 100644 app/views/admin/data_files/show.js.erb create mode 100644 app/views/admin/data_files/update.js.erb create mode 100644 app/views/admin/external_links/_external_link.html.haml create mode 100644 app/views/admin/external_links/_form.html.haml create mode 100644 app/views/admin/external_links/cible.html.haml create mode 100644 app/views/admin/external_links/create.js.erb create mode 100644 app/views/admin/external_links/destroy.js.erb create mode 100644 app/views/admin/external_links/edit.html.haml create mode 100644 app/views/admin/external_links/edit.js.erb create mode 100644 app/views/admin/external_links/index.js.erb create mode 100644 app/views/admin/external_links/new.js.erb create mode 100644 app/views/admin/external_links/show.html.haml create mode 100644 app/views/admin/external_links/update.js.erb create mode 100644 app/views/admin/file_folders/_file_folder.html.haml create mode 100644 app/views/admin/file_folders/_file_folders.html.haml create mode 100644 app/views/admin/file_folders/create.js.erb create mode 100644 app/views/admin/file_folders/destroy.js.erb create mode 100644 app/views/admin/file_folders/edit.js.erb create mode 100644 app/views/admin/file_folders/index.js.erb create mode 100644 app/views/admin/file_folders/new.js.erb create mode 100644 app/views/admin/file_folders/update.js.erb create mode 100644 app/views/admin/image_files/_form.html.haml create mode 100644 app/views/admin/image_files/_image_file.html.haml create mode 100644 app/views/admin/image_files/_image_files_container.html.haml create mode 100644 app/views/admin/image_files/_index_block.html.haml create mode 100644 app/views/admin/image_files/_show.html.haml create mode 100644 app/views/admin/image_files/create.js.erb create mode 100644 app/views/admin/image_files/destroy.js.erb create mode 100644 app/views/admin/image_files/index.html.haml create mode 100644 app/views/admin/image_files/index.js.erb create mode 100644 app/views/admin/image_files/rotate.js.erb create mode 100644 app/views/admin/image_files/show.js.erb create mode 100644 app/views/admin/image_files/update.js.erb create mode 100644 app/views/admin/menu_aliases/_form.html.haml create mode 100644 app/views/admin/menu_aliases/_menu_alias.html.haml create mode 100644 app/views/admin/menu_aliases/edit.html.haml create mode 100644 app/views/admin/menu_items/_cible_line.html.haml create mode 100644 app/views/admin/menu_items/_edit_form.html.haml create mode 100644 app/views/admin/menu_items/_form.html.haml create mode 100644 app/views/admin/menu_items/_form_line.html.haml create mode 100644 app/views/admin/menu_items/_index_block.html.haml create mode 100644 app/views/admin/menu_items/_menu_item.html.haml create mode 100644 app/views/admin/menu_items/_menu_item_content_form.html.haml create mode 100644 app/views/admin/menu_items/_new_form.html.haml create mode 100644 app/views/admin/menu_items/_show.html.haml create mode 100644 app/views/admin/menu_items/cible.html.haml create mode 100644 app/views/admin/menu_items/create.js.erb create mode 100644 app/views/admin/menu_items/edit.html.haml create mode 100644 app/views/admin/menu_items/edit.js.erb create mode 100644 app/views/admin/menu_items/index.html.haml create mode 100644 app/views/admin/menu_items/index.js.erb create mode 100644 app/views/admin/menu_items/new.html.haml create mode 100644 app/views/admin/menu_items/new.js.erb create mode 100644 app/views/admin/menu_items/reorder.js.erb create mode 100644 app/views/admin/menu_items/show.js.erb create mode 100644 app/views/admin/menu_items/update.js.erb create mode 100644 app/views/admin/menu_items/update_reorder_failled.js.erb create mode 100644 app/views/admin/menu_urls/_form.html.haml create mode 100644 app/views/admin/menu_urls/_menu_url.html.haml create mode 100644 app/views/admin/menu_urls/edit.html.haml create mode 100644 app/views/admin/menus/_form.html.haml create mode 100644 app/views/admin/menus/_index_block.html.haml create mode 100644 app/views/admin/menus/_menu.html.haml create mode 100644 app/views/admin/menus/edit.html.haml create mode 100644 app/views/admin/menus/index.html.haml create mode 100644 app/views/admin/menus/index.js.erb create mode 100644 app/views/admin/menus/new.html.haml create mode 100644 app/views/admin/menus/show.html.haml create mode 100644 app/views/admin/pages/_form.html.haml create mode 100644 app/views/admin/pages/_page.html.haml create mode 100644 app/views/admin/pages/edit.html.haml create mode 100644 app/views/admin/pages/update.html.haml create mode 100644 app/views/admin/password_resets/edit.html.haml create mode 100644 app/views/admin/password_resets/new.html.haml create mode 100644 app/views/admin/passwords/edit.html.haml create mode 100644 app/views/admin/passwords/new.html.haml create mode 100644 app/views/admin/photos/_form.html.haml create mode 100644 app/views/admin/photos/_photo.html.haml create mode 100644 app/views/admin/photos/_tags.html.haml create mode 100644 app/views/admin/photos/create.js.erb create mode 100644 app/views/admin/photos/destroy.js.erb create mode 100644 app/views/admin/photos/edit.js.erb create mode 100644 app/views/admin/photos/index.html.haml create mode 100644 app/views/admin/photos/new.js.erb create mode 100644 app/views/admin/photos/show.html.haml create mode 100644 app/views/admin/photos/update.js.erb create mode 100644 app/views/admin/portfolios/_form.html.haml create mode 100644 app/views/admin/portfolios/_portfolio.html.haml create mode 100644 app/views/admin/portfolios/create.js.erb create mode 100644 app/views/admin/portfolios/destroy.js.erb create mode 100644 app/views/admin/portfolios/edit.js.erb create mode 100644 app/views/admin/portfolios/index.html.haml create mode 100644 app/views/admin/portfolios/new.js.erb create mode 100644 app/views/admin/portfolios/show.html.haml create mode 100644 app/views/admin/portfolios/update.js.erb create mode 100644 app/views/admin/quotes/_form.html.haml create mode 100644 app/views/admin/quotes/_quote.html.haml create mode 100644 app/views/admin/quotes/_tags.html.haml create mode 100644 app/views/admin/quotes/create.js.erb create mode 100644 app/views/admin/quotes/destroy.js.erb create mode 100644 app/views/admin/quotes/edit.js.erb create mode 100644 app/views/admin/quotes/index.html.haml create mode 100644 app/views/admin/quotes/new.js.erb create mode 100644 app/views/admin/quotes/show.html.haml create mode 100644 app/views/admin/quotes/update.js.erb create mode 100644 app/views/admin/sessions/new.html.haml create mode 100644 app/views/admin_mailer/password_reset.text.erb create mode 100644 app/views/layouts/admin.html.haml create mode 100644 app/views/layouts/admin_auth.haml create mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/layouts/public.html.haml create mode 100644 app/views/portlet/block_contents/_block_content.html.haml create mode 100644 app/views/portlet/block_contents/_form.html.haml create mode 100644 app/views/portlet/break_contents/_break_content.html.haml create mode 100644 app/views/portlet/break_contents/_form.html.haml create mode 100644 app/views/portlet/download_contents/_download_content.html.haml create mode 100644 app/views/portlet/download_contents/_form.html.haml create mode 100644 app/views/portlet/dynamic_contents/_dynamic_content.html.haml create mode 100644 app/views/portlet/dynamic_contents/_form.html.haml create mode 100644 app/views/portlet/event_contents/_event_content.html.haml create mode 100644 app/views/portlet/event_contents/_form.html.haml create mode 100644 app/views/portlet/gallery_contents/_form.html.haml create mode 100644 app/views/portlet/gallery_contents/_gallery_content.html.haml create mode 100644 app/views/portlet/gallery_images/_form.html.haml create mode 100644 app/views/portlet/gallery_images/_gallery_image.html.haml create mode 100644 app/views/portlet/gallery_images/create.js.erb create mode 100644 app/views/portlet/gallery_images/destroy.js.erb create mode 100644 app/views/portlet/gallery_images/edit.js.erb create mode 100644 app/views/portlet/gallery_images/reorder.js.erb create mode 100644 app/views/portlet/gallery_images/update.js.erb create mode 100644 app/views/portlet/html_contents/_form.html.haml create mode 100644 app/views/portlet/html_contents/_html_content.html.haml create mode 100644 app/views/portlet/image_contents/_form.html.haml create mode 100644 app/views/portlet/image_contents/_image_content.html.haml create mode 100644 app/views/portlet/img_link_contents/_form.html.haml create mode 100644 app/views/portlet/img_link_contents/_img_link_content.html.haml create mode 100644 app/views/portlet/link_contents/_form.html.haml create mode 100644 app/views/portlet/link_contents/_link_content.html.haml create mode 100644 app/views/portlet/map_contents/_form.html.haml create mode 100644 app/views/portlet/map_contents/_map_content.html.haml create mode 100644 app/views/portlet/portlets/_portlet.html.haml create mode 100644 app/views/portlet/portlets/new.html.haml create mode 100644 app/views/portlet/portlets/new.js.erb create mode 100644 app/views/portlet/portlets/update.js.erb create mode 100644 app/views/portlet/shared/_new.html.haml create mode 100644 app/views/portlet/shared/create.js.erb create mode 100644 app/views/portlet/shared/destroy.js.erb create mode 100644 app/views/portlet/shared/edit.js.erb create mode 100644 app/views/portlet/shared/new.js.erb create mode 100644 app/views/portlet/shared/update.js.erb create mode 100644 app/views/portlet/table_cols/create.js.erb create mode 100644 app/views/portlet/table_cols/destroy.js.erb create mode 100644 app/views/portlet/table_contents/_form.html.haml create mode 100644 app/views/portlet/table_contents/_table_content.html.haml create mode 100644 app/views/portlet/table_contents/_table_content_edit_pane.html.haml create mode 100644 app/views/portlet/table_contents/destroy_row.js.erb create mode 100644 app/views/portlet/table_rows/create.js.erb create mode 100644 app/views/portlet/table_rows/destroy.js.erb create mode 100644 app/views/portlet/text_contents/_form.html.haml create mode 100644 app/views/portlet/text_contents/_text_content.html.haml create mode 100644 app/views/portlet/title_contents/_form.html.haml create mode 100644 app/views/portlet/title_contents/_title_content.html.haml create mode 100644 app/views/portlets/render_public/_blockcontent.html.haml create mode 100644 app/views/portlets/render_public/_breakcontent.html.haml create mode 100644 app/views/portlets/render_public/_downloadcontent.html.haml create mode 100644 app/views/portlets/render_public/_dynamiccontent.html.haml create mode 100644 app/views/portlets/render_public/_eventcontent.html.haml create mode 100644 app/views/portlets/render_public/_gallerycontent.html.haml create mode 100644 app/views/portlets/render_public/_htmlcontent.html.haml create mode 100644 app/views/portlets/render_public/_imagecontent.html.haml create mode 100644 app/views/portlets/render_public/_imglinkcontent.html.haml create mode 100644 app/views/portlets/render_public/_linkcontent.html.haml create mode 100644 app/views/portlets/render_public/_mapcontent.html.haml create mode 100644 app/views/portlets/render_public/_tablecontent.html.haml create mode 100644 app/views/portlets/render_public/_textcontent.html.haml create mode 100644 app/views/portlets/render_public/_titlecontent.html.haml create mode 100644 app/views/public/articles/_article.html.haml create mode 100644 app/views/public/articles/_article_intro.html.haml create mode 100644 app/views/public/articles/_index.html.haml create mode 100644 app/views/public/articles/_sidebar_archives.html.haml create mode 100644 app/views/public/articles/_sidebar_categories.html.haml create mode 100644 app/views/public/articles/_sidebar_recents.html.haml create mode 100644 app/views/public/articles/_sidebar_tags.html.haml create mode 100644 app/views/public/articles/feed.rss.builder create mode 100644 app/views/public/articles/index.html.haml create mode 100644 app/views/public/articles/index.js.erb create mode 100644 app/views/public/articles/show.html.haml create mode 100644 app/views/public/artworks/_artwork.html.haml create mode 100644 app/views/public/blocks/_block.html.haml create mode 100644 app/views/public/comments/_comment.html.haml create mode 100644 app/views/public/comments/_form.html.haml create mode 100644 app/views/public/comments/create.js.erb create mode 100644 app/views/public/home/home.html.haml create mode 100644 app/views/public/menu_items/show.html.haml create mode 100644 app/views/public/menu_items/show.js.erb create mode 100644 app/views/public/photos/_bandeau.html.haml create mode 100644 app/views/public/photos/_form.html.haml create mode 100644 app/views/public/photos/_index.html.haml create mode 100644 app/views/public/photos/_photo.html.haml create mode 100644 app/views/public/photos/_show.html.haml create mode 100644 app/views/public/photos/index.html.haml create mode 100644 app/views/public/photos/index.js.erb create mode 100644 app/views/public/photos/show.js.erb create mode 100644 app/views/public/portfolios/_portfolio.html.haml create mode 100644 app/views/public/portfolios/_show.html.haml create mode 100644 app/views/public/portfolios/index.html.haml create mode 100644 app/views/public/portfolios/show.html.haml create mode 100644 app/views/public/portfolios/show.js.erb create mode 100644 app/views/public/quotes/_bandeau.html.haml create mode 100644 app/views/public/quotes/_create.html.haml create mode 100644 app/views/public/quotes/_create_photo.html.haml create mode 100644 app/views/public/quotes/_form.html.haml create mode 100644 app/views/public/quotes/_index.html.haml create mode 100644 app/views/public/quotes/_new.html.haml create mode 100644 app/views/public/quotes/_new_photo.html.haml create mode 100644 app/views/public/quotes/_quote.html.haml create mode 100644 app/views/public/quotes/_tags.html.haml create mode 100644 app/views/public/quotes/create.html.haml create mode 100644 app/views/public/quotes/create.js.erb create mode 100644 app/views/public/quotes/createphoto.js.erb create mode 100644 app/views/public/quotes/destroy.js.erb create mode 100644 app/views/public/quotes/edit.js.erb create mode 100644 app/views/public/quotes/index.html.haml create mode 100644 app/views/public/quotes/index.js.erb create mode 100644 app/views/public/quotes/new.html.haml create mode 100644 app/views/public/quotes/new.js.erb create mode 100644 app/views/public/quotes/newphoto.js.erb create mode 100644 app/views/public/quotes/show.html.haml create mode 100644 app/views/public/quotes/update.js.erb create mode 100644 app/views/public/shared/_first_menu.html.haml create mode 100644 app/views/public/shared/_ga.html.erb create mode 100755 bin/bundle create mode 100755 bin/rails create mode 100755 bin/rake create mode 100644 config.ru create mode 100644 config/application.rb create mode 100644 config/boot.rb create mode 100644 config/compass.rb create mode 100644 config/database.yml create mode 100644 config/deploy.rb create mode 100644 config/environment.rb create mode 100644 config/environments/development.rb create mode 100644 config/environments/production.rb create mode 100644 config/environments/test.rb create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/filter_parameter_logging.rb create mode 100644 config/initializers/formtastic.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/initializers/secret_token.rb create mode 100644 config/initializers/session_store.rb create mode 100644 config/initializers/to_slug.rb create mode 100644 config/initializers/wrap_parameters.rb create mode 100644 config/locales/en.bootstrap.yml create mode 100644 config/locales/en.yml create mode 100644 config/locales/fr.yml create mode 100644 config/nginx.conf create mode 100644 config/routes.rb create mode 100644 config/unicorn.rb create mode 100644 config/unicorn_init_d create mode 100644 db/migrate/0001_create_admins.rb create mode 100644 db/migrate/0003_create_menu.rb create mode 100644 db/migrate/0004_menu_items.rb create mode 100644 db/migrate/0010_create_pages.rb create mode 100644 db/migrate/0065_create_blocks.rb create mode 100644 db/migrate/0070_create_portlets.rb create mode 100644 db/migrate/0075_create_title_contents.rb create mode 100644 db/migrate/0076_create_text_contents.rb create mode 100644 db/migrate/0077_create_image_contents.rb create mode 100644 db/migrate/0078_create_link_contents.rb create mode 100644 db/migrate/0079_create_break_contents.rb create mode 100644 db/migrate/0080_create_html_contents.rb create mode 100644 db/migrate/0081_create_download_contents.rb create mode 100644 db/migrate/0082_create_gallery_contents.rb create mode 100644 db/migrate/0101_create_gallery_images.rb create mode 100644 db/migrate/0102_create_dynamic_contents.rb create mode 100644 db/migrate/20110215144022_create_table_contents.rb create mode 100644 db/migrate/20110215144326_create_table_rows.rb create mode 100644 db/migrate/20110215144501_create_cel_tables.rb create mode 100644 db/migrate/20110412073417_create_tags.rb create mode 100644 db/migrate/20110412080316_create_image_files.rb create mode 100644 db/migrate/20110414184246_create_albums.rb create mode 100644 db/migrate/20110418153215_create_block_contents.rb create mode 100644 db/migrate/20110420132008_create_menu_aliases.rb create mode 100644 db/migrate/20110420132127_create_menu_urls.rb create mode 100644 db/migrate/20110421125532_create_file_folders.rb create mode 100644 db/migrate/20110421125631_create_data_files.rb create mode 100644 db/migrate/20110427164514_create_map_contents.rb create mode 100644 db/migrate/20110708093908_create_external_links.rb create mode 100644 db/migrate/20110710114840_create_articles.rb create mode 100644 db/migrate/20111125124808_create_tag_taggables.rb create mode 100644 db/migrate/20111128164327_create_categories.rb create mode 100644 db/migrate/20130707144152_create_portfolios.rb create mode 100644 db/migrate/20130707144511_create_artworks.rb create mode 100644 db/migrate/20130707160102_create_artwork_images.rb create mode 100644 db/migrate/20130707222341_create_photos.rb create mode 100644 db/migrate/20130707222444_create_quotes.rb create mode 100644 db/migrate/20130715171140_add_photo_to_quotes.rb create mode 100644 db/schema.rb create mode 100644 db/seeds.rb create mode 100644 lib/assets/.keep create mode 100644 lib/tasks/.keep create mode 100644 log/.keep create mode 100644 public/404.html create mode 100644 public/422.html create mode 100644 public/500.html create mode 100644 public/ace_editor/ace-compat-noconflict.js create mode 100644 public/ace_editor/ace-compat-uncompressed-noconflict.js create mode 100644 public/ace_editor/ace-compat-uncompressed.js create mode 100644 public/ace_editor/ace-compat.js create mode 100644 public/ace_editor/ace-noconflict.js create mode 100644 public/ace_editor/ace-uncompressed-noconflict.js create mode 100644 public/ace_editor/ace-uncompressed.js create mode 100644 public/ace_editor/ace.js create mode 100644 public/ace_editor/keybinding-emacs-noconflict.js create mode 100644 public/ace_editor/keybinding-emacs-uncompressed-noconflict.js create mode 100644 public/ace_editor/keybinding-emacs-uncompressed.js create mode 100644 public/ace_editor/keybinding-emacs.js create mode 100644 public/ace_editor/keybinding-vim-noconflict.js create mode 100644 public/ace_editor/keybinding-vim-uncompressed-noconflict.js create mode 100644 public/ace_editor/keybinding-vim-uncompressed.js create mode 100644 public/ace_editor/keybinding-vim.js create mode 100644 public/ace_editor/mode-c_cpp-noconflict.js create mode 100644 public/ace_editor/mode-c_cpp-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-c_cpp-uncompressed.js create mode 100644 public/ace_editor/mode-c_cpp.js create mode 100644 public/ace_editor/mode-clojure-noconflict.js create mode 100644 public/ace_editor/mode-clojure-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-clojure-uncompressed.js create mode 100644 public/ace_editor/mode-clojure.js create mode 100644 public/ace_editor/mode-coffee-noconflict.js create mode 100644 public/ace_editor/mode-coffee-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-coffee-uncompressed.js create mode 100644 public/ace_editor/mode-coffee.js create mode 100644 public/ace_editor/mode-coldfusion-noconflict.js create mode 100644 public/ace_editor/mode-coldfusion-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-coldfusion-uncompressed.js create mode 100644 public/ace_editor/mode-coldfusion.js create mode 100644 public/ace_editor/mode-csharp-noconflict.js create mode 100644 public/ace_editor/mode-csharp-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-csharp-uncompressed.js create mode 100644 public/ace_editor/mode-csharp.js create mode 100644 public/ace_editor/mode-css-noconflict.js create mode 100644 public/ace_editor/mode-css-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-css-uncompressed.js create mode 100644 public/ace_editor/mode-css.js create mode 100644 public/ace_editor/mode-golang-noconflict.js create mode 100644 public/ace_editor/mode-golang-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-golang-uncompressed.js create mode 100644 public/ace_editor/mode-golang.js create mode 100644 public/ace_editor/mode-groovy-noconflict.js create mode 100644 public/ace_editor/mode-groovy-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-groovy-uncompressed.js create mode 100644 public/ace_editor/mode-groovy.js create mode 100644 public/ace_editor/mode-haxe-noconflict.js create mode 100644 public/ace_editor/mode-haxe-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-haxe-uncompressed.js create mode 100644 public/ace_editor/mode-haxe.js create mode 100644 public/ace_editor/mode-html-noconflict.js create mode 100644 public/ace_editor/mode-html-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-html-uncompressed.js create mode 100644 public/ace_editor/mode-html.js create mode 100644 public/ace_editor/mode-java-noconflict.js create mode 100644 public/ace_editor/mode-java-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-java-uncompressed.js create mode 100644 public/ace_editor/mode-java.js create mode 100644 public/ace_editor/mode-javascript-noconflict.js create mode 100644 public/ace_editor/mode-javascript-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-javascript-uncompressed.js create mode 100644 public/ace_editor/mode-javascript.js create mode 100644 public/ace_editor/mode-json-noconflict.js create mode 100644 public/ace_editor/mode-json-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-json-uncompressed.js create mode 100644 public/ace_editor/mode-json.js create mode 100644 public/ace_editor/mode-latex-noconflict.js create mode 100644 public/ace_editor/mode-latex-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-latex-uncompressed.js create mode 100644 public/ace_editor/mode-latex.js create mode 100644 public/ace_editor/mode-less-noconflict.js create mode 100644 public/ace_editor/mode-less-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-less-uncompressed.js create mode 100644 public/ace_editor/mode-less.js create mode 100644 public/ace_editor/mode-liquid-noconflict.js create mode 100644 public/ace_editor/mode-liquid-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-liquid-uncompressed.js create mode 100644 public/ace_editor/mode-liquid.js create mode 100644 public/ace_editor/mode-lua-noconflict.js create mode 100644 public/ace_editor/mode-lua-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-lua-uncompressed.js create mode 100644 public/ace_editor/mode-lua.js create mode 100644 public/ace_editor/mode-markdown-noconflict.js create mode 100644 public/ace_editor/mode-markdown-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-markdown-uncompressed.js create mode 100644 public/ace_editor/mode-markdown.js create mode 100644 public/ace_editor/mode-ocaml-noconflict.js create mode 100644 public/ace_editor/mode-ocaml-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-ocaml-uncompressed.js create mode 100644 public/ace_editor/mode-ocaml.js create mode 100644 public/ace_editor/mode-perl-noconflict.js create mode 100644 public/ace_editor/mode-perl-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-perl-uncompressed.js create mode 100644 public/ace_editor/mode-perl.js create mode 100644 public/ace_editor/mode-pgsql-noconflict.js create mode 100644 public/ace_editor/mode-pgsql-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-pgsql-uncompressed.js create mode 100644 public/ace_editor/mode-pgsql.js create mode 100644 public/ace_editor/mode-php-noconflict.js create mode 100644 public/ace_editor/mode-php-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-php-uncompressed.js create mode 100644 public/ace_editor/mode-php.js create mode 100644 public/ace_editor/mode-powershell-noconflict.js create mode 100644 public/ace_editor/mode-powershell-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-powershell-uncompressed.js create mode 100644 public/ace_editor/mode-powershell.js create mode 100644 public/ace_editor/mode-python-noconflict.js create mode 100644 public/ace_editor/mode-python-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-python-uncompressed.js create mode 100644 public/ace_editor/mode-python.js create mode 100644 public/ace_editor/mode-ruby-noconflict.js create mode 100644 public/ace_editor/mode-ruby-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-ruby-uncompressed.js create mode 100644 public/ace_editor/mode-ruby.js create mode 100644 public/ace_editor/mode-scad-noconflict.js create mode 100644 public/ace_editor/mode-scad-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-scad-uncompressed.js create mode 100644 public/ace_editor/mode-scad.js create mode 100644 public/ace_editor/mode-scala-noconflict.js create mode 100644 public/ace_editor/mode-scala-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-scala-uncompressed.js create mode 100644 public/ace_editor/mode-scala.js create mode 100644 public/ace_editor/mode-scss-noconflict.js create mode 100644 public/ace_editor/mode-scss-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-scss-uncompressed.js create mode 100644 public/ace_editor/mode-scss.js create mode 100644 public/ace_editor/mode-sh-noconflict.js create mode 100644 public/ace_editor/mode-sh-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-sh-uncompressed.js create mode 100644 public/ace_editor/mode-sh.js create mode 100644 public/ace_editor/mode-sql-noconflict.js create mode 100644 public/ace_editor/mode-sql-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-sql-uncompressed.js create mode 100644 public/ace_editor/mode-sql.js create mode 100644 public/ace_editor/mode-svg-noconflict.js create mode 100644 public/ace_editor/mode-svg-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-svg-uncompressed.js create mode 100644 public/ace_editor/mode-svg.js create mode 100644 public/ace_editor/mode-text-noconflict.js create mode 100644 public/ace_editor/mode-text-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-text-uncompressed.js create mode 100644 public/ace_editor/mode-text.js create mode 100644 public/ace_editor/mode-textile-noconflict.js create mode 100644 public/ace_editor/mode-textile-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-textile-uncompressed.js create mode 100644 public/ace_editor/mode-textile.js create mode 100644 public/ace_editor/mode-xml-noconflict.js create mode 100644 public/ace_editor/mode-xml-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-xml-uncompressed.js create mode 100644 public/ace_editor/mode-xml.js create mode 100644 public/ace_editor/mode-xquery-noconflict.js create mode 100644 public/ace_editor/mode-xquery-uncompressed-noconflict.js create mode 100644 public/ace_editor/mode-xquery-uncompressed.js create mode 100644 public/ace_editor/mode-xquery.js create mode 100644 public/ace_editor/theme-chrome-noconflict.js create mode 100644 public/ace_editor/theme-chrome-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-chrome-uncompressed.js create mode 100644 public/ace_editor/theme-chrome.js create mode 100644 public/ace_editor/theme-clouds-noconflict.js create mode 100644 public/ace_editor/theme-clouds-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-clouds-uncompressed.js create mode 100644 public/ace_editor/theme-clouds.js create mode 100644 public/ace_editor/theme-clouds_midnight-noconflict.js create mode 100644 public/ace_editor/theme-clouds_midnight-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-clouds_midnight-uncompressed.js create mode 100644 public/ace_editor/theme-clouds_midnight.js create mode 100644 public/ace_editor/theme-cobalt-noconflict.js create mode 100644 public/ace_editor/theme-cobalt-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-cobalt-uncompressed.js create mode 100644 public/ace_editor/theme-cobalt.js create mode 100644 public/ace_editor/theme-crimson_editor-noconflict.js create mode 100644 public/ace_editor/theme-crimson_editor-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-crimson_editor-uncompressed.js create mode 100644 public/ace_editor/theme-crimson_editor.js create mode 100644 public/ace_editor/theme-dawn-noconflict.js create mode 100644 public/ace_editor/theme-dawn-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-dawn-uncompressed.js create mode 100644 public/ace_editor/theme-dawn.js create mode 100644 public/ace_editor/theme-dreamweaver-noconflict.js create mode 100644 public/ace_editor/theme-dreamweaver-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-dreamweaver-uncompressed.js create mode 100644 public/ace_editor/theme-dreamweaver.js create mode 100644 public/ace_editor/theme-eclipse-noconflict.js create mode 100644 public/ace_editor/theme-eclipse-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-eclipse-uncompressed.js create mode 100644 public/ace_editor/theme-eclipse.js create mode 100644 public/ace_editor/theme-idle_fingers-noconflict.js create mode 100644 public/ace_editor/theme-idle_fingers-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-idle_fingers-uncompressed.js create mode 100644 public/ace_editor/theme-idle_fingers.js create mode 100644 public/ace_editor/theme-kr_theme-noconflict.js create mode 100644 public/ace_editor/theme-kr_theme-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-kr_theme-uncompressed.js create mode 100644 public/ace_editor/theme-kr_theme.js create mode 100644 public/ace_editor/theme-merbivore-noconflict.js create mode 100644 public/ace_editor/theme-merbivore-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-merbivore-uncompressed.js create mode 100644 public/ace_editor/theme-merbivore.js create mode 100644 public/ace_editor/theme-merbivore_soft-noconflict.js create mode 100644 public/ace_editor/theme-merbivore_soft-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-merbivore_soft-uncompressed.js create mode 100644 public/ace_editor/theme-merbivore_soft.js create mode 100644 public/ace_editor/theme-mono_industrial-noconflict.js create mode 100644 public/ace_editor/theme-mono_industrial-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-mono_industrial-uncompressed.js create mode 100644 public/ace_editor/theme-mono_industrial.js create mode 100644 public/ace_editor/theme-monokai-noconflict.js create mode 100644 public/ace_editor/theme-monokai-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-monokai-uncompressed.js create mode 100644 public/ace_editor/theme-monokai.js create mode 100644 public/ace_editor/theme-pastel_on_dark-noconflict.js create mode 100644 public/ace_editor/theme-pastel_on_dark-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-pastel_on_dark-uncompressed.js create mode 100644 public/ace_editor/theme-pastel_on_dark.js create mode 100644 public/ace_editor/theme-solarized_dark-noconflict.js create mode 100644 public/ace_editor/theme-solarized_dark-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-solarized_dark-uncompressed.js create mode 100644 public/ace_editor/theme-solarized_dark.js create mode 100644 public/ace_editor/theme-solarized_light-noconflict.js create mode 100644 public/ace_editor/theme-solarized_light-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-solarized_light-uncompressed.js create mode 100644 public/ace_editor/theme-solarized_light.js create mode 100644 public/ace_editor/theme-textmate-noconflict.js create mode 100644 public/ace_editor/theme-textmate-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-textmate-uncompressed.js create mode 100644 public/ace_editor/theme-textmate.js create mode 100644 public/ace_editor/theme-tomorrow-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow-uncompressed.js create mode 100644 public/ace_editor/theme-tomorrow.js create mode 100644 public/ace_editor/theme-tomorrow_night-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow_night-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow_night-uncompressed.js create mode 100644 public/ace_editor/theme-tomorrow_night.js create mode 100644 public/ace_editor/theme-tomorrow_night_blue-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow_night_blue-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow_night_blue-uncompressed.js create mode 100644 public/ace_editor/theme-tomorrow_night_blue.js create mode 100644 public/ace_editor/theme-tomorrow_night_bright-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow_night_bright-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow_night_bright-uncompressed.js create mode 100644 public/ace_editor/theme-tomorrow_night_bright.js create mode 100644 public/ace_editor/theme-tomorrow_night_eighties-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow_night_eighties-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-tomorrow_night_eighties-uncompressed.js create mode 100644 public/ace_editor/theme-tomorrow_night_eighties.js create mode 100644 public/ace_editor/theme-twilight-noconflict.js create mode 100644 public/ace_editor/theme-twilight-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-twilight-uncompressed.js create mode 100644 public/ace_editor/theme-twilight.js create mode 100644 public/ace_editor/theme-vibrant_ink-noconflict.js create mode 100644 public/ace_editor/theme-vibrant_ink-uncompressed-noconflict.js create mode 100644 public/ace_editor/theme-vibrant_ink-uncompressed.js create mode 100644 public/ace_editor/theme-vibrant_ink.js create mode 100644 public/ace_editor/worker-coffee.js create mode 100644 public/ace_editor/worker-css.js create mode 100644 public/ace_editor/worker-javascript.js create mode 100644 public/ace_editor/worker-json.js create mode 100644 public/background.png create mode 100644 public/diapo/dia1.jpg create mode 100644 public/favicon.ico create mode 100644 public/fond2.png create mode 100755 public/fonts/fontawesome-webfont.eot create mode 100755 public/fonts/fontawesome-webfont.svg create mode 100755 public/fonts/fontawesome-webfont.ttf create mode 100755 public/fonts/fontawesome-webfont.woff create mode 100755 public/fonts/gondolasd/Gondola_SD-demo.html create mode 100755 public/fonts/gondolasd/Gondola_SD-webfont.eot create mode 100755 public/fonts/gondolasd/Gondola_SD-webfont.svg create mode 100755 public/fonts/gondolasd/Gondola_SD-webfont.ttf create mode 100755 public/fonts/gondolasd/Gondola_SD-webfont.woff create mode 100755 public/fonts/gondolasd/specimen_files/Gondola_SD-cleartype.png create mode 100755 public/fonts/gondolasd/specimen_files/easytabs.js create mode 100755 public/fonts/gondolasd/specimen_files/grid_12-825-55-15.css create mode 100755 public/fonts/gondolasd/specimen_files/specimen_stylesheet.css create mode 100755 public/fonts/gondolasd/stylesheet.css create mode 100644 public/foreground.png create mode 100644 public/midground.png create mode 100644 public/robots.txt create mode 100644 test/controllers/.keep create mode 100644 test/fixtures/.keep create mode 100644 test/fixtures/admins.yml create mode 100644 test/fixtures/artwork_images.yml create mode 100644 test/fixtures/artworks.yml create mode 100644 test/fixtures/photos.yml create mode 100644 test/fixtures/portfolios.yml create mode 100644 test/fixtures/quotes.yml create mode 100644 test/helpers/.keep create mode 100644 test/integration/.keep create mode 100644 test/mailers/.keep create mode 100644 test/models/.keep create mode 100644 test/models/admin_test.rb create mode 100644 test/models/artwork_image_test.rb create mode 100644 test/models/artwork_test.rb create mode 100644 test/models/photo_test.rb create mode 100644 test/models/portfolios_test.rb create mode 100644 test/models/quote_test.rb create mode 100644 test/test_helper.rb create mode 100644 vendor/assets/javascripts/.keep create mode 100644 vendor/assets/stylesheets/.keep diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4ac181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.bundle +db/*.sqlite3 +log/*.log +tmp/ +.sass-cache/ +.DS_Store +private_medias/ +public/public_medias +public/assets \ No newline at end of file diff --git a/Capfile b/Capfile new file mode 100644 index 0000000..d04de11 --- /dev/null +++ b/Capfile @@ -0,0 +1,4 @@ +load 'deploy' if respond_to?(:namespace) # cap2 differentiator +Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) } + +load 'config/deploy' # remove this line to skip loading any of the default tasks \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..4921298 --- /dev/null +++ b/Gemfile @@ -0,0 +1,62 @@ +source 'https://rubygems.org' + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.0.0' + + +gem 'bcrypt-ruby', '~> 3.0.0' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' + +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' + +# Use CoffeeScript for .js.coffee assets and views +gem 'coffee-rails', '~> 4.0.0' + +# See https://github.com/sstephenson/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' + +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' + +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 1.0.1' + +gem "therubyracer" +gem "less-rails" +gem "twitter-bootstrap-rails" + +gem 'haml-rails' + +gem 'nokogiri' +gem 'acts_as_tree' +gem 'formtastic', :git => 'git://github.com/justinfrench/formtastic.git' + + +gem 'kaminari-bootstrap' + + +gem 'carrierwave' +gem 'rmagick' + +group :doc do + # bundle exec rake doc:rails generates the API under doc/api. + gem 'sdoc', require: false +end + +gem "capistrano", group: :development +gem "rvm-capistrano", group: :development + +# Use ActiveModel has_secure_password +# gem 'bcrypt-ruby', '~> 3.0.0' + +# Use unicorn as the app server +gem 'unicorn' + + +# Use debugger +# gem 'debugger', group: [:development, :test] diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..179265c --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,196 @@ +GIT + remote: git://github.com/justinfrench/formtastic.git + revision: 58ef0ee246bb2aa4e32f19faab8d737f6c3ab963 + specs: + formtastic (2.2.1) + actionpack (>= 3.0) + +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.0.0) + actionpack (= 4.0.0) + mail (~> 2.5.3) + actionpack (4.0.0) + activesupport (= 4.0.0) + builder (~> 3.1.0) + erubis (~> 2.7.0) + rack (~> 1.5.2) + rack-test (~> 0.6.2) + activemodel (4.0.0) + activesupport (= 4.0.0) + builder (~> 3.1.0) + activerecord (4.0.0) + activemodel (= 4.0.0) + activerecord-deprecated_finders (~> 1.0.2) + activesupport (= 4.0.0) + arel (~> 4.0.0) + activerecord-deprecated_finders (1.0.3) + activesupport (4.0.0) + i18n (~> 0.6, >= 0.6.4) + minitest (~> 4.2) + multi_json (~> 1.3) + thread_safe (~> 0.1) + tzinfo (~> 0.3.37) + acts_as_tree (1.4.0) + activerecord (>= 3.0.0) + arel (4.0.0) + atomic (1.1.10) + bcrypt-ruby (3.0.1) + builder (3.1.4) + capistrano (2.15.5) + highline + net-scp (>= 1.0.0) + net-sftp (>= 2.0.0) + net-ssh (>= 2.0.14) + net-ssh-gateway (>= 1.1.0) + carrierwave (0.9.0) + activemodel (>= 3.2.0) + activesupport (>= 3.2.0) + json (>= 1.7) + coffee-rails (4.0.0) + coffee-script (>= 2.2.0) + railties (>= 4.0.0.beta, < 5.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.6.3) + commonjs (0.2.6) + erubis (2.7.0) + execjs (1.4.0) + multi_json (~> 1.0) + haml (4.0.3) + tilt + haml-rails (0.4) + actionpack (>= 3.1, < 4.1) + activesupport (>= 3.1, < 4.1) + haml (>= 3.1, < 4.1) + railties (>= 3.1, < 4.1) + highline (1.6.19) + hike (1.2.3) + i18n (0.6.4) + jbuilder (1.0.2) + activesupport (>= 3.0.0) + jquery-rails (3.0.2) + railties (>= 3.0, < 5.0) + thor (>= 0.14, < 2.0) + json (1.8.0) + kaminari (0.14.1) + actionpack (>= 3.0.0) + activesupport (>= 3.0.0) + kaminari-bootstrap (0.1.3) + kaminari (>= 0.13.0) + rails + kgio (2.8.0) + less (2.3.2) + commonjs (~> 0.2.6) + less-rails (2.3.3) + actionpack (>= 3.1) + less (~> 2.3.1) + libv8 (3.11.8.17) + mail (2.5.4) + mime-types (~> 1.16) + treetop (~> 1.4.8) + mime-types (1.23) + mini_portile (0.5.0) + minitest (4.7.5) + multi_json (1.7.7) + net-scp (1.1.2) + net-ssh (>= 2.6.5) + net-sftp (2.1.2) + net-ssh (>= 2.6.5) + net-ssh (2.6.8) + net-ssh-gateway (1.2.0) + net-ssh (>= 2.6.5) + nokogiri (1.6.0) + mini_portile (~> 0.5.0) + polyglot (0.3.3) + rack (1.5.2) + rack-test (0.6.2) + rack (>= 1.0) + rails (4.0.0) + actionmailer (= 4.0.0) + actionpack (= 4.0.0) + activerecord (= 4.0.0) + activesupport (= 4.0.0) + bundler (>= 1.3.0, < 2.0) + railties (= 4.0.0) + sprockets-rails (~> 2.0.0) + railties (4.0.0) + actionpack (= 4.0.0) + activesupport (= 4.0.0) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + raindrops (0.11.0) + rake (10.1.0) + rdoc (3.12.2) + json (~> 1.4) + ref (1.0.5) + rmagick (2.13.2) + rvm-capistrano (1.3.4) + capistrano (>= 2.0.0) + sdoc (0.3.20) + json (>= 1.1.3) + rdoc (~> 3.10) + sprockets (2.10.0) + hike (~> 1.2) + multi_json (~> 1.0) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + sprockets-rails (2.0.0) + actionpack (>= 3.0) + activesupport (>= 3.0) + sprockets (~> 2.8) + sqlite3 (1.3.7) + therubyracer (0.11.4) + libv8 (~> 3.11.8.12) + ref + thor (0.18.1) + thread_safe (0.1.0) + atomic + tilt (1.4.1) + treetop (1.4.14) + polyglot + polyglot (>= 0.3.1) + turbolinks (1.2.0) + coffee-rails + twitter-bootstrap-rails (2.2.7) + actionpack (>= 3.1) + execjs + rails (>= 3.1) + railties (>= 3.1) + tzinfo (0.3.37) + uglifier (2.1.1) + execjs (>= 0.3.0) + multi_json (~> 1.0, >= 1.0.2) + unicorn (4.6.3) + kgio (~> 2.6) + rack + raindrops (~> 0.7) + +PLATFORMS + ruby + +DEPENDENCIES + acts_as_tree + bcrypt-ruby (~> 3.0.0) + capistrano + carrierwave + coffee-rails (~> 4.0.0) + formtastic! + haml-rails + jbuilder (~> 1.0.1) + jquery-rails + kaminari-bootstrap + less-rails + nokogiri + rails (= 4.0.0) + rmagick + rvm-capistrano + sdoc + sqlite3 + therubyracer + turbolinks + twitter-bootstrap-rails + uglifier (>= 1.3.0) + unicorn diff --git a/README.rdoc b/README.rdoc new file mode 100644 index 0000000..dd4e97e --- /dev/null +++ b/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..accce03 --- /dev/null +++ b/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +CMSnb::Application.load_tasks diff --git a/app/assets/images/admin/content_type/type_BlockContent.png b/app/assets/images/admin/content_type/type_BlockContent.png new file mode 100644 index 0000000000000000000000000000000000000000..dc03b170d387d70c15ab0cde11d2bc287e372940 GIT binary patch literal 2799 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 BRFMDx literal 0 HcmV?d00001 diff --git a/app/assets/images/admin/content_type/type_BreakContent.png b/app/assets/images/admin/content_type/type_BreakContent.png new file mode 100644 index 0000000000000000000000000000000000000000..6f099c443d3bbba2cabc5666669afa0b72282a93 GIT binary patch literal 2619 zcmV-B3dHq^P)LpVY=GVFI0tvuyLa!okJ*{o*~d*L zGrN84&Tr2A&wZS8#;`1llv*&&D8VklF2OFfB7kk!P38Bjke^KGV5@>vZDG0qIfpHQ zYe?S5zPuGi@HvBxKsFG_D%NfZURz-RA1G`^z=i;_p$XcOyca0+z+f|=4UN4afz1PL zA%L-cAkck>Er5)H#eT<7kP%C8Y$;p}U!nU7n*-WF;EFa~*fh)p0$p?gd;{(aYy>h7 zu&MZ-p`h73s0rj)2HqFwp2C($1`E=pUYnfv*x%=AI?pl_3|!t`ZGk}d1U3blCmA%j2m>^N9H;)~__1TtM^skUR#a5fV4wf+ z;lsOs_w?L(W!}7B6u=Hh-t!H3*02%KJh_NaK-uHe{_NSa^G1ytHO+=QrL3&%S>5jw zi^cxv?d|RO>)yR{jWcE(Wk3#4uX)Fo0D9KIvx3b5jmd@sGfII@ZQtzQ|J;Xk+&5{Z9ot3Q45!iCm1-+JpB1y!{1G(F8PxCQPSwg%`31v(A(iQ~s-jGr)J z#o)n%>-`>3JbLu#*Q-~qY_O%~=OolP1vpN<#`K&}dso0+!BzxKON9fv4Bp$kY11>W z&Y%D3(4j+T20cGvOU$VQ2fkgqYSo9gDZnuX{(!`R<^;CMXfz9&wrT)fcK!PG_iRmG z=A~RHPPNkV^02F`Yh!(VeQOeOEV&IZ7S4n28n~IIRm(u9Ag^p`8QI<4y|22u`lFyg z0}E$MJ89Fb7&B(f$2Ra??=M|C!ugKW9T;WqOq0_M^U8)s~e zL?WYtwqjX}$K&1Y?I)KnT=@1i%F5#$UFSMZ9qZPD%~&?6)e*)af@Kf#+9`%5YK(D~w8M-s)@{l9-EJ&9W3C$JqYDwV<1D}4 zv17cBW@C=hbOAcUIl{z$A%b?=^v1@;g5HR-lQgpco!Vf9rBFdb8$NvaOA6gTsdk$Z zy_QM{tQmSSWg6ztY8YAm*xo*e;~aTXVt8TM+(8X2&K5Fgr&ZU~JkRL@qo8@Ztuun; zhKIo_c%g$%O374-bIeM!l@@f}gd5}=XlUi-(kHl1Tj$8|eNTp%{4Q*sqRgI#27};1h;oUBxkg!4noz(4WH}c`Ms2j+{Wz)fX+yNfYgd&(rNpA?-C>S&RvuWMlbYDXiSt?%%)vd$Bmg z%F4=#Q)6U^Wzi1Uw^(~2TlIqn4^9z0GZ@W%cPk^7$Vr|*e{Opr z!#;E7r=27{p~=z(jmii|O4x8SClV?Z5!KbzwHpFj3Jr9Be}6}9ZS7)`9uY;y{3*x# znTkVAth_`j75U2L%Nq*OsyjP6Hj&JfY@uai6LhLktZZsWDsP6i?pwEReF?#cg#x;- zukUnSUEOlTqGOzaj3-g77Gl+D)(x4n;JFK>2eNPP-Y-ac$~BfTrc_8kHO+%Jd{0YQ zaxA>Fv-4d@=*)N6_FcNZp`oFb@FQ30_-y4gJvTWuY|>JMf?bw$mb>!VStgxg69;rm zVC7QSQW@d=F)Aa@7x{ec+GUVAn~$LF@BQazYu2nFnN=IG0x*OqrspZ;K}trHTuIrp zXZOUpb6?(>Pa{jv>9)2Xnwy%IT$4ygLf5L5VI%!+lj)sA@)5I$7S;@B&zW;nNEC~O7j7+9V3H%oGy(`Sr@ z?Lls;pmm;_7mA0tEy*e>AfP6vnMyz(iCop%weJUW5W1CvXzOR!5V d%l5AT0{|?sD|w&>zH0yg002ovPDHLkV1hED;0OQ! literal 0 HcmV?d00001 diff --git a/app/assets/images/admin/content_type/type_DownloadContent.png b/app/assets/images/admin/content_type/type_DownloadContent.png new file mode 100644 index 0000000000000000000000000000000000000000..55e03b2c4a2ea4b3948e7e06ee45d2822d4ec0d2 GIT binary patch literal 3002 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 ws%QA(E`l6ICouEC@G^O#lD@ literal 0 HcmV?d00001 diff --git a/app/assets/images/admin/content_type/type_DynamicContent.png b/app/assets/images/admin/content_type/type_DynamicContent.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3ea99d9ad2acf7e8770977339f82a363826a37 GIT binary patch literal 3101 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/admin/content_type/type_EventContent.png b/app/assets/images/admin/content_type/type_EventContent.png new file mode 100644 index 0000000000000000000000000000000000000000..38813d532447ad1cc8598aa7bc55397537ffdd37 GIT binary patch literal 3225 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/admin/content_type/type_HtmlContent.png b/app/assets/images/admin/content_type/type_HtmlContent.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5a2c0dde97600f525382d5204fd77043407463 GIT binary patch literal 3349 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 c_J08e0EV8V{V#aG1poj5 literal 0 HcmV?d00001 diff --git a/app/assets/images/admin/content_type/type_ImgLinkContent.png b/app/assets/images/admin/content_type/type_ImgLinkContent.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbb5b7ff502ceea3d4c3734bb2ee617a594b36d GIT binary patch literal 3064 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 Z1^}C(YI8y!7gGQL002ovPDHLkV1iaeBRv2B literal 0 HcmV?d00001 diff --git a/app/assets/images/admin/content_type/type_MapContent.png b/app/assets/images/admin/content_type/type_MapContent.png new file mode 100644 index 0000000000000000000000000000000000000000..9abe80166dfc8bf1dcfa02b83431b89355ff424f GIT binary patch literal 3401 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/admin/content_type/type_TableContent.png b/app/assets/images/admin/content_type/type_TableContent.png new file mode 100644 index 0000000000000000000000000000000000000000..730de834e79ce52075a16b05d17c657b9a9c8f76 GIT binary patch literal 3028 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 W4yYk_6PMip0000&}00009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?3l~X5 zK~#9!?41p4)aDt-U;BK49c*lB#&g-xt#9o-#z}n&-?K_78FGRlV*>JlL#hZk4ux%;UopsSl*{NToVPS zogXV$R&&x1kaE}*xB}&M+{r6W1fMe47{~$!GK;q>gufLhfVUMkBVd65S>Ob%P+qeY zx^1u_&;rL^puk3fRxp5Zdt0DODTIszi+hj2AR`LlSc!fH3aS!2Pb;BIHiH&0a7i04 zY&~ch16{#Mk9N*h0herqi~=k&z9ukeHVUeYIVM84%F87iB?AU2>i!lHufgv}X*xE<^CWA&vh8~;?0_wsX z<2)TDC9p@zlr4gJEp}G`tF&CQ2sBDATsoleaUATrXP?bpvt~`%?Avbp-t_6ym$=>T zJV}zigFA%9zu*7S*)wNO{c_VL9|V}Rp)@`2 z4l)YdFl-LcE*)qXwsi8ui67owQnKFT@swK?g5JD&^V2UnJDXRmTzO6hH4GhxF%qK( zE+^9oG6b6uv|cJ=pxrUZAAE4+`{m^o+on#P`UAVV%frLN|2%#A)UKME^3cfZdPxb>8crVIT(BXpM#aw(1X`00$>;O! zQA4;#oCH~Kfk5D+!otEW2;gBtq$2amiI{|Z2$&8^oL4&?v}W1a*_Ay#J#WOE0}(li zlrbA%Dr`bmTtq?EPTVfg8subq(-3es0XW>FWu7+`4R|%cG>CfXaH}WYU^QqnAj7~f zUApv=4mb{af_Jk37n76^B1yUNqp@31ih8>*{9az0CMwcOm?Csgmwro`I< zL4LVpgfufgdIHroH4lrT=wUhewd>XrbvYakk8Vye^}435udRJhm6BEhXn{paXflF} zt26YQ-|s(W#_WnySNx8QjC9SJGe;Bn5hywdLgOaHs6=FpLa-8|#?^O>XV98WnKI=r zHSWG0(Wwyu``Q+&jF6UyjecoG#quBVoVePJhbgB_Hts4eW`6Je4?OUox_g%aG^Kw-rL-YriAG|k1^`Rc-Ft+_k*e9Efrc?oN-{GuOO0G; zszLLb$KzSdIMixdrzQ@5W8=O%Sfh}bsWB^vL?T*u7^IVFQOO&xzkd6cty{msjEztu z5{a>KM0$A9{GtNhliu|F^B`SwFBdFWkgx813=JX@I?t$I!tFBm&O4Wlr>KKw^9l=> z7?BSi*aE@BCk$u~KG>e5ZF!I}(7$SEa15oFw{PdY2Hpkw%nc+<%ACOK(HGh-j2CYv z{V%D3s7W)yNS>_#dMcd4;fW4!&L+ybBbZQCi`W0Ro z!Q~k$(J!A!kq3&2!s?8ofe#(qzUuA0IFUg2_Vj!P@R?@Ri3*A;-tEMsZQM9$krzk*Y)tK0asEXzX^!K>Bly!pcB&EEp{ zd`d3Zq|Dec=)=RqpHBpx9vT|z0GL&*ta2hTcr+@(b8K;VAP~6d@pvj&LG#|aPO<9) z0~Y~0^+RTDC|RQsefDhJ7k%={KmIlmIwT*f1~B#v@z#Knz0x@ z4)~QTR}N=pW-dv0(9y;4PXhGHRejnXbDADccU>V!$ymbuhpnw!wc9V&@l|O;=>lBm z(WuZaf*F9~9#7`-Yz%N27n#IvMGd$b629g{&{_!$$fIGeCU#!BF0efW~*Zc1uE-5dscrhz0Yq5>J z!j8Y6J^R{|)z$xkfQASjt(f7}X2I6qA#lEl3!rQIjU699cI@7}OG;{{O`CSVRgiDo zxN%l1HTTG>Rc)BaDME;$O#z)0Y>amUikC~6W7qHY>?x>NzWkxQyu2ziW_^OeptrBD z@93E`AD^zTf8iU*W5WPnR8hfbbkc>*ldcR;DR>Llk;0V(jjPG}i)Wshv2NYEWzq7W zOI7&!k|gDk8aoy4w`z#_*?;{0ORcS~T6xexfUduak_u8uIa5HJ0-FIisgkgZ@IO*k z7914;OjLx5l1RmH6{|o4VA5iEXcZOegk(bWLM!K-P?HJZ>t`zj=n;UP)>8;^v| literal 0 HcmV?d00001 diff --git a/app/assets/images/admin/content_type/type_TitleContent.png b/app/assets/images/admin/content_type/type_TitleContent.png new file mode 100644 index 0000000000000000000000000000000000000000..df0eb525899b0ef5242a24b6e54e6f3076c82a04 GIT binary patch literal 3047 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029807_docx.png b/app/assets/images/file_types/1358029807_docx.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa40bc41891a81a0c4ed402380c9e2a007b0fb6 GIT binary patch literal 19760 zcmV)|KzzT6P)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB zKm$6O9}om#Av{C{(L<~d4qy-s3=8zra0(n6JPy`eQ zr9fFwAyf+0Ky^?P)DHDR!_Z@B3YvpHKpW650)Zew5D?4=9)u`D4xx(BM_3>n5nhO3 zL<}MYk&7rn)F7@QS`j^nQN%OE8^j7?3vqxXM$#bJkwQp0q&m_FX@~Sg1|#E;8OSrp zYUFif2l77hDe^V)Bk~&xg`z~UqJ&WjC~cG_$`uuaibG|g&Y>=&T2S{;Pf%}AYp6Xm z37QejkCsF0psmrK=y3EYbP>81eGA=>oiib{@Nh!{L~4VmNi2HO>#0fGfmZ#&zPx zaf`SeB0LcXkt~q`kqc1-Q5I1(Q7h3H(HzlNVmvV?u>!FPu_tjHaUtSV{rqREQL8p%e<-jO57S;-a2t;s{lPm^CGA0~fG0a370C{fr_ zL{bz{G*gUItWpwF@>6P4dQhfN)=>6RzM3R&JG6|nM`>MXQ)sWyj?%8t zQPIiJ+0n(*U7#DJTcIbXm!`L)kEgGtAEy7rK+Pb};KXo>p`PI}!&gQYMh!+k#(c&$ z#@9?3CJ`n}rZ}crrZJ{XW+rA0W`E{0%y*dIv5>LIvAD2gvD{*L#fo7SXSHWN#oE9+ z#fD@PVY6jRVQXM}$&O+dXLn#vXTQb%nuC}_j>DZJkE5I811AlqI%hEFdCpPJZ(KZF z7F%DLl7$7I>+6)pJ(ZN<`lLT&Jyks-VzZI zaS|yK85a2|DkbVGS}FQWj6_ULEK00F?5#MHxVd1Myw>H?_0?_E-PTjmOVS(CC)2mmFV|l%5HtueXg36gx`z3N zQ%3AYK1R((yT?AsdJmf3!=lebH=o3!V)54Z1kpmuO~xao*= zv~a9-+&ZRt?Ci03PI69}PSei9&I!(sT{vCBU4~p4T>V{p+^F0<-8$Uy?k?^v9ykw2 zk7iG_r@d#R7s|`dtI-?fZSURWgYj|nx#>&f>+E~mkJQh@ulqRl@#Dw){h9p3{Ko>g z0^$ND14RSV1LuMigNlMa1?vRY1pf%J4rvM{3H1u?3u6w84x0!U3(pQ;j?jpxj@XN| zi@Y609Tglk9xW7|8ND2%6;m6Fh;@nWIl+1&{={tDk+|}>AMpsV=GgX?$tfX`j(IwwSh!cHj2-4*QO$od%r)UCLc;-QwN#cew9V-etI3)I-*j*^BB;?A`5) z?Ay2(aPLFESO3C*^T6zVyZg@vEe4+q84o=e)*l`j(HR*W)fycb(-^z=K>b1AL$!x} z;AUI z_WakNulqYW-ZEvTL{d{zvp4Zm;yGz|YQogZEs{&Io8eSyDyfxmr$zkPwfeSyDyfxmr$|G#~KVAoLBUt9nQe07&fs zpnePh3G#n?{Kiuh_yU! z?V+xmxu#60e%8kAfb1!!G#MgN81m47>C(V-FlS5OIPUWVSrCmyI%IL`K z&l<~~$eGDqIQ>3vEq|-vd*S{W#92%+NeTHms!~E3T{%Mq<9Vh^mMXStt{R~WGPSA~ z4KLYVcDoW#7j-qMKKt64>y5OV@+$r8_@+ z2)#mms`sq=eFx(1=MB~j-5MSkc|Q7XZ08|%oc@vEW927SPlG3NpIx6Eeg1w5{gP{1 zb>`S??5mR3EpML9?JTe^>b;Fvs(trl`QU@disQ%Z)viw~pBdK;HsZfDZ7y!pebwJd z{MP#Y(+}=Fho6P}!v_by_MaBW01sGE+J?2E8d&Q|MUo@yP-d{=@*LBQJ&!v}R76}$ zau5HOjGEk(B9HO~H5Vb2W`K@?-kYI=3CnE6a+-C3ZIgq*Da0ktEy%;fi{f44>*uc& zh!wOJ5*Nk^&xv%17K$Ag*OXwF_%1mibwfH$##vTgj$H1oe3wFjqL-555waumM_ZIL zRGd_0)yUOW)kihzG}E;_wKa4&bbji-)N9qxH}EsmGGaCQX8g?Lrs)~8SaWv^6H5gv z9%~BgA2v(2kL=p*YaB8iLyp-yX*i3!aJbUD5!`7!=slUe*uA-YczyZ(gpLdQiv)-U zN(9LSD~A|{x`xGs7e(BN9EzHc-i@U`Arz+(Z=Vp7n0m4#=}K~IO5dpmsV~yz(^oRS zWd6uT=8)u4oo38q&*v);E|e^iJEL?~rC6;*Cp*~XStJY&*!FyUP?^c z&LqxWe)aJ6&K&o=^+N9A@Dl2s`f}p?t`9pOC07GJU0qvV7uX2>(!WK&9rShJ8~yj= zyWM-FKb`g){(JvvVC~Tvl!Nz>43r72B3uxQ$Ve0eY7Cu@vBb*YScu4oX-Syzilh!? zr^s(pe4&!04kNVEe5cc*PiGiq!ZWL|gs_&f-DV%)x&*_r-(O-&yHV7fI;B9 z;0vKv;X;u>Q3El4afJA5iFU~XspHaGGAuHiFypC_k5VvHn>CZ85UYeu_8Cs)@?@2EaO|D!>lVX=|FvAPMP$)@Qevqtj*i*QR@D>se$sIANXqc3!PNU{_tJYZ zx-xHP-ORq8b0xR>ba~#{{Jet9!jz(fGf`(liv3F5&N-A?mKm07RvbAmRVh@(Rn1z% zbb+~+{UXmL!OLP-r0V3ZD%C4rQ@^ftL$|@8(X7d#+4pArt+Oo+t;4tH+jcvsJB7M5 zx*hI>-p%T{(A(Mf?B3b{(S5GLqeHgCAtTwNm&SS?Oh4RyMEO|qiQUt*iS}ooo^!mg zp2~jNH@!0}{L1}x#haOVo`smj7fXuos@|hM_^v!!mHTw@GuwL07vC+_uR`D0cj@;i z_Hl>%|65N#tO*!d04}ZoU?Ty5eiZ;!UjX1qhii`!0H&k>SSkQ$jR2roegJjO|5HCG zVf9)CSOI^K0!l#>7=|_IZx96}0I5TcP!y~z-+)G;WdsVrg-}PhAx>2Df&K7rZkOKOuOtExnOw{1u;b`#cxV)j*J|=t$b0XST##6Nj+X8UNcE6L%T?)TDM8B zUw_(Q(}>(y)Wp;@+^oWU&|=ey%i78&8~$DXbWn7RJ$Ba_h|74(KFX;-bdOu z)$h4Ke?VN|M6hT`cIZmDQABeTLv(V?=M#=`BMDN8WheKO-BJcqMbge@K$(GAZ*t6Y zhx1hPy9yPGI?pN>51unCeN!HC9$i^cEn72D8+wUwxueddp6FW34W~v-)3uw%w>DbO zv?;bPcAoB5y7RH;e4lwgZlG`Q#IV%Jhp~!>2IJo!*FCj)Ml{*|BKRfm^sCw8*QRr% z^J9ydOS;S0_d_e0t43>7pQkn|H$Aq6zHWW%+0EH=*cblw|3L)=VAp~T2n4C10^EX~ z2yek2L<5OIdXPJm0F^hZm>@zBMTj=UED{Mj1FVrL$eYL|6cfrCRg9WO zbD=}f{TO;o5M~t1kIlrc;>>YfL_BcyK@vw1e_oOoY{HU*El*kGr1hO zC3#4A-tqRsEG0(3RFFsTo6tkyT9G(WTQOO2I`LhJImr>J7U^o49N9>@WAbVWJc`7M z>q=9w3friBUL{X8SuI*UM8jY6xK^Ncgw9FbJiQD0Z3d4FSB!Bc{H6wG!RDnF1C|@s zoHkar*>(dCz)|H`lGBh2h3hf5>+T1hmR{F=u)ZFCeg4b=;en&U93j!6Ps2qcPDg%@ zwv6dI!4p@I01`t^&LtbCbfj{mWu|}0bj%vbk;|>iW6Ccm#1$odKx2wIfZ!z`!vpBcX7_R zK_UsFN@8;26yonBVI&*)5d1c2JQBZhK6<5J?LQ&Csf(9tx}veWj` ziPX)~tJUu{STMpFOPV;Do;K?<-?5ai3b4Lmvu-DApWrZZjMmA^x!sl2&C|Wtlg;a- z_gi0mzZQRvfPx@&aBRqWm`C_zq*hc*3{UL2IP&<6MAXTYWOPbaDrH)E25)9#wscO* zX|cSk1)PPIXPD2PFJV7-sZ6xI{k(SN^J?#!AGP_HcrJItce{L{u~rjs9E#J|K$XUw8r zCBXb4WPWwg_wDjK&*jArE-O>3I-f4D?W`+q1b!*m?Am&{y}d*EP58U+uIG>Bz3QJm z`)>~S|F;M0uzmovuaPV4$NIk=0sawxa#F#W@qzxvhh8@v{CV%;s%h{C2mAl>!2ODQ z23lGCi3hqFoBY9Eq1xtuaB#T#zhP6$Kk--}4cG(rJHKa`)<1dtT=il9+3$F0gt^rp z92RMz^#{lLSlax-9-f;2#JzmA_5Q?t!}b2T*YO~Of7Sqefe~;8?!Ucj@N9sg0HEUZ zA?jg(+j&aMW#`#go&^#a{Rh1n&=#TCGR0d(^b32;bRa{vGf6951U69E94oEQKAAOJ~3K~#7F?VSsdrA3wJ^WM7k?5cjyG|)5+ z-83{b4FiHO2qGge;xMa=I&Q2oGdmiqp$MoGprLcx|c8$(3MPB&b-Gx??~xOD>(t8CO;wXpwKUmEBe~HO4dBe z4|m*g$8{H6aKXPG9v&{$>-8fFfLaYb7oBL;k&%(%0|yT5cKB_S^!9{Bgbj51UxPci31FNbaXUadg-MHKlGswJ^0vT zkA3U<>#x6C>~yp$KNUR@7sELK9crw1XlSUS5fku7lA8_ySH6cmJv{?`eSKH0S+nNK zpZ@fx-}&GNKlqo=JoC)U>MJ1N7u{icn2Lm*larI3rBW#zsUGbiJFXcN(&}H(AY*`) zPCW6%_sit|{gy3TP7yl;kwLiV&TN0yYFQ&CO)t7I^J&l(-&_Zy-@)*BwOS23ckT?U zSFe8Cf0jG-)KgzG5RO=dyP{Dp&cig`Olt<>g%@53>(;Hi;_u`H!pSPT=riGn2f#((p2{N*n%`b?MtfRCP|B}@mCgOSpR@7lG?y1RMv<}1JW#V`Jyw&LqWSQK+~Q~`i8 zajxJr4$VhDVMj-Yr3nunJZNVH%+eWWoN?tBzVL-b1L3FuAXU5}kbvNdcTk!^004GH zgM))XX9NS{^wUqj>hquf{5MWI>7)gp2}cD0KGF$Mu&0T;;vEPF0L8n9rt6B(+uIwu zySr^iC3E!qx7>2ef`f3>0AO0rK2WxU-~c!n4gjG8(An7;xPGZrDh7g1%r+AMLA#>` z1)%_d3+X~1X`##SA@UP%_9z~j1AyYk$Hxsc%n&mH5Lgoc;Y(lo(l^$xUw@Jq+P*Ls z05A!T@DG%ZL%}#7M9m;Hr&$LkCMHbrC?6mQaXKd~7zjrl04U5sXceY_5ciqDXlE95 zb#>V~fbxANP^WfBZ__#9Z`(Z+rU2jq9t|PNbtN~C_~tZx0Kj_SAOJwq!hE&NQCmTn z0sv?q4Gx9k(vW!S9R#Ogf{3#wq#!hzBLm^&lTTi!>gT;C9JK(L_A>xbD$W(1#+^pU zbv2H~xfKX(QMpmon$R{7j(Px0qfH+U2;>w1l4ca>i#(oc#Xw$s6p%+OnSFR1MY*qPgx9LI zP@Sx4%URQ+TMc7l)i69%3;PCZVfjeosie;mKxlTJ$8%=wj{bm|@TpII>SMqD^{;ni zyp4*Q3pb^w0ML|wSjkGM8vfy-iE!_W1EE*)f&oA+8=`k;(!vYKQp%r*equaKPK<`?_-L3M8xDiIko%)I z4TZ}uX|&*qZUusKjg5^t2)EvNnfeC=yryY=|v zkDrw}Dzxa0%{FAn^N-PseYa80XxD5=X)!P66OTSCCq@phW~UX8_L_Aiv(d`yQ~|f; zZriCpmg8yxUs1cdYA|0h#SxG6&QPvIU#fHke7O_f9XcvK241Vth(6e|az^Ow>DJkx zCqFR*gkRw40sl2$|N7T&J>i5C)~cSvS`*r0f)H9V3W6B1IEu+YAtR?j2OMbpYsyR0 z)^SxScJW1CxBJ+5_lhd6e-svTNh80+_Y3N7ibc29>LycN0|RrVZ=Xdkv(?$t8+PoU z2><=TXJx7;G^=I0*p}97p+{Qk?=FYs%X-7I-mb86S$9}5&=>mq`wa-b#=|oOF7yC_ znQ+rhH{I~^%P+r#Y;rD0OeLRf1HkHZWh!Bcgb0lfqLv@yMlhnWM2@B`Q>zNeIw@c3 z=6?)w`ya`uKjzswU_5G-DQGpT|1@q)Qfj#pN*%6zh0;Q&u6>?(WjNe;`=g<%HDOX~ zLv?&4)U-}0BE%*_Szwgpx2zfsZ#%O;tXQ?0Z&rl0Yu5&S*C^ZvIaR{$llHawp+z}Uzq zZaxCx^cW&khX7Mens$`;x(G|6mn^IYVG?@OiKe z0OC}q`-kV?&o$qo2(89$$2y~mM4{8x^O$QUL7ZTrZ}MdMRM;#_%%k4MY=|^^m(Kt( z5T`D{G4rGao8ex^I#Gcp2wPNh0AU6S!>Jjf*;8Vsl(l9^`PwpRCICWRYte9!#nQm( zj73!k_3Yid*S>GGef##XVZ(+X5U&0H_rE{%?svcYFU0t&JYNznfG`CBt8tDWbj7?r zz=b&Kvrr#|IL{;PiiZy)QW@dyI6EG@-qGup_b70n0) zV@Aa9!zq*|;`focz>CTc($ma0RZu0n{_io`pRQ? z{`u#FzU+M6H^2GKy&w3%2W}P%-$j)@%T-|mPU$weTp6(i)LBrFnh{GjGBu!37+xPX zT8S&aszO!KCgm-jrkyTEc+4x`wzOHQZ#w zc1GP=5H!5yOP$L?=<1gz90;ZE0oj^?Q0eUt16qKw`7Fd95_i99)haVfk3RY+XOinb z_qosgvBYD_6b5}E!B%U|CP(4KXrw4 z-bUoe+jBah`3O8p*Z)WpSez|tT12542mqlmD6&8hQQKIp1Vp0OIU#f~`dPT;b(kZo zvwK-szFcJhO%394gxn|L*+JoX&?D2-q3@#phj+c}UEA-v>#m2z%C5*vQ2_udnXAh? zsz~f&wC57bKtS>E@L5*V5om=7F9je?wj>yrp@J|J${pZFm-RU+SEQ(j$Sz&SwCKbs zL>SkH3&Pc$*FY6pwchG`Nqu>Z+@5 z5&+jrBB5zrska3H1}*(W@vayLfxM_#<^{T@!;JVi+HHiZSLE?wcAwgaLrWZOkVR-v zc-+DW4(*$V$Ko0QiW?}3M1=u@)8oJZ2>5GemY_-bvKBIKGEH1%s7E@k(@IBIuS|{d zX8<6b2_BbOdiy)x@s6!`-+lLk5{X&R9so>J2(J#-FeCOacGeDD(lW|4<&rO6j>)A; zccjxTnFf`hkUW~AfJ$K&Wv6jB{=+L9U6Ld=~dD?;WK~`hq8$?`aL8LT_@>*^Ugc( z0s-)U#EQ|={AzM@T?1n0qJWGal#Kq^S+LzCZl1KR2F7+h7xq1Hd#F#0$d5)p84o>N zoJDnsx2rEymah%nYtIUO8-F)+9e;)Zk%F{0HzgV;Dvw2?9F%S-8ATYp%CrzLM6>eH zh^u%_3xUO@EHhbD2@q+g_R-M0=@J70EyjN+l>(WPGo?Z^vV{Ty1mp+}7^6p%WXglC!5NKB zrcA3#AY?Ox`=p*8^{@#5>TLypwW9`kmY^qXC?7ut{}ce`GXv~K(?)tW;?;oddO$-R zHRTh6lx%Hx{|em-$P9tb437NRG2P?8xGn6t^MTNN$w$M$Tp=aZb0g zo)!@d$YWRJ3XAEij1rABJQ+YLH>o&R89m)vA0#{F-8JL{=xB-vaqw|zCmu`>o=$TM z(jG?x?7yqpbDH_F(X192@siPWoP_M}-KCwdtzM1UiKDaFVHdL$x_Spfr<6YO&wms4 z$qWr#@$Xc`29qhxW`nA>+Ov@QNk@Ah^Wu)k6f*%gx>y@Vf1IWh2ay=51pH@6z^DG5A~%$SX#7v zc351URYtCCl9F9nR!^iWKcjnDfJ4z-P1j{jP%v($&_Q4ZP%d?C0|3F|f)fSG6%HD5 z%mf33xJ(cySfeMv)LB?J{(h)m{wdv>#J|)mS9N-S`H@ij-?xO?&Zh-Jmx`&Zl+e>v z38N4Gmry$8Qc>b)&GcbPbP&WW`>jP(Ar7^&(8G(|RA-9L(vfcDSWm`d2x%P9w@Rl> zke)rba;@U*BL&0bWTAY%ZIQY{YCb1nWb~^6>t<$pOxzpmC4`lwsS z$r2;?^ZlDb<;-hC`JrzVb{`!&7fihPNT{y+-DpBk6e`josrKUbPZ3+3Tm zI)QT!rW(0m>peEqj@=rno30MElizIXjJN5s7!u4DlIZ!Gaj}J*OkThNjA~Z@1mewp&8w(SHoRrSVYF$+g_8u9o^@LA6nv+!boi|Bo>K z^bf+&xz~sBi$AH+u5*a;Fh~WZGYFvLO>Xs3?b<9bey^6kXVbkQVjcs4W)P+TkaN!> zLX*g0i!j4lai(e1b`~UZu?Faml3TXGPKsO5*wKtd$+{jdmb#D8U3`zOWwh(@jx#4!(nzgmm1a%sSl^RBkeLEqYc*D&9ni?;Yr@#E=hz7D7~L7V z_BS!Yq(;F1CE#FaKO4S>~tA^FVi69afwo^DoH94ur0KPs;4*fRtr3 z@&~uPKkPm4&n2J~9W@$Cr|X+SBRj&f-`r#R=W(MQ0#(vSd*oG3RwfIH+cfa@=NA?L z03r8>TdngO0Q$)H_sIaHE>9BYR*{D^1!9(D`dS@61K`&atI|P@+9$s+i2dD2J{NX@Xp#hpNo;8~jX9P2tSM0Z7BylAJ3XC3F3ZnWDTqVs+h))U?o+ zs7v{V(}CZFp8Nk}=pFvG-Hzt`8r`F7&JANLPtO#n`UH^G>Gf)%?fK=MVYIR$R8PHH z@(DoO_aiT+2U(~wg3>B9n{G_v$roWs>utC|hX~WYI%{DDIC0jYWHF_3y0noSl^Q=) zn+s|kC52(_Q_+Gu|)N z>26-57~rb?Cx$TeyjFQ0E6S-JwxZ!@|0xVTb$1v${oSFq?qVI{RF`c#GdWzrSy)hd znn%2q?6I|3f3^nznnftvNhqFa-u10vT@cJ3Zm{Dhl5Gpwx9j21`NBV0C1iJ0^v4o< zCQ#}qD!(L?aqz4^4#R6Mlt7zahn~>Y#m!-~|I{$L z`Hw<%!xfT2D)0lEDHo|xa;s2Two@upKd(d^0g%7|V4Y~vtcjS=*iTL~iYi?_dgvXW zG%;muBqm*Cua1HaZuwW?)zkk}R~E9}URP}-46VH^^qqKr=zH-#U6!SbHP=Y`YN34Z z#Evlb$QQ%lv-gCNH(Vd;D>s^1LhsaFR6eBaU`C#qprkJpnTKl=020WAlwuPTG_72i z7qjuLIif;QzGjIjMeBv}>yWncl(1iBXYlynlZgTh@tD%63+8gzbM_4y*&U&8$9)#s z_khUGoIO(1JyO@uFT>zJ{rhm>!oLi)!cF5zNE!MF2$_y%2|_EqP5~f_HkVHcjCqiJHad`hIya38vOW98KL`g; z`;0jgk*GpVcoAS|*H>A*_e6Yxu!hsX75MURC{$1Nb z|BFA>8R2P@s4*k7ozyOAU~G37dH#Qek<+e?GmSc10KjS7cR|y2ZMO6R0KP|Uh17Hv z`wZY)!!~+Ya7_`@l@NUz06=eC`<>CQ4YDBEcCq@X8`DVTG;ROAftZdhIZY{Kkt^xX zPHUkn>_7ghaPWAo4SOF6tN!2jLdW3Cwu3SzeRSx-O5gq`^amQ*VJuO8JR87CTMmG} zGs@_nDiT? zg{ClZ(YWk*UHAQF&rKNd@O2htA6R)|7(3^ruy*@jX@>2S0%hWG3M-R?nmBqcfTB&= ztwLp)39?R7a^9{b0CSlECN#>+WlKOvq9!qR)|AtnL0T1kq2(Y>-#835F%Glj|Ipe3`w z8gLo1{JGA6D176yB>;`=S;VZP(gXmQUK8b-veLS+(K%9ShUnA*kP(1f!N!$UWPw-e zG=)<1a(xTD_N#vk!_Vl@wdVXVx#o95t$(eyr14t1Yv;qEvi}*`9Vt9_`pd~4Jt33e zzT0x8$M%ypkZU^G^ZE`y(k1|;Y=qMEv@f~3Zl;k#H$l>KYXDg2>iG=tj;kW@^ik-e z-iChG2+uhM0QdZS-KAT1LKCn2NKeb|4U=V^koAXntS3En{Vq_i!0`WjBbQxJDp(qK3F#bsafCZH53#YG%Gw7J zMLkX^;CKkH({D*zSf2altg`h}H!PY1TCm6aPYOFXyjQzR^}}WWb;(=RsG7Lb6bgV6 zevZ4KX5AJ5pigslC{zzL`0ivBe)^i~d=XZooY7ZiYneIHcGbXWwJQhDY4D`VvD_R4 z715bt_m+PfR_^$pp?BXCp{(m^?7EEz0;>j!44u}5gU7uw>^b3WVM4RQo--JWm@>YC z;vqse6NL$Ck824)GfFcxWix=$005>qdOEX10h9gf!rm=^5=WA=tNd`!MwtTb`Kb$+ zC^#dCW*ITyGfP7q?phm0HvXH?J^o7QJ@~XP;C>S-W3TENw4V1$&T8lKFuH7g7#cWT zyP@MWXk_ZRp0+Caq&^Rgn9;Jh1`e}gt}}pIQr8lIl;N=B2yM3e&;YOoaI)QZ%;naZ zv<))@b|(WBWu&=TA_pbO%xHR|Y-L8vtHS8Yi$Yj+kxYwboATp7HUO$qe|8#gQE3K( zd{##uQlgM29@ePo%x5aME5&rSkul@3z~h8jJS!K= zH)s(Lr7e=tJ?bQ7ZA}Yk*7;3&A{HO919pC!OF)m-TA;Dq7|zW%6hqQC*7X zNsl~h)%fGxs@ngQPFW+5|rPWBE% zNb+1s#uw=gz`cy~H>LBk(2G3z=ytk=8IQ;FJa&3o@7moP(O?>e>eYqr&cjn#F2P zr=n(gIZGZ9QxdnRrxkkCBdM~e-dJGD7}I-uOeWMu@r0?oi)2&&e9Qu{?$Q@%J7+LKu8_2Wg3>*sSusjClQKeK z7ew)#&m*nMdONcZYx@15WBa&JZ;zWd04RVTx%lWGo*k|}Q%|GXa5!mC*ILw)PRG|(0Ryt>!*=yxI85H`%-{3~lK z0PPfP{#`pVYG?_-Z_7x2JwP)3l;0Kkb$Gr%>m@Zk~w3$NoDTPOhF(_?7{%&4<@Wx9^NlBI2^ zYvMHu3p2oFSj-tP-L=PbGQjT-HQ;gYvJ=j>&a~`e#|r>>r#)P3VZ1#Q%x`QmU3tZ< zJASQ}H`nQHbw=lxXjiOQVZUN)ubgtmX+r7*9O`T~1=AF1JGoi61pvIYW+tb%J46{@ z{pwf4jvYI4h0_L#=Cx37dCObE8{Y5+dkF%+x%rcy{3PfF2=<~JUcSsP(elcWYp%H_ zTzl=cCf>sjKOFSV7NetN`a(N+z|yN|!)2FUX7y7C^w-iA0Ps<EL*lL{P@Q|wh?>pz4r!QjDzAo@rh4Z9J8}?=T3Wz zoxhHp-{oAc7rZcI-uJ%u*;6|50F`O4_IGk(ziJl!L`zBVHX4g z2rZU(foPAB4-hC%?^+2fSFSWAGIEE8hRpUeOHewXp)}%{s!cqjRhoLdPSy%Q@V6ZC zw!8Pf_r1~|L_q)m1NuosK~&+*Z+^4Q4Dx>X!ynp$zF7VBc2cYh0FXfk7Sp>hw26S2 z16MjU6bLYke3Z&*pm!?e2 z%-Lt39p3uZx0;ff0eWF__}=%vXQQ9|AN}Y@wy3gpY}~l9B?!&^!SwhRm%eyD;X=Ds zZ4>~2!I58RVW>ZCi;>MsZdhn}DdyI#Tf>DHUTAh4xtJZ;ag_bgLl2qqnKg{!TW+}} zeC9KsvGssD-Ff{f4O2uJ9BT@Ic)z{eLWM3*T7LlmGFmaE1=<;R#h{eqjyo>gaKjB| ziqZoU3oVMq0Rr($FTFIJb=FzoTi^PYZ8>-E-W?u!GQeCIpgv6;gQ zm0kX{tjAG4b#R!Ye$slUmjTh-o|kEN*h;qr0BDd-;1|QC?aZV+6o3Ey_uF<;?`$_4 zjv0CEvBzvi&@s*t%ocZyaDZYlN5QNu)Uj>bHZwi&UvkMMmY2%ma9rLAfVeaRTs7?v4><#9(rs(|n_sH&P-{RnDR-XOp3)o_gy4s#5mH=sf>@ zF4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 IM6N<$f>I5)?EnA( literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029827_generic.png b/app/assets/images/file_types/1358029827_generic.png new file mode 100644 index 0000000000000000000000000000000000000000..b91b1bec57d0c0f68b9fefb9191bbb552cac949d GIT binary patch literal 10807 zcmV-7D#+D|P)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 zⅅ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 Hu0mjfduAmC literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029834_aac.png b/app/assets/images/file_types/1358029834_aac.png new file mode 100644 index 0000000000000000000000000000000000000000..4d321448c53956b7600c796cc5ac7ec5bf287620 GIT binary patch literal 18592 zcmV)NK)1h%P)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029839_wmv.png b/app/assets/images/file_types/1358029839_wmv.png new file mode 100644 index 0000000000000000000000000000000000000000..27d2d25ab703fd4871763f7cf002c63c93c0d6c8 GIT binary patch literal 14912 zcmV-GI={t4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 z 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 Hu0mjfTM3f@ literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029858_rtf.png b/app/assets/images/file_types/1358029858_rtf.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe2fe35e2ffe4d223f8f3cf571533e146926a6d GIT binary patch literal 19388 zcmV)oK%BpcP)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 Hu0mjfL0G&i literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029860_rtf.png b/app/assets/images/file_types/1358029860_rtf.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe2fe35e2ffe4d223f8f3cf571533e146926a6d GIT binary patch literal 19388 zcmV)oK%BpcP)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 Hu0mjfL0G&i literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029868_js.png b/app/assets/images/file_types/1358029868_js.png new file mode 100644 index 0000000000000000000000000000000000000000..6fed77c70ce6f58624e6a66735aba04612ff5022 GIT binary patch literal 14893 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029872_gif.png b/app/assets/images/file_types/1358029872_gif.png new file mode 100644 index 0000000000000000000000000000000000000000..c3940d28fa2b7b2b7dead1adb6bce040b4b8fde9 GIT binary patch literal 19425 zcmV)PK()V#P)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 szV=s5Q1`PuFx~Z+j(Hq)$ literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029874_aiff.png b/app/assets/images/file_types/1358029874_aiff.png new file mode 100644 index 0000000000000000000000000000000000000000..721a436cc2495cd2375b658d70e8f482be4c1548 GIT binary patch literal 18453 zcmV)tK$pLXP)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 IM6N<$f=)<(cmMzZ literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029878_gzip.png b/app/assets/images/file_types/1358029878_gzip.png new file mode 100644 index 0000000000000000000000000000000000000000..af4ece5d3da8967603e99b8a74eec5c4e89f0103 GIT binary patch literal 12139 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029885_mp.png b/app/assets/images/file_types/1358029885_mp.png new file mode 100644 index 0000000000000000000000000000000000000000..122aa42e2337855c30cb352d707d0088cad9b0ad GIT binary patch literal 19107 zcmV)xK$E|TP)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB zKm$6O9}om#Av{C{(L<~d4qy-s3=8zra0(n6JPy`eQ zr9fFwAyf+0Ky^?P)DHDR!_Z@B3YvpHKpW650)Zew5D?4=9)u`D4xx(BM_3>n5nhO3 zL<}MYk&7rn)F7@QS`j^nQN%OE8^j7?3vqxXM$#bJkwQp0q&m_FX@~Sg1|#E;8OSrp zYUFif2l77hDe^V)Bk~&xg`z~UqJ&WjC~cG_$`uuaibG|g&Y>=&T2S{;Pf%}AYp6Xm z37QejkCsF0psmrK=y3EYbP>81eGA=>oiib{@Nh!{L~4VmNi2HO>#0fGfmZ#&zPx zaf`SeB0LcXkt~q`kqc1-Q5I1(Q7h3H(HzlNVmvV?u>!FPu_tjHaUtSV{rqREQL8p%e<-jO57S;-a2t;s{lPm^CGA0~fG0a370C{fr_ zL{bz{G*gUItWpwF@>6P4dQhfN)=>6RzM3R&JG6|nM`>MXQ)sWyj?%8t zQPIiJ+0n(*U7#DJTcIbXm!`L)kEgGtAEy7rK+Pb};KXo>p`PI}!&gQYMh!+k#(c&$ z#@9?3CJ`n}rZ}crrZJ{XW+rA0W`E{0%y*dIv5>LIvAD2gvD{*L#fo7SXSHWN#oE9+ z#fD@PVY6jRVQXM}$&O+dXLn#vXTQb%nuC}_j>DZJkE5I811AlqI%hEFdCpPJZ(KZF z7F%DLl7$7I>+6)pJ(ZN<`lLT&Jyks-VzZI zaS|yK85a2|DkbVGS}FQWj6_ULEK00F?5#MHxVd1Myw>H?_0?_E-PTjmOVS(CC)2mmFV|l%5HtueXg36gx`z3N zQ%3AYK1R((yT?AsdJmf3!=lebH=o3!V)54Z1kpmuO~xao*= zv~a9-+&ZRt?Ci03PI69}PSei9&I!(sT{vCBU4~p4T>V{p+^F0<-8$Uy?k?^v9ykw2 zk7iG_r@d#R7s|`dtI-?fZSURWgYj|nx#>&f>+E~mkJQh@ulqRl@#Dw){h9p3{Ko>g z0^$ND14RSV1LuMigNlMa1?vRY1pf%J4rvM{3H1u?3u6w84x0!U3(pQ;j?jpxj@XN| zi@Y609Tglk9xW7|8ND2%6;m6Fh;@nWIl+1&{={tDk+|}>AMpsV=GgX?$tfX`j(IwwSh!cHj2-4*QO$od%r)UCLc;-QwN#cew9V-etI3)I-*j*^BB;?A`5) z?Ay2(aPLFESO3C*^T6zVyZg@vEe4+q84o=e)*l`j(HR*W)fycb(-^z=K>b1AL$!x} z;AUI z_WakNulqYW-ZEvTL{d{zvp4Zm;yGz|YQogZEs{&Io8eSyDyfxmr$zkPwfeSyDyfxmr$|G#~KVAoLBUt9nQe07&fs zpnePh3G#n?{Kiuh_yU! z?V+xmxu#60e%8kAfb1!!G#MgN81m47>C(V-FlS5OIPUWVSrCmyI%IL`K z&l<~~$eGDqIQ>3vEq|-vd*S{W#92%+NeTHms!~E3T{%Mq<9Vh^mMXStt{R~WGPSA~ z4KLYVcDoW#7j-qMKKt64>y5OV@+$r8_@+ z2)#mms`sq=eFx(1=MB~j-5MSkc|Q7XZ08|%oc@vEW927SPlG3NpIx6Eeg1w5{gP{1 zb>`S??5mR3EpML9?JTe^>b;Fvs(trl`QU@disQ%Z)viw~pBdK;HsZfDZ7y!pebwJd z{MP#Y(+}=Fho6P}!v_by_MaBW01sGE+J?2E8d&Q|MUo@yP-d{=@*LBQJ&!v}R76}$ zau5HOjGEk(B9HO~H5Vb2W`K@?-kYI=3CnE6a+-C3ZIgq*Da0ktEy%;fi{f44>*uc& zh!wOJ5*Nk^&xv%17K$Ag*OXwF_%1mibwfH$##vTgj$H1oe3wFjqL-555waumM_ZIL zRGd_0)yUOW)kihzG}E;_wKa4&bbji-)N9qxH}EsmGGaCQX8g?Lrs)~8SaWv^6H5gv z9%~BgA2v(2kL=p*YaB8iLyp-yX*i3!aJbUD5!`7!=slUe*uA-YczyZ(gpLdQiv)-U zN(9LSD~A|{x`xGs7e(BN9EzHc-i@U`Arz+(Z=Vp7n0m4#=}K~IO5dpmsV~yz(^oRS zWd6uT=8)u4oo38q&*v);E|e^iJEL?~rC6;*Cp*~XStJY&*!FyUP?^c z&LqxWe)aJ6&K&o=^+N9A@Dl2s`f}p?t`9pOC07GJU0qvV7uX2>(!WK&9rShJ8~yj= zyWM-FKb`g){(JvvVC~Tvl!Nz>43r72B3uxQ$Ve0eY7Cu@vBb*YScu4oX-Syzilh!? zr^s(pe4&!04kNVEe5cc*PiGiq!ZWL|gs_&f-DV%)x&*_r-(O-&yHV7fI;B9 z;0vKv;X;u>Q3El4afJA5iFU~XspHaGGAuHiFypC_k5VvHn>CZ85UYeu_8Cs)@?@2EaO|D!>lVX=|FvAPMP$)@Qevqtj*i*QR@D>se$sIANXqc3!PNU{_tJYZ zx-xHP-ORq8b0xR>ba~#{{Jet9!jz(fGf`(liv3F5&N-A?mKm07RvbAmRVh@(Rn1z% zbb+~+{UXmL!OLP-r0V3ZD%C4rQ@^ftL$|@8(X7d#+4pArt+Oo+t;4tH+jcvsJB7M5 zx*hI>-p%T{(A(Mf?B3b{(S5GLqeHgCAtTwNm&SS?Oh4RyMEO|qiQUt*iS}ooo^!mg zp2~jNH@!0}{L1}x#haOVo`smj7fXuos@|hM_^v!!mHTw@GuwL07vC+_uR`D0cj@;i z_Hl>%|65N#tO*!d04}ZoU?Ty5eiZ;!UjX1qhii`!0H&k>SSkQ$jR2roegJjO|5HCG zVf9)CSOI^K0!l#>7=|_IZx96}0I5TcP!y~z-+)G;WdsVrg-}PhAx>2Df&K7rZkOKOuOtExnOw{1u;b`#cxV)j*J|=t$b0XST##6Nj+X8UNcE6L%T?)TDM8B zUw_(Q(}>(y)Wp;@+^oWU&|=ey%i78&8~$DXbWn7RJ$Ba_h|74(KFX;-bdOu z)$h4Ke?VN|M6hT`cIZmDQABeTLv(V?=M#=`BMDN8WheKO-BJcqMbge@K$(GAZ*t6Y zhx1hPy9yPGI?pN>51unCeN!HC9$i^cEn72D8+wUwxueddp6FW34W~v-)3uw%w>DbO zv?;bPcAoB5y7RH;e4lwgZlG`Q#IV%Jhp~!>2IJo!*FCj)Ml{*|BKRfm^sCw8*QRr% z^J9ydOS;S0_d_e0t43>7pQkn|H$Aq6zHWW%+0EH=*cblw|3L)=VAp~T2n4C10^EX~ z2yek2L<5OIdXPJm0F^hZm>@zBMTj=UED{Mj1FVrL$eYL|6cfrCRg9WO zbD=}f{TO;o5M~t1kIlrc;>>YfL_BcyK@vw1e_oOoY{HU*El*kGr1hO zC3#4A-tqRsEG0(3RFFsTo6tkyT9G(WTQOO2I`LhJImr>J7U^o49N9>@WAbVWJc`7M z>q=9w3friBUL{X8SuI*UM8jY6xK^Ncgw9FbJiQD0Z3d4FSB!Bc{H6wG!RDnF1C|@s zoHkar*>(dCz)|H`lGBh2h3hf5>+T1hmR{F=u)ZFCeg4b=;en&U93j!6Ps2qcPDg%@ zwv6dI!4p@I01`t^&LtbCbfj{mWu|}0bj%vbk;|>iW6Ccm#1$odKx2wIfZ!z`!vpBcX7_R zK_UsFN@8;26yonBVI&*)5d1c2JQBZhK6<5J?LQ&Csf(9tx}veWj` ziPX)~tJUu{STMpFOPV;Do;K?<-?5ai3b4Lmvu-DApWrZZjMmA^x!sl2&C|Wtlg;a- z_gi0mzZQRvfPx@&aBRqWm`C_zq*hc*3{UL2IP&<6MAXTYWOPbaDrH)E25)9#wscO* zX|cSk1)PPIXPD2PFJV7-sZ6xI{k(SN^J?#!AGP_HcrJItce{L{u~rjs9E#J|K$XUw8r zCBXb4WPWwg_wDjK&*jArE-O>3I-f4D?W`+q1b!*m?Am&{y}d*EP58U+uIG>Bz3QJm z`)>~S|F;M0uzmovuaPV4$NIk=0sawxa#F#W@qzxvhh8@v{CV%;s%h{C2mAl>!2ODQ z23lGCi3hqFoBY9Eq1xtuaB#T#zhP6$Kk--}4cG(rJHKa`)<1dtT=il9+3$F0gt^rp z92RMz^#{lLSlax-9-f;2#JzmA_5Q?t!}b2T*YO~Of7Sqefe~;8?!Ucj@N9sg0HEUZ zA?jg(+j&aMW#`#go&^#a{Rh1n&=#TCGR0d(^b32;bRa{vGf6951U69E94oEQKAAOJ~3K~#7F?R^J)T-BNHr_qeMWLc6W%T*F? z*ajO@j13r*&_ktX^hDv;Y5h?>D+Lnh~-rQ}Xk%kIucPpZ{0Rcg{WcPKqRVDan&Q^eK@K zeGlCZ8psTN@C@lw;r|gF3DE~1f;XaYe0Gh?57znJ<_W$${`lip&z(E>nvRZ+lt?7P zj(%iZUmtOfb%+c1_V%`6Jk#zSKviGnE{0Bw| zBLG!SW_x?PzpJZD=s!v>837D@3)9llMrUMXT$rDqfBvdftA2IUO*j3=rcIj~-LZZk zL@>S2Fc1!h{V6Fa@=^5!l6|L(CkpRFp^!iw2_)QCP*AY+!3Q6F;N+7}E=6{ZpZH$`Yui7|%GSeVCj9AKxc(zY)W(!DxaxL2`3*FZ$_Ee|rC{S+mBW z9JN5q_~Yw368A|_OifKCx71WtR{jkg@AWqB^ZC*zOqg(HW@csy2lGKXf=g$i_c}f< zo)G)??UVBI^7DWG^Pm6XmRoN5m(80u@7K!S$2lP(0bFhhKl{Uv}x1M|KSgRc;DB) z_O*Y(oKWKycwgp(0V2mv(?ef|YHDg|vNgdUjPp%(b#;}<(r5WUOd%vx$H35g%|3eL zc+WYZv9VF6Oqp`Qcfb4HU(B98`+c1g1`xodJ_nEj9myGuI)-xY_2Im{JeK{?uN4Tg zc_W71TUcLTkD&~V6e0i@8uy@XvByIKN%4MfdCh0y0#$^uv%7?L?XaC zGD#p-BTj@E0vN||yx;`?^y$;5;W7h0EzV~mZ7P=bTHZU*5AxdjZ(%&(jHmbNe_nG@ ziA_5UQB(~X5!^Z9BADDqj0g$W0qh7G_g#45g?GID_S;LK7rC8llWqh93t%ZfA9*Z} zMLracpc6O(O?_?*!F$GAni0c7&I7?Rk; z--1p2JfgT2;jn|FiUPOae*1=-Z@&3{j!ol4>UXC1w8(mzZ=E3+JKk(eQb3 ze)Neao;VMAw7hllqZ%6c$;?lVi+Q+4pe01`y`FKdI=U3kn2iX;CI(;J4{!~nmN1(Z3KUmz)7mo=@XME=TTd*#Ah`I@y1&m zIsD+kgR*`5cHNTTq738HHkn573Az!0CMqmJjpL30pDA!dkCFf)M85dNFW$0y_wEL_ zt)!Y{Faq!-M0R0e;mKwlurhX-jw{0>wH3h@Qec3wtv;aH8^lU97?$qdFs{P@1`HCl zSfF%~H_h*pjC8+bV1JO;so*{KyDto)Xpj5<80Z!k6^n-#*7)mts5m8b_p(nI*NSuv!A^MPum7Pca)R>q&Q9utb=$A)5wk3 z%TEEq$R7&#fn!6`1LE``3;}RI(9g@skTIh(r63nz1)PmJ*UXQ0*9c&$mqajdZBK}4 zN=OtoLXi3REE!uhvTfTot&io3ii)^#ryft#E`R8uhr$Wis_8z&9QU%}K7L<2unx&?p6`UKEQMmvy zKS%QOvLq)f4I5>CfSU>;A-lT_p(JntMMCs~0PUSUaYLl8Y9BNJGLJ3Fm5Oos zAcmjKME8d{PI{YQNdT{Byw@2a*dDLV8DW~5n)JL8m{!Wl$^=Y$)gS)whmIvnmV6a? zxs$*`{RMF|fB=Y7hepBxm*Ud_AAk5K6=@C7k(7p*&N!uq_SfO~R5{SxEt_}MOLbkd za_fYWd>K1tl#BuwXQT(f`F?;zwF2eFYM zsa5vwZ;&lJYEWms%$`yt#iPa|i}$zW*1$M74g54bM>Wyf6_&MI z_DN+`EjU|b;@Er{S3DY=kG+=+?!)*Md_NMIpG2Uv;6K1np+VygFaZD(gcPJ=drI># z1sSQX^0Kp}w*H`0RX0fGyR|ZPaUnow0|3J5^a zf>Q~>EFQ}2laiu5383CR)s3=Y%O0uRT`vpgOq405nXWX1)zUE_DcRKPB!HY|}DJ>o)xmhsrplYaY0vJ3wH-O30xZjy4Vmk+R(FnD3aLGI@XT;(B5CH+glnzYf zIhpA)u4J?lX3zd6dG3{WWbTadvT$}0i0%OAB>*LW02=5PdI4t#y!S=`mZLW!AY18a zr=9j?5P*|1DW+Te?;8QAzuUXR^7~h|O69I5Qf);7 zP(K)WS~yjLXeTX59iOVipt|em>Q&2W>(2es(b*-RTr@?pGtyO+aXv6ECU|rPzSCeo zGkD{fm-j4dA+H$^iON6jxZ_R&0jP#_ejPvn)3eZj{&UYg_pFy+ez~%?wl>5g>U6Y! zVgCmf!(k#$wWmm$nBWgNzqKUTdRFjHFEx|9j3_SDJmUJA;m z&YdM$nHjpaFc7^2h&JY47+yvM3t7hNSr@IVQKLppL{Z|dlkoroSOX}KvS7i2ufOoZ z3)i617)uC^rh*_7DPDs)a&J$tPab{#E!noS8s=f9_yH>QbQZ*2tr}W3h;zUP$S9+L zD^VP&U>j{6-BMH60N*5y2V14R18?yF=}drCFe*n%OA2LtX%Q?ahf$z;AS778xsnxd z)mnga4Cfa}NG7B(Gb12fP)BKChN?Za^3+Qax%R@j0E-rq!^H+FLj&B#ZTC#0v%FsL z8OM8CMo?|ka{+k19yM?szzVHW=qx{cg;mZ1bOeiW@3j@de9yeRQPyp)!nOt*cT7p0 zXaRy_*Sp+q?Sga3{aH{2o!ve1+PW>WV%0j?v}K1>*ET|x;T5VLXT{6DP)%iG`+>H9 zNm0Jcm|7-_PMs?YPM#zAAPnb#V2FgI6gYE>T2<%^rGj&U_5*$8Lhqf*J@P_chFo#Z z97qsVhhyc$W5BlK9dTnmdID}C^YNNi74lH^&{JuqB$WVK0N99o^_5p%c?@c%3l*>c zD~P~W&idHLK6V|pUQbW96+te0Gh4`52S&!9UGoRQC*La9VXZa)RBkM&@OrR zsXs24-#z^o+4xSS)F14U)*ip~q~wV&dyHh{7Dz@;mX4sit5doUHcEK^0m;Ncg_UbJ z%hS*OMUE+-AeS!rxLkh8IZ!ECx>cd-&Se6XKD5mV+qq_c&^O$_w)!2JJa)94ancl& zbJk4+FqyM7BLMR;F5XiDfSm$wbtNPKK?1PBd+xdC$M@cQ?@P!Wzu^=3%2&S9_|0#A za{(GnwGLRN9B6Grn>_KtDxHkd(rFsHoUVX7h_k~^Z=8E_{m!aAa{oh*$%>V0q`s|B z+9TKvA9cKxpK!7qfBbPWrEDzL4cU^TYec9foSr<;+$lSD*UF}iZ%fstl~Px~Lu#6~ z%BD?QFcsVzmZx7_Ez`=!O6iz9-R9uf zY@A-8ZOoRIC}bQxC4dV(uS-Y(X2u*40mXO%f?E+Wa{%spp_ZUi*|Z9#|{gd*7A2f3Zv&n>*yHOV8CYvT*_w zgmt10z(+68XPTia-`p&VPMIku%qrJ~9McV4H}imi=^V4=vyd5Wqt9C?h5$@pVRI~S zsICu-o)=zzQ|;=U96m_%(9f-!D^zYFhcI|rA}=j}Rqp%6gHqj|F5%)+MG9t1PQ_v= zo=}QSF@Wz_qp+X=Jcz(*lmG}x0PI9N9%&u0EqYLt3}&yYZ#1AZsC9aD&44p!9@Br$+fs@6pnf(Z&3(sRBfF(?s15W$~=g9>98;37l1 z{h6|(dW}5u?4P8dphzZ;FNT$cr(U#jYyeJg*zt}hJpLVtX55_=K`{mcxDzL_I$wI1duTPY(zjEhlfCN|u7H(#N z&p(;R9L>qb=2lq)yPek$x$;fzn3i7Q|~Smdl39eG)1>9pHoW0lZ}3WJhX- zsuqHu4o=Q+xgP@NOulH;tAfb!%!>uL&IOzgcu(~tT=!&*!38={aoveU@r0!A@-VM;H14~-Dat4XqGXB`Pz3IbFz?Qr1Rp#dm|37%_SrND}cEaxa_ja zF2R0K4Zsf3gregCRa^(~?!YC;qgxS-r?_sZd{=5}4@g>ub9|31$VGHS7bRGlEBFvo z463=QQQla&O4>7~h>STNZ$<$8^g`&FQAqczgix&z+ztSW1+2~i6j_ds^8trxc?dcl zhG|}cPw8Mj))hgWDh`YQ5vun#$hx(wrKGr6`{G?}IeqPC9`ab-fd;Hcw#)fvor?K| zR2|&K18=z##U~^H3vllOUl+OM*kg~q4g`s56_oUW2%}@RBGA)yZ&#v&IO2_ojz#)h z0x%@k)05-4%ei^OI@!~NYR8=b&L0Qx3jjVQ?Le05N&-xTZIZ>lnP7K1DglWIK;W^f zfXUq<4h1mX46PH?9(W%B=A57e0D-X8 zgnHdM0U=c#xt8f#2R?t%8{xSfWF!IlP{HWw(%7~`wr|}mMJ3~q#>w32D?_L6{gTVg zgRPaj@VvPbTh`7QpyAMgSP^5diy;6L3{aY&_;$jxPdxF&!`K1swn9jcU?VQ;$}6v2 zI&(;7(LkpiP$>mmj4dpW2oHu+E$wa+d3|S!=!-+>B=fQi2|=&mMzFCK zp;UqZX&^vWsf2T<$-cVReh?*$cWKW>rBMGq=*dQD#o;7hYCu6(;5iU@ zylQ}l=8nxxQLn45mX)!at`n)2bz=a5ha4FiZal4-eftr|1GK8UnP@A(dy!( zNA?#XRVVLx?G(nN(>B>(b3mq4K!pvH05J%%=Ju=q6fQOydE`&!5&OIoOu?@v8xibJPzA!1Bn1sUIO8 zF+viwO_-fU%h*Q+?6+sIIBQ92BK|3?Re3Nk{-%L2xNh zL*ysDiEDs+KzubR+MDKsEfNj|F$jn2`#}fyV_;zb@53^-x3@=Hu$Lc6uYm5y#Ou!z zpR4x?wgQjPB!TzYX%V?{Rx@mJoRI6~3?v${_6WXQi_#Sz9V}bYqKAuWO=K~TW42cc(K?=}zBz?5> zVym$e5|EJ%(>IL%x&8GLBjPeuCmvglF#aR66~V3M5V>DD#R0w_bbyaEZu9yu_+St( z07i%~!3X#I0*=LkDCK^HMg)e$xG2371cn`u%EMPdAIe}Br z0aFc45)iF`F`gi_;z<~EnQ}iR#s^Pjz)r9$oR3HVZm#i&;;igxt67UuWJistDQ9!%U$8{E(f z@klG%L<2M;R0>=oP~VdfHjml7hAv0PJ6!aMf!D+qkb;JR05DRIzLZE*&zY|a>3_wR=sA3dV{cnc<45zqZKvr7@?zjyn0_3V(1wk zyy(Lhh{^77g-q^QhdLaI(vCp)a{{Ic(n*+7Ks5v@=qE&2#)Q_(Y|I@SA}3IY9O8iy z(!wp0gOk^&0us;z@ZGt9gh0AU0GSFmQZPE-8Lv^Foj6RFkN~XHLDWgo%Yf6MUt4HsQX z0EmACZ-!*y6`arDqo>zW3aBH;fdDx;-`U#U39g0;BIwl97_AahOXCl0dH*OJKTmIw z9bHWTuTa$xL8jj4!xw^XUL^x@Bv4oScu*Vav1zT!A)z1v%nG6uP<=X+F;$WC)Qub* zMn6ZlzbezRdt|jNg6&x+ia~c}W0OL!1wAot2e|hdARv;NfjU zBqLcu0#L_d0`6V5Y}sSj3tEN31GXY?+Bf_7I#60nwKgdCnsBG&zd1`uG@%{XK8L7F84E| z!Ur%>Q%iG$Oq^UU#SL4fzI}o8<&BDNyqOf36~rzn`1r$+Gf*G)aR@}u?$=Z$uydRT zNL=0eR{c%8-JL{TP<4_85sEwiEQO;BabhD!TI%-#bf_Sg>y`V>0&=B*^VV^*XX0Bz zxzQb9c4auuFt)M|;&vAsreMoi#~d5&+@T`Hr9Ul27S2Br+zL}ubtnfPRNcyflLH++ z+l%e!4(Y)6hE6Q)mPo_fI5mx0P#f0+lmZBlay?sM2VDW`ZwgG9IvNkk$1l+RCmzn~ z>FHA6i>>ZnT=({NVZw*Ub+ETveFz~Z+aTY7Y}+S|wR@14apZj0Ti=yvR6ikQrqdRj zqLSL*iIKUAkpQbQs<$m7L1=2mq=npe;yfHB!CX*XQ!DA117e+Hu~1t4{(#i(-y_G) zo-5N@*30&W8B&y6B>C8^BdCDz#ZJbBFId0%+Nl)cJx10SP%p&#h6Y#c^(+ZSqWR8Mk0(yY1nmA@0N}& zk;RJ^fW!G_BL=11#KFN+#A)imljF##dw1`WMbmIfx#?Be*AUX@xm2;xChEL+Ym^($ zL|$@xKdW?xOM}0)vu;Ar$UVYL9VkppVO9L8Yn=lV@Cd`)n z*-KQN1VIEFdicy_hX=h$HTj5`a1$CMIl= zge^y4C8a_Ac$pO98pNxabL5QEp__4>gCIMW2v4xDnzDK{aHkDz-UPdDGR^agol`QH?Drcp8?K0w6~9;bPoI9&;+%Eq-T<+u~( z%as+W^1_}T`Fr<#nK>y_CgH(V4t6bQ5z&#{>YZEttF&O%=*FmulhyX$|M~-}F4z{w zqPv+csLs9)0d`ip1f4seVVy6GVVrq^FI0T)pZ^I*Xwvk7jHlTVyNn@#nMh=8svo>^ zzXV^7UBZEQ9n+cD9?E;uc;xW(h4bZ-CFje3KmMd-xo_4GeDErmS0Tf#W4CiM@5BDU z`ZX(L%CU1G34OArrd2k*Ge`E9PLio5DN=%+>nzBkT1YMtylryM0L~J`hN-|Z>YIrN zH*4<^AE@FGfe+j{89RGAj#Tp6A%YXnYc~(VUOWN2@`}sl%rh1$_s0plxA{Z5HjJ%M z3;`^XAsgglI6V8^k3mEiVu&Y#Y4}h@Df7e=hxd&C%9n4J6|b*!&I#d25#!AR4gAM0 zB(^9S`Vg{X+cv$4M}!At&arc43O-Y}zHXeXt)C{@qf2CLfnSQS`GGGF=qj1k5}MJ? zH6BH2fhk*u?WLN=Zt-=O$tklwF7=!Lh$m!Jb&eG1I)Q{RPwrRm5`zSBiBdGCSiXAe zEwI?gXd^%Q8rBI3Kmfs+k>$&m-~H9Eesvjs?gLY!<46Fkf-~_kiho|bc=5j`vJ4nE z<(LZj`fXp9TmSuksTJfL<|O}ve&krJ$WloNABg}dz;c&oMGx$MR}Nxg9ye)#J$n@eS{Z;bTeNtQp5j^is%*Hv$0QVoP!rO4kTi}Mf4jIu6lKj+CC)rHcw z7e{4a5|aoj1rQa6&NYE|Rg@A1Vg$#{L!SKm>nkf{`qT<#j(A3M&^Y|R2?;=M1osEA z4e>m_ocj)%iAn&Q#7lerr=NcM`GpG?-h{1bf1=J&gW@iL)!yi6Zeh=)1Z(i6$jb3T13 ze3*mRlQOXiPY+8Tj+>USj_ z#~riqvPVwtC>RKMj*P_|z91{@;M``Y%C@$H(%#x4U3kFG%{l$11OZimUG>Mw0%jfL1%T^Nhzfwl5|_eCTTC}31cBkC$OT?=BR}2DbVps_M(@e# z>XBECCV)#qm?L)+WO6w3@tSqhVSgQKuvC z>A^_Ul%x(?MUy5@ko)hsOXi(02cnI=6%5P(b08vDx?m9-w=M;Zq(Kt%(_%`+!7u86 zJd{%@pd>&G>H~igD*Eh!07LgPj)ws>4edII1CSr(cnp$t`7rnNKWTHyM2WXP zZ{I0TJoOx3woWqA;YBATfHppa`V7SP3OOGfQ&BDt{ny>Hc<~vqDjXv4fjB``P?RVf zJnj)s&<3Pynt@1A9pD)1TbK&A1E|&ka8n61h{iWH19%>7UMF(I@wHtg0#uIE4-(Ol z5JEs^U|+Z;QCYc7QF*WNCQH}CaeoF=K@>@sE#pez7Wy-3+Q8hH#X*FL6UNB{_x@PE z{k^;7w@*Hc(Lr5+3(0||Y6yZu1P5qxE@4oq05B#UR3$1J(Qde_HESHnnwwHUK#@=X zah}1jxHFp)MjHQdrbBud)^-Zg9VtR?mZSLLKj$+_+DN;Y8cip%5pX7MeSGaa5zu@r znT zWbGbG=*5`jVhCUru`|$hso09R4W{MZszv%QY!H?cM@eWk@i~7m24iOmZ zOt8H$Ez|Lc?d-*;$&J@sEGt*9lmGX#UrH~=po>AQN4PGb&Sx36>o&n=kBCc10JcP6 z@j2ep=##Zfjy_aJ(3IOye?{3O`Tp(yE-Tk;l;1w{qO9M%L+1xS_Fe)Yf=<>@K}vuq z*l3Yz#I1)2^^?T`jeSxzg0d_|Yb-M}Ag9bImrE}=L*~yrR_C6n6%$o8-u3feV#AIP zUMMk69SXivkt0OzUq+3jOG*HCfQvDFOLIGb?o|-bG6xQ6NWc2pEjd!dOK!XviQ~sP z688xS;DQ}_{`u#BaK#l@Jc5R}6%oY%*BQV6{qL84;uD{^4FGDqfyz$VHA4a)A2N=f z666ib#uv)OPo5!ljjgf)Hwwu0z6W1Nsc*$ei*DW1vHaZ2;VPQ-;-|l(9pmHB zbbN&+KQ9~Kp3B!y4NNO5l@fdakSE|;@zP;Ch)IGfQC%WjecAaSN~gZe%?(D~A+_C8 zZd-upWER``WuJ|J9Pi<{qy!-Mzxd*ducGpI;bXQUaPMESV#TW$TyVixur=+ES4Ca| zc&`%y&$9HilIVHOub<4GI#yQb7-6{CfR%My=EqMe5fJwdh>g)wGy{Ji?=vy(;E&3 zczij#XXvfNxyN5;2+=ggAFfM|@Zr`RS3Z6~amfj94PYzl&17lbxJ3E9>4$qA$8U#Q zotA&!2r!)94hHC8X~SvjgDT@FvjnY^!(b7(LN_o2ECOUnnmn+;(U^n?B$NP7fS9;^ zIE0J0=n^|Tk}O1?6y`nZhL1oD0Srurn1EB4E?xS~GtWHpc--^ogUz`7CB3v`jydL1 z5^1E(vf&Tqqfyc@w%*1Nz#^$yXp`e`?reICj}L8O5+8r`e&`4!B>>Ggd?}?J59HUO zx*+a#zZV=I#&rOM;cv)f$5V9ZO&`rk1Y!u_1rt)x_xR(Fe;YfZk0D=-3c`Kh;fEjo z^flL9a|iO7YGQpy-FqP5#h6(WT0u1NuoV$n3x_lb%KfBoxU%j(su^=GG8Cw~uY zsAINzMkApMj64*E2d{ci6hr6=; zp)>-|w#ec8_wUy@f=*DG#xET1+OY<7sE6;Z&dgc0B7eNg2)< z;>R?U`}lTZ2*3)Mfu2Ob`N(+PA8i9~&tuEHe|tHaFoX-%PvGz^eFcI=2=>Q6{_!Z` z2`J<22hx~_+-w8Dr;`=Dva&My{O3QfgnR9^*Ho(XQm%u`@7^|ItRMnv9vqm8=fUHVnfAX)@~2opa7PdQGr-xRy_`n1}W8 zm+|lugZfz6b z2Z!o7a5@4sY0@MOsn4l~@RUu{)~s2hz~g7bRbMlb<;-g)H;(mOtqiKglJ^ z8y{yKAvgqzM5wN=7A`x^KKpD1jgurKP#|d94#A{jSu4+bwogKmfWQ6iZxvWF1zsZ8 zG)lvB&pjtEz4Vgc8Md5t)>-n-JMSowy!CnOWc-nEhOf8o7y>ZCGI0`YZf>pzFe}ix z=vD;MLlEh75M~iLsL(jfTj_gUvkf{9n%6jEq+GrSr>JT9@Qb}vKloaU&K1l<0x+aE zuxL%;sJ!4O74-)=Stoxa0Y4!qr=Nbh=H0YulRWz9qk^AfksEHfLF?h9O~TQ$4yvf( zjDzhRieum7T?_#@F!SJ|K6LyJSQAg6P`ptcfIht%1N#5S&-vkyoEJpu@EJ4kswsYn zl$H_RN6=q2B?I8YvHEj>2DtUj?%5~-q^G5XBlBv0o^;Yl3N)>pWy_Xn-DAg&m1m!Q zR@EA|xOCoO`KO+GO6JU&Blra85hnus9Z!T904?DpL zlR$IwBmoE{)ee6ASUJ)6Ji1Yn}q;~n9|Y=s_Rl15f%6YNksPp+exxMllhN4)^9wL`Z@Y50LfITlP?{6V-Vr<%gR$(f9@sz^H^U z1*_6K-g@h;CAg0HRs^^-04wNJ4CLssltZ9KJomF`3<1cMq!K;F9~@o?JNv>!ZBT76 z&yltq61DwNjU%q{(i}qo4$LHg*VL`=rC$??70VuV0}*&n31AVEfPux2#vCpJiI~+Z z0ew&>Akx5@`fwXQTHZmxl>nMSQB#Nn;POl(aMtIUl`B{7z-ARc(&QzMQ^V1}!$tsx zO9*>Vop>s@36*e%ftW{kGShIwcY^VQTY}FcNf!K30sw>&blg+pOUe9&+7@_xm`!>O zWZL=s-V_~IMU0PmT*-u^?ywLb$CC)$8zI)ZwzADOh6J3;P=-gr2M9;NkqGnzKSl+` mw`GKhk3V{UcnA#G4*ee+s*!Md6rS?{0000NAVQ~xYPH=Y!?(VX<26uOYyL)gaxH};@EbcGQzpv`6nx3AT z>gu^&ed^pZ=XQjmyyPb&LL>kH@JU)qO!=cX{AfN1a3A-S=%!@=0JqOlR8&z~RFquN z$==M;#uNbXfI8DQSH#|E=I1BChr~HgaR((hPiZ-&WC;g?P2!5kg#+=?lk>=xpo9yI zg|MNL$qT{}fCb@~guZ_F-Q~|0UH;Q59CHJGT-VA^THNBvqR}26c+_5jE~>4LMX)L_Nm*3DE%txzGMHiTHQJdJ8 zz*o=!2agMbG>c>Oj@REw_Gon#*1xy_C?}UbZW+KvPKfdR0U_TX*og8i-48RA_Zv$V1V5ETD zc`&L0xHIt7y_m~TG~1{?LI4C18U@HOYxF^urCsP(H)P zN6`w;lUGw{WAKM74X_Om4ImjKJA%JR%#yFfi%4-7@ysGvhTVw4QSQYNjIfPZ?Yo-5 zLj)jn5Do|>ga|35K&-AHSP6;NHi>Es2PZgE)HHu8pRrI|@m^6u(O%K|7e6~<2F7G; zis(sR)t{Vy4mWfz811;e$Q!XaLQDl*EK(>?{XgUTEQ~5yHq$KRs7p|sKRLs*#iaN9 z^nI>l*A%D(E~1|Ve;O(=jH+{8W<34oM%oe5zmw)*{LM9sV+t)5Oh2GE5Ah!jV?Gv|I$#}Q9gQQgBgK{4uKq6Gfb|y(Ok7M$ zOlVB^1gtOOUzVhvq|Kx_uRQp;-e@-o$-)(em$rGYupShO@Ri+^#g%1eg=SG^k&8Bp zn54KyE=_z)j!lL~3PvMG2uCGGH{&Tsv_^48t42jf6%q|7$*BEhp_FQsX_c0h#gws? z*j1ucDwQ!+ASzZWUWz4(i;8#3-TCXK#`!!V2SPZqY7z^=w+Y9*9MDa`CK6YWD}gKC zEy^uvKuDgP1N9dSMszp?S$0iAC_?BAK!#67CVL_~Z)0?$q@|vPibc&#%xv`^r9Y!H zD}M&(^zw*`bn|^K*7s`ZXkQB|b?A4*3jm4lT*y zQ)5uemV7JGE@3J8ZbohP$;|&R+k|`CR$W}(NL_2KN!_}!=U}7}j(L+g|KMsb&tRwt zmQjPLtdX^$_h^hUp1HfBf_cy2TSictXiR@LWo%*Q9yHCTQXX^WL(eItDSKT$U0hvh z-JiNOtyk-j>)q>A>p|;leCvEEd~|#*9=IN59t)nLp4Of;4{<)TJ~=*vKB7Kb53r9U z56+JlkQ!tMBu&I3WEX@=q9y&eP5Z zGE$~Mrsk`nn#y-|5=GI9qhF@KewObo{9Hhur(w6?u;Ccv(6@H7@UmL8thS1<4zX^s zKC`T_Dz%C|jyux)mvr2@crbgrU^~CDs4^=%OEgO}*D}krWWbEhj=*BU1rypH`WUJr zaVjAoF)7h8bUeg8lt^7ky-7VuEhyI{cP(d-;g|`V;hI)B@qJ=^A{F!nvkTg}XF5 zRJyM7lz5(=*15|&$*0TDP5quioQl=^ruSPfRF^>aRnL3<*E-(@&-&Fl<2eKAH#Esu zGlj;|F7raXvGJ*jKST$%7aRLQSB^JrN3#1Tr`~I^^V9t`&);sZ_J*Hd(_i{uhJmfX zT_82IIP@I!VIX!;WS{`-3Ct4AJ3<|*B@z|lEz%kC57a2sOawgSX;g!lnebmR%TbL{ zoh0HUIK&*J4A|KOUBrbrDnwD?t`TS4eO{m625i>jTOqAvSEyHdh;korXo!%+qQ^p$ zZ_nyX9Y{{fXw0fi^W2YU~*!{wU6#3zYp3!{>zzD!kg{jMK?`b!;woR$l+hr+n!e%*HfG4&@xi^Z-=0b zjl*1eN+K(pev!$J!H8*;afSQP&8}0m?#78gO-p2D*eMedfD{o~e*JLGa+peA_4T>p zOL=+4XvJQIhBdL(5F@SruNu?J$?}b^f9{Td6LyNv#|u&`sugvmyX(~swYXf>-mTob zG+#rk*_T+WUt39Ce6K=pf7ZbzhwA)%`FWU0n>m|#mm!*wYERn1?I?Spt`KE2{!{&Y z5wfP*!nT&zoYwr)ZR_q4^*N?A8!j7KZ%og2V|U}$z4bzM)3jA*UUV^WCF=P5>Bd>q z=~^qE!-Z&%#`|yZb?>Qf$MZBi16(c&0UAI4A{i;c9|8j61ws=1IsA@$p;zH8(WWrp zz2m)mQcJ#L|H?;?%ZRDOozf=-GC6z&K0mXo)5oH-{R!vNLu4jC1D`acv{es+D<^jz zM>y_87FkZ6o5&rt1MBmpTl+7YjgxfK8@XIrxtg^GnwmE{FAz>Q#JZ%{m?ynK)@i3b z@5lRl0enA??%n!&2+QtXpVcDGsse}gZ|k#M4naYEcis0|j4RkHD*Hsw20vN5legx< zyO*WBnrB|_t+eh1e~kx$dh3?wH_01PyPBKQ-svgdpx2e4-X7g;CcKAn*f*zu|NH10 z(DVPU_m5YGONvVdx&TCf%1*i;u~h$?A(;1AuK!Z8 zA24ryWS8!=g3oR3=?L5TyWTigc_qHKFm#M>4E}3F`G%F+aVh%?`}Zc3#-k>8S2Nd( zW3`i9b_WhsHe)s(<{T~pc3Wn8w&}+3CO*3Z3tPiN!*O%T+OX3lVtt-X!NpV61KsU} zqm1*EGyQ)`f3;53E;de`*IMQ-7}sHmk?@gyFxjzQSg?_PAf-mtMx#WG{p`kcW^%h5 zSn`0tYz`FCOeU-+imD{YAC#mN>&e)U{Tn%*CLGThNgvhw_9|e{;9s%rz4Jyepe4s5 zjrho2t}H^J$1MuG=UF0?^0nEjnlK-kwW%EM6Vr;mTL-2ho-0S0!1HSQNitV8J3H5= zEup=B=VM_=v)W6uQKp8svZR)|>{8HqF|VLELYIhd`F-V+FZ}NL;ipBE4MI|UPk|>p zn?nk>the~>9|tt*3PChZxq7+8zHfd=uL;)Lu78(pPAd|Y80>Q<&p@?|$6Y@)%YE-n z9=C%=BKL+*7pfKLa|xC{aqjl8+cMhC`7Ufpzbrnz&Y_+2hvkMm_rt^Y+~wkq0MIm* zRzsWe2{lio#SR+AuVmI1xb!$_PHj$CJvWxE`G<| z^VSQ~T$gO~ti~KqW-k-_B}W7en$GUXShBG6q}E6$WSp|iv8StN*2JtNqA@GHmfxZ} z99m~PFxD;k{_&@GEqAr~c=$fP2FD;jN5O={$-s=l(1+oFe8H&7Z{r z6xgL0_POW@XR%3(>B zp)pc+L1NNe@5blgtD`@NvF2@ww$q0t;rcRiYg1pQ^!;uxZ>NawJ8wnKcP}xIv!9%H zpR3V$$*44-1@!cE^zoJvUT1s6dq{3vw~1cw_c}Jbiv+Xph~B*4Ee+595F`cN$Dt%4 zR(;k*j~bD}hPFb)H$3M|{3 z)n)~;W-{-U#m6c$tL`hVD-#MR`>_jYsfFZ0^qVBlvb=tU=2Pe5idai@h|_2+$zJ>t z5PmNd&NZrw@2P7?EF3L4qHK`321Yr^>d;eJ;}RJ*7_Qm7{}EW|n^U^RZ^0Tn%D#q9 zbz7>iOFkbY^~@pAAKhdT$nO^Ln;NcqxrJ7RHVqOB3K0<#Deh0|zooSKyipifpfFH0 zh@0~(yaRJ9YbJf!8{#+X0FfHIEbE(pw!EM9W^HG+H{Y1(&T*z{d2;dGTzTmXocNto z5X`1zE*kkNvp&V0q@6;LVy#Zh&7?-BI;b|O-R~06mh$>}nyPQySfl88zxwL}y@5(k zwX0}LU*4a}(fpNrvzMv{hEG-fEr)AvyuWxu+S%Jl&Vx56kK1O}R_;$XR{?)~tNRK? zoBJs!R|->yyh!B)*ZssEH6aljbBz&q=D9h}owYe*ek)vEZ1gW7F?uX@hvO zkr(Bgg#r)NeA>y+E>~=8UgLOM3=1_PTg&c8_q2D8VbAY63WAl0_*wwQYJedn6xa_3 zpk@HrmJYLy#Q>BP0W`k?EPev=wEO_BQ|~H*v_`kuu$oZ*aX=YiEc{T8fA;9GUjSvI zF^brgpe?XOz9|e+Ux=b)D}_7-V?WOoPXcaP;EiYsd01Qrtz(klF^?5V6y+S>a|+izH9VCz*CO{@xJST1%s#;;%6ss9q)W;~luaUEdSF69hH_wi?pTUd zHcuG2n1>XW%(xh@6rS+3g5bDf@2|<$@%i4yPj*er zjb=`ok53Q2OXrC)e;?7-6nYRck!cjKROD0rEu$6D`+qO3-HLi3Q6d{&mn^ z#y%#RxU0%XsaTUkmO+|dpHiPqnqIU+s#Lp0y2ikN)o?C+U2}e5o_)RYx6h36T;%xb z7&XzG-kXb}OEkaR62XD-zV`9mrsyBGCF@PeRj!4LHbH+O-EFa23n{mMGObEt&e)6V74Rs@EMzIFUTlU-8g#*yw##NS#Ra zw3HZh*p!I8A{^QZr;2m_X^(#@m5`fj${cFp)ShmnYi4rGIahDLt~>O}^%S(rv%egu zogWFSiwuL?+ag=yZ}OC2UwQrfKy`6bv9h~V;#_q7BPw0CeSG;|ls>&e!df-Al=CYW ze{)E;o$txY19B&dJS-2%1(E?gH z23<6bTm)S_oO1w#iO36G8BaHoIYNbvHAbiwogv|zFFNyz?z>VBYy=F{g5s&R62a{IiQqO^RJ($B@^g^MNn)FyLMvz-N#CA=c{ zA>BEBQSq6M7=E|9nwpwsn)J(AE1t_s-*~v$+KAhzJf%D~ukQLmR1&?aagvvrGom}% z@!ynmShO5@uJj_fM={E9kF3&(SESm0K&+7XA_pQ*WK?RA)_(cuQz>w0F=+FP^&4Eb zs^_@{Pf2g^bs<05!o{L!L_1Qyl)#zw{Vm3YP9a*%;#6;5af3$fRXWg2n2SRWIbmrz zIfu_l(O>ed?I!i}eVc&V2`KC%rudVu&@WCYFXmY{*4*N5xvhZ0Zsd7qeg*Z{@doKJ`mQyO)E#f2F|@f2H>h ztyLc9X4%+k(%v$R&KqaIOv6Q$XDbFJK zdUS3;hal?KE77m-HyAF|UWAl^+##N@&+Jo1?v7Kf!k-ZfWQ?75v3D=N7=0mnK!4%1 zcVgmD%5YGvi<#c)wy~N=h$6G_S;6Id%M@Ecgwjc zn#1}9em%ZE(WD>wrNcw~7S_w$ka!15G2=Da4AQ~gR zN(E0YW6fD5y&a4n-OA~zS6f$?=;QZ?j`Qln*!`~KT>fW!)cf}q_>)>cKx0ij{ps*i z4++#8hQE_?U;0(R+fbN37x9bd#ZI~9B|QA|JEZqD(i=`&>m>rdognk2Pd|V4ufKys z>r;=B%DCW_CfTQD=sVsX^Rz`l&llZWqxY2y4~yWo1u|k>%lupT;U~@2mp;;*jQ4>q zpQhWl0pI@Hx3;A#@*w|3fKLF11MGQEm-VF$I3JL=dqZ(--RAG{Kt{RFMtIi*m4|^% zjCFi+hBZ|U*YV63vT_UD5D!_Q8XUyw^@nl|>lRz1^rZUmv=JSow44C|WUT)h6d)rD z9{?Z+NQ()pewf-DT5-kV$?%tJAmC>piu@Zol%Sa|#(xQqXW(;15Ju+raD>Kp*;{^lvQ$G0%lAZ^6;`&-54rDoe+}q) zJ+p7wavUaE^1txj>bP^xeO~`myx2vBpDU56N>BxCUNcSAL*?HFL(9`5(K=NTe;r~) zS0s{EiN4$pLPOQRE!Wt1u6FM_DbIa9HOH&c>$s~|-Vh?AGg9@Ya;Bq2T5fh}o_oFD z>d~u93#d)7$N~cWc1hgV9aCupt|Ep7UXK(6%{JOyQ#h!#x-;VAvLS~ zBKOQS)0pn;Isv(Xg#_+_5p9vo^vmlAWh}~h`$=`5O77GA-h0K&+w(=wXi}{)6xvL$ zc*L3uS4~B@j(wMF?UKGX$!ofZIO20kv#bD?dMD8MF@lbKJ{6DZ%iEc~Kd;BRbFTLd zES|0*HK+|!0$b>xWr%I_ikVd>?q`)JoEA&IRle!PV8Qpt=^#;5?)`tUem8|5Gf7~h zpBzQCY`CrU-L2URF57jSSuun8WN8d?+TUMFucu3>oT$VIJmp`81>fqB9f0B>AMw1H8I_jZ2$cz5PPt$ZY$9q$I7`3=ArerR`D#&b|dV37-S;VbzM+%?Rnj& z5%hG}^1WZ+snDn)P0E(oh$_XhZHGab*I2At^IcTuW!1Lem({UJlyCDHitn`;DcAk> zFE1$O@iI*CB^}LY8~Wn)w#MIg+{PfPS-k0%6>=uKeD%}bXHRL`d-EFgq(K+D?S9j{ zB98Z>^V%?s#0~$n`}rLDNY8zv$?ggzhczkLR-dG3B`>Ee21S{a93240KrgxyhLYVn zj+hg;#Sc0w_Hlw=4kPulkf#`n^BNIWAq%Ycf7v5bvkRrvbCZ0=3*u?b%BlgC{(H76 z{QP9Yw_veLAT+aP*I}!O%IZokUfY+Lb5q2Fpu=PMfgyiFV(-&B*OHeVG=F@)13CqQ zmt&0{!k1mV9{kg;`^}~-vX8DydK$U+%Rgc>IQIZi zOnLK5F_4Mg8o%3$pi=%b%OG>UJp$;clMD`PxFrMs*X{F;3({?2d0!kbyqgeIuJNVU zb>^0C@~_<8n3(6~VS&4&kMfqeZCQr}n~^XZIHb;oyxv8HSV@fAbaBN{5x`6jruuIA zeBNOX+jpwCHSx#n0}vIrWAin6z&M-+30ySdSAdkS(2&!3MDtX$Q;72OCGn=E0xCFh zLvEnZhQC60$Po0T6kG8{P`PKsNvMs8_u+Z#{jFd!IG+IB2w|Rz5xjtY^MSCMZc9S^99=;|6-H8P$`+S`b!M0}!;)ayiWtj|7WuHXB|*EV(R+71@AbW574D>Je&w1}F^(JfErv!zTzgFhh4A=6IKT19>WbVklbRdcP?4CZXne zkh7AX#XGS{>v)#cfTkghc!`qCqA-!@g--I{Vlc<>?-*l)ceqPLMA-}lVnBb3nS3o_ z=ks6!!;-wacO&V`P3hnxVeNZf?}%Q`-Fqru(m(g^kRw* zh~Q>Wnf_dWZOfl&X-1M)d@J1+U8re&kpJ^3$$Z0@*0B&mE9zbEoc=(BJobRE!cx6A z&b_1Z5%hWbToxiF8(48KFaV&&O~FqyA_@xY*r^7{cr?J(nue+UXxQ$BMym{1AZiT3 zRuIat1SjHViud+Ou1@U1C7&n=Vv7)%5v5nM#4EM6oBA7^0J?}qYS8v56`o>Il9X`& zVvWf?%(I*S9$?EWc*Yk*i41}2&x`6^s9KIUAu3;Id(TZbx$G@OVT@QHx{T7lDQIT| zFn%%crAV-1y2o?xv_k{DiUC>x6lh;(YdLE7Rd%Monh#Su=Lt=F&-&#~8f<8T9NKR-16!h)l0>mgbG|7%r2A_NTQF%}E$X>SLHL&|v9D30j_L z?<>40h%?$jV}9$st%$(XITKebnp_{JCXgpw=zOBzSc-)La)SaJv)m*VN};}rY6v>YRGRV%JW!O z(;7CIjagUuSI^pr^hA9p(BYcWp1C9Qd`gO|*P_ZwO270-Vy;KF3bB~uX{v=23lw*# zJ469JYMC&UyWv3=q&MahQ|m7kOLds08DiCk9%ol?l%C|@ZL`&Je~g}wcsR*}C07cR zf76VY`A^U0DBVBTq&(VqnZVu5r;lf(rF|8zE>yJ|i9f9ZaOr{dF1m)NL-omo~Kr+bZLF8e(N0|E2L78TY}yVko3I zkKL<`rA{+Nz%Qh?Q3XHc=`Rv6hNTXvzLKP#Ca`J(o9pGaYzOHfL-=jRM^6-~+v|qr z!{MzmG9`_8o!hXb*zS#Q8y9}}JvjQ;Q^67D;23A*W9)GrEf_p8k01_@6k&8jUK0#? z9an@UZM9xZBIb~T&;$+wVu4lVNT<%YG)yS5{D+}IDc=2b24jhQQuF5Q0!kH(m z`G{w09CW-AzoB@)QBjJIrNGqV4H|f@T9#((MP7XEdtQmBd>TPvu0^S5Powl?9MnXw zwQoNvSuIXIr(j>W^%qUV(n1H1?x{>BCQ$aTO zr#KkLH^baSvYu}WPY_`!cCGyJXS#!r+`r2Uj76QP&`V3;>vs= zntD#2`OZTjc={gqYg=!3@3d;5YJ7VOMNBOEy!k5JFVrToAh!~Wb@HVu9Stb9g#bH% zS@4ncH$2B#-5{5%RM%P$079<4|MQwFx=_A_wL((=g))fB^F8moF3DT8Fp+hrmr1fY zXBt#<%OESgf8KFn1)zQhXNl_PfD+gRqLRXg)EhLh*veYcMD{cjX2S_i^4&sDY8?L(k=BT;`71_7-a4nY=(^NI8z0rCt)^2Q_%Ie7SPsKps4q{qs&IFLP zQE1N+&LZ_?z@wmBlSG)8LWZ{fOi4iVTL-P7t>svaQN3R|5&#_XEf5$F%cE;5%xNgb zUB@YqT4C5WHc1*ZtgxvhNumZX%gqUBE?M2P1OxD(mAc=c>$?FswMi760mNEO-?OWg zm1%qij*I+=D%Rkf_S^7(N7VSgo}kf%I;&v>h=b&yY)j$(P?2y~VuZUAeVGCH>_*V2 z)2qXiu_QtO?^UGF3bF880>Gme5tA+q!h?$St=(GG7#BcQB~^u z(D-=lwa8i5_+qTuLG1M}KMW66x9S;_lq4Oh3e00kr@r{N$uiLUv6{`2WY3)XvIV2u zR&+!$Q$FV#pwaXCfFAjqbeKDYvQR6IXRH9bUSjixjI^omH1<+u5zclMj3)|eaI2Y} zcg!X7@(_b+@bRWxoE(<;XGit>@}Npl+MIcVQ}$5~mmG@Q& zUdq1W`grEF?Xfn1ndXtJF<`~wTxN#uPJLW`XcRF5n&u+DL1R<0!PCu!`cL<&q(IF_ z%3f0bn6WpZshLTEosr(}r@1ZUV@a^D`sxb)d>K?Bfvw2u9ii}_EY=ddEkr=JI5+o+ z!T)slT786@YPuBk;AESHY;)~|W2j?c^i#wec6nq1JU7IGT`x!P-WXKo02LZ%5V4B!skOUmD_dU^R zf`(_g=Y{xE2$P4=v5=afM|V2z%`f?wR)I{;mAPts&jV|0Yk)(D zV1mmBcjU+@W(@#{kk0(kxFG@=GSQ`JsO7yGQv9W#-iL>A){Po$37vOH< zKrzX-5|#+T&r^gj9NXIW&(O1J5LP9fZswDjJ^)@|_k4m=X8*@kp~p#dH$IYp$q$5z z@seIf&{+q$dP(fHWGbGn_HhcmP8<-7&I(2mA^kfRU~#`k@GoiqZK(G(A+*ADP2TWx zUYU6bAVUXel_cX?T?K`pO9Z&BWYQ0lN$q)6bl2vDTlLbTvkg5CTWdgt+N76zjV%<2 z8(JVqCEM=k#8*I}wZ$s}vmZyfMz(FB*P`%f%z(5BqCoBxIEvGD>>Kh{<5fz5T(BMe4UQqFDPIvlgockaUo*1?0|k8qZaVOB2jb*qa(QeS)ShSJjcmcHRP7oP z1(_g;Xu@il7of@3?Bd*L);VqTW81vpC<3H^{fVWxw|EgIZ4CC#9(gKWz@s!ktX;>o zcx{~CnfnRtv`Oc2oy6>!v^RG=>F?6=#UgH~-05 z{d`O=LGjW#n3OsCD&PFmxNk8I4ZeFLn!l%(ir(mBB*6o&h@lsSoh;26Y3U1pvlj`J zA=7MEcnh)Qz{Fs9L6U#~Qrq9n8k9oZYjI&`Z+Z!aPEG{jv1cHDz4h>gw?YC{J&QR+@l zOvr5(JBgKJ3NTL~(NM{hb%c$z&Bx%4b-4#ea_j0-~PSO?i*R#&GHk`<7;U zxu7eN4{ECBc?r}f&-NGRKA+B8snhO_1?x)A%eTal^?mCnQ5Ir-Htv1DDHW`WViMA$ zxIEGyYQ<&7^7$ppvIq;vILx_Y9I{az@9U=gpdPS8l`k;VJ2uNzLaAFm_ zuS9C9LS5T5CuxRxUqV{o;dDD{Ko9CC>q7dMh$SV^aTkg#1j?bhzSoTkSvfp$6VydU z)_{KyeEJhxu6!CtJIDk0B9lSKXruR-ms&u41KO@;1N~cHPVIR)I37!~?q5hZ^=nz) zDh7O8xru7!KN*)<*_5vYfW6iRKWlxZ(p3G=nA50$iE)RivoeQ5Zu03tOGy`j>aGSb zlWR3?V3KQb6wv0i-}3DQV_9{#CzaVVPJ=vdD-86;8!4l#EszGBi)RLqm`Bo$s}O$W z_y(KS&Kl>1BwVb>;@HAGCQ-=$W0cz|tr~AlnQh@&4Jj4Z&oLhgyqC$NfJG;zI!7f( zrnlyJ0N}h6D-MJwXCNK}2Tyx53+6HQD=5({R$-Qt+z&>apRU$R_+yEJ>c30twS{6c z=Njq){80vI!KThwZ|Lx3pe?W7->&-?Zze`Cjj5p3j#}t;>u7tw>&&2Z)`r~}-5=0% zrx42yw@kL%uXzI{Yip+?R$3@KlDt{2U3Ax*gU*2l$BuEO2U zu===%t)&85U#}|&snfvqdi$H74o%3WUm7P{w+m=hZj5+Mz+>Y;Kj^g zmT+_v*?|6bf_C3)!O*Mly47{XRRpN^i$HVeXTNGWGGj)WPHy@i#;~;#y_zmv$N;1~ zsH1cu2qU>6kE&7<2lV#cg#b&w)U#)27QALh2m#ZW>J~S7sln|{ac-Qs&qQ-;M^aUz zhZGcC6iRihE*1WZ+)C3!5p&WR9n~_OQi5+ANnC##!LCAbI)$CcBx+vI&L{g{$UO8d zQ3d3^)}=o?XnfmNnRWJ8047&U!!q1ga21AGhZL}1oOQFr;{(AMW7T0Cz!5tM;?&=h zX;gvqHf%x3djT}CfDL$EGk~92oE{eJ?#V%nmV@(Sbck$!n8I0}VTfC6v06hP76_!3*81~uIKCah?jmG*sN23lGrY1o-Mdih zvV@3h05G*x{4k_aY!)qlG&g{6arf;sW|ut8PE6Ss!2 zp?&&{Cn0UMTwO=sDZxh-FVAJGx?9*o97-OG_-rGf24rZSdpHjW16PJ76x?_ibS?)W zx@l{GD)k7P2lUV4I;Sz=GCXu;w98{pIA-QKeZ8YboWe>;kMV1pE=7$D;^={fMomq- z4?rPYSOu823*6akgLJdZ-`3r*;{a+~C?kQO*oDY5uO#aV5-#B~59M&TbqwUC&C^;P zh#ao^)UdO-E=gX~oJ7}z0Ha*^=afWDFC29G6C|X0KsL{M9N$2K-bDISWg2}xO2fb) zvBN$^uXh5Ki?jYN8(mIK?I##E*%({boyovo)u!ZrD^1`g9E@ZPMCcs4`vQzd_@ zi&>~MJRXA3ix#`GnK?FW8U~2}1l|`q_f(iSrMn0JmuvP#3A;42wN;dL z9fQV3XSavrd(b9jv}&IH03BU7tYNIJxYePvHv9_*)e!fc8(RwXVZFF?(^M0Q4^PIX z0G-S*-H3jL;r6Q`ajOppJt>#rb{n(Gl-1ral=&KhjXIj)nu?B^`l(ji-P6nz%H?NC zBDSdCm#%9B8YXbnF4}RxtZyWZfK^FAy?t)%x^`%R)RmkgS7O}OtYw6;IxB+|l#ln_ zIRU%1=^zm4*DPq2t%YSudjSJof8oCj2v(D{W-|nM;ml||3K_=Zs+1b#nNh&D zl3*Cv=Fcy#RohT#H3(W4uEz|?)$Tc(0&IM;m@1*GNohrhZrLh6_y5I5qa&Z|R)B)6 zTe(GWKv&8#Fg-t@3pjEMrJMt+V(JCBf14K%^-)1$KWoSgeaebDDs+4-TRUTaj0or| zo(;sVEe>o<+xtK%$aNh>Q%<-Ud$aG`-bSta#N49CCW8m;4-f1+WtC8xR{k?syYm5nBuW!R;gwzAYR*^ z_PcAi9qbl0el+O0-JSNG{iuH_qJ?=hzUb{fl9-tjMV@EU%@JRG(-%b=0oGw7&4dN; zz5@Bwk4oltCbrVAO+_EK=x+@VkygD;Zs&!ovh;^|5xzzlYjVBy7JunOT;KV##&2-q zdl^Jl*>lvU%0_`NN%1jP-fBScZsQMMz)(~D@@kB(Q#Vs+FxPj@|m_K$@8jO&3go*g7WF10J` zc8S_n1wyg&$e}Ii86?`zXe{ei0NCfF4P2IVG+|B+!f_I_x+*ybO|}pefa?US-H3BH zld^wZSxqbjteB`TPAP*fGP)w)^)y$iy~23UT)9x4b`SpYlX-`@U zTn&3|HlmyFP@Cm-+l}V09u|0y(B(X1x}Lco6)9J}I{dv0cU0Qt0y6zMVuMt?^mg_l zu=+o{K}$g*2RK`$gA1sCR;x{oM5;^6y&9yzl%B<8gPFLR4ZQBlkSA1ap3Z&)60k~+ z`~1^ocVDU}K?6_J_xOr4b15jKr>{+)N|NoKuYkj0?Faq@8ZGGPdtR&UpxpXSfK1!d zdPH2aEm1Z6w!Qb-npNh!^t0v9qq>Kh zAUWCASe9eBirHV2=hcI)yQVZt)@G+;YbhvJ1QJ6&CS2F&t96>Zw+={=Ed)zaecHqI zdiYAAV=$%z^3Prh3PZ6IyNE1>>^}aj!*|^LtZsK6tFU=Ja6M(OCi~l?-ka?0`qFzi z(4tI1Wezuixi^E(ou~IUJFc_4n{I?8wtaQkuGzKtb+OwTfj7s-x{WxuP7@k*`fziV zd$&AR>8Haj3VtnM2}$E}gD$Alw(C+A}9IrQSt?nGg%FY2Tb; zwcbM0wY!l;0%rc+jx0l+=8@(!=QTMb2Vo^P#_osRce);0N0qkNtv1#3cet)`*OO~8 z1m<(d`OX_8OstyzQ|Acy@#&L2``CwhzuX4nKQDYq&#Z%^D3td3@eLAy*}04L!WI&? z8;EV^F{j5WtNr%A1(h0B)%XXY)*~z(UKZ^7O3uk9gyNviw29;gWrPuq3A2sXmS<<6 mB**1{ay>-B3=!FW2dKNjORZ|8*MFR}07#3=i&cvl2L2DE(+4;J literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029892_mpeg.png b/app/assets/images/file_types/1358029892_mpeg.png new file mode 100644 index 0000000000000000000000000000000000000000..1e072fb60672356c9ea276347600d6097a504925 GIT binary patch literal 15293 zcmV;uJ3_>XP)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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

=K(k{4 zUGuOC3m;`6m%!Kd!V51r(D+HHm(-Il_gBCA)ykwf-*(GPmOd*|>aXkgjyvvfGhF(? zwcq^aH!iB`udBTa{IGLNf76j1B63GCgwcf04GJID9B z&Cfe<1-^c{PSU9m^}&M&9f+#O{{8zMDY{R9>YU0^FM9IHC*4;`?%TJ|ozs1uJmpg; zn;*|HNw&&<@x>SIxvffoF02RZzDxml-F4SF zkTuaFu%spq9XjN|)wG~M(eH0b_v=U21S&rh>w1TmZsmFCp@-ac0VgT<&$$2o`(4lR zpVf=Jtr55nKm4$JhOP_b2YH`ZHi+N*>gpZ-{z319;On@n2YA*8{ZL1KT;dBv$IapRfcSdeppjU&lQpCA-Z2v zp&~%!>$$QGvK{(DRy{*`eO=dM@9}k&Tlv#PfX?|$>#>&v%1e=2kYq~o^;=?+a_MmC zVM(_D7C1UDHL_>V9#>t}N!Mji4*Q0DbuK3JxnEooDd0hC@A*pfndEb1Mqhd|Ob z5w>&ZPDg~wQIeXGvt1;}B221HlCJv%v{Z|XxCoPadghsD?78Qjb3IJYRWDLcTkoWL_NFcZ zltC5Nwq8jM6{s2*2~>fhV}T$dv=_kgR%8d{eo9>kMD6A4%VUztQO{5rN>XWBXC&jS zbK1ZE{qKM2x@^FWH{NK!{`Ifj$_swW%UzT7%k$D|jP*|au3$Kcg;+P;bdxJr<*#?@_l)ywfM;nv_X11Os{xos#!@>{Ap%J*r@)sXR+4QH$dYiW zC3!6(Mfd1_fvrvXrQiKv>coi?t|xh8tg^Rm-Rjhm^6In32VT9cXM20g4ieqf1C&uL z^D=wN-|m{?udlUTuXMkj)B7wfgwdvNo*4bkcfRvq`1R+1 zE2&)XB#D-EDv5Z3ucY3g^V%y3d|zpQPcXmB6!_!w=#Y1p49HMS$<_{g}G+$6dRl7XjfajDx9*0A0A&1A_1j_V^WhfF387 zuJwSy0`E)fhikA0wD2H!-{G1K@PG|^FKqGd+@FHpj-7CDNn*pps`4R@hPe-A6uBaFLO~7^pZZ`)y2=>bvFI%*EIqFVSq^k9SyML z|7+7Xk@K~HourGMu|Fp{*7>e5MJL;}ziU815-%5sZ-jDKyOC#SxY_9v0$ftB{Wb6b xVI7i4&?fM^R8a4;JTblJuYFz{0_TNX|38pCcsATx^cesE002ovPDHLkV1mSjH?#l% literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/1358029916_generic.png b/app/assets/images/file_types/1358029916_generic.png new file mode 100644 index 0000000000000000000000000000000000000000..b91b1bec57d0c0f68b9fefb9191bbb552cac949d GIT binary patch literal 10807 zcmV-7D#+D|P)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/aac.png b/app/assets/images/file_types/aac.png new file mode 100755 index 0000000000000000000000000000000000000000..a0720ca452f8921155d5384c0db43d22f8631330 GIT binary patch literal 2092 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�fNyQ2-ZWiXEGvrj8+f?}yLp z-(Rc+eLq8=|J3`G5uX49JE&yB-c1bkdm6>Lur!1%fb-#+kzKF`O)jYFKm3UXjz6Ja zUs(iQgFw%40u8 z7&XmzHl$wsn2XFTKRN+mv?%TezR#>dZQih4J>3K91SS2ZyY5zQ@oKf#)+;JH()<4B zW*3x@gy}P&gS{ZGPjP-p;1ie?$?RCW!nlUGs8t&6J;(Qn79Zfo5Y}uSCTpByPGG?i ziBKfktTCiy%v_&(lK zdcNNP06+jqL_t(IS8rGBw#aWZ|4hm4pl#0c`{_56SgSGmZzKbs!=;2aZ->sGXslmG zCg%0{fqs4RW_;`;-!$Njp_Kg3)i-s##mep*@6><&t64Qy9prcMie5f+1}l>kwD~La z-~)Fc+`5)fmyN2aKBln9Hr@TfUsHC;Dvw?G^}L(0-a@#Tn#gahU8k#RRoT$2`#0UF zt8TcLFrZKB&bvRXja#-tk05e#0^!yO_cP%pdB%kC+>0P&U_64*NnBR^*JS0(CHG!& zbe9@q;VI1uU~mvi9E1-x){VE^Kh~A4-7)@t8teDht!&BVOPx>P7+{zgjT^IApTEt~EtOwtzAG7Xsbl%)z7(Au$I<%ftj%9{bk^qR-8lx*E;i0j z>*n&exj9|#XaeVU?QX2){^R-S{d4*0t-NpFK7H(CAB+3vfBxq`1sw1%XfgqSG5k&t zU^k-s*bm6cmivE9u6+KcJ>T~;WzH{X1;D}u)1_A+C;+(h`UHD}EAXFU1(teo`Co4K z(sOj~1!#2>0K6M%2JP+BkAFk!HtaysFbWelCKetKA3mR9Zf zggQ=tOD)y=H8G1e?$vr7EpO81)fpNX97E$CuOj@-Bck%Oq9~OeJq!i^EY37aGPFx< z7-85tVPNYUyYQPOB;AT4{P;6Lp~ug?wp%|vRIBYi#tXAsklMqd(2}zV z`S`C-VwsSen+ii2js-%D^2@FUgWxIrWC_UyV3+NULkPn*g^BK?4{q0={=q}4I(kUG zn3;ED3VytP5aUv#s<@@_|!~0_NTfbQb zliPx(euPkZF}m*N`*i5Qb2|CTca=eW@&+O=^tN{Dx-DA>J$SVq|G`gm@^qDc=hN3~ zBO&mfd-|a2+QzgiYD|N;Uu5Pj)0*|%6ZK8t41_2#H5s$#0W2}P(1sUav5={X@@jqM zTSrvFJ&>M~q#>{elCsu<`fuQlBQOnwV@ylu`vqJND})@r)99!;wD<#>;k)f>KBNBD z!}#mtE1k0u)8|wyF{;$k)kH*rVWnqev3jNDXuz^2EDizBDHz~BTruL6y?i-fY}bPiF{qgZ zklO(cOisz>9?QnvB9^$*yOl*mg!giqK$Crl}2f$|{ z0Q)UjvfrM!3wGOMul2&8i*0T{eZJkA{VnIoE)rjy!CKsLE;jQ0x;8UHFxQ-r(0N<| zLR8Z_rDu;1U_HY#<`;FDMc#Clik-V>L)eD@A((}oUv6_u@7y;Jq$`?qzen)S#R(827JKDh9-|sIwI%~7!KljDjj3%(%)veEx zzwV#!eD527FV*LtgSAbnRckV1baDW)P7#s3&f&jaT zOrB_uGnf1p0RG37>py?vaT+wZe%Iz`f_ZQS7F~g$0ASH&2{r~-;6KL-xR;fC@wvLY zdjHGK+T5nfwHy5q%;vk1!Z5#HkG3{4VooWb!N*}19ZlQBXeXO(d``n*yi6-g40~f_ z$3d-+&b~@dfAc92hcxE{TKy|M_S*8>pXrVT5wa%g~g zAJOlA<_3l3>{1+{a}$G=SQbPoJ1RGWcO>S_nhRBGT&T*jW<6nt02*t-*?$4e?B_rKVVLl_LWlr^9>MoFiwB=`I|Xzl>YsR$60SIFY*#}=p^8M$J-T? zb5g&71xa#R4sINP?Df_vr*x}sz2_1A^Z)xt8f&Z3bV!um_uxa=S43dye_ES&-K6Vx z15!9Tp#SF|ANSUq^cdlZ#i#8zxpqhaM5Xg`LaWrPR-e34iHwDt7?uGo!c9aC#8 zQDWngxYjbTA_@Wi!wmx0gZShenEo)0VHGkn7Y>MGk7qehR-A$Pb-M@fmz$oZJ_HM4 zSS398$fNo+>lX=dU1DkxAqoj67&(ccAc`miThsva-;M=BS!n@Q3)>Wx$UQn0stKY6 z%*}I8FU0WO=PEm=7^{!ycjG7c3!8IlWa(A<`!F1<5Zl>?I&eQ~ z9^-9|qzl<)cfRN8*zlhpc2Qv9#$RZDQ)U`}`yJcyEVtwx+sg2uUK87M`|TT3Y`Q!P z5op4l{Rl8hv!k`X_&h^wW8Y44&*i|ef$d4zYgJwIzqIGNZQ6F#dcFMW^E{72boKQg z)oet%7XmO0*MMm-KY9^Vh1j!zh!xWSjYgo!?*V6I2#k;qKl&$J>x^2PDpb5|8O(pO zCoBl#8ix=Pwlq|riBDBL0Hz%sErbVc(EeAR)#=JQgbuf;Wcdp3RNea_@VxzX|GUOd z@7n!sHqHb9{x+kty8q+mckd}bjq5Xd*Y0n#@?yvK)B4MoqPM=lbG0^0u08Nrf%Ws$ zZ~S%rZ?v2*E!OUi5lH)1>X)0t9rsG<+_C-iHiy4%G=cN_X#&ee@5Z}v)^@36^hWES z%jn&BmoL`l#=2uJcAUk=J36yqsjRFF`Rl*_>;JlY_wJ9=?iTi?z4$0I8cP?RQ0FW5mvanS0lcvs!O|it5EK9`vM9l(;0pX_T>*QsxsQJhtj#62 zxpH*&QhPU&X?n7<^Ff>LfT6sj^wDl`KF;0mvZ4rd=iYBiCH1G#cAErH8x8AZt z7H@q9pYSna*Pl7tsAyuwuZ$1ZZ+&7rsQznVY9n~#a;$`G7}qw!x1j?>yLRYAjb1zW zy6(As6I$689X;Er-Z8)l38%LvH&Rs%!=9jE?V8ozhB^w=_a~k`3X?ykhd%rf#bz(l zzkcP*I&iE?%S%&r>)xw03sd>xYsa(|4fcJv?9~33P9gwF)y_MA7xVTcGhI;W`WyA* zAN_BA?K}AKw)DY}OZVQjTMs?@JDMBn#u_2c`-DfaznI~>w8bKP-QGRhwdcv_^y<+T zFNE2$GP8D&N>ip)oVK7<#W0qrI7f%)^{rA|yzGnw<)jki5R-U=j5NT;7LddvS^weTegF&8 zxt?T=c6Weko~rMEze}69Z$$IIOV2;~O|3?=xpD8OJWXd^Rh_>1%olXPZ;3A>8XCUQBle)T&Bjx4ul0*h;Y2-rV#+oMs>Ej858>)-S_?*05SyVFFr%V z05~Q`XRt1Fe3uF8>g-qO{1BJ``N~&`4fr5_*c=YEgC z)o5`%0DFG=nFTw}+etQ0R&J?oz3;Q?tbP%!j59p5Dis-n%M9l=KG1=%3Ktaau8C1h z_|f`D0X{j+y=d-BVGCd?5Yq3^;pbJbVw(zz^A#V5U@A5ZYnLiDg1=GUP^ZeO6KZR2 z@m#V(_}==uaLXcWssXBY42Ba)q{0&bT*-AAjX$|{@V8r=ziv1)_Awj)zZ-ymtfP0i z9mC3g8h@L=FYtKo{M=mr{=oT+_MNu5=?e?FI* zcQHCQpTBRZHltap&yE||XLbL)j>gU7`u#Mn&CyzJ$<6IA``bLC3x8a@o7X?5pYAk* z><1orAmRcVNi;p%p#@d1@xB^SA zKu`d%kzFM+r0cZl&nBWEi>% zUWqW601hqy;<(1X_el-7b=|C^tA2%mO@3uuPpi3$G`{LN3E>4BNv zrjlhVv|-~W7ABU>Z?gtLi4ToP0UaNv9&_ylkoTh^@jEBvR%&{Js;lbt)KB&)C7aN2 z0M^yj^$}$tPix8wRaFBJT-1X4r-slB<1-$WjLH3^8V^39<0q=nL{BRfl>X|<290yx z^$mSWggK5*YSJs`Iuz1K6odSyR9H}~bSwa3%b;Pks6U5(62vcr) zsDAWfuMXAVho6?Hg^>o$$D|Sh3`Peg!h|0d31S5E?dJ9&nA}-F$!1i*I=u42Gs?nz zedmrf8Um=W1_4MfA;|2-)85_%L*4>d-mtpco0Pb5hniaI_4i-??~0%ABd&d#_Uye~ zRaFg2jh|6=Y_Gb`Jfn#Ce9kFezxNvt>-F`y2zyFEEXO@0I}zXic4Z`(Tgr@g9`R8# zF#h9ezp`^*Qp>oL4WWkp9jb>3n9da(lQG?EoL0xj_Wt=Qg?GLLJ2H5xc?)t z9*Ky=_qewamkmN1_V)9eh|pMblS;5on4JkHB0;%kF_A7=y;5gRy$-P70xl*=Dg=Bm zr+69W)gvILvx|d%K4e(SR*yw z@-=v>MBo}Qhj1$dONML&1X+s4y5zl_jJd9AozQD&%Bxzi*5KZWMtBl|2|X-10xmP* zeuL@ZtMInBmRWK;T$i73ePgHW>MnQVtnS}2dvzK-w*sqNAY3p`{vsvk*(VK)y6c{MFJ6cL zT@iQ*{%iHqS$kmJ##)=<0GPX0A3{5qtUd7K=xr`1toFD0$NG=wj_W@+qjh!H@81nZ*8tx@Aiw`s@++CkPje-6JNm`WEwIgKU7H){ zj+EVA+jx?f%@~=Pw7+Jp1gkA>aXg0s+8J=raUOzYxG4 zCH9!Ik1JF3o<9BuiF=f}Hdi-VFL7N#D*(3`!Te`dASeL%nI#D}1Xtic-wG`Cva*$M zFGtJW$2L~3-7o-bysQ5_S1$}i`nj1QFAQD+TB&(VSce9>GzWth7mvmmbJXD>kn2Z? z5siC5MrtOEZxYN>hq3{xYsJ4kCJZ3Cqy&)i2QimURxu{o242-aI-~DDegxpFR(GQgF6XE(sCN&oo4YQu7wZ+LA=o{7yNdIZcgwevMwje27 z{o`R87#Rl`uuo|qbmss-n2dEoZ+nLtx<)zfxa!(_iFMxr68t!>5wVz;<8vIBpxXKh z)z%#G+#xbkqsakgM2r8*(Mo;iv47ExH{7hlhhK+LJwOP$LfvrFLmuef=uiuc=oHL# zqCR{_v68cP>4|5~>d47DwG+cWHaZ7C>U7ML5JnKp9!r5&Vv`6K0f|5{pl8sP-MK0mLu`0SBQPN5{^)bP#jA4^96I z`<~Gqw{KBC+VM<46U$GZR8LEdqH!_4``V3KSCXQNsu#4PtUzfiZUA&|9&3tfw3-ph z<2(7>Z+~8)aitn=t5Er|r}X>_$G9F)*t6mhIE-Kc5)Sj7!Zo$(>do2u+~@C8Zcd4| zUbk0M2#~^}iKNii0;piK)+L~!A8)~;;}n<%?JzrljZHLS3GyT%30uK-m_tC40Xq7K zQgb&cz3?i8B(vHYTcqTSR4hI?CTkxu-Klv1B}2h9m>Ou%ba)O-5+Clg5Beq2-QAEF_=;!W7&GLZT88awOvt5W^=@QG|C(NXq1%$KvBXoNR|$ z*DdvBk*b&B$`DUXU~OU z9TkGBOb!5|^W5W!$(h`1S@`>R^Q^5vu$HD}%L<6Z(M9OcP@aGGtVg73z$q+72*MKJ zS9Rj#NuIs4fCHZ2R=RV(+ii@?BDd@oa0P-Z5V!*F#plmm*=Tu@c}V*2Mkv52fT|+l2EzcLGDgT^ zO`~>4^E8H*6yJP8*i}>>R#EXvZ{wPdc68EAsnNEY?Qj$f=>l5u(J?Ft*xc6C_Nk+H z1c0|bfbYg&mM8Ru-+h=6dqt|Pz-%@GR{=DxGi-{d2nD!jOCjd`J8KTHojxQF=gk+>Ahqv4FzkDr7Q z2bn(=aJqU@#uHft>7kovi6o*~)yaDVj&?__|iD->8U&GkW6j?-K#RnBH(K99AebGf_E% znA-!=7oN02;e=F-*|1ilE!7BgMqv^Oan^TMT`kA;m9OtpXIHOo-LqZ`QL(B775~JU zcC9T*!<2rD9)9pfbS=Y*%>mUss(@>p;y5#^JbhSOckDoT6r;x4SFuWH<*uFpry9P`M$>@m@xsD zVI+h{{$gUw2mbbdp7rMLX*B-BI$b{j?!qiq7Fd{I{bGLeX6o-T&=-UN{;g}^j@Q4d zbvt5z+fwIjN_}JA-^}zoYRvnw;_w6x(0I8!ux-6bo1d(&o;|LGWDiML>z#w3tJthoTz~ZG6E2oo$2(3ZbnyQaJ z@`(QIzx<8bI|)OHMUwsQqN74J$vq90Di%y4T1AIC+S{-uDDqCvy(8T9x%yJ)Zgh^u zUp9JIPfX-pfUD7B>*Htm{bm30+&um^S6*yRf1j0Yyi0-f{ysmAEBo`nu~rXE{`p+L zzs=FRK3DhWi_!c01ItUz<)3FMn!vd(H^%w{=kmAt#|O^s>TZ1CIM?pzT)%%#qjBwy z&T>DEE4w_9F7P=1df=GA`r*Teb=z&X-Nl?=;}d8FU=J6&+3aIChyO$MV*6rcYrB{@ zr=S(U#nlKF{3{R?0QgrUSPrg0a0M1!0sn@|UUK%aHp|TdV0?Vs^Uqv#@H=RXG^FZz z{8X7E0;VoJ6fG>~(-Gswq@z(KmE;w8U~A(rhn<+YhuX%Q9qIJcC@=FV0P#WqW*b(0 z$EaR8(x6ttzg@RAS9k6$*80_}wB!1_)l~U1+EskWVKQeiVGmsZAaDUc_~Jap0`4|~ z);)xcX9PR@q~r{kz7WssJuH$9_P`(^*su^-00lolVD160V!#X9 zH8nJ;AR}21-UM)9<2n6*|L`|h6(r+gP@r?wb(#PWF&-`aXFqn8?!RZNw@GiVYtZ+e zJ_?B45aH#}vL{BW{>``-7}t-AMrM;Z~#=J8vP1_hvm z%{>Uq3G;g5{#Dw4KVAe_qFk)))BGqd@A9HGj4l7>+X~sx7}xQG&74}t<2Dg32$0Cj zi*eh|sq^kEkrIW9HTRo#u z+Pe3PDqC|^LtV!Je(d3!#1td1RLL2Ym`rr3f6Pn(xasEY-a>-_0WTip^ZA(=b+Rcj z%lB{h#~cFw-24<9KWQ4roFf{IkA>(dTtss6!+n~Rl#LH|{I<_Dq9u_5U?eIJgrT89 z1hXMFw5pU{fN2L{gAtf;yq`lSZu|}c?svL=98--2HonA05gs_0NE0^gFxQ?Vw!}5L z*^-{HPWqa-6_^3H8uruu>EL+^7WVzTCd+x>rPr%VGX|6At&BmqMZ3pm1t#=cObFB^ zvE0rzn%yD`d~IglGd?x1?;q*c7az=5YQoA(E}H|_pSAx^f~#wBTtbE-lUIS!aSXGl zRz)=@d%uCi#1u9IX?3ba1HGO6<~wjhIjF-&F6xnecXCh9;cl{(=MB$+p&C2^G_!#b zsklTmlQ?xx$76;``$;iufljkg%Jt2lkrM%ppMm<&UV7`TQz|Jd_lEAS#rtld1m``b zpnt~W=XYtxmdJ0-;Q$!TwP~@d>*~1J&u8x}$LrFrZHujrYxAAvU4Q=i{$>_D zyWq-Qe=fFimv*tExwYO#rhsA0O%W7N2(7ZEw2#qDow$VUvzaycsqCX2+To16IJq*aWuj z30kwZoKvt~(ELX@C7;yOk8IRee`Oyi*f9WH4eF==^lebq%amQTOYJ>V>T5p<&vyF(wxk>N_T9lcQr7QpiI}zaXaWS_ro2zG@IiP6#yT`A_ z_7>qH8ujmQJaajn6XTU+BfPS86w zGdZGOPK#fB?VQ$E7OSWr3-#M+ee{7{oIc{~9##8zTy)hV{AU0_SD2rvhdy_gHm)i} zI5xb5C{^88%J-6{mkyj#*;-DqMr*wI`qeKyrnRff5invoC7;v) zAbKNs9+>6+h)+&X6j3(30c(O=PBPgbLK&xvewI!mMlJ^F<|)|uD8r)R(Y$GZ2iUsitk7Nz9oXlOb~ zr;nZ1&OJ|ZGL2n+ZWUTBbGRsM12w%}IhFfVzWN^Z9{Lvm<4{=#wSR$APy>LBLI6s{ zWTd9{w4xJ}l#vJ?1*iClDVc2kB(muNRsb3SabP&iV^R_yZ?5~YnOn?R(4sJnmU%X< z=Gf2}$6H0kn#~?&13$KR{rB{**FDJN4WSWYcJK+D8k_uVI3Diu>?$p7 zv40i2(pYbW$LgB!&+WI|k896p7F_>RFl)gZzyv^u@$?g$841Yhj675iOr2`4)GZIuU8fs&aNZalZMhN& zzwqQw8;_m-n-+k%19a^g-EBr&dzQA~+BQBX>^qu2c73?^tjwSG=Uuz5e5Jh6T?pni zx}WCw{IS2>jn!X%qx3uB_xBU3%}{Mwolx{p_5C#0S8(0n_JZ@)hM%@l+VT1O3{G3$ zR^K1|`QWyVFSy)jp{~K`7W{1lD1rY*cWt@)jg5`E^G^J4N@fNC3aYmWU?&@H1HcAr zAA4xH56R`nrF)n-9xHPfXk{*K^l%8zz;!ba-T=66I>MRo41{OE&49h6+>6SkL*0H;zWBMvIH{e}<+@fh1134S8c=h0h6d)3sp-mPRfD!~ z$n>4{y*hOClJ-21!0GuKRJu!%L5Dbrzlt6B2*T`)PG0H)!G2u#?%CvB{*mLClsGf4 z>Qz~q8=F^bQmn?hCY6r=_&iR-kDP4N*$bfDC!xm5;yVJ3f=PV8&n|MZg-{unRi=uh za-BT%PkQC`S9SVyi;kY{)^B~TR1cI_a{Aq;VYDsgW~Q_raK44~1SRj>qusk_RgBBP ze$e)R^2{>`=@BX@%~vm83Z}<;_3%CGl$^g=|M}1VMQ@$DtiS&HJxZLwd|_x(BM71k zXd!eC^m77_X#!~awsBHfnt%qtG@28As&74^e9-ALbK($SBLKq#lrS?|FTL8V^R>7{ ztSnM{TZ3Lda9-7w>6~;%==GW|REW{G!0-JdAGt@5{qlBQIde|OjvUmMjYSB+!>GHD zcqgO@%u_Tc?_|DewP4wgT$I(zg@ z&7wJQsdZLkb5Yv4wNUBFi^|Hu7y50#tejOlvBw86EHar}gF_WeA`+PM+duS4%sU2k z^wq!D{wK1~G$_-WjeAvp{w>Xow;&V6u=>iT9X5eDsZT4|%zYQb2XMa)cT$FWKF8SI zO_u<6tO4w>QgI9MN>5A2<{JEnvOEroXVKySY!O@O2vFCVU^Y!Mai0jn|LhFqraFxl z3!4nnm?FgTJsMJbc1bqs)IXo=xcB0B_)gj!M({ssS|OLl)iccR6JbA~>d)84*I<_O zrtZ&U!#icSm9Dp(y%xQ#JGaWcR^VUnUZYydc&+WAb^hD(o)C{9YfJ3_zm3f586iOP zmd_?oBK%vKw|ik_bnlJ8BYNx}!Dz0o@kF2%WObA9zH#F6sHzI$w4*A;xR!%GKb>H( zOeC=q-Osa9I)QudvtRiyst1&Ea=f2SvVYOR!^bp?hEET`mt!Ndp0|%_Hu>ywfilrJ zr}`6Yz9j%)*p8W0KfkT2qHLZw(C25kU$Oh=qLR@f0vpsb` z-{>ywFEhHeZNZg$nGktLx7fAe>iTJZK1(|uSI18a=3Oc8+E}UFPxtrZr{5@jvpOsF zA6(Dz`RPUr&f8dw=I8gPtvopIr&-z`{B0RMRDW(9E_U@@KQ3?at?)R$;QH2gQ&Us? zU;gD^e(_6R`qE#(XPW?iKtOxK*p8O>xFKG8;&`!3yRyK|3DXkaa-M#|W&nYC3IF%a zz_ll+j~GsdXCOQSAFLU$7g6xbX{8x(CoC4bdZq#JUW5pQhrH}0^|c<;co_olXg45w z-PoGeb4r}1EZpYB0RA^M$%)V$YWkq8_jg=Hn8L0az_bq3vXf8;PfknFRS@c{N>Y@S zU7)7MW)&2ca?O)Eb$LL4@$HxO(fcY8L_ixYpupPS+1`;gXe*Z*y4_P9t5tmbCRBf8ZRo> zcAB0v9jmn!nV2kOvYNmw0bGO#fDBV}Vl~t{r6|wxAWN2%G&v zyeQ;@JCKu|s@{PP+Qk(YV}IdbyN1T6G~QqD;TB{F*LkSDzgE+&W;_wxf6q>|7YaFL z98k*(&*_;TAJoGiyI<9tD|La*0Mp3mADX~a8IuaM4o0S;Few<+%g0^=oUuWV+_z3s zoGhlIrEvb_akbT5@UR!AStm{4I`Le?m})yGwW=gd)u8)NvguN^lv z+=oqVVy4&h8 zQvuHafj%+o1E7P1pmVq z$JB+|KPLVN{+Pz_oUqe)!#8k1e>`pif!O9`d8O(bm|NBQNN-D8yWZX(CGN!kdL~;t zUjy+A^c%4E_ihXm&}|36+XWzEXCmOzZ;8i9e7s;A0ZSQYqTmMZ#%g#5oQj&IM+2ZuoorzJ-M9Zi`KvNKj||hM^?k8 zuNd<&N=RGenTy8?%(LRzR50+%?DPe7b+z(*>{DrJ@v>m$-YYgf3*P)J-vEKj3PlT) zyq({G0G*(}QroUCi~VVTKSp=;U0;5htLMrr4leiC55>Pyxt|`~zUBSpu3bOPUne;2 z_=D-8^0(S%sJecdznxp{KbX(j@YDSHmC`l_f0@f$Y;6UXx$@wCjP4J?b*&u>!J9`b zweN4s(tbYImeH-B&dyFY@OR%w_W$7nn#S@5fN27_$D{pt+{Zm`Ebr1J-TW%!#E4$SMNWXI-=Qc#>&!Mg2I0D&6YVj4z|YKZTSkK)usET6@7smYl?a0U zs2UOM&1ZdHX0it!_rR_)Rhzj0ZtBMH!`|6DpfS|*r>3xXjR096e^&{(Xsf8K(%PyV z(Bpem5g(&FDszK}htujdaoc>--OF2@ouzu18JLDSG2w)b(mW5;T3UxyESv^6f*wd)(-`l)tq zt3;C^ThBjtkamW>Q^f2vHhB7mSPVr295|(;r>~+pfIC6Z@wczeR0?*}CPZceD3}lj zkXi&-1874${P;(;ZCe#K$#_U;>er!D9eVVm4{Fy#zszwaE*jAciHrk0&jdGs_Qu#a z8tA%+wn)D+5W?21+ln9aL0vlghMxJ+OP;F#uG=;$8F0SwfvYMiNAqAF?Sk%8;26Z> zF@Slfds8!b1Tf&k3GS_&oILO+=GlP3ogwbk7Uu@Jr>-*2SU}YVl!R$Od|a}3@9|O1(7!Z+lU}- za{p50rL+I#yocm(#dhyl@c5RCy{zlcn)TXV8iyUJBYJp5PYZyYE%bRLXmnyh-JHH} zE=N1Wb}ZgO@Cz-sTFtas40B=zjh9VZwy3&#vo@~fv-Lg|msP7OFH+k#t=IaEoAD5` zR$F%M*3}Cq)Hw_WN_;YkGjW)%;0o|!GbRIUEM}%)ngr-8o0ciblwmRy$)?%7-Q0ZF zgM*WJDA`6^YnF%TAGbek47Zwhd=}fue_vnUvQTB40rs&n7hBtIgW6v=xKHD8y#6w) zbEA*r4aKuk*-CWRMsRs>-th&;x5^h>FF5~hwG-T~KOd?Oqgn9t`O`mZnZFH}4sOez zcWD<}9e>)j@lNQ$^@H=SP43&cyu7@gBS)|kWXo;oV^1g(@GZ7r>6JpLvg;l&w%!lR zdn--f2b0b#DICHx5T1eX47_~?+>6d%;$B#8;beJRbPW#=FE7aa{O?9O4tIa^sGw%x z-YN^E_3@!GfUa0%qeh==t^m!(J8~3YJ}>}qE0&s;rnc5DwRNsw6jA ztE#Hh(cYt)^Oq3%dlBwY#Rj15laFt~R(ny$kDSEAz!W~>%hkmR`QQEIg6>$Ki`sj< zX0i3&v~4@Cu_h5{aT`~eujJlo)a7F^2Z%?*e8MwD=th_wX4B%;i=DdM(W`yyvQ?B4 zhv~wk@^KCJ>4(?r_rLZF;3h-^6h03c{g~2{BK6!0Z|SRl`nvx9doLka;vpbCNoA|< z(tr4aKhQV++yCkboKDr;45Z`qOW|fg8PP?dSCScmCj8oUX^=@c?yq-arX#g1mmbNwI7i%+KI` zf$z(94&RQj(b~w-M;^J~!zP$QsL9D3R()Z-zSTae&pma! z9{$W{y%S5t;pf~`ggL!rhXmFBK@In{s&wt0s#v!Ltq9Q2M*#F2tI-et`FUMz8`Otz z6WG;w5-_xA<(3*xjK+E{U?$NAt^}&nJtx)KeGxZ}@k(jGs*J*o+>blBx7yTp^$g}D zGaAM|`q1Hv+P!0wXY)RS>$M(ER;Rco#b6qdyB=>9Im#@mz%#vX) z1xvG6}VXb#@j2OrDFT3FW;HP{o+$8F=jIQGTP3xS=gy*YcPsv9yKYO=pjI zlYjQUNkJQDaBy&WbJ}fIyQ;2ze;k|+?%Q7;>br1lTWq{5@wj%3&(GuNewy*P5Zva? z`2F=<`klu9vAF);X&Ziie|vtqO9%I1{C?Wa>RUUGKe(=y`DrfgZ`0Mi5wGKM^^MmB ze_M{`k6m4(1=n|Z*M^_hv;dxX;)$pK?9cw}MXH*5kOKr{Ti)BY3_PN^eDe13=Uv)+ zd@Yp|1s-Qhc~@ria0t(UHv{1ffbfkFo`LWT+;9f$Mde;rF189TZLwhhm?nVVF7t+s zzJtQJ_!Lf|QaC-0235Zf_30TEm8}KIx=Rz2{fZw4pt*t%SPe-Hfo}}ZayO3pL zw5oa&i1tH(#hu{9wG^A=1RXnB2c`fj;9v#JM@`|29M@MdTao*s)iZJ)@pn;0*z6V- zsH<;G&%aWyJ=NK06GUnPV7(0N;QPQo zm_Rr$M%5UsL)_u@s^-#wPSmxjs4z=q#ktDNPS8->gbttTR4=N*dATX5;Nvv`Tm;kX zC@oG?8p8QY$Lg>fo&eM?LI3l+2UXVudi~g}XRMf$7O%Y5)2*sdu+_IleJ+0bd#9Ej%Qb1^!999NE=LoEKM0XU4)5kLs5%hU9w&)ut-#A22` z<}#0U6E4oMX&^nV+3_9#3h_HX+N;I+3B_cjV4pvwUI6~qm#1nCxCKp3J!)+1)Yvqe z0C9P^Ox%U~KWOU7YrT6fIw6z$Y>swtNeR&59M}n`PrS~?KoeRG$x2%oL@??VUjtqV z8rduu!W5-dV`z{RTSVf{(vmMTm&2(^-L?k zNX8Io$Mxe*{=MA`SLku^&zQ_)!1ZPQ8p-IE=HsQ883N_T6Gfq6me?jkLhParoE=ng z78n;L><9z}d!9NWA*kr4+2FdCH!XldPWyYiTiJ|=V}p}>7!N7twlpTG7(5g<@&FZG zzzaZI(>XQ`g^5wB=6RMbp!EbQpm4sTG*s`iGLm>caR0|AX@Jee$#K9p8C4X&3EmRk z_%2<>8wLQa_AapgU2p=BeJ>iPLyJ;MR$?d?Sqi46)S-9C=bfAa6|-_riP@dxK! zJAS&Oc^&xv`FVWg>ypM3T;J6Trd!2OWsYX$q3ZbSSvpksS?jsBR;usHUF;vLqlJoH zdyYRi@9G%ccwBif-Q`{E=XGh{Gf7<0k@mZM#Kfk3NuPbwT7aQH5 zM#D01+qP{*r%#`5pvYu1`y)5iWW)G~Tr;Ybx^QS3V`T+)bEFTWx8MxsLgf{?g zI6dLQ@C8W5SPbW>r2dE+E*(P9OH)}vr2hBcxl7r&lZ(YLJ{OdFbNROb z09`?00jl3wI@Iur&Kzs-Y{y4X7e7$njSxMBJvzX17@t4-#GUy1#Vs8!xW>o2HT9hr zLD3$>R((Pzj=zOlL+tJQ+X3L3(|2EPRW1VUrm|H1_&}q+_WS=?fBRQi02=n0w!U(z zinaT;NxcYYV1J7Vn=H<8D_BS!(C*l9m{T91YolyR^dYcMfIOdtmc+NdU#AyO;=YeB z=97=_*6;t$V_+3@>KlLcJSGzJo@>JFOne?pU|Ek_uT*@6C8ybG{G@*HW~*YsQg~v2 zA$E$JaPd{l3HLem;_@pIyZr1p%mNal5eSDE!=egN)5ih=^MgtK=*O3J>;jk#Tq-D~;g9~qpQ`ri0PQb;G7bQuK^_rixE5HoWmBR4=1=x3X}(WKpZ^E-qB+q& zGOzT67-ae=HGu;$&o$;`Cj;I%sgoB6^@)c!s(8ybTH#dH(`1;|`~+Gl<`xn_w1nJM zm~Y@w0vBf^W230_M{^pQtNjn{QOysV^xDxD#d41|);FmjGgf`QJvtvTuj=jhd+O^m zV?C(#C#j;0b`p}IVa|beK4zG+jG(Zs6KL{Rcp>e`JwOid^0K zk;hfJZWDsw`&aNs?pHn9B?oZnSJ%b{2;W-_ZXHp8@x*FV^S2XqTcw&X=!t$y@?Sta zGy3%*u!0TzH{ssd^Bb2@otC^?{TiLe4vTHyDwnj;yv~ii1drEa3}l>Qz;YRV2h0ruuI2*#POrd(R5)oq7F>i0ur7Xb zY(NEU0;Kc%@!H@b{6d6B4Ekr!+?(+PRq?Xv+4{#%;l$x3r(`(jMc|KR=J3ZW;hC7?0z#I5_y{ zEI4hvq53ttYs=noE^TxdLeX5AKVGT*P;}R(zs%9BO+Ve=$Ia5WTF>8?zs*~%@2?Xo z?b>(k1?OEIKi$$d;&;4O*UxKtSI^QG{N=%ED|h_~CB zt>Y&e^xyvczi?7KsQY$fzly!-#`UP^Glm6xuSdl&222LdU%aH}UOvMi@C?Gr5a4ZB zK*VoXb5pPKs!NnpyhiD>p!5&*>I!Jtw$x2Z%TZQ(n&)FuQsb4! z3G|2WTc!W_<$anMN9&-u$-_9v1l(|ENhb9G&&x?veM`TtwhUpKu%Mj?vj6UPpHyL9 zmipW3@PtsI;x!w!s~S+hj%E!ay!6Cj002M$Nkl%K^6l!GL4orytwH=0=XX>rU(6|IROZ8U$AWVmw;Yj26JWn%U4;M0&jI z_BFa=TRL+ooj=WH%EY`zhY|jhV=$A5#*aK28B+@acaeM5{Fe8rr{Ay&u)QD80Ibop zCy`89E-m1VAtpHoB)Tkh)t^Vxq6VPBR@9-pu-PwB8#nw45)76Le!9{h|vVnkPJB|y&q=a-%I^*yFF^DKjC zxE9>O?A$vi!<`A((hR(NJI@AA*$U$wc0t|>HA#&n^1l1-vTPv|$acu(MGu37qe zHvT*+mRF~4C2Ffu3odW5qg`9ml5z|lci^AVyf&9Ah2pVtFPO@|@!3+@0$JN{v0@YQ zy)$HZn^#wB5MsM^*(+*e)OWPl`h42E+8$JnB zjIcgUTc@ARy5~>y>#4i)*cfs(-yYkucO}8X&mGL?@-EKIFV!%cjaM!mMVlxa91OH& zX4!z_dGgXr2Y6Pk(}r~=o?3q_n_cKODJv}o?W<^|cl2q)+9aM;l^W`~qJExH=2ayz zdJ?<m2j^Wo7F(IWuF?F#U)N86r)f9N8`TTdS1>KOo#65twI8a?-`O0 zeb<)DySje5KW*if_w)P9{b|SR+VtoB^<6qtyROXDb$QoMa2+dmG#C5(ckKkzT;A&2 z+AA|Nb1gIz{{0&O_F%Cel6@@gJx+WyqX!;P0Uol;!B2PT<-%~{gFOS`4S)~!_aDCc z@C;lx1MWp+MEBBj43>8^mv(tuh)v+0?!5@n2*9yP=~}npcAdT0r{Dg)uYhKstgrv} zFW{Q5P;*h7%wxl9K!82Cm5Yg;W}!WY5S^#5{py3B9sJQZpI7JLfKHxn<&-uawfa?> z7#;#BaD>y|M!j{i3E>qWH%>ISRu$>KhYL|}WpO+Sl740k>iWrm>CGrN2eW`hkmWfY zUYw88);)LWGYHzF|MO)|h@-R)b^mOH&^?dcrIf-l+~OSpfxDl@bFNx&(U*{$$!S@V z&Yr7PX?`5M`HDxYp^Fo_%m7?=>}T}K%O?=* z2X+6pV(s|seY)$u-Kh5V;;$Yvg#k7&Qj&EM6#XkL140QvyE#q&PrvtBU1l?6>(h5hy!1SV_ z=Cc0zum6Y2EAq5y!&W7O7@nFOp*>s6z;H;^BAWvV1)DV5ctIDA|4U;D)m-0>{V6vsp4YHjRJvaWpuh^z0jr`pm)Oy5q^)xdrhUaQHc$I`mTn z`f?D9d<)lw-K?M@*#MYRNl})bc=#dRcHeJ-=%26j?iOX$)!;rcM)@hxI(_yp zaF_Uo5|U4X@;}LD2SAXRC}d#r5S@~%4Lfevogex|txwHC;D1H!?H8DFd-0b1aHpw#};4kVMeU0q9Cu$V_sh(OP1+juAPZV+%eUaz_n^sP1vZ4cZJ+VUoV zFfuVc7O+F#mt@EGXM_9(m|@-GqWlA8JnmF13T z&pLLz2=+X60))k(g5wEQW;B2K_30=TS8dnnU(Hh=vHFWw8jqjnouqHIy<6qGS>K`N!d<7o4@a~1 zg6sJ6{&X;}Ya_T_M>l?dS*X09*QJAFSI_9d?OEAMbSv|R*_qkQhaP%p?N5LD(=*Ub zKC_RR0hktmJx%PUUFk#7@?+D|;SipI8_qy@1K@_!6D|zTzz1&z>;>jtaG|c=%5941`V7$Uhd7-C zwh9~7-kvc|vm&)^V};hOD%IJa_G)loLKz#DqsVEcQ2Ao6hcEvMuEn0cHK8^i0^552I$gga;l1Onf29QyGNB(tJQS* zDt5HZ8bSrU>Cz>gxzwnwyp#9de}|$+qp_du*U;F47LwN~YARl93Q$K!_4cic*rmgF zxvtOiQm}jb27vDxm60+AIM)RoIQa^|g&n$lrCayzF4adK+J-x?3BB~{n{0fvIp?=#SVA(N*_ku+<9HKeV@8}*;X-S6m?kQ0c2!Nme z{A2p_zy2X0i;3E{p-QJX)gQ#pzqbCW`T%Uq&nxAmF#!{TdsJ9lq2^}P@W%lQT*P(c zh@GtCqOdFhlZ^&F|4%&r%zA=a8mj)7D09+}xdz?|Qj+mT0ZxFOI?e(_ zH#`A|*)a3XeQ<|K9JXCL`x-Tm07 z0B=lC&539A+JWz(G%~J&)HMC@Y#sN}m&ZVg{kUSbO(>Tm`Fl zF{Wu&WKp{PLmvYS@ga?lbh5FL3vgN`rXBC^S8LDUtPWou2Qy;K)50)B|3pswJ;C1u zS$>lyJQ^Cmg~0#7uir1WI=a!E_;0j8KEUt(8-1xcj})kDoPkt8z24TqfnfQ?C6#{@ z{w;W$0HpoxEDQYJ`kBGoW&llka^O0@$N=q!3 zw)t{2tFm+nHm3`0IKFy%P^CF+N@5PMQn=YOd8K-e?&`-TBx?8FPw7ex-Yn1-n&kO5 zzc8-#YgeIVlYooVe8!6lQ?vq_F>P6!R*vWaC?^|P>)FIi#uO?NpumE{E=*tsxUfjY zMYH+KMA)W^{T}V|uGC+-PU!IqK%vr(798979nI4IU^oEX-QCN$Gsb5h7u|F3a@Wp{cyHFn&B|}ow!bXYSo}2C zkJ0>TYa>)XxUS0^uRndGF}QXek3a9)aAg)dnxD_#pW}7q!Tc`o_yTQ81A_w*pa1;l zpJW5z0yKMxmJksdrv0!*l~G_!y!Ba%QNu)UZpHwMmQ0kf$$9Y zXTV-C?&agBztgmPQCS?E4yG9p;CmGcORLp>`GnS0#_5SiKBqyzr~c|Y&njYSOlwMT zbBBF+H;D7yJ;R!u!wnzq;*wEaEiKGfR#q`@(FuL}sSj!3{w=7K4{4;o4^shLWC0|n z#RTORuT_3@G5~J4zrtPM5VoyDgS`L+rgGZ6$Rc+^r;nV|@iQ%&pxvzeEbYJVUTj|D zHA;C>QiA8(y`^IqoAe%4jhE& zfQGv2l$+fH7~!0X(vx-Po{dW76n(t8N2v%2Be>+M&W=#w?m~U`q16D+rRw|7p46c; z9s1Di>-32ycPp_o{pWVhd)vIWog>IeYHl1I`qbg zR<-so=y!kfWBTa+jp}cDjg$LU{q1-DUin3t`uNA6)WT>FfM=2V$kQLu&b#(<&)X&h z8XzpC4199RGewEfa8C=~3MRmYNI**f!6>U#Y57&})$RYU)^0Cq=|^$t_g3u~w&C+^ zk|FqGGaku(Xsb{Y`b|joKCD6gD@>asv*9gowb=h2i!bMN#f2n;cdSz6#4aEpd2I9fcFhI>`kM-%Z`|=R9ZM`2l z*z?vs)BR~bx1+n*%KT}|7q8l)89V?Sc<#F@%1`4rANWr9J^V2=1DZ5E(4&T{bvpVM zfUAr@9pJx&q*z?9&gsPKKhmCEcdMduwFbJ6ViFUt^z?W@JjXPQ#=s~5p!OZq0tDFJ z-mcA3GkSxxRwS zL(z@L>aJAgZ{tSkpQjD0dn>`u7izrza({cFc>U$KlJ>XZ@5i4uo}1-Y>dV#hx3N;6 zejaPj&llYO&(m&jTb8#C)wI;KN|M1Q0QSJKFEaQ8={lO_?ZZ<4UWgm3IZom6Pv1YHpS*lT zYS4jqpXy8UB(W*b$ncR?pmX*o40T(g@0<$V(w zu6tG2I-sjfS9SZ|2T^}7(RkM-jr7*4X9%z>gluzL*WHO4`YbS5oc5kL*R0cZT}lHC z@Zpa>tc|yQ3Kx2ETBnRpr))L9p+`q@W-5^>ZfK+*UBPGo>K2vF$=I83o#PsN_4Ms~(2mGLBcWL( z1t9Y`vq(qKZ|uN*TT`E>N`JPlTR(Z}qMq2dLEDQGHHwFUgoJoBDA*+7R1X*iTmxeF zTa~R$v;e;M{6$^D6`_Ig&CieNV^2TGCQO`~T3XaSI;@P`Bs3Ei^ztEq4RQH5Hid~m z&!~pkBuYz-MY8};0MluzE-T`su~q$j_$jYmg9n9izRLk6Y|HlC$<0r3!ap>rDFo5% z>_pU&O+bngkOexAsly#$2K?Gro>nZH8#xFm$6xqUjg1cI%U}A8_TIY}FALMEJ#|!V z?F&jz$xz?KB3=c~>B>25mC+g)9UW0-1{)EZs+GyT^C}(>?s)7=2uV9N)>*63fqL8t zCLuc}vOzQANw3jpjYLEv5HatmnfXe@#315*4DM&Y*&#GYjv@FT;naU%guBR2{1b4m zY0m;8ri}@*$Fh_*E?2%Zq@{|66~HC{ zId6PRg@K6wp6UUSm0JxX*^-^iQsfE$*0#sPxNScJk%s3{teShK^?J>a_HWOk|G=}? z#n#-<5`ydd^97|nqTn;dzKw&^>$bhJqQBX#x#Rpz_Zb)6_bM)(^mdc(=$(kK-3QuTI(V@Tv>2ze2(U?V;ca51z_H1tla-GKD%D~xU`p8qC1)^_m}zS$)){#{7mlDji04XsP=9|bA5&43GUzV2Gc{;U5RFGtW@98T|cf3f8KcfZMeMS zb+K#9U+!qGJ(ssS!F-{3T-z>oJTC8If4h$6Vt-j=RAg2~MMe76t5?mY(quIIm>GcG z%>EDAz~jUczTiD#eED!PJOd$TAiMz(a$3T~cWVYrKn#cfZ)U*%QgI`2v{13p+{f{| z*y#3Mn(d_%`u(xFd>TQW+iWr4i|>4%)9WM0Pig0_YTdRmPa7+fHM20QhV}t$y8yF5 zOusp8W)(kRg5orG`f1Vn)F&Q8y+2JI_$Qwj??8y`@&vha0cQuUN{0!iWL)hs@fz4ooP$u{UrG>f50pYK! zt6K$$abOViagrB<%e)TNTy9eNsyywvZ?7($eN+9DQ{WH){fKe#Al?dk&{nY1-dQvy zdhs$akA(H)%iccw4&B-(RyTAI53bLbh+m1@*RHSPF z?FRGYaK3Rwld}uz=^cPKS(y=|dhtg;(Ca6!Xw9B!<+GVGGqcD&7B5sF*bHKR(JF~$ zGav@nh{>5nUrWet$wzOaE!B1OB^k}*bR$xw`{7o<%0O)4V5pFA)Pmx7D)( zF9hB{ULQuku53v-hvu;pd&S;{g4MH)g+P5{@Du>N4g-9~8wdy=OLWUy4d*S;69!B; zf#$9=5Holf*{<`hC<(2iqnE~1j48l|(rYK%)}B9Dd+yooPp`z|=)t^(yK(!2pV8%- zBMcT-rA4cWViDluR8;+-p2X$la9=%Ofh8&~+l)q4I-7b$;DG!@=TE%`SSi>mXigz| zYZeWt^=qs33v8k#u~D0ql?jz+1+G#pxV|m6VB^0PnxEIJ81&EHMQLeiY&;Bl?OCz4 z>whm<-qBpYq52MLdU=k6>A`vTT?EtLN&aVT<7V~jI$iLm9qm@)8}+eL*-G?V>Cf>5 zw_$nry*VC>{d_L%V#nvN8>-CltrUl<<7oadIa;W8T$zg0< z%2&P#&7Q*cNO2!~0D6y;6=LsEwp8YxO8%Ila0t&pUTdqy%{TMA9wM+m#|L{{^pLU&a!^^{r2qa`-{bTuQmYHoLC>X6UW*f` zwcmN?ZQhC0#Y+bf)T`9g(aH(tBC6@@R9LbN`}aI$0phoBp5^yM59Sc=q&E)LBdlUbzBrF9^pw&O_RCgPU^||s1x~XKEqi#NMN^Tp0K}!U zU@k-8jDvTM)3i!n+brOe^_gYa1W(D~fnqZS-5`?}eZ2X4-4=hZ>et%1~YHN=v*-q_a z=TYVDL?ZyagOo%)ao<{%m#@*YXU-{l0>L&SUOBnRp0Lr2&^O;bibn*%0~?0b0Gd79 z1fE*&JgUK*MyQRGd)wHFLlwUkvjziNOvd-y6Ax}w<=T9-0Zyo)z8Cz0UeCtfge5!a zjmN}dj%zQ;P6KFg4tIF5%E^pWI<5&bi*iw;@5ZekAbyd_>cA|c4BUgy|LW5!NKe%> zKX_5kA8ujO02hY{WYGZq8T$Nf+pD#9L!s_pT@5ZomVWpz|EME}&!Sa?z+BEPM4;I)rx})4X>6oKA;cUydPT1s ztq*EJa(fynu~+$ z`1>?|mv?-wo|Od$$K$8Jofd)VOzAp!oEd;U4D82gANv8_>;sGU=rKO`m|A}NSYbGX zXTWCQ-FeG|=Q2D4;Td>e&47Dpxj_f#9o=Fp^M7oy<oMGJvlj9 zxSPw;l}7BlS^TZ5%uyFYdl&B8rYEBin&SZbE5tT@0%5d4k3V!9sQr1$%wL7Th8i~u z^AWrSL`Mx`SDvE_7p|%}b4Gjaz8~#{NtG51f!Lp~S-`Q-*;gt&(b%}Ydayweb2G|8 z0{|IZ8HJ@>?K}c*0`|LuoM6ZE$;7>1j(Xbbb>_rd+EQJnt$RNV0$n6X**&y5#A)^f zLab>dAY_mCAk?Dfj*vXi+s)-f>5h9I)U)6JA?1M06(cl9&7!)WqBa)g=8HRm|5=$S z%0*}$8lB*jeM%Q<`xKoqi28e$%1f$|ixxrpzYMlP9GU|Q-Y1Tu+!IGmu$XVvR>KMy z97QcZN)?r5Dy!ra``mGzzS5yZzPtUqivZ&rR|`Oe5o~s3pcZfQF@qr7jsSfXZHrOx z5#j*3yJPQGHFfuB0PTRatFq7*h|{Hu-JFtx3=W#Uq3x$6XX)2Id#~c7=J8h0uLZOh zTEQCV!InR_AVsSy3zSokuM?PKq_9~r+S#TPuhwwd9_6_@yv*s|!}qMyL;E)Cz>!)# z^u%ZM5at(#=}=#DQsvn0$3_gHVKK^yWQ_jq2d4mWOww(5Kgi3+ZC^|eLjNq_fe9M! z>;dpBLIt^5oU6nt5;uwyXjRNlkEsv)<=mV!J$m;hHhHjRMgw4a22e}e_(;lDR^BQl zrWbplf!@vjKK(ZXc;fly3B6G>q9$DXS%_zIC7R!KBzpSZPnn;yTVa~ozX|A}R*!*S z{k1ZeUwRyPZ97~5FB9Tlz;#|gm=96xjmJ*jBl#W{P4M^Dz&=io=IsImh&Bi}*yRCn zJ&s1PjnB)va;pi!;Ok8IUoJPgg(W^eyCZwoYK>W;4bOs2SYT%&P?a)|WMy6>jMw@x zRz8uQ`@jV@V8Hvp!^I0H`}MTB2BbZEwgw9newsgR&AZ^IyR?fPkHsYwt99<=%leyd z`~kpzl|0rKwQ1|^$}VD)b0MAI^fcyE9RQQYVlLB)&F32rj$TytQE)0QPRMHeLHhcYWL} zHs0XiujA(4(Sms`Z)J`zRJo(wDxc$DDGu)IW@B5aou7y9AHz!hJG!6uR{IQ9*Jz>I z3Z@6=U7xN^m$$Y;(OmhB${df2{eAk={&JW0$NuZ_*TeiS4?a8n_iF&y567M|_Q12W z`;dHFurhnR1P6~!Utt`8;FdUJ0q2coVY-Wz*pDxubyp zb!y+ft=P#XGNw4iBxbX&zDnImgmwhg**e86ep{vMK8lOHRh-seWg#mS;9T>1?m&&!l%;D`S&lB&b|6g6X=6?S0)CP%oII_*_HH%Q_GtgToAlLB z?;zcvS59>5+dnvioqHsk9+9+z7XSp6stUX%Y%Ipz-+GmyZhztQX|yOn=f@`h*Pq&{ znfWA66^j5rjM3Oouga>*Ram+T*M6wl z*{JqsXQZ&Hv>spS18TkWCg6lc$|_u^w5&WfBmhBpABQ;vyUVRpdgI)P>cO?ZY}#|5 zc+JM2-}BOP(xSjGo0X=?vP;+P{q%iH%B4pE&w?ceD`1PyL>}=e}>L-9QC<7QsuO#^W{V{R=R;=at9c>N&op{I&4~ zgn!3ov9BrbI!%yw!Oe#kGXziOw>k))$EtW zC@m#L$vlU(IE@DZuu=Nk07wO;lQ1$d=7FFt;(oP%$Tr$0cplAaY`DwY0C0VVihrhy zTdI_hkN{3ey!Y<$y8?8AmBntu+TV|V9JfOE^Mp!Ud;Z}1_tPvL%;(Bi;&jdFwOD)Ed5$te|xSiKh4^GCv?}QtK-Jy+6<;!xs^G3a5}i$@{ZTi zp~6aixq57BW${}}z_XI!0Qffo>_&4pn?H7Ri+xY2P`!s~;TZ_bKzIWnd?$owAUp$a zn*n>y{DqG$bV73A9UIYVsDy!O{=U@0PYT+{obSydt#+8rjtm+M`0W6E< z^u1ZLk*UfnTaSP~txM-mqaDzsQ>RX%u0N*x_N?JFI0C_OUTZ3{^}t=#s#?1dmv8;L z+SUcoRXKvuEWYO_REV8=EH3WG5PUNcsE39J)Wu1DRb`bX5#q;YFCw&Oae5lT$^IxO zsI#b@x9V8{vnBx@tO6Fl?fgL%Z~8^eOpb7xHVBe-ie{0HQqod9pYqdVwQLULvQdC$ z0jJH2(b?K@+ZH|Wp>2Th&*^Xe=>??$dRNJ*eROmjLMz@4aBrBLnxX!|W;R-)7-Nin z`ocw!x__j7_iv;;1|b4X0Zb!C@Q5%vI*WG0kaq373-ta*#iFe+i`sp3Od_W3i)=QG zXf7f_zxvCcP(G^1SDV_j^WJ+^jt2ad?r$jvP_S4|h;36M4G_I2KC%7sZaSr&j#_Qrx|RO2alJU>UHjg9wgD!XfqTDb_2MS5 zrE5lSynI-zi?WngRH#8TNb(A@wF(ak-C!6*v++@wn}PWRZpKhqPe4*z1k`U;c{-a5 zqpGiO*Z4piZXr|j>BqOLV{i-&gmxXPX~1k^N|9zZ!P04t6UpAbe$PeOEcNYVe-d1V zfsp}aW@V`?FHI%!0N+IoDH=S2tg>=kGiE3kjf&W$ocH2({#R?$1lGDX1po7+s%-_A z0S$my?pgMc5L8Xz4J>R;2zDz-8(cs|9l?8PDQV>{?UfsIP%u^_8?Onxfn}%(@qxf2 zf;N@}U_-#O;EG`nq#fNAxH!D*TvS4 zZB7^yWAt_-mfA2rtLT+^7qMJm*JQy7|5nW#%hFJmJ9V8ewQKDylc*obxNQT&Hrx^x zV%Ve{R#|R>=N{1i9QHc1{(_#(?m6wsgJZ`Z92;L+My`J4tAC=}6W`~zfkq5t&nPI= z-#znFUAfwfrW4N`+@3C=1u#E1fu`3K!#9}(_&)@G+whs=ch%q1>Ujg;j$(5OVA75u zKvbJCd0NZ7UK60KPnQplt;|9&JvblWLNek9p2cstlV_2uXS^=h^}66s8_n{;v|wH< zckTJpj&G&-o$y*4ZXB+!mD=^wT^*wZ*YlUHRL4&bP6xLaT<-F&A3wjNIi66lpFg-f zxGYqAjuy=8+H&QVH=f|UGZ`_uYr~&*?fC2a`GV=LeaGXk?|A(*$M2{4(`@obfBDN_ zzWq=B?{I(ZS7vdM(|Y71yTA@WutcT5?$TwowYF;z z0K?|1U${YP8^DBwDV?af!s#~l{HTu4qSjhmjHNvGu9JzJ&PSvE ziblXouN?vDzDxh^OZ#;9j%rQxHK_U03rbGOkI+;(y*JqZ9_0p<>IaSLoTq@rd&?%8OMp{gDcVI~R-m=?@w4W9?$*|gW#s4e;wu+)>|`7B6RiPo1ztIDMyJm;=$9VdqfMAeG+(I0rCu%C z5^=i!?j0ImNYMZFfB&QI*-^^rc`mY8jQ;RfA3#mNz!TaBI&gaj-atEodkr`Nn>R(_ zIzmrugL?i0`|i>4)5ifJi_p2tBg#(aJIKkvFM5vRaKo3EpNQZpee-XQG7sI_fA?A) zfAg5yS@b7^pgzKeOi@X;K7L1qet=5Pswl70*yJ>L29b(cz~m!2RfSvjYR&e2sQRbcs@&c7@5{KUdq%Hw;(wuO5^M(U zF+=u`GtC`7EGg~s?04)|m3|@LL)oXm6Kq*BnoQ-U!zW)|H!rR{AcUJh9SFhvUfXDs z*k*wBZ5r@i`*!MY!A|;#+)CB^7J>wR>&wc$GX4enHf;fG;9A`PLxAA%ELB<_>oPBO zt)dtF=>TQ9AF^H-{0odBFjl9TV2TX32VobsT*up#2n@{8jKyZiyJ9!6r8dEsWRomX z&!6hoC+^Mz*W+hjrrGx!ER=+zrDT*UyW|cvH=a~xZlQMGu~E6Xr8@Y^vuw6?D-}(e zY4B3!Fk`asDiRD7+dNtXh}E<=($g}~kYdA)XOrQr)YqTU`3qN+n0iHde_%5Z?O`f&svbpHao;LVaZaot$K+V*}r)ygWP6MU9@5u0G5MA}|{$$&W|H zHSkW&L|~4JPr;9UlbWtJfTq8QTDkPV9jmYrPt`Deb#@`7reY(G8ub(aYEhj{x=`1l z#`^Pm`pE~h0lRiH8HfR-udf&FgZa()@JZ6D)ti)Gj&FI)0_LYiIqfR|N&hP8R;A-k zZfLkkuOB?E6BpXF88v%A^fipVeqv&@HmxsIBAX9G2;ie=1rBlA9R;x7T|4r0`>rCj zbx*6bVij)v8t7-O)~v#XAn5iR*0EWVm8}isS*j{Y(Nqua3J37kfY*Q_Q2t4&E~8n` zyk4gvHWcoy$E)i7<4Nji0C<});8d6k#;(43HgJaZ@UCmF0k74t zYrNK`KketSv@3J5D-X_>t=-{)X-*7wXsE9jj~%7psw4t}+NuJ)kj&5YdzwgQJ`%Zr zR}3_y68J2#(Kf?IU~T7Bv~}jy(cX+(PqcHuM|tzj1KRiK7uZBi@Wx?%JAo)TcH_Dk z-SN4$Yy-gFJ#Kz2c4_0W>vX}={(Nw`RKbK;Ib zI5sh&Hx3_Q0X(jKoG1^E&g;nO76hp&<>L$9?ATv8P^&ZNoAjaEs{phc20*V%n>LiH zG%s6MulDQQ=|=6?TCAO0*8?nAtT6=YwA{@~1f72xRryF^vpPG5Tf!j((TmE!wcfKY zzK9FL^NLzTT|OaBXU=u16xI0b>91*oBEYsoQOHY42y2C3lL!M zxZ?r*+2<-2u)%TsZ|}gh-_w``WM&tkX~5iIm%F`soh~0frOWlW0Ax&qsMbd($7-@; zK=pv|J$V0Cv1j24+!G+~FJd-c@(OwuE9@Mk1Ut&{YMtk>z zUw}{XIZkdD*_5$RP`+9FpZFzx@41t@y}DGt`OqG9H1=v1FvTbU0Th~j&EaN9ba zK6T2wt~qpxt5@f8;)y0eO)Ku{E}5bOC;fwb4-QrY8Vj#5AFt)BcRaPE9d(l>Idb9z^Tq4wY`$s-5>d zq>|E&rceA{-MarO?e+}L>PYQ4=>B6K@L?3F?nz)sm<(+~t9?w;w)nbLqLFVjLMvQa zMp_fs1te;(n0a3o{!MMb_)Q-6PQNYTf~{p2ydtBx_PjQ@e>|G~bAo?R-*4;QtHHme z@!4Q3X?(7#m$q(w!32LVFji(JkmSFSU40{Zb?x6$Ff@P1Z|idJ@|I|J{gw}mg=?|A zefV2s-mRIy)!X;s#<%ocxI6=kvPQTSv4qjttK*oc#A;Jniuc?NelELlz0=s9*VdMc zt-hsm@=Mh?(8&hsh|-eS1Vj_)YQs5gT%Uva%>)~z3E%**F^6VOS7(cQF*90N7}bw{ z@}^$I73e_U7|-GvHl5TJ_!^N)L<=@MAr7^73XQ=Cbr){j%_RZ-2enO4I)pvY1 z;xS(1^YaAf9gl0*@rL3H=5cv97JuHg6N={AcJ&;uqq{o6vEw(oOS`&`=JKxG=wMr< z6WJrfUQF)sVR=it4@oa=@vR1{i^t$F5a6v&*uPc2@CLxY)o(U@UEvw{IcC6KMDC?z z%~;-j+(OFHUEaz^P^C98Ks%9nw?jE@{3bg}7)&e+%|T9i@g-j{uB>zx$Ee`X&Q7Vg zqFmeai#(46akz$?oQqanYd1h~4T{I7yS@2@D*rHU=V~qt0M0k>Z3Il9ik_M=su2Xu zog1qFi%S53KMxiB2;IAPv!>@FG{7dpmUW=y4^Hd(H*1xXmZ(>cv|tGU>V5nmD(lmz zuY*O78V6Ap6X-PduEQ+hz~;&5|^OT+A}D3xxn)S;So4MAH6FyPwK9Mtxs zRYu&^*y=4e=4=sQg}g5W-`%(XE(cCJzw#Zx#c;2f9D`{Bz>a7-%%kF;jEl5HHZBH-03T$tB$bVvNK}!d z(QEJSHCL2UURI*U@siMn$B3lZIE_#9eW2kmF#-r7*a8~?lq}wMpK_|UD=Hdb!1rvllReb&3FN@;n;@E?BJvZ=-;OHEsewv3cjP5KyBheXYuhngO1W zZet?h4a2T4kX>FG+nD{s_Uc$iglpGhwXWy0I$ph{%GcTmXf1gBc)C~wSkW#oP);Jy z6a-748$f~e3741fo~fiAo7J?sHWqu`IyDzq_HCq6udU= z%Od#GL2S!qejb0?@y7yOT2Q)PO_z>iW;6lbMlJxWLp(2sxu=rU!*jQ*`;va}p(-u=?&}n*sK2vS2(e_NN`qE99Rm3#NxEceMY%#BS_v4u95hxpr<;-}+c7`0KC4 zXFMyFxprMUj_+3LSlwIYbNyKC?<1IQ?YTBx?B}tx(JfdzF6|MPXfEyI;C6!R7$4r0 zK-^qD`L`R{ItlfG9FlHdlJSR%txh<6z-QpyU!{M*Cp3Kd;Tib1HUq&gC(FB!U-&l~ zsI?wS{d=(iV1A~X8(Vauw^OxOTD5Cyfyzn>bp9eL->t3MR9&KqHCs4IugAsNAgbnR z>gej!IfUub3=sT>rx1|FR2^NU3cLZ>skQ+~&7m34(=({F_(c^1I#*Fu?Fr}o-Ceke z!v;UqfcKIBoEyiFeTE*q4TAwxOL4n0*)Yh;NYuS|-v+o~mWF!< z5KuS;=Q}xY@RXi;`HVgX%71ibuI6I_G%QF|RepkJRxrZ6^t89Cq8bE$7Sq!aiJInw zz3yrY<`eLA;64%8d;`7x8W@@falZpsU~&2-Odj$<`8TzGllkTmw43UWYrMBXQIm~& z=&nkA?6G}%{<#xsK}%yMJsz`%L7lH_0!T1Xsbc0cd0nPT zh@0mJJ=29RJibmDoIVcYqA)8tUW2$wv}KK%ge(Bm*wHm^9?UQW;p7x|kfV4%NJ&6o z`hVGb4=Bx!>pbx5-2HdXIZRJa&cF;EaNtv=O%hLMTtCi1s&#tw3edOI^ z``D6Kk}cUH<)s4600JODq(Pd1$$2{G9RJSU`+fD^{k!Hz_XJ`FA~1i=ysoNSw{C^^ z{`czMx^*x0l~0~HL#Khch|r~DNlghh-TpYLHs48q=d>jGDGp5cqIlw27%$c2=54c{#W?77BV_NO1lHXsCjw=p{TH4w$gM)&{2gC8<>ZgK^ zBe=Ad-0D`y<-47K!NMSI08LFyBftqj#O%fpf_^ivY65HS?R_dd!5q_|a&r9=35blt z=Uir{FLO730WTjK!B_61hK~dfmtnq0X3d~>jY08g7~Cr6^TeeNXU&RhfHs<|n!-2&T|A z^q^tw__5mb`=qjK4XUqW09_QI`bPoQqGRo;+}g8vEtpTs$MxZU+Hb>$e-i1d>EBxY zxZ1j_;c3kA!SF6u7GFnsA73;qZ}e8f@nME%^;G85QQm@Z4Budi~Tqj)xYVJ6vGxbGk0+4zA4 z)RCba8T<(<>Ng`NpF899dp$!x@nhq?ICG|jYWTCLUss6-X)N!resmg*bwwzmuI>zN z3gkxkz2#yekJjgxcu4-y2Ogl2x>CHg|2=dx_tG*pu>02Sn3fF!e$z*$mTA0@40HDw zc5mCnbN-u=S5k-JzQA~4l(qsg=pmqphVCkBin-GkAtQg>oyDD=nMNDc|J&Oq>252P zhPozk?xo{2@|KFX4sy)fn^2dZO#w$K`$kuQ`%j{A=LRzI+4#Ty;0H9$l|?J~5xPU9 z(ZQh^_F)3w`0`F3BS^>4#0ZvnokM*NjBbiN<}=r0VxcCQ=MPf0(gVqpbopWHF#x7HTD_pf$TL zq6a`SpHf@5AST*z!H%&PbE|w%M{rrLPtuM*gJ`TU-QI4w+N7{;SxmnWLk2&#JPl#4 z%xgQytI!K-gISfiayISk2Y4tNPY}X>xs3Yl=b06OkeH(-450)=WE>>id>EXdSQq_q zu$qFKN5+mU=gz6~y8^*@PlymO4BDwy0Rv&q8$&Q6r@5gb2~nuWLE9P>64G_!{!^oP zaOX$u0q7lUOo*R$w6E~T@GUm%(qTdbPH!|2L}5c)F|gAs%O~e0*KM z?|zvNzZ@+ePxbx$mA1>hhM2cE4U>tGn1PiUNC*H{<|2_w%s^rWR+#~PjOk^6DcreUqG77S&3N?DdQ{|R zaYuN{xw|`kp${o^6_~=a?^TUu$+nZ6BoEhokJ3Z?F%&c_rrHusm{NE-`IRR z(&%!pr~Nd&1x)h`N<)0NZKu#6nf~M3$Q-Amp|%wJ54E9(gUzM;xN#cROQ9v~bF>4n zWm7SpdSnlo)(M=UjetB_@_*>T-G~%c&>H;&I%s68hw8NBWZb*DMzEzi8y8zBV4xR( zO75)7Xy6ik*3VFwvP@Q~Cj>IqJX(>Hn}za*ax!r_SidIQdnJf=9inl-KAgYUgO^@CitSCM z`1#L0fD5P2p_N(`CHcH3WVUkYn{Hu#nVJ=}BfxvGV_h+-H`buKx)QUrVK6c{LI2~6 zJZccQ9_yswVus8`V|6a=CFD7yj5O+xEE+JBM*$sK7@dybspr0dN1lF;!jO_1@mPLh zG^gj5alAE37jb%i=E$EeyXP^5f-DXU=}Rt7)t~CvAEih;Wco;%v+AD zNJm8LP%`qwkE#4S6s<>tvK0=RePM&Hp3xSH=-85!X-8Ihm+*@D-f@VA%bY@pwvuMK zLuEmXsrK*!DyFUAss(?-dSNR8-GJw3xd|}T;V>|1ZM&F_I`#f=K7#QJS9Mh{tQ%G` zY&Ry+(!_`XQ5Ba~f+4KtY&E1v|AMw0XbALuddOH;&Z9~E?O!hFy=+WHJf4+Vta3|R zESQ+-iiXW-KK~&#N;0wY)+cBTb&B}|*w9qZcW6Eu8ulVtZZgvgsD;CK@OVFk7wJ4X zFu`{R-Eh)%DVDksr5BRfss;+=@7}UOyqi1R z>*$&f=sx!o?xK!k&r`pSqWTYT;Di5xI2k-=P5}Xp-DOg(f6p!Tc=C~ZX-6OphuXXG z?2~&4+ev0ON(Qc%8WQt7Q#(O}cnhehq}o0WwawB!UB}2E)%(k-3YcTV7Ue*H0O4OC-kybsSmv>ji4ii|gR-{&dZm{}U3LAV0E za~LL09(N+C zRWU}RkW`tLRr2=!3=}s$jb}dhEDikCUG+2evxqoPi-yPBrt#*<3AAxO#rS8CyHDk_ zAgu?T^;fXfp^Norl@OxFN;HoOE{bh!YoSU`SjZu-<09?;bGKi-s#B8>cmBoj1~eGQ zw=1=F729sP5XE>aRuExjVt^pcC!S>?B9kh1eeh93xa%k33L1~$Dh`6ES#5(^31g1a z;qu)TFz&9y!T5ur>BScA{A*G)&Tu99XzlEx%5V&LI<<_FQfMf2yo*AC9?)JO z?Qsn8xKx4bv$f^NYSU+c{IvDQU=|x(vA#k1bl)mF0HSM0(1aV0uW}2Pw%Fhn3$FTp zSPR#1;_(fBx%f&nRrjZ%d$~5_%dVym@pY~ye>MHST-#P=bS$s74Ypc8gy)wl?bnSj z7mc-GM&GArwBliwx7g|$eLwG~jh?}n7k{RQ)h-qJY2_6RrdYw^AQ$8>eTc0j5#Q7^ zkPrae)VDt|_?vA8R{OyDb6_7K`*i-V5osJX7U*YaC-B0mIz=@OXi1rQOt{o*Vnc;dIQ#B;1I=T742;a9ma-HWZ; zA3|#GX4G%X$M5`i-RSRWMp1DYcJA6ub=hfJu3tcIK?B_k_8>bi14Sui6do*+&q&2k z&oGYh{QEMQx_TZrSf)k%x{5;X_NSt?e*(Q@%Q$v%5G9d0l$G!}LuwJyb8B&mR{D=# z7^MBfbe;oF<$2s0{HMP;h{t=n@z5?B{yW;sDNjapY>I9S=O_f2$G3jm#$90AFyMw^ zd0_^6J4VPjrV%!c#zxu+pq{~zqwnL`g$t-E%fKj)BXrPqLStPm+exEU{TXz(525wq zMKsoD(=8uq{@^(N`X?8-^FHg&+mi^s|GgLS*yH<9(s(C2PQ1x^+Ru4dKu3EAI=CQT zw|*Ut9j4HrcLH0tt|OC>f|vIn#fQ|C&~AMd?H1g&u@vLnDa@t&zdQHU&@KZ#3pAD^ zozK;4$GdTe0)mqCC8vfw&h!1L-0>^OrTQ^74@RfvDcG2H#{m}TIjMffJ$UxHub`o6 z!;N|jKM}eMG-`0VgR0-BCvm=ut}e-UrW@nWB_5|HINwiZR4cxaC1r|;${6#yN^ji` zzEkfH3IkPt(F~}Fwln6(NJ$qQ!%v3y62?DlRSdrE@)J2ALs-}`M=m7eXoqR_)9r+d zBaSts!nk}$Ky_U*uGq*0Bm#zCE8ZZll%p6Nk8rsF;Bdsx$0kdRerV4?@Nfvu4g!Bm z?zllX-y)+TEE$n%H44Y(st4mMzWtlZT~P3N3_&=GA+rHpis(_ z&Eq|TH2C=Xu@QXXcDXaXH0T}dzqc)YDc0q4J`G`R-+MO&x&s*K>p~fYy2TarYBEHd zCG=!6L$4%J3LkTFcyvb|MR?YKp6&rBCdO$ypqlSKJ%&6G(9=iloel~U)^kijAN^SE zsIP+gY3skiUEyW^$Pi#RJ)lT?L3PatpwU)r-zcA^r7ezc!iQgLpWX zHiVsxd8pp76`egp-1$$z^Iv%ozx_}D9VV#(aL>MNT)-}n`5$wZ>8GQ!NF#GTH91W~ zdZiQ~oWqVi_t9ywxgZ8doJon5~D6OtSUu!G= z{I6d@I&BEFQv;#3dlI|X})M6N>y?`WoE}$`dXNd6rz3Wg@ zU4fC)tvGtR6JunCr)TDQHatp|d%E4zp>Hz%)wHCaOOFP1b-R!g$;Sj4^jBa1G5+i? zUq}Dw0G@xc37s_b_v3fZ(*O7bCa9s1m%4yAX+xoZn3@7Lxj1s3?gH6Gw}VFevI4xpdL>>O9Npqe+MtV_+z>|jJii4i_(X#j!qgX>>&@6hKuckSYKL3 zi{S-0*FTB%w4t!BGzWEMx!AI&l3EWD3Ky1~07JG7cC4?#8%KNGIpS%$7?W1<6n8?W zDCnrC+W!JQA{;wC#3LQ)SikcgeBmp9FVybbGyO-2eh?<41zdQ zk!L+I_=*{V6=sl*@y>=P1h>2-!%W%=WXIT+(gBP#Uf#8iv>$hr#rvQ~Wb>#F-)9uK4iC2T9hXaQA=$LU!lPDX z{%50u>^B8+bNPJl(Ku=jj|=dS)YL=|kB2SrJ(wDfSJZ>xGf$SbSQs`2^~(=Fj^H{1 zVBaI<%?^N#C!YC_r>8m!K0LmS0OL{|gDGAM-^W=i?YDa+9GjE1@U9hpHEmxjO~V)M ztLg96;)$+L?^^mE--gv)jh+v)u~@7!t1FnLt&ZQ04_gh_Xj*Kv!n_{(wXRqd5655@ ztFFBy{Ir!P;+uE|5(0pm_~s{uesj-&|B=#6_<28VW&UibT$hz;ab=6IC{@dER9H&N zq0zWSRB!=YTG@zH`ivj#Kgyk`A^N+YMJm<*=O_f&NapaNNAE;db`cl!WSZ$Zu=U(& zJoo5E{LN1;;wAd5-oCk(XWwZ_pM5Va=6Qb_l;d%CJooH_G}gBh{WOgCCx86ElJP!D zBXl%CNLP0oDyVW^m4k8iVXW(IWTw!SUs5^JmPWbYO-EXKKF*!k&&6>!8h14DJnSMa zo;}G0@igrKWYbtyG48!{4|mANX&<1E!izlT9pKe>FQT|S8~5M61-Id-6~6pVD+Z%8Jg1w2 zQF=ZQ_IoFLP+8xOj_zd|Gi=6NAD+bFvu)f_jN+?LZ=?o55qI(iskS?cfB8qJF+vx5 zrL>`tMWMko1sff7FE=qgj}7Z9@e429jt{BQ|6gA|P6nKw!g-A1t^My{D%ysF?;gVv z7y22rw=g}ogrVVCw02FRAin_r?4NuYRdi+c_NyPFtSAq^^!dGX`&WpCscH0ejp76a z4CB#$(xg^I3B3bQ$Z)=Mi~@^v-rs2yq%N_)%a~e7q1!_q0l*xNHP0fm@=kp7m%oXv zyXev{cqHBYd>a2;ps}~NPfp@gJI_s13nGIW7Fl$oCVnuug57>Gu1P!squqEh@Y1t) ze6N^IG5^NE2K+mpe-(r)LGhK|JbB50-xNpB--Oc&5HoCN3Z*gzE)YHP%2-;Ibafl2%oD9Zhf@6ltc7HxAkl=mhwhlyDxy zzB{V~3nbuS#3%LOp?S-5ISbcM0#gf0@MIK;3I>V%T|6EX`D#>Hy864p^Aqez&l z86lSzO)^mYD`A1W04z}z|IOpWD5J~K>SEamTM4Rb495y|^_1aSEG$b~ESS7yY~FP* zpT{9YCk80!OhzSl|8uenkxp0T)6pr;TN?W&+a+_z%qijVs#L;l4#z0woC76{fR^R+!G_t52CS!oIL36n|P?-q>d^$c|8^2uT_S7I4(()y8eG_%ZqTe%i)j_*P%=)$lHdZ)Fy*M$^jTW5bPy zGw(m_N?$Io>VCQM76i8!jbKVA!c9H{2?4-O{s1I~pO}HwW_Zv~$ZXHkh+Zn08mZN% zlVg17jv5S&(tscZ0&l*#A8q}!INv_ZK2a<{?q%D?V%)x~9(#9fLDR-23Rh-v>t1Rb z9B;?2jrG{MsfGsncm_E$3*$UmkxnK&LYoPgn55T)2^t^l<*sB3Iywi*b4DoyNy1o^ zdwzYh^qeryF)z@He;t178&6^PBhTOfwF8du7>15LJa|hj21X{)LL-PN9BcmwT`P`E zp@dfaM@Zwv{pWDHhraDO=bLKsP*jzTuHJFy=YC^-HR`t9fqTC8C2ZYu7ri>f^ryqw z`E*5HwC2D6)C7(+M=3~IBIBP#m2dstc$;|fr{-36Cg2c5uU&N+;&Uqb;d0I~-kOS# zUlm7djBsrACzW!?x*AdtJBC*rEwfrJI-!BX4f4JQ0E>f;Nf=;^KS63seRaW>oXiLo zYhQ(7nV~w6hhuQpcguv;gsUKMIBe6TcQ99|@~~bg`v}J+;e`gt@*oP*HYI}da&(p8 z<;cX2Jvekn+o~tK-Fo3UOeU;X0j~bKU4Mf0zH~uxn3O2MCBuAxph`hX?=tgv6Y!D+uolamoJko=~{tmvgYhB;0 z4U4T^YfrI#gW}VxieVblr#Wr9#pQj>{4Dqc|Z7hOIy4ao)7=H>DAi$ zxHPX+|C4A_ZTR&l$HT4M;;>u~ zsDD{;eC$8SKE7TV%765wqyh%^XVtR!1`_$t-VDTjIzD>?OpGWo1Bn^9zB8Z?lYeQk zrM$({w3eq!yD`^0etKFCRh^;e>?uaADzN`M=oODj&*qY@x3T1&ZTO5J{eB# zWKqD7$whw&JpmwT7-Jn1c=_M~?qrQ{XL=c5DxfR8hI$l~t)n@C865ubLt4Z?jdg`- z^g>XG=B^4pHicdTqO@2qhIp3e_j9T0&P{e2_G{%?_6*#!s{zTRvot-1 z_fNFD1^?EKC2oiP2vy*vp0AzYb=CPur6$5K8RzmMs)c7S;m%#9ZvKY`W-&N4iN>ll zF2vJt7vTjQ>#61;eEHcgV~%e0UiQ;1O#+3*;&m`{jO8{Wj_{DcRjR0|r z3i@4=2{Iu-!0QCRQ-Mu$AX&^U{|9dRNK*}~IgQ(-K-g|Ib%2?#^55-vEBTj&t6#!OU52o+H!5HvS7k-;|bDk4qQErNLLUA zs{TPX0Ncc|o=FEnq*y;lJfslxk<|l%f;t`aNf5F-ZoU*N=>6!%q{_r|UDY4W8Dq_l zgE@4oOSphUN}=RO!aupZ6ex!VFgpfkDKr|w1H0(mLKC@0aBW{jc|2ZxzN~x$kN?!t z>q-X&q`0N|>pDuI}ofluEI_#dNd>Ahc1>G+S5G5c2L$8%)VX1I%e zBLo1cR5NYbbPHdZ2e`bV6 z^Js*R+*K<*1~gO^AdTlmtI2%+{jWcay?eGI!hBAofM?oimA_&;<`%PX>fQf&ZttzwT4cVPF4?F&RRN|h!NUZsHQ8vbndusY{=!&gCs0A!nL>gkYCvRA6JVG}4({4ehkyEa zUvLcl+xtI2RwNslJQ~s5+=+`9+i0_(5bZQB*xo%rcY+Og^7)5QTAEKw;WWlryceT0 zDR}dx|Cc+Rp!P!x4HFKN!C0VizgzK}zx_{8vqenAr_qpo1%I%s$iVmFf!DHONT8n17d6nGsi+fXefaD{=tk zS4cQ?!h`Za@Ziz`T38S?%;kTqqU%dARY4Q1>W1TZdN+|yIN_S-xUK0R4l6pQUu6M) zfE1)vPudqECxMi^M~;|vfxU?hJ}8K_K@!0!0m5B^b@-bJCQt(-oXGCTMOaCFuy?NL zN?_x9!amBdr(Q-8Y6~4aJ4PW|I=0kaDr{BVc&5V7tJT$l)r*gXD`DG?+rEIKZ~PZr zyl{rX*NeDF&nn#%@@?8!>D-qt(pBXgC7!bj^vB6DW>J8ev^0g8i81tbH1l}SA~kqE zy6jZntWE2e^6|m&1Ya#JI{;$-RTi%S5KqgeZ|V40b$poUS}?ffZ)AL<+PYD6SE6I(hVRo8>@wy0A=r<>V!yi5hO<_A zJbogdm;q{)CPHEc5;KsPfvcDSeWdK;Wog9{2ADuVWb`4^Im{ap*j{u#i!RXec+@$C z>`V$W$Y7@BR3cKm83o)SUtCB>`-RuIBi)I@{6!SerC)l4miD`*@bI1KJcGX;9UZ;g znWyFd`X-+JAI28Cw92R3y%g^Dr>D%Kv#SRkUEQ=YpG-G`S@^9lKaHB&I+Reger9SM zBf~=|D5=0S8RN;xQLJmIWq(*k&4cBX4192;naut)@v~7&w|AKlTF9nxtRkM-FDoiR z-`F&o+lDbbFu<)b;F)K?gt_H(EY7rGX>t;gf)t+br8_(dH14^j20M4}M0v5)Y8UXw zfAN|tE2gkuh`Z-nY$uViD9TGG-8s4roS-HDT#jLZM-Zaey0ZoY-CYy}RI{&RbX`b6 zz}|c5&T9($-+LV;rL;{zAKin!Z8WBMf|>>Sn49I!KfMB^a4ZXRv#2U9;4VCmF;GK6 z8Vs2k87RzKMs-yYcJTmU}m3%GsLdTKw=upgg` zb@k<>mB|wXV>C*bj60tCO`a(pLD$KbP`B%OuU;)8RO7#!s>88QBp=!jW0#^1&4k9Z9}?z{pfG_bx; z<}c(yj2973$R4tc<-`}rCBq$KVJMhDz-8E|tLierAJGzdT`H4$zoQlAl@Xuo%0pb0 z3!ry_EnIwK z`NShy5=t&Dk79aim@ZDsVtt8kLwSYRbHua{yHYxxc332MmH=A83;~LsE~{^`aFo7W z-f$HA!LQ@f_HjOmwBL`ProE3_|4MD%sJT(UMO)!YWAJg~`)hTLmc?t~#ltNh-^OZr z!?oCN%lctuVI2G*I7Bb6bo>=pEruTtPvjFb5SxL703bFMi9})sZr&M)|5#n^OsHP` zrH|Uw)YR3IxMsYCq)dG9-Usfyc_}US-~0G4qOgp9;>X&lLe4X?WQ=q2YiWJH1=CVv zr;$3EpvD|s{N1{17Z<3hIDWbtJ)`qT&!;MDYB@G<-bPJU2InryzpTl2Kf29>lu`TCj_|{SVyJfb-{$W7p0t)L7Vtp3W8&l~$l~ z-7VY(&gbsgAeQGQarVU9Y@4nRGm~goZveWOvTIv#GnOXC9PGYg5xoRWUz9y0>P9H z*4d21x?Z^ztKTuauo@#*-$Rd)^I<|WCf@p@Sl$BM-~uv23jzyO6ze#LX7wENFTsaX z0Wi2XH+G)i>ww$!x4Z~3SXQ&9QMrSP((ly(3>VId8+R&PLgRU_J( zPhothi!M^jV;$7DLT&iLhpomS#g|)s!P9uusGy(#U0q!iLP$^(1jF&;)zXHq*vjM6 zhU1qT>`L)!jN@wiG+( z=Y3pD$K$L*+kPMxTh+B<;c0M+{q)L!*Q%L--&8a3>0VXcRJSTI*u)H6pBcEC51h4R zxbYt;f5+d-6x%g6HfAKQdt6ptftCxM=$lx;Z~ub_srp|*H*u3xQI8;!M+TN#af|%! zty|xKwzdvhq3*}Vjddu_Nyi(nAH%_pRvbQl8jaQ2c;bN4_mfxL|$$l&%)EP|M^2ah|V+mG**|vh2=7`5TWtEj@D-Mqz|LMF`veX9<{X_FrQq48P0nozXC;d zx6^&(7zGb=D5|JNUP(D!BsOu!kSUrSIVtg91o^e)m0aa zR*(;x7}h%L4{t|DO$FCfFe4m;>?47P$}xURhbl|y7seP?jx{G)Q04yVF+ zUNPXyi|m8zV$e@jcIxyZ;LTeg90@fHe3~I~(GLU?s;^lTJ*5KXpKm&*6Fh>C;;;>JF@IiD~7S=VoD}LGNRqp@`4N5LZbUt{)3ct^xn$@Ba&&J$$DVRF3oLPJjDZ9#xuf9zXW( zZlaOaPPR*rDI2!YcE=cx6Ae=fhz33B6`*=O1)B__Yrz;Wiv^EQ8?M!hFE_aCz_hp1 zjtbv9b__tV2?T6B`i3beZ!pXIv7h$w4DRE%F~9o|1#^{%P(=lWEP4a2J&fDjCh}!U`Iso5ahn zyowjU|7|?Hx0=@NH<4ja$BtclG1xJHKlY*OS=j(pJh~)KZ#ME+aKub zMp=Fm8FtbH)!r*Ad2aPIRr5Qz=q1C(w`Cf4vPb*J-0oIpO(iYkr{cwLeGk9*{CzaE z_b|Tjg-5yIoknYCGY%X$#WV3!wE53DJ*u9n#Ega!36uYu$V$M`3Y>>z8m#bh4|LD{)S9W8g}3R1it-~ ze@m@{F0^)xp}H)GD)>AuK&^rlF47}q1=vnHZL~4)_S>g$?}HCw`_>&a`qx1&Vi9FD zoVY~IhV*ovC(flCz|0)lDwwA0MDFr)$6BmOMn;7FD!>@e;9oe}O!tR#XzL#0v4BMy z4UC|=W)pYZXn3ownFb0=k<2r{KYZf=k1&*D4?PG>&J58e!X$+;J2102L|X!Vw6Bm$ z>;L08)BGd1C_izc89(>@-=RA-@O~6x)4B)f)qwsOKgD65RtrzI&)}^S<7n*-j>BZ~ zP``K%UG6tSPF1TmV>I1xsgdDaeQH$V^Ip^U&a>Ua$n z##W9@IC=pg_t)n~tV}cwQH-xU>+aqKYBXq#1B#`68XjrKI*X<*v0h=#7)mTJ0%ZIh zE{EaZ`a^&=?;Sj>pDgtW_CYY$7ZLVCz+4ARwj&`#M=(GX8yztBK_%nAgLxCv9%^I+ zEyVil#%N<_RpC4O>LBl->kn_N1TSuCgy5Ke&7eX!J_irpt2UR83350q_tuzIfq4hq zJZJ>TG?+;>AY}5#^WMo(RPoqQEnR5(LC>21&X3Pu4X)}axV|x+P66eH+rEPCmUGB0 zEa35jJd6#rQfud=)BcKNXQ8U5hI1RG&~t`8UP3-$(-ZBavNA5~iy!;#td=-3>` zKLeJxa^V_G>D7YYw$-ybmiO!VFvHXD+0s7lYA}}T$LC*GCHPTVE{NBHxwqb>sEORo zJ_88>z|H;yB*uT!&44~gYkX)fnTyr%>|>_bE>%+61OQ6w2!Ps9`g(_jb-c1 zJIy=y>_e3_2cn~R?MGDsO9O*b6UZQw z+)Y*cWg5q;t1HEi-#x*_{~Xpe){~h|!rc5Uj}c7re0&CWY$-!tVKv@u~#`Y(Ky#{Nd|@~f}&2tx){>2KlEc!_STs69b13fYl#XWVarD)`z( zE8y{gNa}jBw$?i+jb1EBN*0W+M$FMgTAj& zQC|aL2m3&<8#@z9D>zd8BLRt~z|jilE5Ha~4$jKSV!*?Gtds|HAsok)JL1xK&|Hgf zfa%(HNwWV$RxRs~%^dFhiEdmcP3+}p`gY{C$M)JW`x9KaNjvD5>4Umb{2(rQ667<^Vkr+bZ-?R)H3;L zgWlQx_rcFwT5)DZE(%KP(ARPRll>>0=G7*?1EhVG8_A*l&;d--bwOHYDf>wQW8M-* z>A7W?hFgnEDr0SkmLL4@##(9NTOZ@=%MO5y0m=@5aLf*X)e%hJD%G>gZ^!5veXD1< z%KO3aeVC+U$2B~|QEV{3 zPgZU);rIeN!B@kHhx_y`ZL!f_BldqVO8faWs>Hy;b+4!xB$2pjXCNT}xM^>FV&FIP z4A_UpVw(%gTWoN}f?2GzfB6e4;m8xf!UCg*bMe3b?sK?x$5#5vjym;o9z(@zuf0d3fCCukv4Ogh2=2e{E==-leRQ1a z`!v!Q;f@wh5#Zuj8-~Ug=*xZ(9Xzu-Gc(I$0N}apVOp~1qH>yUt|rL9*AzO2c9`en zxAEM28nq05@bbHO^}P@A{1^8kkBiXR*?AsMD8=WWtiWJT9g?&2(B0lcdO4_TT8A^- z`To(%Z(#kVdOZE~gER#;okC|vKZa(9 zape5J!{M`Cbc>jcyYGI4#|NGSrUtp-rOATXX{55fjGA=I4oL*8T%z{&ifZa-<~YkQJP(KEIyOgtAJ| z%FmSHqrP+9>>3w)EWB{@JW%5&z-WoO zD|hI8@2H}y92B@V2y(GQ4kp71PGZb<$PgP6W1DVaJHdo#5U$=h;ev4Wo^w6Xu6{_v zfmO%~1j(C%(-ctJ`r+uPn_~6}53pSv42)EXEZVFRlnW_Li?E&*S0+3rge`jk4j4Wt z>XQT}lIleGo9w3zkatcD;^93swCAV=f8yWg@p%u`B~`9q43Lj+X~jjwWn}&f&^g>s zMn9d3MLe3s_v8YP70GjlljNi=xIU&(YbkkQ4pSrDP5`i48?Mn+{-_^@Z~cnTTQ#Zr z7Znxp=$DQmaDMGs2@$NG;KsNaOtCI&&)`P;TH}vf|61DnB-^@{eq9aj_2|3Zv#V)u zHC**U@YTYV%2uo6!~F62ZTNI8?c;f2e=lc1pG5S0|^1ZXZrU3 z?GG;QW%jqwem0Ouu4Ft4wL_zC_7@=jZ3IM)qUD@~LuO zRaJqm=3`_gYp{1`1%_IB(Y&;P=byU=4?lQ2jow9h6d~evUdQ^oQJPWX zleh7B!~|Y__l&dpzh_4iX2wQ2$I}#i6ym*i&SIG3zyF@iq?v}2$})WY*)072pS_P) z-f2d0`CGVS-zK&(j+X9TYB5A`-@~8Bul)LN@|^#MkM%74EL3jon{%rECtIg6L)HIu z&Y=uGNl8EZ(qt0#I};1J0uxs&JK=;R1Py`!;j&Nkb-8t};L1BJV?~21@kFd&Dh=>0CAKtx`R&^((;3E7 zV?=T=D`4K}IGF~A^D~eT0DR_eabkdp8Mr<(U>`C+R(iEd8UWK&W4{ps0JTSxdR+L@-!#qsr%;vu zu?IFGGoLQ@xY!&WnZVIwXK27Km8$rKcqB+>geZR_%+<$cbe+{X{cztljl~ak=K5dOxE^kf-+E2bp?T9Gu zy5|w9?{YCrw^~1W`G;uOKo12xGpjTCDHH-Mf~x;Zbn_RTM{Z6v`iEw4@$7jr-N_iE zy6>6xDDK`GL0#i!s?cvC^UjfEC1G}~lT1{U{|D$2G0Juq(An3I!NF#nzu1n3%3S>J zHy@+{L7v&2oIoE{{%fkrkweBcmFLtK=kw`NVH_J8%IVTD4PAXB_`xd&F->~`HB}{e z^|d3kO~4}wxe=T?c>xVI1$g?2O|(xyw}g`^^ct{8dkh8m#;@LoKmGFqICSJ3F0^;i zm|_l|eEdN?@ws0{{f6Dw=b`*tq|!AshyAA}apXeOxj9TD(=V5PygdP59xl=NxQ2{B z3lzjf`Z3FGr`U0NfR_k{?g~M_es9*{wepG6cFQUJU(g*LhfO-rK@RJ#1^p^MPQ%?}`zd45Wee`{tejeUR)U zwAM`cIF_~#nZ>GWY10A_OpC4?=?X9_w*=$VGAI(m%Z2&NhkMY|Gl5NG12}WB1IN$x zpt3RtnOyM?(Fk4Z;0WHQ+q=h~{2V&y72rRA>j&r?7{HgFx*J2Tiz@WpWS%*v z^HG$q+ro8t62?Y*kd$75ob)^_Mu)J(o$qP7^UKaHLt63_re}x93nt<8v3Kd#@Bnu1 zzLhGpqt2@L+#HWD%#BmTF;Am>5uVF$$4lRTk&Jm16LZP*da#JMPxqp&Ck?+_znMn4 zX#JZS5Ol)D1$hw`X|G^5+D=;rRT%0W!=HZZ&&a>b;g_GD6d8q%QT>KDU^kn4CdoV;LU5 zZ#V9{s{zBb@_qJV7dl2W+& zk1XKbvr{;9VTvx;c*dFYmd*JL-0%f%{bZYtW)>V{=9ohIMt9qzj)MzEEhbfrzvCLk zgtCs9#(?!^I$-yRELNP)mNSeOFp069e}4kCtW#jD6`!)=V;moAWe!Ffu>y5c?*c|4 zX=PNb;G$SvB}DnsAgJB}K2z()5~7Lewpy_^RHpVcAG*{fMve|+)o?7o`r_aY=>90L zbM$UrLV}|2=1qkRVdN6Qu!6tpSC9&@0z5Tt6$45}!}{$!42W)MoKWR*P~gTH)>X93 zn=UzDGXE?o9g-Ekg0c>ebrmb`Yy!AmaSp9>(gJYhCP2{>Kzs>LSl7{J9l_g70{DPbe!*vwo&ZayMuO5x@c=;)VTwUXMX&=_0if=Y{AD9%*RzeGm}CH zUJ^vBY^}>^#C@d z$SvN0zMd9bJo5oH3(`?dmwF>qjZaF=;tu~LjRB6*bzm9=13(s4`lB;Tn3x*JRBtnS zJ5C{;+6v_*4Yc?_f<3oxKz&l*4TP-dNuIHu zqP6Y_{m{=KV`&VNbo1BKoKi)!n07>}rW4EBPEDv|= z*@W|Fn{l?a6OTT)8T)R%huQ^EdPbN+Dg_-m+;vPzTjCsdV3^(nw(YqSPk!wi$fRM# zPkWGUi1*0&A2>Hf25XUX%==0|>|*wlse-MIV5cfBrk=r_{THK38x$^RCtqj(gJM0l z;^+b_6mFLp>Ln2~A#Q-W8j(DZ8IQX3g#lc^3kgTYBs!w*% zAqRC;F(f8<7?g5&25@=(AwCP;;@PsyI}#!l4k5p&=OSgCG(aN|>H$jrMc!3}iY7+mLr zKB$vPy1%^7V(OEr3ZnZGYtQwaI3W$iN+wBSAVdPB$?uqacfZvt^XjYmu9$x`M@}F? zcc-!7kb+K26CjrcM7#QD@c!u$+`FSBhGq%9pMB;?c?BP4xPI){i?6fg)+aDEK7cW5 z8s*cSXntOfn};aB1C><`d^gPUC>4(=(awpCj^-AWyJypH*QdEwTKHCGbyv%ml$1Dk zfZF-Daak;UtD{)(c$jEg@No_1$36`oexiJt$IG(>Ivr8Rod^TmHGHa$6$tI@Ks{{XoDZ_O1ui%svym?Cx;u%N?0B+)& zpBQ>#2CiiW^g*)A>aCWyvWbZaOJ4W5w4wn?bWsN~z-cs;w|Pq~iZG30GN6rhRXn4g zhUpRcoL|C@tp%u$()Av9q%U4L$1|u)`0CF+jij^)_V0fcsWg5Up+)>fG6&=Rr!g`y ziYU*tM_8UE^Lc(h1?Nv3!UylahU$t43TvA1{U5xGiu!uo zmQ#qSo?-3`XCN(-#r{QT{4R})-yRAB=n{@hm&K)16F}-Hof9F()xr z$wF`cAbN%uF+4Fv75@lY+dF9_kzNQQ6}a<>Z({fDk2=-g>;3?If&|C7%YXRd6y7@> zMgQo$Q}K`R9`fhlRLZr(Eg^v8cFCQI*>x)AV&0wlK4S%syA`?%;_AZU*itSm3UJ6o z3MVc&#?ZJ!Zy6V(8{)6z10?sCe*|}BT9|4br~(bhB~*DO?dk}$N^l1Gh$OaG4FtmPi8GmY+OAz z*VeF*gCK}O-NM_^;U6)ED&rrgtwDNrBxB{i1dXa~yOpZM(eNLEd?<4=Da5-ljyk&QtS{rcGA@X|F&kF2 z8qCTpj>oaQjsk4j{UqN0;h$iR1_8?}@@R`>f$vJtMoB43%2R2WuM0Va^=@9Qp6DuV z!Do~%mp1&h>gMr1C)IxipN{f=9m^X`v869pPi20vIzH@j>3G_g!~L|EUF+Ovyf(j= zt9!XQv@(nRIrM2;xxs{Yxi)<|O2^k*t8P5pZ#TXyKCdptw|k9w)xY$Cy+#5F^v~W5 zBm@ATy?dG%QDO$J>kQ~)q|5)%sR6`UM*1o5Xx_4i>o3US62xc+-%QL1up@>J0KFr7Y3!{dVV`ZrY12yHIEDmAex)c;o`Z|RB4?@Irx#(S>9Ra#8Nab;c=bpYlWTzNSB*iLwu4|N{`MAxyPzfO?gDu;8(GFPkyyt#Dq z9ya1s@dHZXSfq=g2@GngNGX@~7&j}8k#%YjLS)ZnluXYQtZ)5u3XvaI!97mfJ$yiTqbj#B+Vs{j?zZU7$hrS3$AhthNFBW65$+VxIT)Oj-~0_ zq~Oz5UiGZ5#qn_E6;!@j{h;*ne^t+d-;TjP>+$s*bNoH<=gu#)`{kGWFzb`WtKB0X z=F?Hy>czval(#;tRo{aLKem9N(so^`i9~r~1}-}T2?4-mrzcUEn1N6K4A_U}N+a>{ zEN!u0S1`K-_tUn(l3-wboM*{t`B}n%>m4Fg*Dt2Ay`=>T8EA1joxAc2N$EIyegx6< zQ%KWdlZ*A~1scWT;<%}yhC9$|G_3NBL zzS)sxF2qx~=%pJ!p07_{q)Wu%6SS0l0srQYUq$D@7@1?>8(-OnJv(+{cx;i3eH4WS zm6#l#z)#-TPhM^bRb;X;KSN9WXYtY-=P!> zg6=caDkvk9u#DlJR+JT{;gJXS;v2v98{ADy!=L>5i}?0me4jP~Qh4V7RvH_mYeEVL z<`$-~NSB3$g;n_C?LUX@d!M4##YcA=ulN1Gk@RNgmvOW?N*fCk=o*+~Q?%+&<7%n2 zk08Fs@qmQ7U4M1NF=0yRw?NK|2)=gqr91xtljnp4V*VurAWtBu7*@v|YI)~4YEis2 ztgsJ+6VI&#L*`J=srn~=QM>5E4H#qoUR}=00wfa;xE*&@By)0U3GpqkJk~amgy(Px zw62Ojc2Le!m=eiYh~bfz>Z+r9cNmhRM`%zcj#&RSM-G{PY@h+ikz{Z zut$1Egd(sW7YTnPy9v8?NkTYc>NQrCyGyu^0HFlPB&y&VqX`XCSW%BxgswSptAKbOP%+b;WQ$9%bZtKBObr(b4sr2B1Y!!!Eva4Yv?!}VcnrTzAW zb2<8}(OnG|wiWy!)@nEbPt3qI&cO9wnO|cE66lE;NX)>eYX+I=n z=P5I1!%;I%(eeDwr<;jKmXQu&_6JZQ#8m|*SM7nOse8@L7oxe&R1Mi| zXjh=Ix)6`u`y8J6@(Wm;7{vMW2k}?mdkd#7bmOkQja1tnkb+X{Mv2E$jL`{doQLqCppuciL^8xohV01(|y>m{UPq~<$byy z(}myhHVR5kO`xS$ej~VxO2dvRq*e3d3ERnx_hts1TS;0mN_`h zWrz_7DgxrF=GqTN84gbU5^a_7Un-y7?5uR0@1DX@3P*3*SmfrM7?%WhzX*wER$SZG z-X%3wGVyhl-$p@T1_hSH{c`u>YWpBOYv*dm@8he!Pa{6>)AZ~4@Q;xW-z*=4LZa$TGXn_$z)f?j69Y}m zz)wE|`iS|#K57Q@^M*Um-SHV(>X#bk^$t=mAEY(*zxwNUdG34|+twGMi09kydw3H* z|D{K$R-emVcJ5N=%y2h0g@S+%?6~IzoI8CK9ml?p9h++~GSEkr_x;GH_P~x>TK(sO zH8aAGcM63CG@>=ibN@x2%YzAJ_Wp>Nexlk<)m2 z{|D$D9OjXM8Okn}@$kL|^o-4;nSz1pa-Q{1rG`L9KfdtPgZR~d_VL6on)|UK73m?k%=pN4oOx3kN-D?b%6i2@Ke6ad%`ZNLSxNDQEHq+&i@fhv(^5C!ds zGj(kc=!hyZ#?S!44yM&}i0qi_Ppnfa)dDr>vxETrAA}ezpy!xgYfb~CY)oxh&s;UB zL9om*x|%q4(!C2bal&=P1A59jre7stn_-Eg>d;kyvuPXF&Z{NYW2n<@%#0Su70&L6p%n zC^(^#o-Gn`&y9;!zGZRhv-0{tk|98k0kvJT{c(jyT2B@bmuss!x~8TfKO^!oos&A83p1 z{Ht7-Gy%l?TWqu~HhLEOa6fJ3ir0esIBNS!;c|51$9E-KpSAM%xrv`ozx-Y)%a>ywz|GX86im9Uo@tM4Xs`PkIIt0)S6?#uM!&X5eRh2JAy+v2|B@TQnKW zcKwyNwD5FE{a@;r+J(6hVQhL1oxMX?*HDbFJ$E1S>BlaIzUdd2X?%(Y`DHwBk(Tf~ zIy=zNxQRR1>ye#3gRR>)p?xF;XF87H)-5F{FNol^cg~}0dI}r&ouL~(GW;^s$A$C< zM-HJdl26ap<2*WW2%TMh7#bPDhaa9mM_V)M)@{V|yQ{ITlotN`&SPSF0-ZcV-`zEg zaqg6lM;B-rdxom{WXk&&XgPl)?zp7@rw+bFRryr*r;uv?(@3J?Ksvn*6!M(?sWa#4 z{4av%{@(vhdjM6K8XiOowHC?>lW8chm+t+h@bWuv<0tQ*q(-e4|0%fhmU?WavA%nD zZ^MfpwqnQ53jD$|cOyDA%{dy!eV_Ypx#-Tp>`=4r6vp~4qP(~O|I%K6UJho=8cUar@pri1pP+I8aA^u3LRhe)tW3bTI?h{|ULE!*22lSkDDC)<5auGH zy5G6z2~jv!A&lMd1K!uohXZR!4qXJ8aCFFAG5wJ?9UkE!^JDFZj;k6F3fd2Wg1f0U z9LDN`=0R6jB_I&usE+l;lCfCC6x2ZmHzwC-mknU*xQfI3D4@euT?bdJXM-8uPdz{G zUB})8{fQwFUBpE}fpuK_f(kPTf~lz(8o{x&jwI0LNbFfN(vB=M6eft2n^MIB#VRY! z3=6~IB8%^qQQAuR$>9Nf`TlBTrmviZxBgh{>N4XqE33f_-;aH~{9?Wrx7>lA3kQ)N zDMEyvK%%3~6v#&Tz8k0e)QhNT+~%tLZTa*pZFH5ldB0rR%5)4syZ@@MdVV`T9pU@I z+KZ2cV=$$C8a`ZQ@xjN9FN@EwM(bMY$J6^PsDljd6s`Xsz@Z~Nm*1I>dv4_sft)2W^}YC?|Cc{RO-()`SsApX zpNa3jc#JzpBXl7cL0M@wciySmpPP){pZs zkHzR=s=87IpJ(rHyL%rBi^_25zz2BlsU~#NMc#!A13V^Bgr0$;80j0uUAH!2=aYXQ zV_hv|x=&*%oeaN&_=$RuhUWFwdE z`f_q>X*jVMTlYMIfBcXBA%67skMYf~e-4Gk#TXc(cYsJ9${TOT_WQqr`levfexvT| zCqcKhZ;m_u6FAvA%_9;tWXPTDNG3%oe15fh(v>0(jc(n)SSQBn@%yBF^?wByfjuBV?_+Rac zLXz&GyYB%N?eIHW47%yzxYZX`4u=*K$hdxxP|zQt1Zl-fdLDvmVSlvq?9(iOsto zM3#HTh4_AZxvx@U^#{d7b_a0DoUDuW1uAFlr=SUC$0T4_eDQ1e2NJ^v< zCCl=%?6y7av8>V9%d_0}a(j8);~B4R_jtx`+uhT0kQ~~UtzgpVL1i^ruQ7BZ- zIakfz=ic+{@w=)}0IDE@`WN{B-h1*r@BMo3+~{p`Kcve_uRDD*7w>%Ol6>hr$-2sJ zQ<5iB&UoNzcp%dOa5cP~(UI}M57`5k`=D_?&;22&x{`8zJm^oBg&!E;xzCG~maf>w zm%G&%?L3cD9c^f7?Ld1!r*L!Ke06y>Hf&ytrOWR}Z+inKcp5-^Ydw$FE&|BNrWLXzIo=ckkc0oSO-9_Q1iz_2^*mJ~lXlhwr-?+qP7)6{A?sr2=Qq z*5i@KehPQK@2Bv^|MDO3r7!$B{;ywu92;-g%#8+zcuZh9KJdsx=;<9oaqVVQS8=1O z@lJf;_T}j7KZkQ&&D=L&0O#sEaQH+sx=44+P1}%NvJ!>Wd04gT6;#$PN9*Zt;=ldz z7x54O_&h%Q>GxsX${PIPUp&cO`dd-NnGWN8=kM$0$n^k^|6_1+rm+)KWsP|C&9gXv zlCu%Iy73dA{4n;e*+<)X5<*uak1c!(10y`zk0&IIjtudXfdLdUNGL7I;cSFz?(V;m z_AbR&zx_P={^)D?<OM)^Iv+WexX8xW-ds=a>clZ=T`iiag#gpPTy?G4NNY zrfJ#P47kE7?GQletal5*IAz#J>=k&0yIjgbtz`97z^|J02Yia(DBVKlZ=<&=zevsh3U|d9>{f2p87xRAOjG0_odweg(9cQpiAIL*5E(t?G(H*h)D(;O~Bf8e}QA?jEF+;A6RTEy*a}qg)fPtn9$~!%Nc^D$ZWEH=%`Q}9ypTdi5T}kR`XS4E zEJBBXnxlOfEXd%sEagc6Z=LGGs#+eMx+d(|VLqgUnF5iSa5KTkK4Z$|J|U~PjOp~j z7r1vw7yn*YvlY3>?>dhuE~gso?czQn!4B8&@+Ht=GYLYA_WLb6bCuIocDV^5go{R5N)5T=EJeNIRdgr^Ex!br3oXyMU>!^5Mv z=l=KMk)QlcuJO;q5I5aAdgv8y%-D<_+ivGF0^s!7=eWav4yvoO(B9pL6+AkyzM&4s z&mOnkvv1h_9^CWZf5S}_w_o#jbu;%x&~bim@L0c|AqM^o(u%pSgW_8o{bkPC|Ec70 zpn(`fg)Rao;0wE=)EJQ2!gh54B-ir`OFn$MHo)&)mc~YZ4qp=*>pvnQx=4>66=A1^s(+5B+1JuTO+{bnNtX( z8cQKel>zqOzGO;}9Rgw#AqM%_loKu8f(5hK0m-tGB5fv%(bf6EYAU`8D8ihWbo{&F z^d`jQg{2?T=K4&n_|<_y8cSrBUR`$WRiJqT=0n~aocO^;62bqv$AXtB(RTmShIE{Z zBWBSsNn|uHTxV;bM*WF!hY+T^P9zYQY*T%bvUH79vC)6)L6J}~lZL|e(N|$!E|2V- z!ZWY8aY<1Ts!OMj2Grkj4^l||w&Z{JllZyllg!1Xl~}Ri1~i{P#tzUvo=(Ef#@h9$ z9nR&*{Ghen=*|AX>3U|;o0RS4B%PNXS6Nw!^XJ*&K>xYiWLb31quf7E<2aW$Q|>g% zUB^sxGr^qKakKHK(>eWI`Q`A;CT}*oW}}}kd^Q^wTHkDXl6EF_Cg}xF*2R;gbs6b2 z4tIXxlYFz$J6|TxcwjL-km&$eOz&o7XFTu@_CWGslq}EJWbyb%Jn3b<;A-T>H(Hvn z-1*Ywaf*KJG9L9*Q-~Ai+tJ270mes$F+SRlRoiyapb~C6)yxs~Wp=z?Q+q28Kl==x zdh+X7&t36vy>%~696o`=hfbq{FWGnB%qjfE1vq`=FsJ#C?Zk{lxtkpguxBjH9u=62}|9juRL9uzO=QKJea6xa*;NQOyzmq22}t1vzML<4FE^BaR-) z!!s|Q!Dl{smrXTqXl%m1Teoo&zVm2q?ZgCk*dCwYJ`0@Qn$19Bh%*?P8XCb_{d~#h zCR}S)bJM>f400pF1FwD^-+u0U>{!TS0Gx-j+|7SkEzjmIslm~67x2bg2hrTn#^bvt zv5Na8{OWK1M?C!S!@Q>Ry&CUKx~_q7yn12~FCQO3NAI{z^)Jb1u*P=z$EI1wkW>Mb zMRl<`;dj9iSK-Ms#o$R{mI5ndVXzfzk&mOjQI>l|_!NzRs>GD?Z;Sw4w&%$U5M(&> zw8X&bAtuFJv?m2ln^2~}(lEj9h#_SRTFDaFWkH~I8jCtLOCTDZvfT)xU&JgD!cyEx zGm>S}XnML*piOb4bO>i8hT@khdKovSz-uxht1=73Eoe4UQCbqU;_^UhEjGAZl4=Wy zL^s_@5U+%Yd`gFLDFoMjp-zB=r>MaCfkIrLb|;Wr2FQ^b+&6~?U0IYJo2KTm91M}I zws(Tntwu<=!xZ07NttNui^6S&MSz$*p{+r&?IbBI%;V`MLwNc?Gd^_Z8lDs&`jAX7 zi^(9xamvH*L3V_6F?y$~;RdSBji>O;kpFZuC+&2h;*y{vjNC2dH;FIM(;&BZ?#?qc#U z7e61nE?4$!d`bV$Ml&C{+ddy!(ahvuwo~ zOb5WCyEvmD@la=Zo$DN6*(V_#W-+McwHaaiQ)wp8M|8xQ@Ho|HO}flxx2yaOm)B-2AN{ zjcq(4Yu_&J9gu@lCyruSRW5@?uG!7%v8nUL)$1`n+=GFhER6Lxqv7a_xP3=0{+FM* zi@WR} zJ)V2^CA|N>GOXXZgF9spBbWFh?jf-6j(hRcH@|{!eE0jfZrd6>`rzF-b?g{6ZeD`@ z2TyQcf;TvwRY86MI{+qmazQRfv-6PCH;j(<5w-`|w5f_y`D+F&TuZd6#vNTaL02j{t8K>xrbuIK3kpZnbB@#qI1Lk`<;EvH^i?|=2g0A6PB z-_kvXJO*jS+}P2Aes)YL(9hxhagq8jhT>$e1Pr-jA_gq8D z7O+_q=(6~d=dw(4kSqBfO6j*VU5k1Xw2I0@_@`hq2HTM=KmxJCRkI}qph0G|SiyO; zBWA&{2zQv-B74IBz#~>ok&q8$iQ)K_NY-u{$z%i4q7)r@qVXXBr|d`;Wbs>&@E!PL z{BHW9ItnsjQMTj;+G$yYnae3nb_VhobQ8ya>YfQ!r*+eC>4(kokT41{8riKRIm8D+ z%nfXW3@C#f>jW^LYY9m(TZ9(W+WjU$l*8iy?Iw)J(#ay}k~E4Uf#mVWZ3YCK?6Ru9 zC0u$K=W8CwSIv-i_t2eFvwGe4i%(@L0tBDRdSU^8}Pp&P3u&1hzwRbb5o5+U#;w zciA(+gilXSr)Q6r0r+e*$?=bOPOI+plB066o-R9`-tlwsIL%D?Z1QHJU1-=`HqT_2 zV2hn*vgva4CgofXzuGAoGx(|hO9E$t2`_l^<1oFL`p(PRd}(xabWu70a(Hatl4V@8e%p4u`AR#wd5qnX z(o$S#?8cJnV|e{=JE~thi0zwKqoS|_H>@4R%1_*b73+7Ry|WK>jmJ@5k&mtGZ$^J- zH}bg|-s^9jM|nQau3o|o`kH!h>~tsY+_#%21eW7Z{_^Yi-m53D=elM1$a~kJt+NB) zdu~4_xDj90a25u*cR*=PEjtc!@G8&T{>JxDVkqlB(_JH5x|#cc2<;CaYn@87`l1}v31J^?7ndyUVG*%c=7pv!8vwt z400L6(j~P#6<`pDU#~}JJC8I(0e0`+i{Jjm&*QPjALr;`7%59$|7)o{Fg$_R&kW*) zql0MTCWso`)QJwdCoNpEAVV>jMT)5aKD1FGM+`nxj41@Bf~%AQ244OKETsYn(h;Qn z0u05f2mhip>CVEs(-8|h+?0nQsa?>Y4VrBC9Gz=;;EG67LEmKXQr~YFQfM86=Sf)+YSO^zKqOaZ4sp8v&cs}uiE7J~$&Xy7Qxap) zZ=D2^BVI8RM}w^sK!Lp_85RU*Daa>pa%spEXZVOUjQCTZwIl2i5V-=6$)X;n(A3aI zTmH{x*@lxe%UUZT{I6L+7LWu6v%<_2l?kT|;^bFtdRbDGi`Uozpko2oE$6f$=?Vr} zS#;?z1Mo|@ByAEt8&4V6|3CD>pTo=F|L?S8fJ>bUxg=m1?agPglE<2kYf}?8gg+fA zF#D4_+@7TTBrFM6*^_?zS_aV5(_@{p3i_2KTc4y1FMIAXyzaTf7b;&YxmRjmx?So1 zx>EV`<-bzBm&-3cCHI5Z-EN0_Jv~pScf9k>!>;fnbjD1c@xTIlAkzV`fX>W_%6Q=2 z=m9;fk`FS~{Q>6fRo#LtdwZLHV2+J(nmT6yEJl*fzWyA%_?=g|lk_AWy_Y-eGpK$2 z;03&Sqy>}xJ@~nw{Q#CN&qF__)wfbI>(XjFGH7ZaBCc zdBwvR=FxvW-3&lawBo6!kJBF$C@mU7V;y(g-}(TmR_x#sg%QqB7{a;@oAAVkZo`&M zl^7f7MSj^b&QNH?7ryX&cxnHB3sm;8W23CF6uK6jcSXz^QNNqe=_9M6S_b;V8juP{{z| z4*$ieVuD5xlNe;C2P`2*BnOiMfBo0Ge%`mzqMu{n4cx4p04Ek}zwJSlB)W^zQg*vQ@22M&+_6P>WQ$fNtK|(lv>Iq>kBi&j!~r0H28_IqC#Z zo|O4Ey|I#%myQ?iV*Kem*Lr;}f6UdkEA`WS_0Fc}a`}^dlI```^rZVBo!;wC=XKAM zavkQhnLOixh4w(E17M*&nvs|Bz`MW$diW$CMrx8^Nx0V)_$SNBx@2e{0FA&bMw-mZ z=eqWBeBzV4aN%qxj-G14{SWNHbI7za_Ca*^4s#m(FnYN;-YZ9QP*HIPFTK%#U;2f|@z8^J;HG=VvHONKINNX@ z?Hrju#wqkG*Q`MiH})Ii$p7&}=eV)n7%D3Y(8>|`L5^%KTV9GAckM)F(Ij4c_G>8Q zF@a?j)mXlC6>UAqbG~^DU&T_+T$sSI*S^6W{-432)6E!TklE2U!jlOOBIqE+?HqMQ_`ZG=2uIFv zuK>Q!b0P-VcYzY_ajK( z`0F@71#9}`co4w~@9Jn95sED6!;o}udnx8`tBaE_fD%ZSX)e;LVzL5XSj(JFBr*kT zE;Lb&(iAFMU~W{AP9n|zsDxns*39liz-eTxi^?cjR>-JwN~M(vVW4O-gb4qQNddK! znBziqnxA^jMv5>}^4fH5<R&jUenDygsvn~QgE#6K&1XQ$PN!m1vEZ>sfpR@ zwbAuq$A)Gtq)sG|f21?=2f_SSJyz`Rk!s>s@+th0z`-PlcxF*vu)-GUlaH;6k+nJ^ zZ1k8cb{iPI%!@+hSLswQ2LnuFRVSU)OT4L2l&*GbBS4i^P1+FX`atw zbs%UT3JLUm10=%Wab(+d$*fe_^oWr11t(G;1^sQE!}#7Ct$5_t73O2Xjoj@L+YB%x zieEF~XM%}*^~M{ySIIFnoP63&V(D$K$HcfcG7SDr?ba`y1j;+I$mL0fl0Tp316K!t zjsz5~_nqCmVmFbCf%YNvwRU59RRNlN2T)SV5pup{zxmb??zGS8@;rKKcq$+DZ9^!~ znbZ@5JeF?*?!50dy#B^n{Q2KK%eT)`tXolpAAfW^PZub}zx~V>JofOt$mUXmf~;OV z`p_-7aA7UJ{PkzCp8E)l4Gy5Or5Rs)<`nk7RnKJyg{Z17#s$sV8#iyk+P!zO zli&b;_mBP`oM4ATX=xSrE*L=Z)Ce~1xCtvZ-GCDA0kC;vCF(o+Fff^m(mb9f(AI%M zz7OOT7jgZ1E_d*s;EV*mypD`>mwz4oH^CQYV9Um}xO4XkJbdq7Y+Sz??90GZNhN;b z)1Sb9`|EFUmc#&06e#EJ|J(5BV;{kT4}FkJA9yt3HJm0GpPgtL#&bspxB=u4M-!(| zz$5)MfT-#H3cmCzr64MVGrDJEpr!ap_q7FLj+HY)c^V?ZX?Q9U5h#^H&>1BMs71Fd zl2>rqL51OWMA)=NLWm+jrb8WL4H(lOq+2m|KuBI_fn)@F&!@xS>5}pKmvSpJr)Y|@ zx`R?U35+TA+h)*ebmqT+wDz&+{K4AkdT2;!r#SpFM75zVA+kjT!C_WT$s)ofn7tzN zf_PGdNxjn^bzW<%B26h$W(reP14ah56D%@mVLnrNZWT^&mj;)DIEz~7+!VhR** zFPlta)Cmwa5=>GB9&yNKeNsY5X3H0%T~aR_J!Y`31^&Ht9@C>XCgntNx_fm0=(?7b z=HqZ(4^}TJ#-7d79kuowk*^YICRhS(@>EYgGyL9hxb_#>ecNMbYdngf*26e|_9%}e zlx)s)`nS0U5;Ppba=9!W|zpH23B;7OWHIpcxF^gyNqU@^U$k)83tyUYW6 z`1u1+P4l{s`X^z+39cCci}Fz1XvDEeeNvu;i!qVbk?H8H`Nf+}R7*x^X3HYAbP) zCjgXklf9gR6&TMhMA7oyK=BFu%eP;%7wuL?+wE+;%PO#C?F#OF z(2x2P$I-n0I*!8fot}kd+`)%OL9@c;C+IDe_dmTmN8?HQ~3M2!C@|^{BKyh1fTlgow#|&2ILji zFc|K$&V?zSTCj25S{_k&7dr}avG30JVc*@4*r@=EbuF%jT*U#W8b|RQNBoaB3}Iv} z1pfJ)&aBv2!Hxp5>EMt-gvD>fq=JYL66rf|C=Y>7mhqZDOE zP6{Im@DM@BipX>UaBigh%acG0-(_+~2m zEV*M?N!k*zY*UKzZFq+(uc@iAeE?E345BRI{3ChJ7P+=leJ!)KyR;=G*XPnI2@$uk~UXb)sM02bP# z8F?8GTtgnvgC_YtYBlzl<{~0%KsKu=}UXQPQ z_b7@Ac#I%B5$?V722@p);#6NJ28OwjA*bXIkL&ondc69|ew&WJd(Td6+g*;m+g4!Z z@)bO5`V6O^=V8n4ThUZ^9w!eU;9CD`oH)53-JM-_^x#djYk5T;4!l-J+CtQD)&NGk zxjA4P3i#q%R9wPc`P;E$a}7G%R-mP!6`R+U;H_gFnB?^TA$ArZCy#R1;-;Oeao_DX zVAF<`Xzm_GPwyGN<7acKYYCS#@VxEZLOlG~r?GMSt(?(Nwn$gt>WMwaDgMtN?Z=@r z+;4#=IOK6x`r^Vc-JiFjt@D>P3O++PpfE=%)O4?gq+B?sv!a7^V;hGDZ4AqT1hUxx zJR=kfXa$WTV`c%em8DB67^Qkq#6c^+t&rj(N>QNX3SlP1JnAOerh*HtvRD<5YMQ)7 zdPKN5fH9$zts|e8RhaJF2vCVp()xFs zrp~gp-P%fcwB4#|rvlQ*q`~l1XNLG>anxb-EK7@N;+IWhk2Ja#DLv9pp(ftS)FFBa zVN$zIMywl<0IjPRR;^Na?QIE84tlk2-h6IMgfRd&Sq#F}4i~B1rsOL!XGJv9Y8?!M z8D4OEjF3_(uR$JmbpX`r|TlU(qVdHZk-3(8^C%4h|@h0Q@pC?2bUe% zL0y!m>s89lKfAeX>0A4o@X7nuK^80^Px%7 zXUZ85T!{xV9ROG2y$o;01J}3*=6YZyo2Ca-I&Jb{rLuoK_*Y$JbpYt4OXY=5h1^*> zyReA6_;>MmyAkAZhT>|IPlg{+_q~S)~+r^-#`=o<{wYt&7*aws4V0%0tWwe-JC@*h#!CK zc06+b9v(SZz?lKLe2LA+xl^aGeB}m|RxQQz&mTZbQ$23lwV8GdqpPirBl#S;@8_r= z*Y6)a-o$D7qxkqEyRd>IZi7S34BE4BfE)e&!56=amtH@M-oDNBXAbVW`zGA5<9hBZ z@FE6Bo3MBHGIkEE#rEshQC=rbpKieMQ%xA<4*w&Z6`(1?l~v1d|HD7VV+|ifc{Ps$ zyvEaojxoH*ss3-A>E~<-9`VSj{tEmRP$~Y^5pCHT;pOcWLM9K5LXEc}lfFDC3b_I! zgF7lj^&)0cAQmVr+#-$0^hwEzFqaxIfkJ_cmGrwYS%J-93hb;Wft)N#PtX(s5XrHW z2so_`v3;rbSVT=329J6I(te9(7r#7MHr*z8+O|j@>`=#vogg4i*&^b=C5SZ0(lGw4 z5@F_a)07I175s}=cm>TKS}W)bGK|p(f?PI%0jp^3ZwU1S?vN2Ia}26LS;;+SE>O>b zfz1(tn+60IQ*L0f-$rPS=;Bg_80u@5f$Zad>jE&aDooZ6meo`Z|H}iS(#C$W**XS{ z&OJjIe}|?kC=6xtnO`Up9WS<>{N zm}~|HX{_yJlo{f;Bwni!Kvp$NZ7AdZAT6ETNb^t|?z?e$B%aO!Pq59QGr=5}%x9vL zjo0nE8?6oJ`8To^!+cKUX!?$9W6uCXb-RZ0xf^f3N(gqj36S~D>q)$h0@OYL>CYiw z0+8eppIrmyF2i%t%~nq5ahaEzC*@x%?_Bh5-&{0T6E`1wMDxQ)>DOQ`Tir(cJzm7# zbh$INZ9X(J@nv8c4_t}|G93Vy;;jtrC3_(AhwPGFwrC8x7XF~R93^_V>19cB{6VL( zKE8(1ah{7#9RNBFpnw7MLZ>3`Uf;uG@($OvV3`A_+rRe`&=6(D

-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%0Dtohg-+5WA*`f% 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ò^Pj@$*2yrlo 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


5$!zv~6txBGN7WXOk*qrSd*pPX~DJKUg| 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/gif.png b/app/assets/images/file_types/gif.png new file mode 100644 index 0000000000000000000000000000000000000000..c02d27491ca40276a67cf62f8bd1b8313fe85594 GIT binary patch literal 17008 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/icns.png b/app/assets/images/file_types/icns.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a36a6738a2ca6b5ebe43e47f6c3d26139ad17f GIT binary patch literal 17657 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 E0M*6hEdT%j literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/jpeg.png b/app/assets/images/file_types/jpeg.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c596e5c666a625bfbdd557561855bb153e8d0a GIT binary patch literal 17473 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 D_YJF( literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/kth.png b/app/assets/images/file_types/kth.png new file mode 100644 index 0000000000000000000000000000000000000000..28acd08871284aad9215464e22f8eef28038a1ee GIT binary patch literal 17014 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 Z0RV`No_zhjPNe_<002ovPDHLkV1mS5Ph|iA literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/m4v.png b/app/assets/images/file_types/m4v.png new file mode 100644 index 0000000000000000000000000000000000000000..ede0b74d6ad730039da7e83c150e1cc2e0a80511 GIT binary patch literal 19169 zcmV)vK$X9VP)4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN

i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 N$Ve!PSBe@2{tw4Uf4Tqw literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/odf.png b/app/assets/images/file_types/odf.png new file mode 100755 index 0000000000000000000000000000000000000000..473995220636e024958325681040ffe4c7c971d5 GIT binary patch literal 1384 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 soxi^Px# literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/otp.png b/app/assets/images/file_types/otp.png new file mode 100755 index 0000000000000000000000000000000000000000..655bc837fadad708595a8ed9e7ffbc83a2e53887 GIT binary patch literal 1350 zcmV-M1-bf(P)`8obc{F^r9 zr=lqV_2<%nN+7~Rhq={vz^5Dd&}(l_r*?}_`UkMVx^Vs+1c6oc4l^GR%V=Y)M~fiJ93piuE72l zr+(_>cXLyFnY5jr>Q0k-pEG2)t7)qY_omyzMoz!=^YGz4gQ(RMG`abrVe}qFmJnU zARGX|WE|K9!Vv%bPI@qU4c;RCm}W}PO@^TB-ZXu zmkA=rF%0lr20XJ4p4Omm0N(CigdWGkYxB!8?I7l<#sJvZ=n{sqb{`ME{AAa2`~ig1 z8v8;dfQ|!b^Ku-1N#Any66g&A?NN?U7lBcqU=U06H4q42))pAjkD2_=E05iLt^ijX-MX8^ zTf76>DR?9F=_mJBg>05zfIs0=sFwVd`wCPaN4TGZsbxkzLqWPqJmWpH5U?-YrLv-zOemMi$6*`pW%qpNz+cj=?fP$X!Lc4J8%lQ+yruf+j5F=tM@>w zrxGm>z@iJW{AuB&{&m)`pN$$08^C%DIBNkI|7#22DF@IJ6`9o-Flv;r9dBHMZ*Ul{ zaG(6WIXjNjoiSt{OyrZf?xP62_35^9SFXK}AdRcUXG*i<{~%3rvWqii9SjR4rI^eq zh$?&NozEozS#aMPMe4UPsYvvr8}J?}ww)boMelN6sMm>)5VbNZE}G6}#9W(c(Xjn&`Py z0@^QQP$=V@^b+EmOO14iu_DB2=DH(BbrWWvNF`E&~|R9v+5 zKs7swwL3Qvdi5L*UX39^-xXg_{#M9`7jKM6C2CznC9pN<^>k=F28`+j{=GJW?9x0s z2G5}L?8W>p{yB-2*mWeQ$E##yh*yl~lA1}@#>3gtW7m!V>Ws6U{wv}0vMYX{v#CTj zN3N^!pI-lV_EbZskghumz|gI_P|o3G&I*9dET@i^ZvP1|0QnH7=dud@!vFvP07*qo IM6N<$f`Ns9ng9R* literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/ots.png b/app/assets/images/file_types/ots.png new file mode 100755 index 0000000000000000000000000000000000000000..c59ad95aaf5f696b6198b1b5638f0e1f951e40ef GIT binary patch literal 1511 zcmV zv@~O3#fXxh1mcohd1@#y${Z`Lw6qh5 zXO<*@ryg6AF%XIXD7M-&20{@41*Sp*QJN7DiU2Sht;lB}Eb>7p0w70kMy@dr`Q}0_ zx7hHc3=oO{(ChRO5C!HUvIK!}%n!t@bwFAm06L9shVvv=v8?~zyv9H@q*5oeb63F3 z15m3p1Y*{Uvks;RLaT%esZ=WR-DnU=Zz&}ZiU1%81Ojm&Fe?c9eQ8ku&}h}zwSRj$ zkFdZ#K(k>{0I04lN{in+9)Pp=?mS~aTEJA4av!}2>p%wePbH1YGl739NNzBVU{HiE zOASMg7Dlr!oi`bI0OX938Yl)s?(Q!T&+6 z0SjdjKe^1P+eb?4D63>IXj`6I5R2&@&wSio7W$Ty?z8i$Lvvd|;Z{PH3x$GsarY8) zr%_Q-*aDIq3oLOLf+WA0Q{DpN5)Wcg=@<}Y)&X%z2eFuV12#)JUaZ=Uvceh|bSB)J za-(bLG&%=Pz(4KfJX_bk51X|jsm!jSQ@BX{VL5ATb)4>+=*MsWe2*)x&bZ!7RvL|U zp;Bu(-mN>t6~9Z0yT+YdQLacy9S(Ii!WZyz<;s>ln^fY!?H(?3*Yo?3Z!E#^cs~L6 z@C(_sVIK~k+k=78o=gVuBLQ2hKj6y$-1`+e`;SNHudn|E>mT2Y+Oi$^_3xwjroAz; zci^=PT%kizv{gklT={d(6KJ_~AVebodm0X-cGV8_-|9}e4yorVV$6hW>NO^Q$nZTU zI<6j%(AhlM9a7@y(z+OW#Qah$ZPM?F0AVh~XwF+bIM~*RGk+b4;gy+%=oL^1Nhn!X z&ezNTor};S-);mC-C7UIm)9ih#miyi#+VZq27keZl`muW#xFSSPm)K(|`PZFP!ckY$)4|isE%xYp>_?)a4_5MgRyhED$nd=-|-_ z7hmmp6-jS}(Z{^*q+&=ih-S!P^ycgN7fZWAph%>VH#KVcKCVOr1i4vcx+TuwBvJQt#e zh2SFr$IkD^doO*7rftV?-r0&fbYP`z9afjD!&Jb7macDO_@limn%+Iwjx9Cs@R@Ha ziO5+|Kvp3j(Y%5j0AgG#!4CfV%!hbm<41U*VoQYHH++$UyZzA367`Rj!}yM#ZN}T1 zK1+~u5u2FKWJ091JGTuCx{O_)?oT}32LNPXjoa9L% zjUZ0y5;U%j^kt;ixiZu>>%J@i%mP6{*?wA*WdWwVp!7@e?Bjm{1_0rq91D6BP|E-S N002ovPDHLkV1f@-!M^|i literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/ott.png b/app/assets/images/file_types/ott.png new file mode 100755 index 0000000000000000000000000000000000000000..18dd9faecebb1d96ac81955dbeef4fb81872f26a GIT binary patch literal 1491 zcmV;^1uXiBP)U7xIrrXK1WGB)TE>x+ z@36}`*xzPZuU9(0=uSl`o}E%6C3j^FGPl>*YQ4YXqK{oV z14ozAm|9)PY))csXxR?9Syv`UAs3ddeyF^9IdrUr5UbUcq-`wKR4B8PQ2f&%fqz&@ zQQ^wUg_OMsauExcg3_e#XBMna2oX&|aDEnAXp!{*s2<-$W2>wL$(;>Rk`Q_@49a4g zYI^J|JRAf)nb|#Iy84-0VEJGr0+KR7O*|Bs`x{DN4lWk2E<1ZN&#adHGQGuTu1 z2nQJvre1!j#VTa>0?{SMf3YCK&8kX9?q*&t*J4Cs9};T}2vke2+OQlznz}YFWK3Bj zaIy)+5(C5@FIpmiSY<$aco`5FdVx3#07>Rg41nlm)L8%`wU`3}TacU$A{;_{Xk8{)pV{bmnd zsH-)V^$v}rx$T-=3=qC4Ga6rlZ%)4qug8t{&TeM>EFWun?nwry8jbIr=d96)=gJFx z*jC^}@8CEC7mOJdmG7x2;qU7DeIVvE!ZhsL5mEb3Xen`xF~}kSblo-U7`|+& z)))}faO`$?Y+@<#wwD^lV+meahT(~6qb%Yz9!K}n%tSfe9MDUj t5_T4VL=#q;#0MI;C-#+iqqctq7y#x`S$Hf7mc;-7002ovPDHLkV1gRIq#OVM literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/pages.png b/app/assets/images/file_types/pages.png new file mode 100644 index 0000000000000000000000000000000000000000..13178928f38e05180bb3f41359b7ee957fa07854 GIT binary patch literal 16881 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/psd.png b/app/assets/images/file_types/psd.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae881ded7c19eb653cbdfbed5935a5eeda1e82a GIT binary patch literal 12372 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�@H6?HKIY7%P_ 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/tar.png b/app/assets/images/file_types/tar.png new file mode 100644 index 0000000000000000000000000000000000000000..d9deafaa7e3edff51d73b1e3b5184165b3af263d GIT binary patch literal 11784 zcmZX4bx<9@`}JO2%f%foMT=A1?Sk2n>^1sd6JX;3R9HEL?b~1002`~MpEVVYV?|YP>^2Bq^SBu03hhHhC*So zP$&fEWN%?@YYqS&pc5TS7~X1wurM*vWvuf!e^9*hxVBSLhIpXAS!_N;Jdg;Sm<>?| ziRYS#;eiq%x#1{qx#8y|Uwm)dOCQeK{3cYnXUg2N*1nWZTpz1@vjBJM`awZY*nq!( z=Q+%o+|^B2(A(`;-XEUXAH@M4Rr9vmh+9<^>M`s`0tO7T;O|KNQR8~_d3*1^CaUNm;ApJ@#A_%Eq6G>Q1o7swuN6<^?d0&VAf8HSLKwRUZ58!n7X2(!acW?uj?K zjf&xfec(62K3Gvd!z@z-fmXsz{&5Q9QxI^TW7J9k1|wwcEeCRRcsnrou!wR-HDhIw z`vec5+5u{tmPi$kOcsb$6>CI5>6l-iMvc1~Q!pTHhkI4%g%jz2&IFm1p+iXq6r z@n<8b1rSUk({@xO!J|eN$pIGu8I8Sj93;_?hKujA( zrG_>q<_g1|eRCtxGihptmKG!;Mmos~7XT3lgGW&)f*B;<WqifSTuw=dkAKz;0nmFngFyu`m~E8unOB z67(p$Vk&dr;rg8m_Ai1j=&LcAVr;p*95NW7o^NqoR>tKVYbjO=bcGnsn9j(Y(WyN? zU2ki+v_#6`=D|n7nEi!Dku|Q1tjBzA6fGe=n<)+^e6AVX<5 z@Hp=AxHKPV7G(a(TFCHRcnI-6GpvzNhARy$YzSW9-YMl1sko_pP?4V&o5q+%&tJ`F zli?jaH}f$&G#ePq9f}wv8Il@Wi=!UY9>O207=jKdeK(}0r1O&pDOam7C@-o=s^BSe zsYa=mtKg_!s(w=Sf)&E%VSiQHb5@E>as(uH#qj0TrRKzM;tvJ6;p^e*$z7RUiCqbA zFm5OULb4Sc=xDH6!AL0bTv{X`68JPA%_l9L>pPcVT~wX4wZ4_ARn=tlbmf%t)X?P8 zRNst#Hfg?Y4t-H_VPjrQQB?tD;Y+XB7-V9j*C8S&bCaV-Q;I+eQ%bbor=O>PL4k-4 zn@+xvuTZCuqwu2zodu?a-yhCV_muUT*qXtbrfRdA6%)_C2xEN9dQ0KH-<<+|p=P+o zwdV51Hb&k<(I$kJ?nX+M9evMfK`GGao*&dPdFk8m^q55gmh5|;1(HhWw@l5dF6UyNp;_2Z2!D}EG$2rAb!@&kS;=IEl zCb)mcNPEbn^X{KQl%&E(X1Q|l;|jj-P0b#K9$9z1sE(-iUm3p=#_z=cil?Vtrsd5? zC|D_A%%>|DDsV0MUeHp|F&sW}H>4NuNj<_~Lz~VfNEa5Tnk*lC6uX?19E%lOmF!p4 zS+J4oU|_5hr#Pij1G|XBDTxnIDV(0f9>pG`ekXlO9ui$j@loivvx}j&Hoy3Nlg$AF3*K zEF~f}Ce_k^*w5epovxg2jc$xiRH0tsO2IJAF�@H6?HKIY7%P_ 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/template.png b/app/assets/images/file_types/template.png new file mode 100644 index 0000000000000000000000000000000000000000..e34f3340ae67d227d828281fcfcb1dfdca1d36e0 GIT binary patch literal 20592 zcmV*!Ks&#QP)qg=l}rhXaE2(J^%m^kmT%{ z>Hq*w_DMuRRCwC#op+dBRk{B^YuD4;^gfwPdLaoN0!UH3g6LIL?CoClUi-BGB8o~E zR21xD<0^^@(yR26gcg#Jo|(z?-cH?T@4bG1oHFN3fmr=NNZ09Rc7 z6Yjb5PAaM^7#&JbU0pi|tbca1ZJWWtLE?!7Lqo%8sz!Bn6`H2u_xthryhtf=T^A`O zj^kii7Q1)vA(2Q>Sy@Ra6r`o46_3Y!dB8n6g~v4TdcDQZzx0)Fan)ttAX>YOU;X0R zBB*Y=>rt-$&b5RqDu`Cr5YN~garo*vVEwb2Wm#-_aVtYZLxjU&>g(!RvwAf?uZKh; zP9l*cV`Xt%K&WWCfv%~jnugD7vT$J=sZ@%tu3kDix>&z{0}Txg9DD3BWq|mfv}7vH zwrx9EvbdcG9(a)2+B%LnVl^NC)Vcihx~r&dS;NnM{9Vp`<5~dz_Q*4Q=CkKAJv~la z+dTRP203iS3Qj%cq&Z;yGun$UzQ_|#K1E$^Ehn6?mQX0f(9j?|ckX0jGS2AO1h#FH z%{sU)AOwm4O%tf9#4x-BgZ0FsAr>vDW%1%gOioU7*IjqWKvM;~?6|EN!0 zd;91g7~q(r)&TJI)?Rl0>ix3l}gnG|0B?I~g1rWo&dDMO86P4~C}U z^LS7MxY9u&kbsrRkV>TJ?%u^@T=4jFt+cnqIQlRT=bZCSwrqKk-~8sc?AWn`_rLFb z|4^Tves&WcL*tmE*6_z$AK=D6-Ab&Yf`<8v*|DdKs`@sr{lRy5>lr5i&^s{BXaDO$ zwr+l&rj{mr9uIrFyJ=ang!jJlU*~kJSGs-gnrpc8&b#=^`RB55;R1H<+{tqrx6;ws zi|arr=qH<=COJJqe0q%D-Y)iZ?4qZ;i=N&tMn{J*OoM=5r>WlIh?P1f{oH&1bNun< z?R0c>ux!~2=~JsoV{)kPwaVtQhffxbNq4fPXGW-xsbe8Ea0v05ss8;Dlc6Ny&h z^?Feh@caE}x}QL(g5?W+yzZzpf-xTW+d6ja*bcx~FT8-^!69zB<(9t-s@j?=%wUwy zoO>~6|I1oF`ET#xk}JN?ZGZhE*h!8%{BS<>-ZvM2bHO*i&&_|niBQ;2%e*#5hXxs& zoMz>bNAi*Pz5SrN=dXHK*xlXD&wqYB-~Gq;EkM$;4=JImzc1h$=}wl+#8lSU{$>Koe$M<&_RF~!3VKSeT` zVb!XYeE6du=G#|(n-wcoGJk$sS)ZPG>KP)DFcV3eA6$JUmwx3_)Hl@g$!7>uuX_mUv2FHtbuv0OMomo(H8r((JOMOK zr=lWEAP~gs^I_W#6|qWo?b=!FOHWTPd-inGwq!Zi|LVWF=u01?s=As>ulycYU49YZ z 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 Js1!2}{y!!59?}2+ literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/txt.png b/app/assets/images/file_types/txt.png new file mode 100644 index 0000000000000000000000000000000000000000..98058ea76bf33d8383dcb9cf469a1bf831580e60 GIT binary patch literal 11302 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 Ylyn7Gd2R2l@E1^3R9C3@&*JU>0Pre#DF6Tf literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/zip.png b/app/assets/images/file_types/zip.png new file mode 100644 index 0000000000000000000000000000000000000000..d9deafaa7e3edff51d73b1e3b5184165b3af263d GIT binary patch literal 11784 zcmZX4bx<9@`}JO2%f%foMT=A1?Sk2n>^1sd6JX;3R9HEL?b~1002`~MpEVVYV?|YP>^2Bq^SBu03hhHhC*So zP$&fEWN%?@YYqS&pc5TS7~X1wurM*vWvuf!e^9*hxVBSLhIpXAS!_N;Jdg;Sm<>?| ziRYS#;eiq%x#1{qx#8y|Uwm)dOCQeK{3cYnXUg2N*1nWZTpz1@vjBJM`awZY*nq!( z=Q+%o+|^B2(A(`;-XEUXAH@M4Rr9vmh+9<^>M`s`0tO7T;O|KNQR8~_d3*1^CaUNm;ApJ@#A_%Eq6G>Q1o7swuN6<^?d0&VAf8HSLKwRUZ58!n7X2(!acW?uj?K zjf&xfec(62K3Gvd!z@z-fmXsz{&5Q9QxI^TW7J9k1|wwcEeCRRcsnrou!wR-HDhIw z`vec5+5u{tmPi$kOcsb$6>CI5>6l-iMvc1~Q!pTHhkI4%g%jz2&IFm1p+iXq6r z@n<8b1rSUk({@xO!J|eN$pIGu8I8Sj93;_?hKujA( zrG_>q<_g1|eRCtxGihptmKG!;Mmos~7XT3lgGW&)f*B;<WqifSTuw=dkAKz;0nmFngFyu`m~E8unOB z67(p$Vk&dr;rg8m_Ai1j=&LcAVr;p*95NW7o^NqoR>tKVYbjO=bcGnsn9j(Y(WyN? zU2ki+v_#6`=D|n7nEi!Dku|Q1tjBzA6fGe=n<)+^e6AVX<5 z@Hp=AxHKPV7G(a(TFCHRcnI-6GpvzNhARy$YzSW9-YMl1sko_pP?4V&o5q+%&tJ`F zli?jaH}f$&G#ePq9f}wv8Il@Wi=!UY9>O207=jKdeK(}0r1O&pDOam7C@-o=s^BSe zsYa=mtKg_!s(w=Sf)&E%VSiQHb5@E>as(uH#qj0TrRKzM;tvJ6;p^e*$z7RUiCqbA zFm5OULb4Sc=xDH6!AL0bTv{X`68JPA%_l9L>pPcVT~wX4wZ4_ARn=tlbmf%t)X?P8 zRNst#Hfg?Y4t-H_VPjrQQB?tD;Y+XB7-V9j*C8S&bCaV-Q;I+eQ%bbor=O>PL4k-4 zn@+xvuTZCuqwu2zodu?a-yhCV_muUT*qXtbrfRdA6%)_C2xEN9dQ0KH-<<+|p=P+o zwdV51Hb&k<(I$kJ?nX+M9evMfK`GGao*&dPdFk8m^q55gmh5|;1(HhWw@l5dF6UyNp;_2Z2!D}EG$2rAb!@&kS;=IEl zCb)mcNPEbn^X{KQl%&E(X1Q|l;|jj-P0b#K9$9z1sE(-iUm3p=#_z=cil?Vtrsd5? zC|D_A%%>|DDsV0MUeHp|F&sW}H>4NuNj<_~Lz~VfNEa5Tnk*lC6uX?19E%lOmF!p4 zS+J4oU|_5hr#Pij1G|XBDTxnIDV(0f9>pG`ekXlO9ui$j@loivvx}j&Hoy3Nlg$AF3*K zEF~f}Ce_k^*w5epovxg2jc$xiRH0tsO2IJAF�@H6?HKIY7%P_ zFLQ^kwJyF+TMa=&bUnpSs>P-yuBGE;lHW;7zSZ9wbd z%3W6k3O$dHYupu`6jK#v#=FN+$7A&Q^t<&#^@#PJ^u1S#SAi?zLTsYr1Trym)h=kE-wrhuW{wxJHU-{HT;qv7o^yXU)Qevp?x5saL=?v-9>3`FpY035!E&Pu1XBtY8wjEw^G%;_J}* zurJ$(+qV?fLWh3k_a5h8$G>kD{Zpb;AW{wDR<)s)*0t{AC660wO~O<3KmES< z6HeRS_qVqqM7|#FTR(qZa%^pPeVV8Lt;B89ZF7>vEh=i@uJ=-neSvsEYyaJ|)>q!{ z=((Zq@8d#t)q^1adP@78pXQy&Pn*VvXX$GSyQ=G=&WZ6aK~GCTogI1`Y=n0sh|f*| z|L^UWfR6t!y}ULVEx;BG^#D{q>QJIAN zT`gSC4%LscxE#3EI88VO*fV*FxjwTqaZc2Q*9+P0T75RkGa9j!t`0k1ATtnH6P-U+ z+tu5MKS(=GIx*N+{-b@Qeztn-yxcf*#=3$?hDL<$gTsaU$bpAuik2K%9fk3A_**-U zGn?Dr-UW|Kgtgv0`my+x?@-lv#ofZB0)09A;r+qm36hb_!PFsrz9$iT7QeC$@6Bi8 zUTp;qS=4*}QWXheeSRq7wr8PS5@W-sN|GG(_w}WOm~2Z1ZY?-4LRan*k%!-@M~S?Z zTwJ_spGoWuTJQ5h8q^;fjMFu}Riw2oN$r`UqxGy>&@86D1rYD6b}|C+~#yk`$G;lJGX>5|NvbD#5}( zI$$k5CkS=Kw$~}m)&KMNpw4%_wBsy;J-v}z`ddePRe0g}bp$ws{iqXPUBU?>$O#t` zjFRtI`Ker?0w4ReH4LKlPAhzpB?5Aj^(U& zdP&flFS5mI)|Puo6xd zkruP|tw4kduL#>d3ml)~^^@j6&dEk@y#%?0ZTioQ=KFTD=Rv7Iu{$b1EJjTy_L#t| z3C!_=c`h0SS{0Jp85SiPsT$21A@iOUa$}4YpV~-f(BIUH5azKK7>GC*6joxN=0)qJ zx3)W&R%}Y+%5pA$T++2*0aa)>vNhf`PPiVsPPxmkb2NLm(pNMVRz0j;J>NV?2I)cN zdI+coq*eQeDY!(*D6+ik9)d3prch%no4C^3Y%c^(2=#Rgo&)zTAMkiCm z2|>597zwBqZ}q^DgEDyVpD=zz*Ypl=XoU}kTg#?gMC89QD;l&{^~s6Pe?wh2?Nc<9 zt7J)J-pyH79bBFCbJc=!*JGG}e6Huqx1w;~h>2)JS%2}3mJReAjZKL-F=coTU&r7( zo3Cy|a3$N*I`5g^r?YRD#KowvtL?y6R7gZre7VH5)kCr`4eF&&GQ5gIbLg@NBy6Nw zKG16}$e$I9h`;2CXBpSTb=3Sq%^NB_pstm=f{S#J*JYx$As{uXHCncJpAwntno+(Y zYQ!Br_;CfF?6y#5mw4Jo;h9NnFto-YlG85YJ3dhHcmuBnZyqEW6e1xhQP7jnb3<+W zb~P_BSE)C@k07%+yai`HV={Ho`_gyX;ZkP!yrgUP!TNUE`~9!?_Li%o?U~NBjsILc z*Onez14p|Pa)UXQEuj%lax3Hf2|7u{Nj4f}{A}v))cVxNbb4F@nvHeuJ}scYh8X_ovHi!*D@>9xwSfT*msGyjg#qd_{p^| zJ=HTaB&Cl~KH{u&El=dGQb;H9!R3N;*=vMwon@{{Vtvv5;FjU9W7xxsu99duDv>t8 zS_v3YgZzE*0d+%QLpIDN1{)~M2ecRgt8YNIwlCm1{-P?%V0@#4s0H$ig_9GHf74Zn|!=mdbg_dLDW+P8r zM2-)PefDzp(NSb=6+X%ZTHNw1vcd+`2Ar}?&=#2@okrOzL%-ifGvO;*v%RxiE9Koj zlO{6}Bfp2~NT2neU0^Oz!fp%1yCyq2hkw_gQ=AJnYtp}Y=gyi%{lxS(B&)4t-1g;~ zlqH?cIJ)bO3 zQM+vW^WN&&!LXW$Fr@8u$_3$iPbsdYr?+>sXV+y*TMLEG`B$cqsq()@7H^?Usbx|& zYFR}*jJ(1PA?W>;ifx+Avljh>d4mW3A6V#bo^;sT!lKW8&pGp(nL$J)i;9%fppPPJI+ z^YlsRrcNB6vMz_Vqrip!SN52WmxW-{^*@1A#7F%~${jsyI$d zTI7=Nly6?>H{>!(G88vbF=9H*#?XsTo5jzd$iUC=k##^FPwl<(t&%)&)>Zr3{vOhc1d$g-- zsnu+;|7Y`362Lx*5Dg*Q36$SpO@Sk=J_;sO35piyfN{8>d%;yuGk|fbZD`<>(OM*v zV)JD@^O1jo`GFSEH|tNN#UHP+UFf_>r~~;!JP{wb#*N(_$D738qUOq(IBnr=ozWQ6 zklukGd8~zqlgd*vVjkaw;P+V$lQDuyjX#OP5$nb1Sq)ixAG|&2+ZTPWXNh4EZ~oho z!eq#_-q_Sq*Zgd2aMxv9Wvg&|Z8P=H$#&Tu8-WbYHST-tBrsL@adpAGU7s^ z+JQ%^)e=gx!#ylS?1MdR5w!-p;GBxGs=BhOvgX3%6xYOYZ9u_s@sig?dWZ?HrSn_=7&a_R}*K)X4)3Mj~(UT>KcCOAn=R!4}`cl z*baK7NZ*;|YpBU%C>=NRUEW1W&JHD*xyWfSn(KHX*;|-4xG0WT*R+-)W`rbKrc7kA z8H>7?DAct+wYu$IeL72{tiMn8V0E9<)_ZbcISLi)u~Oam*j;g|QN=U-x8=w4YMuKp zuVe4VQ*$hbl{2EBLYKx3xjj#%KiI#yeQ88Ks`dry zs^XZA2mW=CgPyVdoK(6}F9M$X!wh)I9zD-CORdk5ksn?zJD(!Fk#w{lzasx4PJiq& z$oc)p&%vSTUx%^ki0FkDCFUahU%?K`lzCClN4*>4m!&fgtKjB2N-_fLoEzkUe_FpE zyC^c#UV7Vn>TjNVzx3QZH!oa3g8b$Ip8#wJ#M6#8n{!+L93Xq^n(EM|+0WySl6r-c z~4~L&y?sUmt#_AILSVU2>V)llE29Ms<+Ub_M`+ z-2XBNNXsC4Rk%-NCB@ZVMeQG!ZVe@G8Mu zLY>)6cQo`})f4m8%kpzWCuGfVU-R7isPB8fyQi!FXFOBb`ycPR z59j@EvSFsn)flgzl{(@F9C*b_qhP?LZoYQ4pVWS3!h@%M3lc13IZoEN6~QC`-+gm9 zH}b<{>uaTaGAk`mUehG{eAlDzzUq1!fJ|}j$otzWkK%`bs}ni_GXTDQIO}K;zFoOW z-i{IV-SR$b2;(Xrp$MnVU(?tlwYou8-IT)Yc5eO^72C^OHZn@YzCS1 zM-k^AcqdLxNmB|hdUekxq4DAcTOnqKh`^s+O^BY23*YKlN;p&c-sLRZUI#N(Hg(^e zEH9Mhl-I#gA?%h_wL2YEw%DE3Nby+M8XZ{07H@|tzmfql{f+ypX&Xt|jr`pwGWcgw zMcnP%?+ec`W!_L}=7LdH41F#_mVK_qykkhX4@-r_P}F1h`1?7;wgE<~FmktZPAWBU zH}q`XZTYhS;>XnYePs|v36g#cjKKakPijgQTCYydJ6fu>JdXC-#?M8zpTnX z_AN9Hgcj#@zaI6##LHdM)6-Xt!^r=n>`}K4P>B8^ zaIFA&)sFGlw4ZmQlOjpv07htE(Oy5+My9HiF6TwH=Dz;rG+OY~;jHyaQ5G?zLimIL zj6&H{9{z!18(r*re=2VRkx-A_qU~nB%v*^811QekP0}3~e!8AHJ+7T_3qr!YGzB6# zO0u7y9=!1-^<-EK8xUexHchW=m+{-Bm5~lUlApLA6eQ1+2fub*%(~Y zpxk!#`e0`D?qYj27!{XnMh<~7exnBar!9yIOf;#@?|!^E6(rVvjUZONq^vJ413>7Y z{icr8YHE`W%XUYErfuH0ZZ_pLp@hfOF+yA7DMFq<3Ew*QH3pOa{&WKebaD0s!k|$s z{@Ixh7kz{=+I~+r3$+^>lqtA?$D6lL;zXl?nI2oH?(^D~p7__Vl>X=FA3{_MDS_0x z1Z3}lgX?sc@lYt>!HcmKxPQwCQ9?j~cy&$axad|m^-9eE#nAwQSku+GAbFd=D=2V| zNQ?vpFhj@NLM8Hov))JaALa8upTm{0sm*I|P`tCZxea~~^cvanz)2u}el_XZ@#{Or z-MHI2r(Tpq?(-k^^I}@j-c|-P39fFT{GOPsWVv+ihud#!10}=PiS;x|*Y4ez zLAL-z?Hgv!B$Rg(> z`=CbGvB}yijoarqG0ok~=yeScyYi-GQ>;7K^-RUJcne10#En@X$4W|fEf73KMC~%? z`IA)wUE578Q}CLuecSE?JYVG~PD(H(nwDMgJAh`99iyX80Br%4T^iAmZq$No8^joXK+QNf?)fxZL-K;69_rDAC?P;@4C6Lxjx&b8 z0t6FDg-v?HjSDGkG^A01-UPIdoZkm(JwQMOd`h5`^LAy+sZ$1O6ov5bvg}tXE}%2c z?#f}E89zxh22YIAN8%-W009*~>I4w2Dl#J`Co!T=m^HVFlaHL+Z+<>8@ga7~)#DVeUyay}ULY%o9CSH{3Rhs4N#Qq;;yp3d3ztXrY_2%8c zZ&_x2`4a$WA)xOkR3s^q+;x_>UJgG?Ml*4g5A!p_ap_i28nrSDYzE_ok`}9bOHcu^ z5bM;@ml(lQKDLZy`;OH{-{rXg7kt8X82Vsm>u-mdIM0+Q>BJ zi5-1g2cr$^t$w53s^0DCYFkZE9{fq++G7uvs82BB1bYuz<1vx}F<>(MR$Ba=S^}aL z%LzgVjD_Kk`dU?xDZ%+O=o1Q$NHq~nLmul;uih$wsMyt_{Wn9AZokoeOxsCIOXF)3 z>{UGavv_eJ6Dc@?ksOQ*NdRRlnARWyiIN*wB6r!Q)djhvc1=`~RPMv?iW1boMW#`h zvD1Y|ZvnF~2n9IGen(Vu-|Qx+GFtQ(Z+&-_ZYmgT&$DK#v%%Nx<)3F*fJ(Y zD+&A{BLdKfP{n=^0z5m}Y!V6!3#tB#+4OD+UO{~Y$dkB2v;bI@od8|d>Ks~Tx=|1^ zqf+p8vai>a07?!ikYD)l+>4GFGYM`AmRZ|(1!9M(m|aw(w?;nlg}M-3a?j0n%`;n) zd+q0Zx1Bl1j2xMrEz3m!%y5{Ll}jK5Ci~tt+P)v6&?JmT0~eDv4u7Epd?$!MH!tgo zBY2`jBNPS1{V$U%9)H?y8OelUqiD>NeED}xYz$y6q5uca%^n}BBKm!BN#Ffdq%_WQy-{=B^8dzJNiRu~$_Jn9& zzxjBkJn{+g&;iD-zwq7S!r@u~2OT@NB)c|EfH70FSS(Cdn&=tG)lg`L5ye>U;{L-; zwwxaB|JHF+T)F(YaWxvL^C*c-zqz`+IT%AlW{t+T7=tmKiDAW83~|X^=cTf9h(7B$ z1c^b@@Jqd64&x8oX{ZnsMG`nK_qhCiE=vd}wi25_c_9H!n~bHbWlEQDj&Fz}o}GMr z4|I>3I;rv(hGrmQQHrdvg?iAUvNsj?;U^Lr`b;(IZCPM=O)MBV-USOpwqy)WD52`GMfI z6b{qJOod-KIEq%dh84KH#)}EGp!k^Jv~ksmVCXPu<8&~OaOdF$q7qp#I{@R?xf6Lf z-nMO7Xi0U-4ICG`Qm6_{L9}Ll(Y%T8z=2t9hte>tz|mc+lGzpvu)JkWFlVCl0vIBK9CvaM~s2{Jn_(A@^ za?mupg+6=4Ra=R-B9FeIsfBpQb+6+WNXxiZv%*N0te+FJY`dZE44p1IAq7u23LY8; z!PGvO|01#gKnZ6+t~mS4?drmjkAbUrals{T3220EB{6e^j& znB4bD2ipl$Kw{R!nCrN|7$PFwSsvDv{2-kU8Ht77M{|91aMWUNWf+e?2MV!Us|tX317#)FrqOQ zx2(o)bzb>)U_=?}bVT8Z| z0Y9gA&4u1<+;f4)+vj&oc=2FLk~R(uj+XI<#Jto1F+eh z50RWkOQ4AMYfujJ;`+DheAH;ZoBC9p8VZNdZ7H8-69ERm{mHmBU&}tPmkU8bJ15b; zoY4fM#K0Nid6H07&SgABk*R=?K8nUPHZc?tS^rhXeV7O_Xn!jOZ(BQGqS?q z{5v4_PsJ^dc$_ggDM}QXovETO{>308`t1^G2od2v$VUlpF6i8Ie7I`LRW3RCPYF9? zctrLUKl-01pfWEz6eb!4`jsu8@m4t(IsAf4?y{=!hdQe-3Mpw%C4Ff6qz`Q*yU1Fv zTuK0ce)(hfInhcg(A$~f5sNm>Nmy-lpMh>w2qja)^NsCPNlQ7|2Z^P?fp`y*a_ei) zCC-1n8z54q*;I|`jsoE@3j@3rKbGFu%T41Fg=_m@BMtq7apX}92OA-1iY&~s#9+5}H&q99FbD>kZ65f1R| zw~$X+Ok0QdU%?n|QWl4UGzh3|(c=P)B&1!q-E&+C^K3t2M1`rz%4_dpY79~VGmfmr ztYB&R0d@iuz}5@lHZ;7b$@5B2{$3dbi`)S705ZvPyVY+k=xAP}yhL_buT)41A{7?` zBYx22OsFHELiPgl&w5?${>A7Ayg=R}KD^QCVCMdP(0@2Fs312h&93gA!)bKWDsY-B zt-%&qzy(PjL}xb$kpTUpS@bvFuWTCf-%;tPgt0_A}Okg~dkSKTN58hY})8xCQg<x!i(&~3$s2WKEdJk)TqqRcRigkV)DGkwR=X#RaAD8Z43n|2J0VKF-( zV0m&8P&@H<f*3?* z|7Wrk*t1|vP27{CHb2lz1Dd8Y)5nJ%f#y$(*sjs_-9D;2tV#j6G~uao!j?2h0Q~zf zu9fg4^MKeWb%R$wH-I3rv+H*7+0XAQbtK>b*O&$hn7V~LJ_9k+_wGt~wSe5^uN2wC zJ9F@#QZ+(b-}&xKlkZghGb-8+Hun653xvxqdA`>uIc8py5Dlgj`HtoLOLdsXEi>T{ z3&@{HUOL`S_;W+@Ks5Q$gxgFQNz>6<@c9K`xfu#1WQ?*=!&$`pk>;vd&eha>v zA%t?gyT$09S0coeHya}@!&R9#CERBS014z0@PF^Q{o~e;-y#@{S7fNy6o|4AN5f0q zlmxdK8a}}r{~0``$jSjzJv^EnbQNExZ ztcT4ay>ZpEEKp-f`-P__@nWbdC+^WAX3APID7v zi3j=q+(`rcQ6LFYCE}0wNoqQ&H$8%zg_dLJ;pmNDFg2}SHp#&DH7{1zRpiaTW%!2!aJkEL)V_R2IL*?`8i z$(PZWfp4UHAt-F@STc{FsVGnAqILM~E~0#s{S0nOXkLGY3{3`!eW;B^!>w;fza-*1 zd0Bkw{Q6rg)>=eMuLcQ%fj_spmJsHE4ph?r)RYwRLVG^&(Mf;NxeAKmVnYQ`MkPw- z;hyb;hRx1G?ZqOy8l*z1SEJhFe%eo&)@Zd<*!pk4an<#Z(nYd25z?Z zC=)rqEf@ZFK6Z)5(!Js*F>9AuFW3yuizFVuWB)N$2Qred`d}j7EvR0rJ4#mjG7C}I zu(yDme%@GjvqrbBqnO&#&Ufemv>)(uy#OA#qB+w>)b(H(G8_U%w^DJoi#8nH$@VHEg(@y1ar literal 0 HcmV?d00001 diff --git a/app/assets/images/front/P1030073.JPG b/app/assets/images/front/P1030073.JPG new file mode 100644 index 0000000000000000000000000000000000000000..53b479e5e54b6861773ebd15a36f8e6b78350cdc GIT binary patch literal 5092505 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∋oXlyBkBdi@I1ylro36GJm_z%sUScAk4zi&j!f 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

|n$&z@A=GXslFr+0^M)4odxDur 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�GMNRMm6& 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 U&Q2+Lp1%)CK4jjBm~H<0)g+?#`UN@F3&Z2X& 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 z zPAW?AtNZci8^)vZcE3Q!=TnA(D*r|d_)t07JW&ho*L`Q#IQXMNmE_SHUY2V$CIVl0`Aw&w5Y z1D3KJ*~k2%Qws^{dz40IeHAHbXzgn4UMLPMjfbtAsGJk)Z!!mQ&ui?zik3L2Zi8(! zX$^G==%AGD+2n9?BzsyA4w+{gK@dS(i1h{2uWp^$lUf;-&B}b;NBBtG#?|k1npCrz z=V7X&Sk_N@{9L_Bl3<)+fWm!&~rnqMx&Pf5tgCdp#QrdWO%I&IPzHCSGLVEQa#z3LCH)8hxNu|#*i zL_<`?9Q)5dCo@UyU}2=yCiR!jVEF_Y5H#m+7?F#1l^C*undi&7}PKiEu612S{_*VDCr&-Sn@W=)puA8#bZ^FoU1@;z4^)0$(G*C`3~-3UC#&DUMqo z5m@EfkkQ1Q+h`Z+&Ae##5oK7$Uq_r3=Jxaj+Z~|*Z_+k)nzt;jC1BC_bjhPH$S`}e zfW*{TgFmUFDoZMImHXc?1t{E%c8plif@#^PEk<;FzOAo zm|D%oAF9K@(e!;H$gg(XY8e0{?kQW@51{ianZHqS)hf%iAye^~mRQ#Q>JGgoget^p1?Z$odr zk{=#;mVM=yjS!r%jYI%QkVSO$cuR7T+GqPj_hgP6t!F_fFb@GmAyvlu&_sJ!Ustes zEoS2_c%^qyg2P7*3moMNAcicX4GN(&O}AJe-B8LW5J z4#D1Z8jiVgB+B@R#0EMJF)#ri{dVN&v-)%NhYY*w|HSGpyz&#r!{?)qXnT6TUY{Ny z{tH2~Qs;1|p00|#&^u^%HPTg)(eNCWSyjkO!!^&#i{HDHe|}E|b-&QC-0f{wN3NMS zk~zNo!z*VgP2A+mt(jMoO-Z@z_!Ag#75I=#5`W~;nE#n4I7CbwgB?@yi!n;m8QTo9 zy$AIB)<(%=*U0GjRhxmNqkYk*>`zR-tlIHSJb#Wg?#BD6I4gBh#jqn_no+4=0L|&q zOJw*TmI+Fs=c|Ct?7ix=`G-uWPpK37gxLFeA%HE6B>r@vc}m93rVMy)(3zsK5Z>O9 zIrluHXy}PLl0<9UUe(0qHD-j=^^3YL1PZQHy957M=zi|KjHzdPMcFI z)21P+YWx1hGb>{)*MYL0L7zKwG58k^=|L(m|C}%2_bahdiDO5@MLYaPp%zfyPR&cN zJio>A#p7;zGa$(rvg@Su7McFQ0ayuEAS7%X9@-J&xwM7hCO?v?Y$m*UWI?;1OuKgW z3t+7Y4Q}{&BhvrFI;cLmoZGFYLbO@IyYoFZQz%@K<7MHdWBr+)7S2e^m5(Cz%cI4D zlDGwyKv7gp8PfC)?q6*KdmzJiwV&&+^xJxqEcTu8Z|yq@;(7hj)8K6V>!5-HW|~l9 zAOuz$=UUyV=3qHpVt0-pG?+pbGp)%>A^3a&dar?Q#YySD@y3zSjJJk=FjT9pK}$#H z(sq~34>QN?24BB>FIl|}y4<(06LKbR3<{Y~s`|5UtZc1<8`vPPbwXDEEV z=is3)?_Z^Ix^KC!^d-oP~WL@@$mXqSf#M;zL`A5c=EdN=Y|(gnsnsMXbC2 z%Q;61_>p0=w0tDyt#-*waghE{HXs%wO<*FRyDoE@`i|}KNq6`(=w+qLTY%xR=t7nc zabD_(-?OFUR}|j_CxjmRS{j?oytI|)i%VIF9NZnSWI$P#+fXiqOYbdA#?^Fo6~DRpx;BTwT)!E4 zQ?044=3Oajdq_YMpOf;{kBEg)+BAN7*)F=q@U6J$Uo29=znH{QpbTA1(QgY&xe~4d z$hzCG5a~F!0UNWn@~I&vSj3VcF_fjp+M5|lI9nwTlYzRs(HpmA`ZwA$*~;+aN%u0g z_FmSipxKK+GANEeS<7W#FIJ=@DVKSrQp5P2S5bfWcv5Ih&iRLr3u#5x5||rt`vjut zFOqPzP(!io-Ba-^2fya>5}GCL{_f8i{j+32W6%WB1OEPW-_MNA)I2Z%%r3>x6D0p2 zhZs2IA!T6kwOGjq&AePLbV{!rJ<2Ms(G3?iQR(Q$SoGDMzt+S+Jz)bYVECRV9{R|A zZ-N01H=RDWTpI%|?2D$JQF{-E`xkytQa$=x>w09bn=udGO+A=|cS(OpFoAYTSFSwN zI)7Jhb=yLe1r5?!rU$|xIoab1I-Vi0k@=X0g z-(XhGUP`fx{XV_)tNY1iYc<@#^CKP&#^6jWpAn2{-;vsY)h1t5a~e)v8g!%H0+gr4 zN$cvGR@3nJAJThY*i5Jzi`)^0sroLL|l1Y4xnLu2gS_;CM3HQaT z1K7I;#(Etl;*me~$(W>X5h*T%Nr58=6X)x&b0k!&4}QH4Xk50CV@e@!7KQBH`91l*o%vXOev= z^Dn4359d1QivmSkbvamkBYsXmG&@FPm0^SLs7^dQ@jVE*T8}Mtyh<+RIKwCxzRPMu-Q6m07Ue$_2 zeNQoaV{%JlwlKbgPl*QMANqX~b&F#2xYuEdCE(wININ2cW5910Cgrw}>Q-v3WX*R+ zfHvf0w7Xqb3q~}f?hA_PgjRgcxtbB@BCP&~O*AB>IG`R&ra5WYFC2IuJDYhU9lW$`z#!v&n;L^C+_XohWO z6#Pkv?|uzz_}jzS8CbN!83Drm-RJST^NH~9KwyAQ9+{L^jvs?9)ym@Uxoi87$^8x3 zc*|Eg*2h^(3K6NYPo#;$H>y2bWF<_2H$Si+!Q&np0t$F&6qzKw7oC?Q!t6vEn`V6hQOPPc zgoURcqMU^>;gpd_TGaD6+mO=b{Q&Xl#y;tQ9BYbb``%Z(c|N9P{!1B(|JE#L6}zCK zY9YjaKwe|+iT;M+pt@Vbl9)V)aQ93~KGHPC<1}Kag~mi~<(cRj-8ZbO(~Ym57|~94 z1zSO?C4j*Yj69P9$AcTYMM>F5x_gexY~Dn9C1X7Rj2mdX0^VjBBh9SLHA>z_0+eZ2&WxKQEI*Ax$dDn^F`-xEPYdLEFaI3`jdN-LVSLM_>mj2k2Js_dNpHyem{b^G#h%Z zH}7x>i@=wZO^HeSBi*q-&}O~odvYAffyewgj1mupc32fd0D5%;~$if45QB zlWy>Rjx?P#QXb}xTSF5&eXhpQ-Q9$_+gR916Ri4$Mu4GXV^eFkUP!M;jxsimLl`%@ z3_;c61}~s?xs}UeQRUA*VHhu1tCbgMRx0rwuQVQv$Z8BY^6Vje#NWRiEDP|e8h2x$ z5*(cx%4FYW<(cxt9xy<8Kzb-KV@e%UE*wavVjF1OU((}^%bJIv*;h5RKbIc9>FJkm zU{1UbsN5@s490Bp&v5ax`z{HowPHk~FY-)WGJ$uTz*vZOel^7yB?*#$I&iiAK0TBgw+knWeQkI+EM z8g}h}Gp4WlPy3Ey6z+y5|0EQwn%zM35hF-Ny=yipHflQU)?(=d07~o z?W=}(F7ZIGH`&<{+^+~Q69KO2vA`vL2*0!%pV;k!jdh=7vF_scGkj*%kuvXuA)+wsfhen zHaGfu;!U$6JWgxnUKwu$8v3wi+7ZLDu@0V-z^vZh^8lE`G0J;4tBVxh_GE&nliYYo z-2D8-UOm2_dCCvMFIuX5eS>lnB_$1Y7?{3GNwGPSB&Dn!`Rp;pugXQO5{=?#ny^q< zY)ewZ9g#^IlDVh_AD87SQ8!=rjXPw11dvG+HgUjIqiCDIsWTu@X*CTW|m$Ob57U z=cNeOGDWl}<$O30BeVDw@{8BKb?Xn~&`jgDVcWPx+lW}udI~&*n2~nIEDXHk%RT$tc{XNv* znE{bU4DW=GnRdqTTw@wg6})&oM~wjZ(_ao3{lm*_!(@Rbw z_`U6Ocjx0z?UH|~LYM=G025&Twr2j&eXxNcHzzgwOl(ZXZ_2Tcd62}OimY^`tRFDo zg3`=G)`QbOn3g&OQAfMiyiS&|Hx~g=(L_l6WzG+IxD&j$N{6upJwzv`+IWM-!eQBX z8i#KsJ``VY%JP)Hw7kw1pD*wO`DDSm5?5$345^-C4Yr!oh z64iTIv?QuQ8;RR5Yc#~!@0vATC1g5srX0)a^ol&Z(UB>p^EdnP!A9Y9^vs)Ev%ZbS z=4=F?>A3}l{h5&M-niYG4AuNP#?|I8{XKn(L^~K|@#$KMKW4csW;OI@J70kWWs#{&KGWp3Xn{B+(>ROg92X^+Rrnr5}2J$dS#5oFX`aXB$lKe7OSUG>fODH5pYP!2N6T>w%_pBcW0H;xsb%E>8BnYE$< zX`wL>xul}v8 zt-9MbW#N=D=Yx{&^qk~hf@qPkmhB7oxE1^2p#nYm2g_vuR4=rY!UrH`xSI#cpC;GAlscs}=p8uM$n`GiGDY zkDi++m*G?gO|F$`R4>H{jcT8BGe=npLPLq~4bW|f5UGXvLa=lK#}91j4Bb+BYaywC z+T{C}urUpzfl!jiMY_CiDgjI|Y;REdb);>r3zUdU)nj769s($OcL$+cfbA=SJQ;A z%affm$-wJ)w~D}kQ5V-8a3tn=H;{NK;t$_5)) z!w)`adQ5q#-sNwF5>CZN_yvcM_vchE6vDO}Y=eIjWEktbf65OJbvRz>0ucnG^!hQi zT^^g05e0-G_5fR|=nw!^ope1#e$hAO6SO&aO$A=Tf9`Te!)4}%j)xIEih$G_kpf?3?5oin(4zpTk+##ZlsK92!`0I#YC*TU zdZu@OFLmdxH)t$}sv*d_OL-C}>3b9M(y|JIC>1(uyt62i8+}4+Y)e4k&wIf+(B~YI zm?ob95BD^sFq@ZpyyAt5h}0=~xtb4{e=ndvZ0SF&zu)eqP(*7B-&>6M%9=`(N;*Um z?R^G!nfn3%vaXEf@MjdhO)cPp2iK(&9BCI#41T!Fqy%|o^m&7-%8Ed|^&NGn=Sg9O z8Vq3ecy{4;XSEsb;fm`)=`Bq`1F;cDh$-4mSy%!`f1#T5_p?%JHo=CHDYj z|B%z~U@d5upje>zU@aM7;SqnnshVjA4)n`vHhhhr!zk-X8^=lCo^xIswb3YBJHY5A z$9zwZ^l!2+0Y0Zq+cj8Wr9G9i=oge=+uW(iX%C8`78g9!MYjy`z>jTpa|f~t?2#)K zN{)Bkdd&S=RuIai{V=-Z7BYiD4~z%JSw0TT z1auR5kXA{SE{QwwGod(L-vGJ|xvwrXSKm1UG3^mO(eibE^3Pn}E}4ux{H%gg-MxRB z{8m$?YV}ujKwGtx=C5{%T#uCwxWRR-$HfMbbGttEGUC?|Yv}oy#*#lS10jYMNnCiR zIe+WZBC36SnF55LlOo)|{y14^y-8V3N#L-qbI>!?H14 z(k_GW`N>h{WUJI)u@S7sewbF74eA6ljLkoGuLYxo{o zy+8-+%)`{FoVQjJ`K{2q%~Dxk-TistG$5ycr_EiV7ay&B?#>XmzIVUaf$o5ZxDH-hz6ST(t%@&QliAxAluL^K z+W>NE&9i7VA7)WMJ^2wknoW}j#^1LLs-!bun<$^r*`9*g&0uax&UDRqlsd6vROx9( ztlvdN-I%8X7!H4YaKB_31VV%&a6f2K6V1sAZV`@K2g)1FfaKwnZKGOF zv~08|J^f1E($HnhjkB`3Q-&L1xuV}NJAHh->l^;5L-V+Qc!}0_y`3RFNmkQYHv@qQ zc?=}v3lD?}&7Fw2eWsqhRz-@vrBzxT0;O7dIb^20WR{v(Y}YSS=I2Gz3`*rl<{WS- ztQlV?Xwf-kg%Y{3oW7ranWK_>Ov3x+2ZG_g8_k>qRO~?%5OZX5dfKIZC>pb_N&)|n z%g8%W%Ta*sPg-b-A*^Chg~zmYy)$Yhtac6VLRH4ms z!Op;89<9Hcpl*;Vq*-#Vn=g2&RrBxKG#a6Gl{zf(N}zD4#LY~Jqv}}5na__hCq`aI zxpnW|)5L;(b9DR(m!-lWS7x!tlLJGlLEM;8;M=6ZNlGX>5V-~|9>6%9oDT(!z```zO03=XjtjtTO&Aq(z>Cdv9p#(E{dEETx_~^qlu2M zZtsi;JZgZ&#Q|OiK23Q=*~G9+*6r7oQj6K`KG#XFW8&9HTlzaB>|+&jcD5s8h>?|& zM%ULhY6GT^wQ#Dsmg&byLNPruyU#ds6i)(W9B-h{=w>Q)xpy_*{O-sg&hlgPdPtsG zSIJ<~IA>6_W5m7|Jqjg3F%@p!1rr$^wY#SO>-IRs*Ts|QyFE99y6*>YtBe#FD4{w{ zftDO}?gg?Bdy1)ctS$nemouGVMhkvDbY@|8d*$}7*JMg8$42(rT5NV_TIHqXn!?GY z9_14*FM%n2f-C$j{-%;&jkB-01k8KlLSF%6&IIau0b#-vcFsjBU&@jd!?@?gwx;=t z0I;E`CY~hajRRC+rn0{ZhvXvmkmWt}*FfQqytV}Qe_WGH_n(VsYVi*LB!vX@^(@o* z>QV+0wdsvKJ&}n-fBthpM7L~W$TQXveTMbzMhJ`cJkhqv$Nn@^_p|He`x>Vl3KsfB zwTjTwiPQwtCG)~B=)Kvd?2}QAkPA1%9T`THsePUo_^njVLX-<2Mx>NmXL}uCk_)K(+M!ftxmBMcN9FCQK=rC9)7t%xBDO_c;@vntLMSjLn`qui} z$Iy&wMtky47po7~Q*xa9rk|L&QLc|YDqA1sdyUbR%6WGp7DP@4RN6~5ki5T`q+YPe?XqH9_-63UC_f$gMj@`?9ZGH1>m zToW-IIum;)tB`zCVnce9sG@!PF+~$@RF7BqEZtyZIzhI#*e%X?OSr97Fal_9mR<+8 z>C}8~C?#^IIyl4z2nQ17Ml#rDewKP7cwf1n9}FYu-=H!#K4=!hUNDTeWpF{S4f^cy zw9`BjA731z{~F+LCp8%(AR`c2%YrK`&@qN4O%_RK+E7DO_SQ&@uKQIT9Jab8eXo$X#S@ ziVGN?$t0d3t{lQZ&`*m%a>(`U-%1tvd^L6>iyLATn2r2ylN(-fvid@CMeEX0aBYOm zwCMO}0Yd&Pz)t&#E{^+OnXN~I%d3PtL69_*m$L^IZ$(cNQ3b%$cdp6(QVA}CuFQb> z%h*NT%R~%R%=GT}8v(&95ZZWN(!GFWPamuLjr!zN4|oRvAnYuj?XD|H=(OUE%L(4C z2C6XaaIQzndpt7UvmqU0FU$xEj?^4Fe*|{?Ko(y}oM;4K(3FqF5z<|n$JG&uZ&Ivf zd}-iqsCxgP6oRK!ONe#Rht};`-dts5a(*+w)1XFagAE1k0tupc;3qvO7RW!8#>4!; zJrS*kFsAel+meGSLwWux>CmS_sz7`d=uMwH(B|8y!YGmX7JCDHBV%L%+o}`7Y_1e5 zjtmmNkP2?(>{Tu2kH+`t&HD*F-8W6jD3;QnQW5FtdZsThwjtv`v~3<6ErSnVqwk+O z_-67dqECf(wOsqvmXebHUwwH8V_Ujr}xuQg*%3y{DwxgLR|#U zue3wPBHA5AeH=aQ71h2NV8Xth#lG@-mgSqZMCJ!A%>*3tw&9&Iy`0HJ6x&=nvHo0& zSMpkNwCMM~hcp@p5%4<${xxF(O^px+8Lgkr?K0wY`r_WMh61cMA0%%5i%2ZBeT-JK zH2HUvT?%M@D{}{Ph!m-^&rGrsMZMc&kDcKgu>k_&F`_rm=05SHtmmc9(v%mfh8ZVj z8`uZQw8+E`Shd6sGFoZ3w=Hzfdh+WR757)XmHU~q*-44o9SF*7^3EwiR9aQaV4xNF zG%~?n7B~I+h4!quSb35)!7}SaD3bW9b+!Geg48L+@e!Hb_mHck#j{c2jLx!wId;@7D}$f-RwxHfhQ(4%R2+>7Gp`gmG8@>PJt0rs{LqDMr=9C zGWb34R1kTa{Ls{OMc2YHZD};w; zRd*%cpNYJRgzeeS+9u5`%gCg8b^YB!{HdLAQyN-mFNn7sQg2WBH^QDp6uz-G*9{b%Y$KwlEG&OAuX-EA)B8SPr6bxq*KR{Y&dkWmHDNquKohlZFy0{7ZaNH-d@ zZmc==8NAn%Yd~bQT1esNyZwg+nhCwc$7%MO=@G;XW(9awtG)KW549&n#Ad6+1v%94 za;t;TeiOT^gXTkv%=H^bZZIH4R6`P%zk+%XoP!H~G7~-0Sb&Hz zHF9w^)uy|usD9-?s}y(!=9?K3yAne)={o3IWI|uNUU$aN4uG6vcHR7^P;CavzuR&5 zm6?$~d29EHf`Z%IZ3wCLlApj1)AM`z(gdIC59#Lbz9eB>FEm3QmORgQVWEvoQ2l9R zEyi5@vK9!HU>KK@-kIC{Ysn){|6Z-O)N%? zN;Fom9C=mPj)6kKGGZ!&uY$RBB@3Hy|Jh6>uVMi-%r1C{o6;S}dq}zk*MOY*jmfij zYQy|B$hKblK@}XC0@H_=XgyR*A6?7WYCi!=tDCony`b)Qg8zVn(hoe7#*UY5`VI%) zUVy?|c8tC53tIY9%+C7lv|Fk9in$rpIRq>mJ}G(*9S}$~Jt?vAW1Og~SR0Z`o6dat z=2G(F)MD=PZMpxc&*riCAd^HgUZ;GKihpye276y8|9g^F(sxXY!xyzB_k4G*Lz^qo z9>nM&NaiWfYdk$BssgEWXrVufO6rb!{3v#$k+F4R ze6GaO?Skyb*I0Y{bn~sK3_(RseTS=74JP%_>>h!^jx~I1Tkl1- z49SL9uwHpS*Ya6zFTf973T3WCwj_cCs-2s?&CP@t|Goo-)JmrCO*yXDRR*i+A{-`3 zkkSWMq-1wG&;^=qC~wbR7v6+dBB8ZWB{~>Z+O%m!vxihG`wy$=Ks~jAds~--z9l5& z@ZWePmsZw~!#;&2j?hxH?fXb$E5P0jnzHxvXquRxC>BDlPs%3aM-8x+(Y8_+DtPlieOM8QW4P z+Fe4Y!Cp&W^jXdoL;dd9EI9TlyC;~xl+{G2wRSgmd|@@K#G*;oXYy83y*BUwd^D<% zS;cLI9wHv>-2*d?j=`w>f--cWj@=mEn zsdRl&yv0eDGGekx*b3@OQH|nt+Vj3=L3(_x5jCTzSE+`3NJx5@Zc~@aqAaXpyQPf- z(^gl2eqfFFC21WDhp8cj?&M#{Cog<4M5uV_fUgu z5E61khe5SjB?Jl640lgxP-&gJWljEJM4k93vN5f$w%7r~9RD(#*Z*OC$ol8Bohg{H ztRMCgC&l!%Op@CdF>lQ7+y*WwUjsR#W6P8<{aXV7%7vuYjo^tujqd$aPcz~m2BWcV z`MUX|>S~V~8K!l=`!uSY4IjmdKsMV5py=p9SzKCM72@uz36omoL3>7{sdKL4!Y3oQ z*fi3K#GmA;`{?VEX}887VGVxr6vmUhy2}4POGglROH2rlh*lzTO)NcjqV-qbeVNN@4KTj z=eH*7N>^6d#XlIN(vwL-GuHORn+?^)3bNw<_A0e_?Md8f zZ>?kxYOim&8&cChWs zO>q_(4ra4A7fQLX&#CKibSz-j+>v{v^ERnZ{NF|&#d+_ht!Oo#e85Ms^%h5+BD8RS zfOyWQNcFh@H-ntDC~JKDtss<@{k;_0)~gERQkfQ&+@V^S9^=b9<7s&RYWG=}@B`0W zQL$xNMsn4*Sk}iCk=ht}5|A4VA4KF=0d#I^vuW*)H(dHMJqY@TCDbJ^$FnoJEDz~n z@IB^)S@pizooeFa(TP1a^=f(9@bhWNF7BVh8y(#WEfgVd=`O*gV*=V1Hn1D()@j7B z!rIyyugvfE_im;TQ_Egrg_YbsddJznDHzw+*3E#G~0fk`)_#g&m&{ zq-R5vcS9yWp>QFG!8ddJ*UJWJF7@2YmAK5Y2uoP;y~sSj+$-m0-DL}cU@MZf&&vJb zOh+Fk=e!`;>tFT!_$|2Bm%#!*fupy5y{BU8GoNN4ytLd%# z{fDJ`GLbEo5m2Ib)yt4$lC*}f_G&y&U3pTAueDU1xb1VO6}>^eem-ETl+Y6Q>-lyoB^Elj#cgJX;u-GX!p2uO=`i!eH*K{`jrM(0LO>igU8FW9+uo%5XM zeV+S%z54tJSe^Y1%Y)B^kK*sMzsz%XXWxujTG%L?DxzHBy;3bDite4PAz5TCUN z@1kPzPDx&-DR%8)V2!S7o-6G2nmY9#I?mk=LuQYD_J5WhL8`s}<5)dSG!oire3wkf zmD}oaI%e6PuZ4b`Ls7NY`nydq%`M(2=F#qJLdE`1*>;6-UD&3IW#7i76Xth-YH3C( z=cu%1doDsc{M)WvJFL$jLt1*KqpMu!e=?bYe@0s6`+?`w?y1@v)8J?8fqEV1#WNh! zHfdtd+U#=^_j0`062r5~y)$6E>Hz@|o;3SMYz{+zhPD_0M(&!r99pl&-Fzo>X9{ot z70>Ne|C+}Amp0T<<_N7qZ0i|?z$%}kYD=tL;=T!~#+EGsi(gf_Q6NGzUUoud@=mdI zkHMs|IdUF6E+XvmvE4%z=Q{l#9@2T~)7&XCQ^Qh;xk6Rpl&Rc#%gz>`86vw(l`91) zcZ*n_{6}blS-D=?9_#!9-EOG|)9;d2uxI>!kw|n=n;gvcFd6b(^!ud+jVno^3N|t5 zWWfd&+UG&|q`kdG^SMOL;D;6?{wvAD{3Q{jVKI7VUQVK?Rk>q5CwY18&-90#m)*Mb z0pyYSm1}Z+<*@Q)Y^0X1D>rnjmMvDKKBYpHWo}=uXN~uM^gz?lAMt0M&Np>4Cu^WM zSXk0L^W_DK+Uy(jbiibfz=95~kHdAoMXMvBBhGeOe zZps0wp}}O3rI4tG?0elg>sG{9Wltt++i$R;J)QtMOWT6EdLM`NxL}q8d5W(^>6q2x z(KnimLS)ZZ5d;Ak%Wvxqs=Yu~Y-L~9lD}nCgBgTXjMcs;rX>Cz zwQM*lY$3XQAy=kJz0whgXl{&iYci)w)q+{cYHhj$W$$k>SnCW<}F>p ztysj*%wCyC4Azzlc{}X~yH}2Atxe(8{pltXdUhE#g%2>SVX~C1DcHqH{T2`?O*3gZ zLSDzTC$IE^+WvyR#NuHH_kYwxRQ8r1mf2VxF#$+@?zF^$`-5zX(~E>2Mng!ePZg&x z;9wi0(ZoVu);{+f$F-J2oZnQWx4!!LjzO+cg+9cGdz{EhTSeNl0CY>TJnI3UAV4VC zX&!4FobU_$?OC*WgbIv~{>m~adk^53f8^v3y-YnYgpG++M0kAo&PQRu(bR-`U)}^T z-s_!foxN_Br{8P!I*z}laT}Ijc>ca1<_|qbqAw?+?e67$+NEoB@T+<_dOV`CcqD8~ ziF8_RXs{xJkW>Gb$8-miHsiRQhntwgKo2YO{8{6Jo4dWNjOIYH&g}<8?9P%<*ZRM2 zZg2kSOGn+kfFala2$C;i5h%;JVERRfkIly$hg1NN_r3J#)|r#t{@Kz^8hs^;95R0a zVsu~ZT62u6o!3VB3#F_~@ZA(8kqpc75)M@mIoQYndhfJw4Vjqxs)nQ|7QUrDmSnO< z$ZRcTK zNuT3rZEV)Hy-G_>g5&qnL}f0NPuwnU!ww=SgIfOvzbSuH=C<2wA1g zd))SiZmw#pX{J_;Odfo?Jgk{%6^K`Xm9m{Qq-M(iywcvC?v%vDKM=U$zr~pvA+%vx z<5v&=!viKPFqY%-v?`u$*d~J>-&zOH`d=TDS(9fnrzOPuQx40)+jZJ?{ESDLr+5{qD>(|JkbV?%>46Jy5X&o9RPcz3{n2o#fvHl_d-;XAmR@U_}b{Q?T6W zVv?e`Fo-zoxhnn!Y*jU~=bcTH0dbTjV= zJ}E`Ik{#x;sm!kN#3XWk(kSo#he=M(IiK&cRItgXHT%ROIMZ%~VZPH8j1*vBFJ3YG z{REp}4sJYJGw$-*NO?~1l4DQy7|R3@Lv~Ufz}_1okYaR% zF*BEOIlH!U%m;3kayvReh`~ii?uSSUTHh_Qm$Jg1-`m$4fxLZ#$CR)C>9;Tw!hHw( z6(WP#F+0h%POR3?HStxc+sdDR`{s#TR1Ft2En#s&QKv2wY;l{VQPpr-jM#WJLBA7<61Bbld5tRDpfNeYD;LD8*~@!dkM+n5n~kPb*%Iug-m(Traki+kWbcHAC>d`9wPm4(!`#B%KSdB?DoZDAsB^R_a`kU;#)FAgdE5=E-dgGzg_4JdK1+H||MkDpt* zE?sqrRi2IC?;1tC8}Hh*2fDlW=$#H&^&S6gpuB)9M|-+`yO;I(f6I7(F63U<`>;QE z*-m;C_yQqogi>HRU;x$pfI57BWX&g1^T<5)&mpM1I#2*35hW{EjP>c~ZOamG5w40p zGC>pl1JXTsPNyX|#{$I{Gva?8D9X+Wl41{Tk=h02dlC|)OL>`O4FhwF#`HTM zwdLL<=lkyzX!T~AAL}$27D-!v4z#xY>C{O-dwTq3$vkrZ@lrx)XU~r{A&3kuVbVU;4nziYQLiXgbbm_LaNb=gBd`qx>JlP~ zozsxHF5?3;Wrz6zi%r%d&2$|J3INL+TLI#ZW&~1*q)K8(5dxIS59V{sHl0pgZM1olKeB zIgk@k2}$AxzF)> zk|?tbwHf2Ew`I+G1CX#GcayrTq96`r#l{4Q=LD)2j*!K`NSngJyy_bp?xBz0BO{2X za;94@*aI1`5s;05G1raHn8adtzEf8ZKE3B6Wpo4^yB+?=rAPlz|HH#kF`tUM#;`VY z^|v_Zn>fBlZ@0z>JYU#hJN-&4*AFvFOO^gq)&jK9!7$f$XR|(Az}64m*f&<}7qsCM zyR5dHsQ}CI=2>#ljq~~zy2=Pcz&vr3_Y6J$R~4zl_jU%ERAuoi(3&)Ugu~74t=!FA zZR7_onu_PDW{B>Zuj7Xq{>WN^Kunilp1gBjSZ56yn81o#=px&7tm@l<$j1%S z@fB)hRE{u|+;7572X)AY$90SszI^-#-?_s|@^ZVAO$&@vE4&CQpCT4GJ zZ;ZyWBJ)G4Ix5%9_~E0KgxL(~3eukkRLhv=>(Wlkzi{TPeaYg%JV`?V#>Cl?n#~;I zm46m_I5+TTuWB0u<OIeUlLzPdM(7tyHwXJ4PK}->UiL zAaG&KeHMb`_9xZ`&?jOdmZVI-y>!+)DEIOxa0xA8*5?P)W3pMF&ySYI7VXXgQV8Et zpt3Lrf1yK{D8|=$)|Ds{$I#M)REa2SsbDXFV+67_2vB=6jL3LXTdmhRSx^G z#$QsCe^uUoLrVQ-U?r*azdAS97etCbgsIDQ@0(lphYW4NJ))kQoCCq#f4-t}(dm zlXcYiuQ@TIrD?xM<{$cq@GM;hr(0@{{H0q&Rv#GlVy|zcS9_){)6V$|Q@K76O~{8D zO?CYjNC8DzE)D)k@8tLeKfC0bD~bN|2F~7)`9D0S=VQu#rj$WpOe@Fr=dMWd)GFgc z&`T|`Q^C#Vww5d&Yf>B*#zv9Nn|fqFPq=G(*DU6e<4irlwDbQs?ze1>cJe%4X)ijbn$3ug!Z*$u~}!4B^m`C51Wi}`t&Q~iiDE{ECC zGf)NmtGItz7H&Q*roB6bxVkbuZqEllA8^rK&3)-o6Z%Z@Qfy=ytfY;|_$bdbEl#C{ z0l5HLJb=jc@n#6pj|)I1;Z=^xLPT`30*el5GY)C8VRj?J!>r$@($mnru5ywUN}Ctc zPCEMxWZTt9=~LRbNHHcBSR$m0x9@MeeQ;O;$b<=w2$R(j`9L#G&$4jDjyFWSizEKm zw5ekOsLFr**Po2O7EcfT`y#{PY<`}YIk;<)#@UhMaw#6+xixildX#och`mP96jb`I z_b+*kwi<<33*5D7s;o_ez6KUs$6piv*8+9D62Z>bBAYp}Az~@MrY7^=UquzE60GG%T-Q~ z9@B;a&2tR2HTJa1S$a2ab6;$BMS6z307I{GL;8+yzpr~JQ@zIpAWt8trxy0-(^C$N z{QDDQg36rE;ae&FJJD%F^mqUlu5?eAWJ>{A-mA8RS`e=>VA^Dsk#qR-&EdG z-r3B1PCS8h5~6Q><)hFso9>)YtB)k9F4C^)J$%nP4Ugb@8zFfe{Xa+Dl&6^wxjKSdvE6~@LV!^mUYge~s zZI?{4sIX>mFaO9I9lk+vv|AZSg;5<)V8KF+I_iFBd_-If6@DF>S`~T|MviaGEC*P3 zc~DTq*ba(=SkF#HL;myiHoKno45E9L$JLsRNBf5(-mAN^mR`F-Ax*H)fO$J0&j9yg ziGN_%f(nL>9ZX z)EzP_TiisO`0Cdp6B;;ln#=~_=fbb;LQ}|`Ciltn}B5h zLEVBe9G#Ngm9MTfdfrvBl5}Z)vQITZ>Lu754dWS(A05w9e6$(gezAq3p8wnDi zI9gt?oyp+?(?iF%FuAMJ^KZUIbLw%O{3$RBlUw+z>?au0u1QnwgCv4R6hVaFSd3O=*M~{4EL3xp=kQ8N$*{_+ zVqCO@x2cD@{eris+b8p1Lk&n4P|Oof7hO>y&l=jabbUo@NsryQ{7xRUs@D7A z0mSeiQYRjb+#1&f-wscH(6zyQm^$@LR5GPv{a?D5+Tt~1@;)F36&TyJs!^w;3_F7<9yaDme1EX^`F|% zIIy-ja4sOE>;P>hw^r>g>+`{G^h^GlZTbF~&85q(i<#EA=+4@JLv=-UO}4vh$&%B{ z>P2=3!AO~|XqFA18k8E=s~Q_iLP9}iW`6%uU!*oQX-z?DSZYImF&FnMW-UV|SPtY> zN9BPuYoz^rt^JIlYNnOGJNX~YGnowoIhv7yc^#*zL+Lc6h55q)y>Z~sA|4ZF!gPDI zyhT~~_fqms-QJ-+GQr{LMTb3SS92I0)H<6!*_x1ZcOR4_a+pEG;GMRq4rjj644jg5 z6<0&h5%>NQ+tpg4bhYyrO>#if_N+4=0-sbC?caRUt{agtIUqfJ8PPQ_TrPXPQ-VpD zh~XDYpj?_zYxHf1p-0a2s$~Ds)!rtsbL@Z(RDoW}jc3VU^R}!6Pv`O97s#5Sxv#ts zl;h(f8+Nms>HWyJZ1vwd=a>S=h6kjH?=I2n;ekF#3OZkJIqPxUq0s6}5m4Zis?8Jg zCOZSXvw(T5R8LkPq`U-*n! z&cm<#h`(Vqz!W~qFIsunw#uKlr@hy$t2hoU20bA=8>tjvXez&mEQR6rjO5@}nwD}? zr&q4ef_@@3sT^&R1xJR4Ia9OH%Vzhg1Ewc2n-Iwz!}e_Z){2pKfum4uz|)!32*b63 z<6?rbkmpPLoeY@ePeN-NI7+ZJZ0CeL13!$y>ap`-R@z|Pwpm-8aT-VTG8-L-ooy$f z9?1KZfNpr5ce_sbruQw0srmcsXVrx+D+`Q~Pfy4E#|vsfzD+ulFEf|yr>P!}XjTr$ z{km(g+Bx8|%U2asxhir0?Oh>Kfo!opI95LW?Oj6=g#ld?n2BYR z?axbozAtC4DVk4!?TVV|<6q-Y@UasJSpygTOA-r#apr3e`rNG{*i$^H)Uk#BulB$D zWF0=N5cdk-u%&quzLWNasGD{dz$AH^iWZ^i%<k+hjh^?6x*ogu|N@>5KAQ2`=lFq9!@k-pT!| zXJhvrFt^>028N*HmmCB+7_-z~$HFyc@#kr+M&BiLnhp<5WJNqc4%C46-9Q4Y!~BT; ze3i56vP-q>V=0^l2g4oT&QWz|h(7&%dUR?C7>wD>H5Rv5OwA!DoKIu*uXw+9oNo>W zJ)aSa-fnG5S9nSE)z-}lZ|Dy4efG`*nMCw-=hyUKIx|mNA^EEfv>%gqO=;bj3iR&> zR44nLDk9{Qh0{X_;~|K51w60?=8n!yl(pD6Ukn8C6q1Ro3P2ch0J=es3@+AI<> z{kIm@K5EXToikxbXr{g2VVZBRdscZ z^}eX~jvKu*)4N7H*|1!#ZJ#JHM>|HT^jeCawbJ&Y1{YFp@QJ{o?XZEgNPq&1Z_4gR zzuh*od1H<+RA`&=)`s2Iqv>2}jbimq>MHfu0m%z}&!eRrnhDc@a8|GbcHMW0G>A-TKXQ~ahQ-rX}-l`tr&L{L@? z^LwOcGLT}rflS75zTM$f`mVYyXNZlVM@tYYJe1turjrXj@R>UzP^oMWq>>4#0ZTx^ z)OB_#)UAX$ZB|w+@J`|eTV2zGsmM3Q0dhWagacg-j>p+(?myDir4c8Aay~GOgIP4R zb0}fwGwpg$fsDRm_)P5G5!SUhc*>L_=Hw1)jbR;#K{BhTb2k%=4zZZ0v;nP`JM52; z2XndChH^}}Ek0$c<2)4s~fKVqH(>Tzid0Wu}0KMr+ZjM6!_tnZ?0x7?fv zXTZ(Xf%F@|$3-)X%VxduS+tL)r{WUAp*|^raiipf*isu@$OMySbS?6ssHw4q9NY)~dF+MjmT82$zzVXF+rV z2FY8Bd);Yrq0Y{9(0HkaT)^!}rmhUj^NH3)_ zs22}2EBV*BGCZK}>@93&Y;Lk-sq9`f?EO^@clK&UmmE1*Rz0$+U_9q(6uHLTnyMG6 zwwoNf9mQuPbwO9D7U|a%egUL96gQ$}MaPU#SuwhEZL(_%lTQ-jC;e>@Xh;y~?V%MP zow={IOfmkEK()!9MDL(re*VEwMLtnGcXPON_GRM04pNFU)uU!#FXg}Mab^E^Snr!- zJ(GNct~XAq6S2a#su`1bgf6cM8id3INtRS=%ppzJtd6N#dTe&WZ#098th~fVu!5Va zUjlUk_;*T9Icb~H5#Bv2UMrcy3Q6u-mWIqgoL~^Lk<}Dyx!KfvD8+POl)7X-j({@p zF80(ADzkjA)d_O!WhIoQ-dqpwB-d|fn>^AQ+sZOmPKTPMXrqN;c^(h}hmCbZi(@E7 ze4uKz@5#=!Zfbv4xVpRV=*&RD&o`-);uNMkM>w~0g81@BEkWbfgp=eS@h@MdEn}Nl zLXC1``pfj4Zdh{pM7hYCB#N6b;%%-jOHD~97X0%Zoj!yVq0Ivx>NO#zX!&n~HKiTR z5vE#Ueh*$Nv^N1pxmh;L-xwSXDdWKGc@5H?~#A!Tj zl*A=DS)>iAy2t`m{fMT1BBmt}jJ98G4eYtocTdU&#cBwd(hPHAu4sWu7Ydt*Fj38r zCkxB}!|T!V11xfS=YKkXGUdK*gM>HaTAE~?_W6kT=IPivLgd0v?IUP#-HhWEe?)O~ z4T?y{Q+BCoC&h775C_p@AwxSRp743*8W|Zw9X*@d8{S!etJ^BaDFD5IFZQorz*l35 z`v1Sv<9_~mCa(~e;}d0ci?fqFxRjE4AFdG#a}RhKbS~XD$oY5or9b)!q;7_LhUKB# zfD2r*ROPnNy_JK4Lm0oF`jofXd%1kI_+w?e>+(2V9krr&7 zL%MtU(==IPNA+czy%|LBjf9En_y1(P#ua!EE}_yg%)BQD=kJKT{!`j!_hLgE?{>jr z$IXPz|CtAl>;9E&=ypTU(xhnOFkkOXd|Wxg0&WpJNWnPM&NRoW)t*+bk||!Ze}s^R z=Kseh%WA2Pals}(t8UO918%kMq-VS=V_KWSOK{)H0{Vmo2{I5mtukLcJ`T1-Dt4o~ zOfOjD^3nP@31gtg^pPwfcSO4vj3)hn)63Y9=qVm=-dkcJX+wh*CoXWHpq|>mE*bj# zYPb$v)ugLl;nbMgZe+Nn{!Cs^doEn_LUX zkt+}z9ITy|S4+F>IQFj7Vr}~(r{|f$0w-_r`0LRrk8pX%JHTvhjeV*ie3~#uCyx$9;n-pou?dZ`}jniI~9Sh7G$?>=|AjbOCc#N z?)Ur+uUoN9$;orS9K5VmKnNb$XQ|hwgJ}pUC@WhlPAw~jHwEv8L$>q~Az=8jkbYh(2MkO;)r#XeT zBj%@(CEqvLwf`meKco1u8s8+NJUMBS{!dUEt%D~MKd>LjaUJc=|MtD9~HKf#1 zbCvkzWA9RpRt|!hd?CoB1U~am4^(Xn2Vo>Fj}o~k7UP}~(#z_vv7>7fJDCLv-2In8 zSYy_Pp5M}w2;pEgf=7p9HF$bllbSTv$bFZTNI3w}6mVQl^Jb{!0+8lWI%GM2viFkE}uc7U$ zl^JZLuwGzGis|xN4kBrq6(_)VQT^)au6lc%TFyWhTXI+2tR7r}WYq~~COaAn_2@R^ zc-%qZG)?(!cT}GXY+fuM0sXObNV^Vc&OVCa`=tb^k0&2h24VRzFr((?`WY|RqdkNU zrz#)*b?hI?im^m0!v&}5a^9u@x>+L+A34>*PWc(xk5}Ru?hCtW(AZtB#XoHMh-z!F zkvtXLu*DE=vZF}HR_9GW?tW~%eaS5$bL8kMGUMsWpjgb)+&JTq4SPMXFs_e=<)ztN z_pdKKK@v2^Qga?hlWW{$&6}SEzw;5^Z2LNJg^{$tI^(DAXN|Qq1igCX4UJCuxUm~0 zDb`4yF~~g`BLmtINX1BKreH*QMC}t$D`$*J%^rRVdKM+MwF8}=Ss%dcJkLXa2t7&^ zN!K!G7DIHGh!_*DTTezL5mUoo-@`V!AxFxD=YwO-hcd%1$pmpy**;NZm*Z4HUCS zb}?Wbw3PamGS!Zc7r!e(7(ajQZTlY{@Ad!ijufI8lAP;phYXf%R*Q*R^3z$`LdCRpvH_*b=NW<#QA%Y zwvQn)V;Kar}y|Y z!#PIP&b$-<5z^I!e3-g~Y}iIAXX43(1i;lV<**NF4g9M-Kg<( z@d=6Wd7wqljTUp*edDW2Zp3GyOMI<;^!%zO8y(&YqCx8~UFe*4wV(ZLB*;B5KF$Nl3TY3~>HVG^y-Q;+_Gn+%5dui-2|JNoR<}xAN&$$Lhj^;F3F> zBx5k_$V~57bDc>in3DcKid9sY$l!Dr?*mt$!<^W?#&)fMs{mDtZlX5FK+wM$e*M=aI;c&IIyAq?Q!h%EBy(IYbo50L#@x1J1DxIX* zfj_V>S6Xr-Nq^3TxURQgfEq~1s$<^VhvKpgWJ1vc@&c*?agXHz#DZ^K`9BffzoQbK zC?=!qHEiUJPD{km@fxM-sCngoi@R)wElO_XoLb-jb>_6hq@V!k3uPkcDE>E=&aiqh z1^h$)U}(H>Ba!Z(M!6&$$|IefW!mF|o5$=$KH=SKM3%3ih1{zb+(XmWZv(Gu8)eDR zpP@Y~K#22iGrQ-{bqns5d0|&hV>b)~M>n`Fm~BZvn7EJL?Xz3k_3OhKv2&lq6L=hU z`xhL+uz+{)E|S!sMGlaay)6Y*X#^x+|>R+mi@BI!zmnC4G8bKLkSRJOxP?m-b5iz{&RmnrzQxwbQON5b|vO2wY}j zwzT0Kt2UcvWINXp3`gkZwAj{^ad5Sq6UKJ(nJ;N>D{;p0aZA441uWpNi|s2Ay2#>C z@N~;#W&77!U^k^-E*hOGDl&%DJby_`PqjSxc0;? zk!SY6^bz#w3>D$0yYA$Zpu;@46xhKu+bz9xI8Sb}-3SS&%q2fS9*}&(Y&k0ccvw0P zM*}I)N*Zw{txy#!mM4p^Pz*Hz53kz3r9FLJt4D4kx;4=yPmR?;e3-Qj>#MKQ&=C2} zL`hEA;l=s_*)rqI=W|L4ytb5Gk!rmk z64LFyk>bghbV}V9cT#~(2_pink$~H81MBi^n@z6!fA-W^(h%u}?k=Z>AJRKjx08A) zmb8IS169$9;hP;09k?doyCGuKk0X9m`zRhaDjWcD_c}wvdQ6^tCjy=;KnG9yrsWpC zof%5c=_7x+uZJ^LucT*v`e%d;uC2t@tX_-Ty-nEEOnLfr%f{TZd zqs#rIbrzalU+aVu--M4axtnU0b+^Tt4V8-PHK4z7743wyc?^ z0NR>lCH3aYfDq1sdd17%9sl9bK_9+6=H|3rF_f~9DLHMS|8jGocC`xVVfio0d>k-Y6*7dQDR(=sW;%UX8a6iuLVW_H9;YM)N%OrHSV$Kw%m{_b}UZl=bL0Wb9`~E zYaF;7P5nHsp7nbrr8GIbR5Ycf`t`s3TwMOR+ciqsA)mHS;WG||ajiX_Pb+T8lPAGZ ze!*lkyhephb9O#yxUDoaYIK*?eKtBtE&FTmo$nYqP>T#_N~*i)TC&vZnD$H{;)*G0 z_*m)1%9YUw`-A@vQDx@DaGi7{KLvIU6;UEe;xjlC8q7Bj_T+hEla^X{@F0!}>7fY6 ztw}^Ez{m)}T$dkItm5l-hW9jG2!~}}mTI3XX`n8~;Qq%fAM&$($|sx5Ts4F3mJ3u? znR;7JV1n05Y4Kqzd4APe_NvoUqcL0JAAC=*aMxY2icRX(!#b@S#a?pJlJWk2WiYVf zAz9+cBUZ4p6w;^g^iPvS^2*v!FPGtmEvu^uJ<#?hMI7x-XF|m?_*d^1FY;4~ZF_&W z1D@A_)X&qF8I>ib$ZCvs{|8g=%8G&H0sBwM-@lm9*-FYcQ*ToS+WwB2+L$}})(2vH zt}=CQ%ar)&s@Nwanpuov<&Gc2VTuuqI?+xO8!I%g`~3WotK8?qBgwnNtaQdoIm2y% zV}aQ=RX_=X)REN}*<6S1RDGSHl2EjGMH>#iEY9dzii&Ko_0V}7S!Sj{o(FF0M-lK1e>fge6K64Bm*+q-BOiU+FOV+4EZaZvSjRS2bh zwOt%(f%LP%65m6eJgee` zq(;n1=No)lC8dzUp8oPR7Jw`Q5eBsFdr~xv_%JTHrsZGzDfqsAfFFu0FyS_!s*aoA zw|^z=aEyJ^}3kiHSa8n+w+Sg0`ib|I$S%q|`I&YpFM-_M)$i2<>q3!I=9teGQm_=S z7g9SH&KrplEP49I%YO|IE1AyZqMX`F4!jxOXC#BL!GLec|LvUfl`Rf)5Wp;IxS5F$ z3L!W~3h4FB{4Il5_@mc6oI;gtI5aBZuUf^#wRxPr%E=UGkfE}wdYP#+%)#Leo340X z-=cjj{3;GO3l*)b7VS9{SftnEX37b-$p5mF_uBRN$E{>@tNqz%74>_PVa^-kIk{)) z38~l_%U_e1hO^ZrnhOO9U#87c-i>|Ed%6h&9imGu>au%pn)(3rHAGX;(sT|c$5G)& ze?t|DmDS6Zj@G`Jr!Ah-_MOr?ZqG4qnIICq05z_r*iWy%*_A!|yn38>k@3KWs21J3 z^gXJvO)`D5gc{o=2s(NQf|OE74BJX4cL40 zIla^X(0_LqV&`*b#U3`8y`X~PTnw793+P_DkN@A2>w(?7PBSz_8x zWq97EBJjh?IC|xVMFqChV1;h1f1I{c%#yLwOAwp<`~>cx>I5;*o%k zq{?7?uv-!ZHnrzL9F2pA*w#!i60Q5IyC$LZ_GA)~ov~=z&z%%ly}qj(h3HGLOW_=6 zx~8A~(9`@LBDu=R0$Qr%?wE>Qp2fV1n~7e)y&fp8_v0t=^+j@w%#a#@&9YtCKM#%q zy}-s4s=Fc+Xvoy9&1^OWKyPt%M%Z8tnRBCXv9?6^8+oRX9)PVil3Cw3)Z{?eT(Vhm z^J3A5<4Eq|nk@)2)b3S`J%9!P<9Z(W!;pw>_l74(@stlLyS$6ewj6cE@v%meOBo&f z3HcWqPD8dsp1Pw_tFy89`e^Ok!hJ*}GvUY2 zFVv0rGAb;CI_06w6KhNc)2VU7HA{0$+yjD(*PA$$A_*9CC!6$c+KbsrZfSHZzF9$X zNe~=|;U`7#u{=Gd@6(JRkmS6S-7;JY2O}9J1#y|k z3gc142(Kb1L8BtUSL`?-Ma$wJ=|%pR$t#OlA7gv_f^qnvc49#>GlLoE-GZw#V@mf3*{$D%|HyM)^`4b#KWPkZ_IB(5uf3cqo#%6v<@c%rjS#rUq;q+EEE`bvdf>o$P=37|`LP08 zb$TN^^X|a@(>GW;M?t^jY`jnMPMP|E7VGOV!N|xqPtRq@Z2A<+55PQ6LbWdk>a2(I#7}Mwe9%zAo%5E!)<_1K!Uu*pGu`RY)Jm5 znLKSrlzBsQ_JE9l0Eo#*vl?OgT$~G>dzp|8&Z(i%YB!CSc z0n%HrpTVxAS6c2*Q`naCL~{I-$86)OP>Ky;y46>>iiGW?YfeJ;~ z6GEqdFeKse+Zo^Bp55;HztAErt6`n4K$stGnXWCntc#aR~L-Phl(5?{7zxW zT=!i|p^J9~~+YE>O8S5o4NG)X6f( z*W1xd;VPM6vin*jbj5b&5EK@t6VXZ^V7S~S6L9P&tAI|t-V}^(=RiKiO$*8pzemIo z4=!rZmOsdj!7DecL~V6s_TxJtXcNEBf6`=AJRn8Rv*5I1(SF0<@pdOcBb!}B!}hi` zsnTY`X7w6WZ0FQ%d6}F>6?=KlT4rCpF&^}lU!mRQy}QX%25SpikUwn#G)`2>lRxxz ziepz9y?6w|UPWXN+ImOMD?Y8!-{!*%DKfunRh z13*Nzp+Eyqzraqj?>XmDP|QXWmYe&iV6zqvVoIA3C{^ghfMa+_V~8_!-fTJJCuOX| zgDC^8u{s4<{QfoW={too^L6n2jCP%tTa`He-+0uonh!Na74!Mxt7H)6VUZm<&0Yis z7x|KyRCoE?WBdRjYz!&()6XJ|fbt1&#Lh2FcwR`-yp99<}rai)NMx%YX` z1C@goyC4ae5?(T#fW#fq2n|U12l1wVMju+tat8#-|D9je6r$H(3}4wTMS@kxRSX;< zZCM!)WEh&1BLx3<+sCHJ)y@w$R{jVPzfGu8U%HQ}X7&Wn2M->0#YpBeReznI%kVEH z#Vjs1THLri>ckbeIlfu%`vf0s9|w>LM;n3og~T)$hp1 zX-T$OgRSVx>W=dz8S%YPE`1TE>wRS>EkHtleesm+W9sFItd%tAC@M_>IM4>ZBeA9z zT3j^yIoRa+cI#v?WV|%3)M`6DK28nGUFKVZEl$W5ATAK9*&+{Mk zg>PP4l66B}tA07OwLij(n{`|37gVYB+(potcXS*Ak*XXr>|!n<8UQq^i4R>E>I`wE146;+N+9q4?FK5A1; z-+}CJ3Af03*Qh{JawX^`X3NzV7SQXx6rodCd1kY21=0&SsfPDyqS;0f`ar=>wEFO% z*uhtF>qYiC1NXgHBNQte4)pgOh?X@N^S-?nw|xi1 zH4DGq=^$$Jd)X(n!seiS)dGCZ?_&t+RfI;5VCR%A9Af7r57P|0(U*+fo>on_46c7A ztsWh~KrYhZg+y@v#Z?@jilXKYJQb*3y#!|An$5kY+dSu2{C3RID1&T}eS?I)Fl zrk!YxTqc3KD}1-KLNNyz;d|MwjweQ6gpeG7aJ8$^HO~6__B_Bq9(Q9zT*KGrVej%n zL!{TH9$uP{an04#7dyGPLw2HTW@UuyHmub*3^A$kC}^gL#^6sd=+&%P2r%mH1Zb)O@XD6IXtv z!A7AJBD`Tvk3C1e9|zvPf>BmdbJh`Z)JokLel@Mu_J@nb+;~-eYHjNIhUWaLxUqN= zNVOy>A(3bOqJ1}gqn4PlQ_IiUzcKUn9kvO{{l$x@UC>J~+U# zZGBP?-x_DA;emSY0++v5UU-eu&3L^vbz*9ncp?qmw~8`$anDEHpiJrk+%PzwQ4l<# zXR*H~uf8=iRjQe$*m+rv@nLEyBYd*faF<$Rgwz^i54W^z3nVq(z8~0MD z@SS5XYn7)(Aqg)&Or5L+*&vxe{?daNvAY<@Kl;N`(#m!vb*RC>;eyaZcg2dfjW7oQ z=YPx!ylsdLY|W%M3-u6|+>hPM-uPzfQc&!ay3e5ee*hgp;=aT-i}sX`;%1s?+XLn( zPC+9+mC))=DV%t!Qk88FQ;Ss4wcDL%`%YU-Tty^tTbz;?00H<{%=#z8%_2`6>a%NY zc^J^AihCHX${60%t`2k5gVYX`u~JoIPsn*}XHHdbx%Iz*HC-w~U`;;m+G$cvHv0Bm zr_6-)C_0P-z|UIuuZR8%@Mnj7BjPU@-^Zz6+-Nh;Zwy+CE3LtCmD|q>zs|9&^k-fk zql2k_r{?#Fuk}0ciJl{p<5>R8yYT`e#H^*`Xp8OGNj(7ctZQvf($`wO&~;rUWZEPP za}PqQc{^*7-0O|egW}&0HSUvo`cAU;1_gP%$HDVd4D38{p4G46{Zql(W|gN|>e@}# z`>`A`yr4*iN9aJu$|*MPUC*HWVwwtgN5R^JGu?}QD*I0U)3Gy^Ns5#6DgnSBE=79n z&xd{w{5tUufxJ=S`|{IUsh;&9RgzCJ!6N{UF+?g!NXn$9r5kK}CxLuN@UjmT4PQy{ zRno(E9E)=@x~s`M58?oEf@$78@bAId?=1$It=-9}UBN7^9ODZUbt~7BamFg8Cezf4 zZfaM3PnLXl2BW7(r>>K1r3|a*7bR3KIXybo6ysIDy%v_2Wn`QI8>^K8&)vgz#bpcG zU7Fb>wcPbT9oT3W7S^!c-n=(9@xc%*;z?wkKn%maIPaSBFCIhSiw#jU&#=LN7>?Fi zVU?JHbGMQgw>_zZ9=ASq{il8p_3>pe<6N5S&{0LV7kh)HeF&9#*90OG!} z{gHkEd?S}s@!!P#ZJyszjtHOZQia3~677Gf=}}R%u5AjB*|pfY@e{+kdU$JIvzE#$ z)8gYi@y#$*ZZqZVa54byE8%OO0r-1E)9%|))b0i22@lxU=tz8dqxf&aF9(DEA6urm<5z%cI^3@m!Zbit z%Aw_R)DhpBiqV{sNt#JEo~M@SS}wb-_|#eWatqB;<4h9IKA|eGV2R7%_s{aJOFaSs zCb@TWcWnus-CuJM&l`3Cb;nBWQvKfNC3k5wd!K=PMd5z~`071qXb*VWE}W^g)-n=F z7l%=T1~ZOp&HR7yD@yUti}Z;t{1bI$b)Y@l`Ige|S?$V$_eTStZnccmok+XrjWFr* zv&?)!r}!(x8pe<0*=v^KK#QopK{@Y$0O^|Z?Q34Q)$DHcttQR|ztcs{yc4@PmNZ7f zoF4f0tzzZP78O5-Gpz6o8fS%cTgi339q#U~d0WS9vdVh!J&kv^*ILDdcb9senQGRs zt4f>Ive6O2&tClnbk(V8Ba7L(nzNqM^=8yGyD>ZI@k#cAZ5Cz#Jb3gcp{;+0cUs=H z;@wWxSFnybvxN+;3XBrR2Z6^=N}p<&OA6z!W9_d5e0kJ-H=$`-CWENi+jxIYX(e%O z8mzM14jd8&PJ0nwJ9vg|f8*bR{vhfyTllu(MVZ0|1Oy%>Musb#D{cYIa^0 zp2`5aT-Os^U0b;QV#C9zl!+GG2 zKVM4m?Qg*59}?@4>ld13wXn5g9J4dLk9+(ep4@uox3%E)*v>L)&F*vl5b&kPhBR#> zZOjPTq?0UdY(s2(=O@!X;->Kj#hW-@(@I(HuCBa3vd=VX9l&xhSOL?gdh;_HkJ`|R zXI5WH)>Rtldw+qvJE`mXTK$4OS{pABKqR?f?ugSc&&)H@lfhmXu+=sFMZ^-^$)mD` zjyC(Fp(GrFdj1vY(biTx`8209V*b&zuZA8Y__quaJ>He7TU(^l03HSNFxx=u)AFv{ zQ2nj^d7^kvR`3p;rC45Hc(TiFz5B%%nGLHEo=;QgXpL7tXs@<{p+Q%aU-Gl%KZv)w zrR9!|CZPy7Hz^E`?AwW#aSfkNF?TjPm3^_as`$tgI+FAS>ws!h_h>+XOJZE?>$3u?5 zS3PT|7Ie~+l{p@ftx4fu59^mYwdScVnEHT&?HYZ6o=-O1pdGV}_xGqw3zInxVUS}i6oXufndbB$zD5G!+#j`yU!2!)(-~FX2}i1 z7Me)`+#_yBKhCC{e|DAn7lMmhtx{d@7BaH25VtWj5F$om0t)q|@D{w$RJV0mh$*!A5 z*Yy1&bVr)^bgJ^<(m=Zu@;&{l8kAP7h}V_P-xB;?(|jv7p8A|6hN}`y3MNTd$-zH` za#z0|G~3&!()62)sRWFMHeghGYf$7@3qT9q?I`F_teO)g>og!r1WKwg`gXn9&Eu-wH`HG~I>U!pf@tel_ zP}A;pEi%@4$qNK>0@-27&ImR1e}O+~&lQtzYiag)+VmJrx&nX);jx_Kiqf?%dQVZ| z+jDxKqQ3$E0BDaH{1UM74y~cy&l+pxViva>uAw)7DBJ-bE>wDTss22E(7N}1(J<_G=g*fdEKOS%`7N z5`9f^FX7w7xVOBP-Wj~6Nfp$FR?lPUkzS4q7^=x8bwyjL-Rt`0#=Ui*o1HS+*>v!T zkR~>(4l|#A{`J@CuC}*+OtM@SxGcd+lB3XMbgtK}iqg#K6H&3S(q^`f=FO+o1fpq1 zPn8fkP<_pPH}FS7)U>^KO@l_bf@w8qqlu*iBH)0-C)%=<)!w@tnDp1o`fo|r^k{rT zBrs~RNp+`Y2^5{N316wn;GB-Na{J;Xp1UXfBF9qFu5QTlyz9ARSYn-y5EeZ?w6GI$ zlUF#T&m)Ih_`9WiSk<+SLru{ytwQzjH{lf1pNhlXK&-p8&i|SdS;E{ zJ4xp7tSfgXl*mkTakva|^80qKy7gk574;&04-oj3`(4#J+v1QWim-7LQe;g*ZS4#-FRBX1;L2FnXy-9Niq;KU6i&*9Y{6I zeJk+uRnoNBE(h9FUl^j60{cowyVD&>u7=Z6)b(kCO{#)McN8j-li!2VsLH!(NuFKt zH^dNlW@#@qCw)Roc%5XnEymyB1dmT{)#Y9k@dc71YJ*3z`$fi8gL#2h9E^AGRFk-< zsYyYc_l|xs!=l{Vcy~{=nWvNIduR^g3FkP^1M66y489zAaBGCb&HbH#R>b&2ewUo zXL}-PeiE~p*@RL^tg#UP0LP5vW3Lsp4qC2h5mFLR)2YySLiXEL(DjSN(l1`qO^?fG zf;S((7{JR9r%Li!J}nd~Gej2N)OwwK>shR=DZ&Ia#xm@z09w zY^+;X&<3)tXwfMy#zVC7A4gRrw6Yll(6pQ za!Iz@J)7Wv#`nCuxUlggIu+cJyUMI(*zTLT;QiuBuX*u@h8yB8g`_kwY4$E7?9A$~XDMm9;XWk&p4-8ORkYOf>zP^N5!k8SGX@#MXRZx9Oz@|U zE_M66Um4hIHdb0hLP)IuXuQQ7DBL>p*V>$2>}M(6Hg#SH_+6wyq4={{zSrH&|O}~{hQ(m z?6n#I(1*EbgvvnQ0P0Jn^HJH}Lq!))LI#w+F9ABp}p@MplCZ^k;NhZV#4l6#1u zg^`4RVZa23Be~9cS1t*|7wzP_>GL{k)Titv=6-c})8iZ(_l&Kiw(#wylW!QeGFw=g z3_wOfEJ^BIgPQ#o@HDe%-U;xJ#91^*$nhkN_9z-KUSI}ta6a$7dyb2zPLbw0JMMR0 zI)c;1nvaGo;%gMS)eoC+(R`m~UaE%!j2_kEF!=LU@a65+jid`!mexrEUyY%ZXR~9k zTH=glYPVaPP?MZe>|>^m*MjcyTsSFZF6n72#pZ7>$GC}SuOcfZ`tv~LDBBG5u-*eS8uZ2GnFC=d!?@M-# z;|&~`A#>FI1$vIF@Xy6sKASG4m);+qXdQ;aKt^13PyyrXUG$+C>Cp2rIH;*pSKXYQ zlzRTH5}jhk2tr6VMH2q+U?X?uT_1_&vb3|dvC?$-rMkIyiXDrbo-v<5J!=Wkyx(Hn z+v;?7o(j|aH)p2m9wmq|zm5LX@PJt^h`>|nT!xeID^Jud?=>ry4;G@tMlMcCgE_@_ zQ&Cp2H7hi(+3P+M_;a9J>QdR;>rq?Bs*ojM8H(egf!n1}eIG@e#5cYhxk)52Zn%bW zt_sA1kbOz4v2b#pgu3k*T8@`(Wnk7R3o%n8?rwx1L0rb4;b~+ynuxW7Foksz5~cqD z40f%lQBLsn#xrqX5=>d8w()^u+H+gnLvZ3fv=G()+AWHtw{ezn#3^(FAHh1%kO zxg@YAVg$_EEIOKo&>&rYT@SDb3X00OM zSUM%-hY^1EMkM3z{sOeaP)+Fi3Qx@YQp@0Vu7%-`5BQT;)WCgiXO7Cm0p>dZH#QD1 zImSv|qanh<9T+S{|=a2sY!9{;& zZC$=A=-xK?Yo}?_NAVIfBRaAS$cPKG0(09ruYlL#KZ!g;pfomDnp_fSvCktUkva1W zIc^G!@<&=&7`fAK`xA+jqZqTB@b|;dA9$uXhLdjocAVkEMkEDXa7Y;7iu7L#d^leP z%cpDq02Oqtc5Nq5m6}-~Po3pP1cKyok)E}@BNZ0!sN+#NTI9bQ{{U(2C&jm4*q;sj z6>AQip}_XKW!9!6X`+SSd!LXlx5pm={4@B4@#DlAwxTt!A4vL6pQz4cmg4{dSOdzcgTeK$h&(!; zIlb`%-RhFH)LNaz&BfisrIt@LlepmZ$*rhRf~_Zgm5xkJH0M%R=zf5BTgF-+!+#6- zE5^DGr{Mic^Gmo12AQaCVx+gvk=K$&PHXJ1gP#??3;2>*E#dHPiD%+#tH|ZOy8AJB z%D!{7kV2~S`14VTr#C4y_B5jBDr-~R{w(}K{g%EXU3h!J{{RxcCTL8)9tAAzqiEql zIX`3B z)Nh4<7Q8*;&2LP;m}yG|j4S5BXv(5C!0pfuD?j5mjBj;2N&Y9M-*C%=V z5By~C=YrtzXT=X5-X;EvG_zY$B=$dbh>@?fiE$5bdcw<%oVS1cb z(VAABbE|n$>N;|*v^y{nR4&2B2OTLF9;Z_mgmhu6#jDGr$1&7Fg%sc_`ez-5dB2Y| z?H9t9HCB=*m}aX$`zEL?cW^*QYR-@4jci&ukWQd}fFs~@gC>o@NyuEkT2 zHQ67Ez6a}`D%0-u>kU%+JLrgUy9L=>p(Cb6cz&zk-E+f`Lu;zrT?UnknIupPlhojP zSIlChqf%+TPh$Z2sjW_%!x|j6T6VK7wwY?sM2Ra*d=01kg4Twc4S={FbF;z@2^ zP!=(>a*r%^$2^*>wydRIAzelgmZ!S>GW!M3hV=alO-*a<&ppI;djT<~cn-{X2i(`m zzqTKbbPs}hHm~r~*H_jrJVD|FYk4i?X7b9&0~Z8#9rIsbho3a#8*YyRqjHp)`6GJ< zpR0IE=R?)?D5R3yw9&&TlO{vc3_A+)U+tUy9?I_9%R=e%TeIZ;mFZGOa%WBO_U`Li zv=exuIN+G>bydp^{RhyI`q!vm-9C!rPSYk?T6O*I%pI8-Ir>(L?8b7tdY61X_N$u> zQtJL&WBr<;nQ}vX+zzLcpH9_Q4Mtmgff}bJaVujalj+A4G{~2!>0TIEe8OJN`gOQD zj^FN*2Y#IU*FmXT%GRP;Vs!F)tMORX(J@LlaD9)Td~0)bmzS2>9i_f(A$zH&C0Sb> z^zMCY=RFCv&lPxo#Xcq1{{XUBTZy5wj4m?G@|FYCSD9DeoaJ-VhO2YtpNt+W@fV79 zuLk%q>(`RncsXE+Y}0IOv3mX77CCRqy-&m58Ps&^E6|#S#CEW<#$%i|7Gush@Aavz zN0N<6Uvr|HR$b0bd@X&UYBt^?vA4RsZ9SdQZdWn+hqwfD_}8pye**QN7d^j@HCsFA zWYoT3ii!~!j&L!@Ue(1*nbVE>8p5Wm8pm4rRpVa`*jwrFNRhY5?g%WTU~X=wt$mke zuSajITU&o-*w1@3MYdZJB!Mx{L%0=xO=usF^IbmjD9rx#HWrj&PIL}(>!fMhol>E+%Pq5T3-YC`vJMdVs3IOg&u202UrJjon zOMh`}WGv=LV`$`45Ad9W)YW2Igk^RRcWm(6{{R?jz9rR6+AJO)u}etiP$%8hPXWtn`owD#r6Y|NNYCCN=RA@5*CTyxe|h7}QJ~mMZDU~OKtiGOAz(%e z9=`alwFc@%^hZ6@=J$`HbW1B#!r!APP1}zdBv)W;?KQ0;!rM@_vzEY>m+Z0_^1~;F z_WD-MoU*9-m5Y8W@J55;O(rXY_GqoN;|j?P1BK%Yk9y%G@Mnjt77aT|x}7cvnpalF zOlk)PxG|AcDkRQ~1my)SMALje`p%&hwA0Mj7b=VQv9=swV2{eXh<+J-HqtKJQt=mu zh2z*Dcx0b4GTau!DN;Q-;*~l|lw6Y3)}={K+MH*_4~*9L7INv9)^o$BX$}!$w~9zu zjBqdqL5?fq-w=FAwYyoC%T1VhIhs*(=QdZS2tU%eYg4H?NwZ3ASn!*zVqI5KS!ROV zqn2Q?jj`l&$sGsQv2{-zXg_AVx6#>0Tez7I9kNqq2MTIu>x{ldm0l$Io5W2rrJ zQ}sC~VjX+7Pp{axw7G#@WQ$XHkw6Se#(wobz@HCwom$gbxVF+`Nc6RuJ934yB$(qP z9C6>)qYZ|;kuJ5*mTff6e@F4Ay51(gx{gQzXrPgtFaz#@d)Is6Pa0|#T9ndF;R!*$ z2Hhl>vj>l;U`I;cjur`MOsiX|^*@9)t9UfqXzs0i$DD%VT=X4|KgPSuNUddop-nau zJn=~!a*f9di@g)%-s-=acfI#z!Ogv;P3rt&}dTk(MHS@p_ytr{Nnv6YEiG7Iu0er?Ic1QK}uG+D`DZx^# z+?zRT&jom2;fH{=O(CJUnoBsumdP5a@?{@+c<)~_X`c|hTd!z0uxXwapJmGkRH$r( zU`9FMeiWvz+dA^eN^zTKY4B6vw~I!rJ@VY@x>OpH#T4>Il`P+Ve=9}W0# zS@6}Y>i214_UK+E{o_bFmTYGyo^x8^bevyfJZ)Rf7U+Jfd{_Obz87D38%EN+LEr(b z+W1=D2-eZriX#*ORol5ArFp)A;_nUkw)?@JANXhR7eUc2ZzE^bbr@pvraAkn8L|K# zmB&tvSk1w-BwIAS`$o0Q{gx)srSBtdI3%7{%uMb%^ zw;7Zz-o$9!{qB8h-F#Eg4aRn^SMl%uJoE2Pio zzxMC4(|jT0eRtsR!Osx2!Uc!>USt{hkKRy0DoNImaA+RIt--n{Do9mdDn5_rmWTzlZEJYYzlz))QK)%{Be$Qhd&e6cg9! zUZLSH5BQP1KWpLt01)aLhVB~f;vA{@dVo6*YKc4FQ)sOZ@=#GZjzbYuX6VXJK=l>& zkL;`aNa}wH^|*A4o7s(?qTA-(!Bzwuj8~gpny8v*ppVtBi@&r+k>fjEGHXG1ac`?Z z2uIwY0ggfXSHONJ@d8h+O15)eg_W7ubsS^8d6-XfoZ|W#Q%SPbmyTM_HAwk>?8gVw z6+O?3ZLV8+ySwvFK35r0_=?7z+*&q-QZa9@qqv^$%wopkMVeOJMqGM&4{EcgU8VG~ zM{V}UkhoHem<10RR?j%C@G*YyE+LyF%hYyEs3UTCve%yR&z=`&vh1HbMfbtV!H3M?Ckg zT2WrsY}y{Dx_Dc}cJ?;VTFq*FrG4_hSpttwQ(nX2uMl`H;!h@d?)b}XQaL%#&F@^8 zs;)I9V^}{k-t=v6POx}xqBbHn2MEDQT>WdM)P5&uz8+g^pS7#`;7Gnu$mga{YUIaM zl%)n&HIE|kH^uvHR%Tr&-Fb|`qi|0j@F85shVB0LM049|Ir{ajmL6JaMLNy1lF)RtzMkSc zd$6uif#aMv1n1VZAn=qLSW_qVi;G;dJo}lLcly?Km88q(x!7D?Y0+6pdlY}XD;kvN zEfDL#t^>rE8aAz?x_JUO1&8l4K0+v_^@*KrPlkRZ&wFogJ*JgL0_Vfa$TdsXX>YXzZUKQ$$Q!sI`q$Bt z+~`(1Xw&r{u|go;RpbmwZ$thyg;})X2=U8(3r*K=qw;R_;2DDz!!u(%VB?DW{{Y|; z_(Q?hma%H-8+n*-HG+rEGk^i+vdt#tW{qR7Q|$ZQf5Do?oYTGgN9O=lq-+4bn}3yf zHU9vP4};FRE|WZWi*St?RLRO7*zRkRgrzQI7q?TvG>;u>-ZYa|h5XxTw3k%3N5CK+ z`0ea#jkA};ULU;HAH*|AeD^W{okE_UQ(lE?DJ9&OQQF7W9}7HMsV0}GK;RhftK7jU zPL($I6;}5>Gva5%3BDQXAMlV~TU}gRJWw^ws^ye98<-F}V!sZ4F8prSG`|`6rtiU* zm-dnBlRQ8$kw+YN917ZW{iG+U9M*fEU4F>l6J_{^@ZVVYU#)7;eW|39Yb%L}8?F^k z1pD?i`Y-Uy;!d-rUD()o!%s0!rA8tb7~d4ouK;c%86a`#T$n1$+sYU7F~=uX4P5%m zShVo3jTyX4;ZrrDPi~j7+P>4~Hqc}P1DK_01aw%bQIPn{phR@_yGT>k(%(bP++=23%`)zRwz01kc^ z_`3f9#F}%(VRJMK<^7amu#*!<+yJ{vWq&ZlW@s=!T$I8vmT*!5if;ytT7MbU2T zXNux2S5=MTGDdI!MpomX^{AFJR7|KfbI|qAgEo++kAJ9Z(N7+>ra)O-lq0budsbYY z7qikFrMK88T|Ge(01okdIAXb;%`hGL~H39m&1PrYMQTu^!-6? zrnT5@##otH@=gHv=ia>+#vco#h#xi63rd}*hgXNc<)@NjeZS$ z4$~|zwCxuD`fGi5-Di)_RT4zx1Hc6I#ya$@@l~eP8=`LQx%rFYj|u4-7Oj6ASGJ-% zKv>BzY%-374soC7UV-om$Kj8}O=jUW7P^Aw)R@wHRE?L+Pxgu6k?mflF3Jg@j{Bc? zc)v^0G$^$#JHxQ=k{`4AaL+4mXn^M+cj=FM%hj~6jb9k;bPG=k>0jA)o)%v&FkBU9 z!8s(1^ImNy2`IUAE%iPX@&5qBZ;bbTB^KT!(Dh5}s~e4vaSFD^Q_via27g-ncfkH9 z_>B5bhrBO0!yQXcip-)Aw#?Drvqc)O=5?cq01d z*IKui?DAZ)ELrL>Ngb=#ekFVvx$%#Lyf3NW{{UfF$zm-)w`cixpS%bkp{`nQmD6|8 zXlFO%eEIPk;m3yJ&|}l!@DypN*dLcrw+s}-I`Vpx>t1#6qv9up{vX@V;LjHPJ-562 zME?M2d(G1BL)$p?9jnr%7c4xL_2@%x=ht2ku<^ge%cs};C*dy-+USbkXN9DWBvODC zCv$f=JlD|=@EhT_k?_TJABat7ZE<-#mhd!UDGa#-X)*$EtIZT6?CIIPQ8RiyPt2c; z-wkw633%39YaK?;>e2-=EVlS{8R!YX=LWuW)^!gFYH?m^Q(4%{_HE4Vlb2j}uHJ1U zp~*&RBxBa5tec#B7br?ngs-vUo(#8W4Xc>uiZ(z>OSf`K=s@(ZS=a3> zuk<*^k9le*x$|S3k+lIB?T`?zGjjz?vE}y9M8ge?CzJu zz6_Wz+U`Z&$bk8Pqiiu5OdeyR#$(4H-DcsUsEXe+NHc?Qiyo z)GahyU24O__tQo8gtndbw33W+1_=7qDQI+IWaAk=r>J~S{f%`$0wh*Co|mL*O=!DB znsIhMVBwo?IO&@3NB9Ba8=VVMveUHt$l7KtBW2;;68y@Hdw^)fNlu@jsMeGwuD2Pa zXj-MFfn%oXIz_r%*_KHhZ6lMx-NkZ#C`*fbi`^aWEfvaquE#15Q_{I;TE}aA+n+!F z)?c&Vfi!=F-UIlDrTCLhxz#3^{j*Jp;wDnx#etkC$j`lgV|beG_WN7ad^vaF+k0zE zbP(FKN;VS14tYGDE1_!4uv{{R&{SFQL0!pldS!|=pq@-45Vx7{b1as~?=^aS(A zdc49u&U=?ytW%3WCH^;fhR4JnF1x(4vs-^D7TuF;D*3CxVoy?Q&b&Y2sr*9HqQ?_8 zvX*H0W0A??u;i4L>~zt0iq!Z2004OV$3G3VYbh*NdyPKPcRC_SBv~H=<>#DN=$4gj z@uS7x2`0Pn=Y;hOX(N*1rF*F6N&e0T;&4WA1#woO`T31gHM~9H4+i)*!y2BQtLtW4 z{{S4c6K#OpI{?8{;1kPa{sy)@cc<#smXdgT#(Fo2&Hn(y?Ky5V7QT^TS@iibSQTDh zBmv3k#d2fs2L{jEcovl}>`W@=S7`a);g^WKQQ}=ISZy!D9w(b!lKR+1VWp(9MlD;3 zGa7@Fowz-#^sh(RwSN^~YrY^`YbKIVlaP|Ypkof9j!)CIVd~euHSo-S z3)Q|Bc+$e++gO3w0+8&gc+L-hQBHV!G;r2jm8&c0nU}73EB1)-Oxk;2YS!n^Mcnp^ zf%dV_&9n|jy;bp-fX~C}wCxK1;_~KpgLUI?a>dwWjDy8Gn0Pu$HU(Meu5!N&{{Uxu z&l76**IK=#?Y=`78CquMNH zB#l(DU;yNv^}ZevrOK3cBE4tsrpg{I(fhjBJJ!+GNu2fNCne;2wblKemS=*}T|Q>B zw}qd{Dp5fl0jkg7{Y%7_R<`yQxA2?7*^m&W1Mo=q`d0MS&T5m9+IR={QEeXo0PWY> zjhBDLM86sD(f_dsbJ@CGh;*Dn1JfMW8RNf#7G5{iZFG+tcq_xw=sM#pmy<>0iGz*@L69-q zy;L-NgOl!lT>jRd@J^2v_(*En&%v9ETiqd9$bxL7tG|^Cj!r-N_4#T4019u$J_XiB zpRagNT2pdjRCyz9s@)rLZnzxh(!28c#;j#`sl|$el&+7XJTLHO?_1Dy+wB*^_qv_M zs)QeB5*@C11YjKUM-^kkzq6mj-xEb`rfL2L@k{CvZi%5-rdC(Z4s(p-`B!8;oH=hK za@40ObEE9rfA}Wf#aGfa8#r_gEA9HEM(%rQ-^KTUF4$5a|0ZcJ8>l5-^c{QzxhY0Iss* z_&fVG>3%Pfq4;OuC@riN1S}M`;oo+8o+}(iD-kHQeTQovo#O9@-v+!@;rVWCei3{u zlXz`{VHLXYIQf)=lU_UF@7a6yeesUBYo_1)5AdzGn5{eAY4>dGN@Jkhe_E_PTDE-8 zQY78uW9?suzXkpSd@+G-JR$Jk!ti;dGrja;S2BH0abD+mu-satR;ysfFup`~!wVdJ z#sy7E)hagJjns~U*5K({WN8Y-pewwE$Xqvb^cC?}i2ft!*80uHi>UbHOM9JKc1VP5 z363+zemM84gJZjW4s+rc{3O=i2-h?(1=-)~H+LyHNq4FMfMm8nImLYOY4Pvjb7>lW zkF5B5Tj{*1pu3J#mg?)zi0zQ1U}pn76W6U<+j3iM^$Q=1o-XmPiZsnUpy*EopbfkOq7g9*DEXv<>ao^J&D_Sv& zmajq^NjA@vd>yZNlj6^dd{b|&cuP{T)NgKC^(|*lSsK|`=PIKEa}(3jzKQsI`!x8& zRa?k4A0O-St+b$Sz8+I5o|r$v0OPGxB^Asz)tU4chira0d>`EmO4O|5^B&=R$yG}(&=1UU^zUC`d@lHj;q5C?wSO0B@ZP4TQC53~!oQ39 zjQ%pXvhntzsp_$4tZkx;Q6Yp@@^uQJ0mrp=DxCLbRO0zn_de*>ykX#*f9)>~L8RSW zNYKM9S60LqQO0wV!l)*>Zv}X}!kX{JPX{lFV~%S}ukzTv@{eL`654G8c0vQoa4FJ9MCI}b=HaM>)_>Hdq(NkJm_;X&ASbd#T8#xZf zmNw@k9Daj2u9^xy?xs~K!p*n2=Dr!a(rlYo(r#gqbqmO&iaUi0+gm3*_Qy5!M}&MW zYiZ#h4p{11_l04OCX;(hENd!B)Uyt_=DRTRigCH(<7w5L=VW$TFT%|aTGu>3toTO% z07=xW^whe!yO5qCx3y2Y(I8lQJktFDN9R@3!pEoMh?Z(n_sdV=<{v3F*;rNH*3#-+LKHBoZ>dNyj{%!oGF!@5TY=T1DXfQpwXyOGvKFgD8{W z3<7!{Dq9`~GnA*y&tmX@h-20~H{rWa9?7LFy4Bf|0~3i_LZ30n{t=Fz_4;Mt?*@2l z;s%2Rx@1Wl7SWVxn8cEWBLgLf7zd>&OICF9Cv(g^Lw#-VuT1b?gLLgi-b;sVM(a}% z8+(S2mD;XUoxEiIYsLI!@ux?N#CrCLsM!X%9#8gbh1(_^02xnyq#CHUMQA+>^LW?9 zUMTRIcrNP6miJDFc=Jxjk|y=XTve?j!d@i{rdoZR`L7xB{`oI~oc%rN663k&o*k0H z{{YAGL#^KGB52(uQH}AA#d1#s`U>v+ao|O~)FAOJRugX22xPd+0p+7(2iF*&g!x)D z7fZ2w%WZl|plP9sNY{gqa0WVc7_P6trrSc(ZoDm|{hkY-hz4nHW|gq0nE8%RLB}+z zEfI8`?_-AXW~*o6bnwNKc%m!Adgjf1-`_-&wr~`IfJg$oC&reqs_N@yb7^d^3pKIY z&cMifA4Ym@k@O%hv! z_Ps{ZK`e4`$!`(KSLu>5`B#u@63wUUmaDME4= zLa6NtGZW*6iQo?cc!$I@_IHmr#1e(v8uJu57IXC&SBG{Di7XhGQFJTviA;fIRuAeR3CRkVifT?|6wXh5yg z9*3ImbPtdJ00aCB2sXCY#o(Sr)UI9d$CH4(WB&lHTr{z6DO~BqQJq-wrK#(BAI0q# zR@5T#g`STL8a|?Ap3UxE40s)WQHtyJkK2CI%fjj5uZMRUDx{O#9Z&4asG(g#fJy33 z4Ruq+L8W$cOAApr-=XDy@U%Q1uXtf}Uln+U!UVjPrHa`|-m!Me4!qaOGx+ODz0`I6 zDWZ2}pL{c+cUDCh$0D|;RY|=|qfM@3+PpLHi^Lu{Fl$l1q==#@-bl{YWdjPiJlEHH z7lW*I7N1bHvYsT;ZKJTcmf>G4$UBlUbK13plDU>C*;vCiT2y+5pZ@?8xGmAc$k90< zO&a$1IUIY}F|7CpO!0k=qK!SIOz6@_EX07$I$-0iI#oHLHFGI9xt(+1%@4qu1YR7T z!%4ci%u~lCW!&-sAoJ;76Z$Gp?ELGacG_!(e0*v zMMKRK9kLUgkl4mJ#%q3gB-!Og606R6PsJ@x`^7#ApTfEw#I{k~+`g%EqfD+R(t|geo_aiJ!?EIM>$U2PRs;(DWuN#!}b%&p?G@x z#Tt!=+O+*NqPe+Pw|SAszj%!BI&vxFYD%3u zno))7$@e;MhT3O?t}gs-d#89>`%$#ILu+RvZkPQkM)|>BnFFEby-!Z@l-kPP=z3>^ zHQPN?!?HEJt1jgx(G=tbIO&1XqO)^w(Ap4bJx-gz(Q3MfhV`F_4Xx=qd<0Si1r)$pVJ$W{&c^;GF zABXzChAg}Z7OkmUT%D4v?->dZf_C*h3|0?=yaaFVd`0m;#Md@(_)|xQ;z> z=t+$36p)V5u+gJ7a#HWN?=P_J;W_6%_jLh*7a?S-@agaO$aR&@c4JA;ZL17oK9wAu z39K3X1t~gK2Wxgrf{v?%>%m9F(;8mew&YYvkxMr~BrGOy?HjBupmN>{=&YZ(kTKls ztw}fVoGK8AR992$3=P1okj_T_`*i3k_>AVUjICq%V0(z@dKk0oZ!1$*vAu?3{;%YX zQ`B6`frpHTZ_>Y^$36f~EnY8p@YNykZb%nqcPOiQNcU@h#cxDA9MY6wnbldx-Rz|K z{eX2UW*f#7pjvBfQ;qZidXpTG6mZ=O>8UM;&z~BumT=&G7S0M*WW9lo7d2k?rR4(B zleu5xl{7Bc;k~YFWM?w9%>ieJ^ixx}RXucrncS4&8aw&##^5h-)8&x?)r%?B! z6El}?J{yxF1LqugPZT2-4+->-4(7R#7b#PGF4+?Ib{r%TvOD9a@&dq&{qFi_F2OL% zUtvF=6?fXJ7NT-(2N+?xDDoz_?v1C}fD)~?yCcl-(u3%Cbsg!az6h^>u~kV(L}Y&e z_)2Cg#Ui&JeadrWi)N=b+nziu{@t2;G|%(_!Wz9dK3(M={04KEiM&;|XqTg(vts9J zc$Rp$`V|6$wL5<|2%i4fq;u>uBy^x?gQ^H(VPohG96cO8Eld8mVdemdueLxeNujf- zdXHn%<-a1L;8f9h;>@t<%~*?FbDB@4Icy8Wi3Dr&b zEuZD-uC0c+0_-fsL1QM|rGNSZouK|3HpH%rR!3D%pbdn>(ub$+2{WaekL81ycfOJi z7n}G9IXa5ya?{$lv8&a6x;%L!n#^S7WIM1Pcp?}^v`=3LCb9hNS|w5jvsBCXFcQLc z$=_QU^NB?eYD0N^W>Qi=9`AUtyR|Sc=$5(-P&|Ifosj;%dt7d1tvHaOckST{IPC50 zIqv*c8F5JRC#37`^bjBAbR%?QwK0li&HKo16F##SEQ1LX!!2&zJQi7cSDSvOac}tE zyDQtRGsPQiw&#HdCfyrVo zKq+}|vuMAqtZL`M|Jz&knwiCmCe=|^oHY||f&7gP$!%Nzh~E5kG$Cp_tK6HYYjKob zNLbHj1h-nq!_WVYRJ{IarB2K{sc$D8F;B#^o+1uBR(ZHHG=y7!2G6?kcLFH1%9%V-)`^N^t4@p=(^PBHLiEL5<`` zcQ9d&YC;sfm3mdVV)=~6#D-WO1!JdIK{orh zY0H-M)1*@-kdlyv=nGG5*nlQWP*~*U{{8fS$FMh*4xXKUR6mLEefj*}PV&3QHv$OG z=G52q(`VPJIdAr^huRvp9;`nALv5%P@W+nsRuEQfr8OfqzA=4`N>OY*y?s_?vaopu z*_d|G+$Ho@w%-qrC_KRLb2*{|+4FzyuM%P&l(*RRAY|fP-D#H}Gu3qcQ&prz4+M`{ zcIoAE0b*mB+PDnfe0xL#qyiC;Do(5EWRH24xJNnHAZb)Rh(RG>{)_yoVbQd zTDe;iTy+rY{mlQjed1@oKIuF9bkxdvW9oQEF3TU+d1unZAG?5s8>?$27kqE%h7PIA zAQQWx;UQemFio(0GNeFY)^%nR>UP&GpQQ6PwlOEwIXQo!V_I)Y3dV}Q1I#$j)IU$@ zGWygu6%H6uQbPXEorQDynCE@pSD+s{lgk%uEcjl< z!-KWH5tN)z&)zsOq2tG@zX9F<#Kv^QEI1f_@md3swz>()d{W`gi!Wl$&((heJShp- z&npeH6QRV;vNI=g&0!y4(W~6dYhe%kPRoo4*Kf1;gn?iC%_Q?P~IUxs}PXsDSdP#Z}P|WT5#Dl zPq}8MjT*&K)9=Ka4EmM?%X;`>=Cek1;H|$*BOgGuDANiW_FC0ykpv{BnOc~)W6Xr>Y-SxsE6fv;O>z(&Is z!@ASMD3=Vdx{K%rDL)Z{;ztD{9RHo=K3`}|Fy0Uy ztd1OgH>eY>|H%kw*ckJBRDp}o{}K-X1`N0(u~s|Zeqlo6*zoEis)}(Tt@uOM8gg%1 zulS99HHv4=%G=<7?<#4U$K6)Bu#Mq2VkkU@39Qu3 z_$sPEcyu%k^-J+>rqv)Wx_Q)B@12#7jH)zz{$JgOaRthT^5*sL8A)MdM>wD9R)e!3 z^^0*qlIf}tCQOThD6NaRb&b;YkIU2~a&onU=V%q?Vv2>LCB1ZL+3G$sN5mFH7fZHR zE7cd{ko_@D`4?jXfB=liQjco;R{N-4$C{Hee)jXx+o*w z(T-?3d(73;c2Hd0wGUwIb$<@hp=%#8f%s{Gv+~^&PPPMK%O5`+{2PcpyeZ!sOk0K; zYn_XdyGo36EP9BXO>}2d|3Q*6ZItaui+}R#dK@v$WA2M4v#8XwKAW=ut zl^^EuuEp15W?Br!BvW>J3AvG~-0k3=ku3WaK1(xSI1q|)*Ik#bw(nbWz=-6R^l499 zuRY;veDSx3J6?w9=dod#3|X>(%>uAO35r}vhx+hk^1`Evl`r%^6~(_Doa$J^=ys`a zfcGk^@b39jo0%iO$6ExDk9xHy{$hLmTDv^iALrsNvRaj!a3Fj%adulEMFH&1NnBJeExU&LK3}zbi!FNo=lNTrGTDI;Kn;!%Nx^`0jyTR3 zU}whEH<kIOfMD>_*z1MYRayRBDo_K3-cKgj-hBaX8T=0)Bh>w_y)FRiTHTpb->#s34?eWOzLchaf8@n3<{5ykFFh9-$ zX_39uy25QWb53fmr?ja`L({auPgh^jFPLtgeyi(+i^NnQA2cKJ{G{fxG`5#VC|-}8*^NSX2*js zB0k)WE$U=pfSr%w?FJ^T8HZ0EvJ1zqJA8ibd0(^mu6vaVqaJsl=!~?9yQ&94rB&<0 zd9^dg5RA7#)fjhg%OZnp9V^Hy$Q|jwYlVGC*^NG~*@L~ppXX$pz~FwHg6Wp}upFKe z0CUN&6+Os6Qc*0gxT@T{Vdreo7jeo5t1WwL$ZeOQoQHrP4RSI!Ij9w#uN7_{Px8lg zcan2zNY%0DOZBIu5!4XSt{^yuJA!bH>r%MFb&rQ&&EBvl$7f^|lG>%CE}-mCNALd3 zNW$r6y6;7s*)F^WY5fhh!NMNY!JL?x|A)NlA%0bECnG+7D9JCZU4ul#XXjUlk|lK% z>~U}D{EcA~0-k-#y`8YI`Iaq`D#L?wq`ehb z{M6))bCe?Fhcx)lpyl=K{1aWwQEo|p(QeJ^e$o?`m9~KA1EKGqgSp&(W-ap;KF9MF zuqJ(%*xkA{S8RPP%aHq&c-OBSC=&qzV2@=qNDCL>h18a@z&?ofVg0m;elnmlDJpBQ ztIO&HZ*l9BTypwut&FJv>ji75#7TZTEHt~|{A5)q$4R)1P+C89zN4r3+Gj3gexh12 z?%^rI6c<*=$sHfRer@m=PJSO#j-(kqiJwGVP$Y?CEY^izSrKjJ)eW>5@A z2*HMi)1h|0q$f=L@mF4RNvaANByl%VRc;EtD{5H!5x<7R%FM(BQj*%X+TOfW z@SlJF4H3z5`k%pG-{#}9OJ8t&0oiqt6^H$^6yx&))(`_^n zMJ`p(l%=&r6#ZUm(&z*hLAUlDX<4qC!&r{+X;q4RkCDNFSwR+l4-1 zN}XJ}DN?zt!Q8Po3AiFZG6<8EDC9iEZQru~o&bN7=gF&KIrc7-x%C-ty-W3+C4@nj z^%(k}ABCPd7h8;r*$8>MJFYT;47r4h0J3b&NdB{J7GkAOwth~cmprbVThR~!`hnsr zWcU<#rb2cg(wIo4g*o&SbcFsyQ)N@H{v$#loraib^QX*iSx} z)*SeH;Re75skT_OZYUz_DQNqHw`S!6+i;m7z!I>t8W89O7$XP2Om}h`(A}|YYHflq z@AjaB@up;A%hwxZ!Y|Md{`_o;GJTs0yeCIYI3#tF-`5$pNcA~b#UHtFaGcN^W7nYR zNXYhfNJ(7VQzu(bzN}qFIRNK~JmlyP%rVCwGsmSb88tFBsM$^hFGpw)d#x!VW|bdf z>DwAIm`%Q&88xL`sJF%*-SghyeaT9=*w7~uD8iSNHg3mt*p`|^E; zH082`Q)NJ9aU2vGrx`|yljzqnRM6sWvfAn*+8X>|`6S{CPqt*q(G>3#=vS z*Ocmj>pk57`!69}E{bq3T5|s*i1o|0*G+kW(m1@?lUWx)i&-%_(g_Tm@xgUWhZ;hB zpe`wU8TTxFfhC=bmt0x8ImwZ5jXiv0Oy$Wk*quqZ>MVqB;>U7fHNtO0xceH)QT1se zZnLIuO~#6fEB#29fu(i#X!Sjg(zJ#rIjatN%YHJydYeuj^ZMTB4@Hi9I4_H-;v-3c z;h~kU)d?tVV=TVV!uV?B^taK!mWUve@}*$O#9n+%Q%zu6zkAvG$1-7%fIMd>f2yHC zGd=gJ@X@J;u%EIE_83xqR`mcqJZGBp#)|f7YMXOjPKuWe!Kz!H(&RC|_3&i3M)U5+ z2y5J@=vxENM?2Ge%{7KrW>$59!s^*pfBmv-$SgI&P?}q2$5S#1xeZat82oH#d*^rN z++)(v-iT$psPM99cHJlaS}j9MoZJercKe{2wp~x>Ts8 zHyToW_Gecm%_h5d^0i35J;fK!zAA3{vxn*g*LkzmY~G98B1c!*WChD^)Gu9G8!oz= zoxeZ3!Sgt*+or-u(2ZFK&e!I+;0+ljx*Y#m{VvJPWi?H+zYab{zoyj^ z`w-a(TvnAl?cD~^@5nBC4UO8* zRz9yW4aHLZX@BWus07s01}H7bDVh!dgEt14Y~+D?Rec9veHIJLk4>{o>5Ah6^`EpG zIx_R$5V@J_q1<@X_H=YkK-+8DKHSso8i@`q{3;YFnf!ZW0RiH=7Mspg5aceRZ#7mecz! zL1UHoOvy}&l}3Tym~rzA7>G=OLe7llj-^(VCA@1Ry=2yCAUc#v4}i)Djp;MtSHkS* z?xU&E4RH;2rs4kx>hPUkX4S?DC4ZfU$!aOHL*Hx7dGZ4-SMSeXk7qmqN;i7I;{96a zH*;{xB->C7!Aqv=WzPo$<#nKxqU)T28We@5$+YNAdcz5v#H3E|RAzy6J^fs2V$YnM zA*udit~;|!ze{F#W&9NSaG6)e$z!jDXAb0Wff@0{4mCkpZN2i{t`vG#WwLg3v$gI< zvqu|Vh3b%S*tCTed#KUOY;A8RZj$kC!!|A5G@o%slRd+$taU;FQ*A8L`5sc|bES$G zhK^s}I?Pupd{#h!*liq@w+*zm6de@wkpzkH-%5D@eU*tb!@TL0!J?dV! zyh$J;apsqbSjpZxSITkrS+?jiPy1TW{?T~Vs@zV3kHlL1ft-@ucJ5D?OXkRz-WLXc zK=Vz0OhZFx5}s2l(|4A`m*OjpK4&Tymbdw5Rk%o-E;8iRh6eM;sMQh8=!o~500~kOg!~5CBywY z(v&*#$><^UL~Tw$Kt5P@Y&lzTJ=Je$Bt_Z!&glV zu=J2J;nA5|$-3c38RNRy9l-syD3x00L#honf9-cXZiCr7_g8oYNjS&jZ?ZA%9aj(J_W!Q~oyj$DHBDU9huln$r9aJ$z z>vd7;1BwXw4J^!U;tpYdKcPCymhV1cEyL!mf*#$`{EtEpg9dzV@nwMda3|Yyg^!YC zTBkuuS#!K+B@=xk<>%w?=TZ81y`L5Ig+pMd z-)FMq=k}57w9nkx+Pyt`G(DL#MR@xXMe1@QU{X?-e38igw}pAekl-LeL}h5^}k!1&QP& zzc!7Wxfl%;NkuLJ0AlpHLU}H`KdTvK-l#B#Dt3wVYsujxb>tm2!Ifdb^6kA+yd#`oEQpdeq zI{s(b3x_B|Gbb$9EcFJ$>Pmxmo~fTzo6w^b>H^(&SL1qHc)wOMub?ySTD4efQ*uwl zrrMsM?%LPCeaw|yYEqu~CLS3XdAzR!$a=TJWTdZ`;d8Rqe<#?UYSLaeWt(tWGni$S zxQaWMItYD;)9DbX)$?-t>-g#)k&3d!I6SZ^3jw|FlXfco!5S>A$X%xH?;gwc^3>4N zKQTYe6w5R%_00TedrJpX^%NOLavW|s-x*6@Dk=``Jro)4HN6Hk`E!WuZt_reV@uEvylmK-XQ#Cf<$Fq?CX`>Qc-bAf5WHke3D24$VxN;gM;V$*PiS64eq z03~HAT%*>seV!8Vqo6~uG}s-Q)gnS+_RFDudGq|3T-DjpF@(0kTRZd@sY7`4$DD+| z5MWs?CMqpJxZHBcjq%$??{A@ptjWg~hS_19=5;HQP8jHywo(Jltj#{d; zp*RFe^-BxryU4{vzn$ezLjS}4AvRzJ={rBcce-}yCcYG9pX`h3NG&V@W;S8oFu_`F zaAf@7zS$}THa7SbR`?)m>vZToqiyat_@(F=4%kx9@RB-Xs5~ewg2p^$Oj03N3NTgy>J4t-FQQL-4#ap zk)d~05Eo=m*9vS%KUv{;?0M@kzVSkPYmcj-GfX)^^wAG{yGfmll zw;!Lz99tK21k4^dRc}Kkju%Ey)t#7D6s%V__KrFGPdk}Y<9+gOGe#;IZpFxP^RscB zz~E;^6WERKbg1Hf%l$UvPzj5WcM5SzB?9!J8tYz(=V?+Se8(*=3!;J9%C5~=n=itO zd{=aT(|@U+>^zW2+D|kJKWC!|4F>NR0jZwgAn!3pnO=@1;6xc!a4o$S>w01|Nqc~- z&L`;KkZNs+;dlM?bXiR{H^)g(mAgo>FI)lgjYQCACIk?yB54R;#>nPX0#Ww%Gk&^J){Ij}6kE67jqMJj)@tvSj;;}0s*JVf zM{5-BE{+wDe34=#|6TYNbWSW-l*So|RFGyPFwq|}saR@5G7aZz@%>toIl#qpuJ>O14+_$?op6;Q>YX13Cg z6cxjhB3e8A6C=mX4XyH8Wz9lqyKkFa{@}R(EA{>hMaqy6w_*||m%oNI9niYnJHDA4 z-uu(L>bmdIO`e&6Mit+4Hef;A##(}+F2#9&b(xo|ygFOnI_&f#BYCs(@(jxUkZp0s zWo)X=9;S-ARq2<>Sp3rX{xFgEx~!E^$Y&<&szNn#z*+{#_6mj2o2kF1&2_KZFw$pD z3^<-^0ls<+RSSvmZjot|*#NT9UyS!2BbA(V5439rQXChb=cKXK0#@79v4u#~jWkxN zG1_((1h=w&hRP$QReSt^MDS%d=T2fz6P=tU_21QP9reFiU#z90d!!rcfd1YV`-6vx zyPJO=-aU!zqIZ*|nP zU5b_+MzlF9LV0i+Br#{BPf#N1Eomc5gB(jo^dU7r74HvmN)RS0Ji5y6xx0_IfS#>A zGBexDIKr3E{)T5i@`}$}e{@0eE%@qc(eCP&#;O~>vIz>(wM$bRA!dQGq>pvw_bWAR~crMk=V&hG&*G{XDc zil{dUKAWYy;pM-;o7MyHKAB@C4!fwyqsIfhmqfo}vEz_HlJ1pHc->vWpRas`VwTH~ZRZ7j_CHs6mM$z~puT_uhr7)chH7?dNuJ+SMT z!1y1kuT!Wkq@2EJpW$w&8K|)yWD4iQ$4n}sa}6cgKK{#N1*f7A`1t+Na&+qc6-B)9 zV!U^e-8||I4|Q(yVSg}bDV|`E-q@jgye*@n-S*3paX!ym>=sx{@3}lqA>z#MwMrDH zKI^fL$sH}qrZJ;!J?YS7y+;u+S5N?cwKll=9CH-s;|W#$QGHnO*^=_*sJ(fSy?kJ{ zzIKVPGR4e|n5&l{I%%BesX|JDSL$;T514@&09Ex`CvCl>Hj}F@8QLK6<&VyK-no8x z>Z{yyfLn(k#9~$tH7!imlh6)o_&y)@?ex&N-pcu1LupoA~frpAXQG}?-j}rxoY_~g!`6~-ss(s z(Bj%*YN5;G7mU2y++zIH2BFSuFHwFq@DOBzoJB;7NDcV{Ttr3uqNo?&{ry{!nncLd zy&ro#!aYh?-N1)0C|cc(=GS=)s?c;-?u(WV+Jlg97cX|M)zn;W^2F-HQ#54z19du4 zhsMHllcS&j;f~7;F9FKQ%j~?*CaO$Diyft>66W3py3MB?kWLp6{|ndpigx9NJOOTS zQG$6T zC257LoflPA%i&QIMqNLyAw3-txF^?|3pkI#7WbxA;m*1>wyidqBIz^d`0&K09ca6% z(5vk9l8$b*Ilj3LfH|&07YpEz+4i4&_ea!y+kU%75u3BQ-67q6TjJNwu3?vL6}vrA z-+GhDgQlcqz1B~2nc1mtpeNueDrQa&CHgpMfIST1Fj50rrT~>ZZV)bBBMc(AiZ6TtN9U&RJ_# zSUB(aaN^(Zl02TwMcxfrBG@@>Hh-adLvyl?sX+9Q5T#2kQV@o(y187?Cl&XNyB`(I z*^U+5gP?Y%Vr$(fs)l-dGlzFpZ5nTnyThUbwFhd7a5^)t$_$QhxnOeYiHI?{mP7>##wNzjOkl zzvB2E+c=5?GKIcUiEd*;(i2YJ?^S9OsU=J@i(y1{tlwsJuBUL++Vprl!2$X?X#F@S z!H~X&ZSYYW1=6*Dv+j99jJWbtDFJaFSkY*@ypU9+idhXk#J+sTcpF=-EQE(`H%4{Z z=|;DBWqn{T2tj2^u{5tIxqq~KN{g40oL4hkoMX@K9!F8(-uQ`r7IqL?zehz`cC!A3 zAe)7gZIdW@G~nFINLID|TpHT2gA9ub_QG2vV>Idl}m zea?TOcAKcO{!@kEj?uM~CX`}t(J2Fu;Ba*J^=L#tSNHL9XC<#mIQ@OI#+|n@*Rc|J zp@t335%q;EX>RyOyPq4=*9KggHfJCFm8k!`>`yc?=l5(9G#((Fd}4NFTO(U$w(IN` zM%qCUtb(O1EOD`>ZJj-+caGZ8X>In4Fw7<#Att^ltWi=8O$e60Ey6=dG;vKK5!CGshAdL7?T|Srs1noQ|l?iVP3;OUi(--_jl==L9|EqKrh|aUi z{IZc$oyPi{@0mCAcgrdi%J*@Q?zP7q&x7w_oN5YOhIo!2)K=k)(lw1tjK*624(VC&1~?7zMj!(c#?uqQ~g$Gw3U2qPK8aOaxrG0BCG_54;MP% zt>MBwW$%k@?@0^>o2244dIQJ%bZIDb)iDV**A5nr&18ZZ*;h{0UqyjZ4!RQV*6I~F zlb);2ufZ(kVLfjy8unZukLtI&-VU!n)-_n{ux!HEEEsAa4^1scOKY0#-H)jW*bNUA zcm5e^Qt4^9HhY`6=HihI#C&ZU$HK>s&7O{LKS@w?4UoKe0NCp!x}n2{!sy1T{E>Sb zk-82V)*Gx2&TA({d&5))tZ)9wC?DhfY9eMu}d|xB{GL;S$=2v%e$N#Hvw| z<^tbi$G&=$S#oR8XQ4GH)d}+%NoGt||1Z^WvWdozF@8w=Yl?L=QZvC{Jzb-kmkU2Q zejeQw%MzRa`V9W0km9A1ITd@b^F**V%(a6R_X&||h6~t=GOX+K`pHTo?@6*}h0kRD zj;YXdEeX*J$A_V#g8jsZXGQM_{$+y4ByvoMEn*N4*UDN^qd_*9jw)JtR(gGlr`+yI z_o#@rS$(TTdsQCWpC0kiPiZTS&^b9eo-E1os{gz*63>N|y(4R$a9b6bIIFTxFR$$DyR}dhU3d|B0T}PpxD`wnb$==TEnBtt;GGFDf~K z-hJTN7oo#Db&kRly{4+BzPBXk8vwN-*=u)?$~>=*ic9fVM`Vgt0j@M{Z-v5q?USPj zyl-e^VMNh)k6t5nsc+PC zIVdSx~#!QKpd{Wn_sWq zH%{W>gUb?SMH`F1Jt4(8tg}zDl*MnY?2J=iL^kNJU+FCU>P51#jMy z!yk)*-X+MX`KK`OSdFDqC3Z3>%RiWsYIioAvNd$I_VsQ27ei2OQ7w;MY^UkHu)^_z zsuot=Z0Hn?%Fqwv0<}yZ;#(Qw?$J2J*jl9(~Y&ijK z!V{-;jnjDELxb9KX>(Xp@a*Feb_uLU^o>~Ao-#MaKQ>qb$r9=8%~v}UI_~4=!;?u> z4+6C}kFRbQXgoSRQ`GIwXH}#qv|PpwqEz}h9&4*=4qtp8b)$^s|9WG9jq8iaR~QRG)H2r(uET+BFHGaHG2U=FA}Ru)Eg$RWlfZiG>#@mKZ9W9b(q8q`i>vc`;T z3MPm-e2k)KfIlTP=l>?;H_{~P6cKO^aG5EBh-okQakChGRxYXPzj&Gz+~|z-ION_? z!4uyHIq06^upqkI<;5V&MYlQETGj6YWJ`IGv3CK8fxvhUYQ(_Bkm6Xf@E7{6TxOsY zr^C(!p{A^<7Jx~4Cr-=h{ids%nR_hF#bg`RSV-EcMK*I3E^Rr-i*q1ip(swDq zWYYSXud4#tBVn?MYCe{XGxg4f{0-1@u!_Nq-^$Z%+2aFHL2lfjm!CX0w(%5Yj&Wpg;-f88olztSuj;d(=@!HgfbQip|dkxtrYg5m3*PuS$R| za`fBO-sLPZgyVN`AtorJ^YheUyrc|W^nB@-Alhv24BAEWE-fXhIpx_PkH~7TMxe9m@N`@(3DQ`>? z2KjD!F(pbZ?<8h+jRElsb4J|S``KTQflpRlu*!pP9RyNVa7?#=nWE*rMxR00OSq4R z9!9h`j1|Y-o#h{m&*I#Vk$JB}#H>#Kau9@)S;B4r*&{YI3t*4K2C=7F6Y^R-{DM?k zp>%!)&${uKmToDt8X0%Ic#j{>zi8RgtwG{dqv*+4kwAb!$*O#qJP!3A0m=#ye4voJ z*tXM$e>AN{Z!}Gbc(`+=y~%$1rG+G;$&SiruI=M61 zAPtso!1DKy-G&WZIebc|Nma%;h!R@Lax1dSUm?&8@xhLmH8afj4rYv6qELMWr0z8> zwvHi3ozqTNjsP-OuH8{W=O{ZSZO#rtHR41ug967zgz+x z>ZIobJ~mXiOO#pxmZ8u5eo+VU#M#nF#OVV16OQKal{5hMLP=?FHq{%FY{-&h;5;36 zAAb*9PEV3S{c)oh+oUUlUTYW>e*M9O{B~rH4`~o2WOI@ zjNm64*u0n$Ty{^(9HdO6P1}!He2}}ie%RER%`7PKSG#|YF*Vp+m=9r;f&vJnpo~uo z#p1rI^XxRU`V})L;zbvqQU$=%__i!*u=WGk2BVY`eUF+x=B2lT>5k&M2p&{*0-?OI z#Ho^m`>90FovK372!qNK>))|2n^nHBZW3jo6XQ>@y41$;DZArYieV^#Fw3AxMxZj3 zw53CIM?scai1NXUA#`tPCFI*30Ox0qoLAHig3{~El z&Eg1>BWlqR1NmBoYH1gyUF;|sl8E4Q!rMWEoQ~x(# z>_3oAu*(~RR)JQOi@s8``9i^_w~dOrSowdjbE?N9&u8qDogx{H{(ZVBM9`f!#&!tK zqm|j4@?Un$2yaf`L|?Nmml>j8UiN$0({4lUVdNXygMZMl8wW`*k^(&K!WJg z#>|UW@n2C~>Y$#sXp>nFMH9ldc5K`r$cr16!IHE<%pM7IhY!hnPtH$M7zvi;zX+C` zZ8NHN&9`G7Jd`6v}>7e@Ye4RZF{d+m=gJrLm@PW?~S~#XJ)AaN>2QLqVw?h>G z47>u;vCKAoAy0$aL-*h3DFg+0`xd`hjSu%iC~nn_y5q;jlKPBkU_P+U2y;DvpApht znkC~|K`A+1V6QFe0uH&}V*hj_adO0^y-(lCEKH96iQsnb>K(_Q^B+ZSAJjWsPBBQH{ zc?ngEE9`H{P0HhlPM^C2^+Z^VrbQ%4+|KS<%fN6j{MoG3TCA~zTlzZC3o4YvPe2^_xN{5d^pH|_1bY%gAXZ!RVU()AJImC^o#+(f{S$p=fj{mL_W5}ayn z4>SWl1_g%4#)>jopsAl!byd)1zELC25NG!nJ%MKI@wpwA?cK3sGrrih$Ii(~$(%e@ zO=QyGsq@LXphLK&UvXmZ|HR6#ymUpC*#lD;LPtJvN~=#8&!WmX6Qi50!Gqm*EOT&$ zuxRFwdp~yv{+jnYZ@;Nstqtc!{x~r;F_z3{12^GmI5f6!h!(p5Fx%hX(bm0VM@~h= z^|5C|Rv`nc%wUBKzXCFA9vLz|easNABC zXy{Qw=(M;(WvBQ}tQ^xtHN5O^`oV>6yXN?jDzkRC~0UphPMApS8+)eQ;tcwscNy?yi)OZPeUOIQdha zW*!2`ROCX1IE9hmnK6C-7bpAr7TtUVq`yPfU*aEIS7FHL17Jlk2)j04pJ~@H{UT|o zd^!F_$}=935DU2P7^UDrWjVAqrznKM@&7mOI0MXUl+jJ7GQwTaiZaz6SlXTfqL!RS zejCn5awK@Mi`|A7V&@vG!P6H3*CDy>#my-c%$xKy8i+@$ky!(N8E~uQ$+*62YmlU} z&diMhN|$m)ByuB!0k7P&HXw*n&68-Rq$C|sr$ggKB)U&5A7CFOHXL4XG%FURpuN&Q zp0RoY&9QOqnLBt6z`5}2etNMzlMHLlX^+Cx-t;8eMA21lt$)`mHG@*82YF&)bYaeG zZdst>R<(Vh(6{rI_$A=0M3Si{xBhEiVTd`Nv0l-&$TRIm?J@J__aLp{sDO1*6Ne6I z33^&4#xCS3`WX@;F0Lsulj?PKMnpF`ypowye9X>`3L{$pd%x{7u3hbkCt5B);?2i_ z4-|}}dxAnldixvwnOAn7&kyeK(7ZWNw)LkZQF+HtJl!I!P&Gy}z~Ru0Rc;Tn_xJMo zP$-%D#eur8Z%{!xe8MZ%KN?P9qMEX(ZQifiz7X_d_($R&miuaf+s!qSw7)=)5>&bI zsV%K?e|blN^KAjqE6r}cExY86P0qv|lU&!!&L@iY)h?vAb#&Os`p3e^_qAon7?Lxo zkuSX(+G|cAwMHS)5Xdga#p9_eMIsEK?+_L&+wgs9g{(E#Td8tN?Q^_Hz$2;;=FH9s zZ4xLIX7FHNRs#$e;D-X-hiKM*Q($`gp*d7ve14-t-UJ8%nCIZ@mO*CP9nsOj^td1x z4*z1uR|8uB6ZL({=1UpS;E$Q(O`@Ttce~ZY;SmJH8<@@*Wh(R?4=x$2*&`o(MVaPT zZf^SG^}DQykoo2Cq_=0IuGWHV88=7S%e{mXXU0PHVT-GK0TB+lS_xUUS6y1k+g(Z#%Pe1i^$z7%duKmZicB_sk9RB(8pn zWm4S#7dGp?AoUt$atL^k3M^cJx3_mddF!k)h3#UfIp0ff5Peq81^gW_>C@g<;kFcE z*H7OWkjBFkr4kJA*S9gH^V-1RgDfHAv6q_ZchW}akTAhr(K|7m4YI1z`YEHK$+n&+v>L zWl?2GuK&ukx$b47eDmVAq6pUs+sk`Ap=g3?7n#;bD-K%X4bXfn7G>k!X5@$qFfLtM ziT8mVs$1)_G=f~;#JQ|`|$bChk;qHI$p=BaL)f!#s?BeCOHWHbb z^Nf}}&F+VFiTn_|3a{1%SyqIV;OYt{McS8lx9SeQCogvy^qC4*l$FHD^xzhYrL|YL#MR^pW_@YbrNeb&VH=&jOBEp!T|VGfdt6U1-clES0^2EKXU;0AVr}S^ z1%lmiV#qZ*@UixTHT`5L{qsuAhTu|tf?Xx0(j0ry!0mTpM;<>R{ zl*Cl$0n=THV>lVDp~*H%!7g*YYY%T!F@)HX7<;^iQ!^!P5Fzp5K#wVmHiNdXi<7H=~2fsHErJN7xH#N^(}Q5{D(%^+m1 zN0%2+zPiE2FfE;@A=ig*i$i8zY_7#+h~Edora!Z@jBazq^7nQSGb^eslB6SFfBn%g zH>ek$2tYyDZp`BFF)8*zA#`Og{eKjlg;&#k8;4O4L`u3rNonZ@kp^J`(k0T2?iiqS zBP}&VT4K@-($bP62P367a^&;=-hW_cJ3Hrl?)co-RsCa-Es5n;=UW0%>wchtWMhze zdp<<^i%)34R)8jW{wjxZEa#}Pa@1XeTdmBg{3JDi?IB|`OMHeSzhciIOUs$&T}jJs z3-)PMtLS+EwDvUxm7(t2~olLw3!()+0uox!m+JnjJkVs$_F89EP(UvC% z15A@-pF}Z4=yPSrO~PrhE^fS|9Yc7S+TEUV32iqEk8!Vxz)>OeoYw?r*SH!p9|@@hJgxlewcH6YB#9C2j%q?YZo~vX89y$o<*^0mo3k_B}I8vH_eBbZV5 z&37-+)zyf+kg+LYhWf%6&^%&!sUvqo8;#NuOWZrM*_u0@Qq1O%IE*((b67;3B4T@T zRp!Rf7Hu%H-0x|;=#Uo6o*%w~?^{m#Sg;|?>w#jEG|0B_T;R7`bkmKE?l1)(55PHR zg*}p9-~3(!0Fk7c5(}GieLQ2Vt+xKGJYIct7i92DdzXWwC|`e(i7%jrqcK>lMW{1+91VcA`Q1ES3TF?xux6oZ#abM8Msbis zjf_dW)0*5q3*6Rd{UFCGnkuI)4RQGqywFgM8qH-L6D_9BLVtssgZIZs@_ftv3vcCn>4UmvfKhVLDGNKJ&XN=&7-UNBgqG(fS` z@yv;LdS3SI6F;CHwZ5zM37c-#M;2Mg0t}~~x_#L`6W7DSzLEd1>mSi0Yef_yp?1Hmx=L{HU8FenOV<@2Sf9W$ zi8?y8zkt$_3Q7=;JgQ=GtU11@*j8eB{hBn&69j0`KJ8Q(Bov>^zN_Oe&PZ7e83Q~q zKvlh}aq@eOxWj8bQ8$!UCFPn;BK|1CXLZ37e8Ku#o;c)%>9V;%{|T96-AWBSj)#3r zu~bD}QgY99u!9Zu37xJl-WtA^FVrCYVwr;FTIce7&7`)jw!7_(C(qs$udOCjWRRKg(xxaIXBCMVb±1x^@XdTK-F{&Dk)4Z;_o9|O> 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%0Au-6g26|^MdR*)kk8exU+?L_a^R1Kb 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%0AeK#c@B1V<7a` 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 E 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≧D*-K)xC$q?;3V-<+D z&QOwmE+a2-V2E(B)qgsbZ@>)_+xQO)0+l5>l7!#$5ON#>gOw53Pg+i2s$GhV4Q^KX z_btIfMPjAQgQwO2mNWrv;d;La(y0Rgy|)Im*@f}%%XdSkZ>^AGn}qOqa8QXEsBUKZ z@*!|{(PYiM-r4Y12;X#!04B0_HX!%B+r}c4)HjD{=G#uLdN443lZT{)NA}wF9d|vh zMTQ3Jp5iD$>+4{kKUf(x908WHl8MW$ z*e~U$!uy3y&347ysZtEAu3Tr2lYFaINGyOf2)n2LziCNlc$j8qLkuffP_jv0LL$&@ zt?LYBH^BI}zfYDn`U3+S^4Pd7dx<^tM@-!SWSf_7p3}$g0&b?IOQK_1J`SV^d=)sw zApB6yF9M5Z5N~g)o9+;EBRV-x^<|27U}5UG|JyU^mD`+}j6CW!CqP?mm>8W@SMioe zHs#v*bgA#^$aAUEv239#4+rO>4TL>95N)}c*Nh}0{P>{w57GUB4B=B!k*ski$1j=B zZT<%~LCL;hoyQ=k#%t(5ir)~t3!wO#;={o4>Vo^k_Umg47m-A#W*>WJo^yj!fKr4c znT~Hpb!t)9)clzEuW@bQt6Q%Xm~{u%WeZ_!&m_#kQs2T4*YdAF@K=I7Q{gR3O4K|{ z;rj=BM~?n2+C8h3`1$6DkwM+6g0j$THRbgRK{~1SK1uze{ygjcF1fPP zu63ofx6qYDF`=CqNZ>GTyjiDTO>t^B zTFi=qHa!VB=N|RNj)SQsuE%6eKMQzoQ~0~9sj|`S*2hW<_N$iwM}|LlBf0HgRcPZ* z(Dh#ncvizxwT$VFx+vHeUnP3-I-18gs~F(aFRL|!eDOKY7I?G77WdbhVAroMA!d@@ z;~+)?$k|iJP%E*w@pN{Yb>wz-KP>Q@W_X!_Rv>!&jMs%qq?FdDt6HD#u6Un_FLf*F zJS}CXU3qu6w?G*-@7n^A^Ap>@TJe7wNuvB=@%D)fmzRy*g7()T7=QVIsWFVeNX5Y!Cwfq9|im$(DdzECWakW$#kh+K_<~W2mr@iZosb; z);w`N?}jaWIB(u)?4&VVLipOG3;;pv{uRD54y8{^95m&AW5BM4pK*P22!E4Fe=PY2 zYJvBU73p3Hwzs^{^?iB^JwV$`3^C6!E`m(+&u%MfRNUs1H+6l~u5fz&tPxpTt<28L zc{5wVEIVcSKJ#ZC!0v0kpW*{s>8HW|8}RMq8bk)&u4jwN63+O^B=yF6isz#L0DCl6 zGA^w;M?ANBb-t;hDUGC#@>L`gf)IiYdJa4hZEhu+Emho*nO4XlyYuN*rkdQzQ<69> zV$;GV@65Efx!q|YB>9fVJqRPUA~ow;-l|?p1UFm$S&1rQ2aNjCoYO}}0`YF=W29(0 zrL~3i{;_o#GkJbXF~S%W0&~x&Ls)m3J?5RN!K_(n`a5a5vu-lHtR)dT@(PdP^z{`m ztd&SzozCvWpAUW`crtGh=s)n2cq2s?o)DTliCWDcGI=ey0>J0y!LM`p^QhbY);|;U zZFAwahbr64YXh+I)h-ow0`aPYfeC$t&x)=(Wt-IM_7H%?f3a@9)f0v3!%y zCy~Wjz3}pCC;~OXH6M%^gAC6+DE0>{{W(C^1c>GU{)J` zalqjAuCrC}^GR)QD7u|I)dBpx0**(_G5&a@tEkx)==(>nL&)^^uA zgl{mwX2@PsTnen)g#{E8WJ#2XLFwqeeWk zaB_2BROy}`)ci$v;vG-J`nBSdO|v(-`%lthACerhL=mOI>cs44Q77lEZGkbaJ!E2x2)HK9%uBkH?P~ zc(cY=o(+$~@YxH9?ySU6tlNx)6y90Kex|wb^b)yoX9?k$EW9Z^y1ZA6Z(2-D@)4cD zFZy3d@=o_b-xg4aQIWic9)XDqs_kFSMwRV00wJn(DtxVWzn0Aqa=S;U$T$w zX|4P*_z&Pe14-go{3oKUPpm!8sE$S3$ac2Dj-M}T<-RO_-(D8f=fCi;gkiVwp7JDp zLhU9H?&lyc9Xoqhn~aNylV;v@lFo9EA?cIv&TA|#4b!UR*h%hYc&_zj)_g7E+gs=^m6HP7 zYbrbstqb>`HZeG^YTAc_0 z@0SPb+{ z5vDQ5%B5LbBP4)wFk- zFZW2#<-r_y+(%5D@GH#qZxQMCjJJ9~yV-olCH8`TCvrFgsRx&E~H7s zH_}~~eWlxyN}Tln0QFZG+9sUS-T0c#v`8nnPbyUbmP4L_vB5RxVj`z0`JT31-5B|u z9lwWsVRda(S>x|;FJVEit z#Ci{h?ezT@!gAZ(i`ee2q~DgBCF-q?K>AlUB8;iIa=xYI)!|k#a@?tX@y|o?R-LQa z-QGb3<@6(D3JA**H}FqE>s}$P+Spm!H;CY2E#9*{P$W<{I}i-+1Jfe7G4rb_$#*r$ zl7&WfIx@|FZpP#gN2vqmuSU?&aX|47) zH7M+6(~ZubcPmRiAe|#A<|3SR&tNOh?=;9f1+OoQv>j%9>s>!BC6wEX7myCw!NCWm zeNPY9l`dr?!_T6sRa%*s{{Rte{9k_8Hu_6g-9qYjTq*=%j-x)6<5w5nWub$_YYeja zk{!>_EO;P(RgHRn)}sszr9u+axoHluJ+QUXgQH3sB_k>Vw;3Mw=~_p@T{7%N4y!h? zbm_HBPRq5V9dg}IdiOG{y+@W$bI;8&+}b90mLCSZA8cOQ$3e7(j_;WZj=y`SQ}0?S z@EgHO@O`2y*?giUSi?!>tb|~k6W89oNz#O^b+PBm5j*ZjbMVi?Heq12@V&b+$@3Vq zU=F#)Dm#ya9vHcb3;AtPji~bQo4DQ6IXvT^!j!1fYhye{CZdXWIj<1>Eznm?o(Qey znniW_us_vz#dx-z`!aYZRo3U$E^lUmpcq(PU5gXg;;@w{sAF-7^lro9Rqw%O<6YBg4Ro;`cvS#Rzn zwz;?gZBkat5rY1i^rORC1+A@_Sjqui*4COG5H<~zFpKN?bd8q!x+KT-Z3Y2OpPb>YnmM3ck%$+W&>96$sSFzi{nq%gyy8O1fCx`Tp6KOhrrj`>&b$5Gv#Ezq)smB~w6?UT+bJK(` zBewXB@t!1o7UxIszMZG|eifb%GFO62mqK?CFreTA!LN(k#JXq14;JZAORn8PWj)WD zk*3yRZoPBUHS*Z1e$u*=J)Ex4qOZB^wpyo$O`GV~ns1*3P9%G&3l(MhXRZfI@ZS{Q zT3bi`s}1(ScJs`({{TCAykLD43~}pTUMj0qswVV0visDW8S|%yJb!2Z00~8!>M_pn z>B=4FRbpD_Bw%E89+mfh!haliPQvE?=}x9~O-+#7wYzyR!nng1$5MYmQBD;or6hV% zkF`!WJ z$t=uI^{$7+Ul(*=i~b>P7r>fEuc+GUI7#l61aT_xeo#7+e@gVZDmu}VmWR&9Ew;-a z5j-{F4-09xR=zaxPKjjRR8Ju$#dP@O_P)w?n2R$jls&dT=q57gK(Vg_pxh3)xI;!7sI&xGvTWZLgVdr za45OBET#PJq~vxL%YM%u9MZ2mS$*Ow{XR`Ww6;lAryHXr^1+5VCp~MQ306^UpzeK9 z`$2f-@5b7PgLKr=r+>6Z3~6m_5+W5_2Wah%#;tg}#(K_|;SDF@?|}4X(XBN2);SAE zUhUkEnDhQ~UPde5hb{gmc6H(7@b)}rT?@k6<*avJJ-O9e`#7X6`h?gSe=+3%I>1cW6e;f3>Z94Bv(DcY= zn*RXiy1DYVNivg?8-s-vM?>)*wW;{)L)G;iKf;%~SB0nEwi6@9vga8Mumg^3zX>~X zw)Q#k^0R2_KWJ}@H`*_TJWr2(TOZb-JBjPyVE`xd@}f9 zrTDVIvuR-YPz$Llq`0E z$JV>ggkSJa-`a!rhte!HUx$7W{>8S`Oa@EKqLAf!?A%WT`g27eVOE=)(L~msC8)O1 z<)5`D?BVh2_GXsX!n&c1#?ma(oi=p2M(MaV!gs~G5Z;Ia#O{88Fm&6mzV)lKA?&_;}i_uf`7yCD)0gg&RP#lIgBY z4o-JA+!Mga&3)(lI($9wmA}K8zAO08#a<7!z0pip7BF63SuBxUMn}sc7Re_dkIK90 z$}y!@rL{1t&Z8u|pALAN_Kx_o;;$Qc;!7_T>KcPyTroEmO(p~**^Ju0JCoMZ1BP@xWAGt~YW{A}?w_5;J7Fx2#!>?3I* zoZmw7+!$Er5;;DV_t%0?hJGMx_C6-k62{680@=vAV7-l!-r_R6x`UB`bBy<>#zqiP zlwOR^yp=e%%u(R`9}3v&-w?haX}Tr+jMo#`*=e&v(@ye&yRbg$uk+%xye07OM!M2V z_=?BucK47i+$YUcksBM87>`amR(NT1^1tOGyx%HosqFWk4!$1vmrB#TUE@z0`0{H{ z2U|uy&t|tv5>F}Gqk9zvhzF*4uZjNvYfp&&5zxFT;SY!20{;MnlH_XgnA#i2*v=yd z`^22*-m=Fg>Qh|0buz-fdBNMM!XFs;`oe2n3&NiX?yQ1y6;ynH%@lTKS%UF(!6T8{zD$z6LNLC*%(gSq@ zw994w*yR2Z;=RfZbv|Djf5tx$Nv0-=;!w6KjSZx7$s)Je0na?~*1ea*vs-v0!Iu{o zULDgeJWVyr{{W^evawrkh;qlM=DmDmsm2v89a+TS`C_bl)`x%NJ!9eG7K2uf!sI-1 zUrauEC1ZjC?4vvy_w6s@=Zz%Pybs{*L&w+h>HZhAhRtoY8-y0|Fv$;)0RVUJQGu+N zyWHi+Q@!-q_Ir;UYQ78dwTu4%iaLjgG`q;%(!;~^0FpQdo<>6FA6oh1506^=_<~Os zY2Fai9_nR=D@pFbo^<5kmO1AJy$pu+YVEP+%32?&{{RDQem(qDv_IJKUoM*M2lkf3 zEwajA2d+j&bNEz$7QP95JkoqgUmGV?~Yz8@g|4kABBDq(zOd`_>(T1=S;E%m8DdqbXI!RPske6s()-dJly@D)`Sv(=1!z$BWVnJLP+EBSeRX*L)A^XK_{Rv3P2&Z9bG z6-{c+`q$uxiTqV>cdzSHTWOjVywO_8aR>$4Q~}5;ag%~GPVn^K13We3{XQ#=dsVyA zd_A`QX=k?(tg|TPFsw-hx?`<(l_dXPA6R_{ZQ68~BB7yc^&P3mabz z%Noyd16(Ax60qHp2|nFw_k#7`6H8;LwvTNc-OTwW8-Pl!zCpm+M?EXo)f{tIz0R@! z0O30E1ajX00B6S?+#tkOJbv!o_+j|sz3293_;;^q8lI=(RJzpk`K=OjWR6?+(_;kl z)2ZgPgw$hIvm7lr(o?rn(pSW(2g2zb{{xzZbqZYD?l> zUqQ6hAqxuymMMYC%*P(RYsk$TsVgq0O%->!!pq_h5$e{qGCSLb)Dgzm5%?;0jFbKB zX1O&qj0GniX4ws&N5N}*;pkwF2?Cp}6*Fh~)l07t zU)#%Pc|1)bf>=wy+6T9OdR6<$+;m>2q-lQ{?sbhi%fr{V{w5;UP3qYF*lct-{&nw` z-?gvA-wt?w-$1&S{ONYF%@wS1$uwk0N8UX0dRLjB)R(iWp3Lvd;mqN7d~4!Qj2{y3 zqm{K!73+!pretYhj%f(Xd*^~jTJb$!U5@3N+wE8Eti04G=3V_5P?&i9(j52i_Xu_>k7`;z^ zpTm9_@K=JPmN{gO(olv(l(y${o}_yBuadk^f8jZGRY%jj+j-1{TZSQl9OHq-dKFdY zE1a>D*HaGT!w~qYDNn=eJNvegRVT5O#wCG31-b8!-r()B;Qj*Cf#1UM;6&+Pd#^fi>=uc{EF6*ZX@P{~OD0hH9wKY?WS#&-l z)%+je`-{k}?ryFMtb@#17z6U2#}(1)UJ3DOl1o+`;o&3(2(k%=^lg zAdi#)aZb3pxRuZsVnD`EU@OU;Dvh=r?X_c?)Nl0rH&@hkD>xSCVyn(}?j^Cu<51da z(Oz9#X%}fEf@UbPL{Nz1923u9@UNiZr8vc3W1A4$OpeuWExy-nrI_B>vokEf24S2J zsrD7?J{<5Cxp#G@+-lYr_O|y0H=#SDG571-*RYqoj#S+14+ooNgvGFXO` z5E(Jtf1YcN@b0;7q`9>FZNySZAXQQ}qq>p@%~gd~sN2}jnYMkY@Y7lGrNTr-tXDSr ze%EBn02rP*75n@9Hhf;ZgZ4z$^zAE20`)F$QPf0aWmR98gWQgJu1+?0%QFsN`g1ZE|2EFU--qOkBXi&u+n}Q*d_GSPbJ=?c+wx7Il%+_$MLQ!RFhrthOK{dVsy)R z*@=v^Dwg#ieSK^5TwMvqo*7B(lRr$UH8`s-g*(56y7sdymipz!V1;6mRc6F_IND2k zdWyZ_uLO9XUYh>PN3+yc9U;?o@E}03uNdd9dwW)~sO1G4=!nBb?$4zBFX4-Q8ps_> zSNmndk|mO6CuVpU>;SJuvhiny^r%-x(8i^EsvwcP;Hma?9BsipN#?waW#u_?o%mGT zA2T^iZxU)A4cE0Pd~)d|`h&caM>*OdQgiZvK*;IzuG0Si#hPu=y3~9)kgS@!$Ff<% zyO>5d5AZdwDtxVc&P-I?B$f0!NPpoOM}t+?^k|?7YQe^Sn=AWrcXQwWS1OO_Tqe${_PjSt3mL4Ly)%452@ZDTR2KheJteYdxKy%5@ z6~{`9tmP(eMWo%joJN)Xq2hgFD2}Oc)^_b07L;rTM(fw06+NZ%KBubMXqP~!c58Vf zI04gwbJz?XYto?}RTQ4z_|b=6rkN z{{R#C?(%&q4OO(uZ8|{&mqaovCJyCQUcTSqT(xBxRg7(?P-~S*9F_NhJUgN2x?P@~ zJ+;HT$u^;VbXrLy&nicz2OQU(_&>##ULWx%+ioJYk}D=H1KebWZ1OSNrxo;>CNau| zSf|kQvGG=mXQXN#G``j**7cn-&e9a}-f8E`L{upUj^~b*;9ej2nHA2VscL#H*2!#U zNEYTGS^UNv5O8{SHHQt;m1kc42a9%$EP6(h4xz8=OL3}b;_@=-E!D;ANC|)OtOa6tQl8sc;>#l(|>0l2KZSvnDn@I1>pv1S`xx5iOpeuA zNp&mJ@HO!7#^2i#;@eHsEM~tupbkV}gShluW1ebo%a&5RE+@@C1-{k%b$T^@QugIU z((XhAkC2Y_`e)%CF2y`QXQ$j4W{(JejFljJ)IAiK&q>mJQ8$Ik$E6@Z+y+2M$9&Yf zhs8Zz=ldMDN~>^kBm`uy<-iqm+i`uxH=*D@Ht}}39MdXIa&4{)t1|8%kFc&o!gjJ< zT*_}HxSj_p!fARddVhr&r^^e4B-`Bf=(P_EX_3JMx7iVnPeG3O^{V=}#Jw*<({5(6 zxz5#R1mo`4n~1F@lU+`VYRBhi#Qy-=%HHo>hAT_kmw03zV#o5}{{V$)*X$LN%1P_(K^OSv2)N>hKrF%N;vJu+%jh_DF6NvUMbm-<@{1 z-?V>%XRw-cs6iCAiW?!q?<2Rh6mcB&X1WA^hn?OhU$Nl955RP{bK)qmipR>xSC zbWJMu2>4f!1`)9x{pz2Fe{SCrc%#HJSXf)x$z>~HnoY_dC!CK;?ZIKC8B=YURFhXH z@u%&RSxDx*`ssl0h7tel_g>00_TmFN%K=^&42VI}3o4Z84b2 ze6HP2eXF|@6+PK8Z*%B>5d3cVgWyM!+gH72NH7t}V19&mubTcL{?~plv<Qn&Z%tXT!wXJDslXUMXvl`(MFf& zt>(y>#76SiA-WM+;omjxQRh0h#?2}#b-A+Cp^)2Wa^z=dI-Od^l!~RAQ2%%n2iomGDab*gqEajZr6# z#{Hm)xHAp-8RTOeanif!)8(ZXeN1_joRRmR!GDi_4Dk)9gW`3in1<5~eE88BgLNGS zd8j;d`$zuH{uagqAWYxC!d)170USE;-%HhpW507!;5W}%91V2Vh1ru**G9^z^y5&&exDdLCW?k zL;FN)N#XNJ9S2*E&gvPr<|!~De09b- z>r+mQ-0#h)q+B}=@VD(_ci~?a+IULu!TLhk+=7N!;~Uf8C$2rsebuFY)&3s%nWcDp z;cIwa30mplP>&mJX>*LPrg-B$YVmkFs&JP!uTe^@Ty{Q`yZ9fZ8;d(@p9tyd^IJab zApR~%1Ey4TCcbag{snj{&&N6*w+@S-sMGfr7a$ftm)5sZsHxqv7{Z*S&!W6T;ID(P zqNblVm7)msXk$r*utY5&9;eXP#{U2ke`nu@Hridq{-0u(ky%G1w-LL?<|=k0*A6V7U9&BYU#IzM1otKd3)C+0x^ShP9+v zLFNfCAXSYB$=Z4W+Pw-BwPc&PX>R%FEk&A+N_^y@t%_`xX2}(C#g@O+Ul7Z!VvZkB!Z|b-@C>?*9P59w47ey`K9> zy0@E6W`;#{mx&jzZk5x9%_!D?7Q{RSNONd>*W!s+O(k!T8SU3%I7Us)o`;Ib&E?*S z1@QX<%K%hjIB>_4$F+7U?pCuou@re-pF@F5KyUBwjnvI8=uobcGjWcU8Ge;n5gp;llRc}KSbwu~;5B2HHmK=5ygW0GsbWFbZ8 zdSHwnVfu>t1HoScHEnaumeR&K-ta24iRLaFuNy(dO|@f-mCv#M6Mw-yzBc?widj4< zrYV9TjO#F&yu|J@*#7|a*QsfLu~)~B3CXBAQIA8ksXaPWK3?XL z__apI!%x`@;}(_Uo4o=46L^Mb^!agmr6j{Z{A~jnBPZYGbWPu43k*)6-Mp8*MxO6FoL9P5d+BD|Dfm*h+s@>SzJdr^pPU#_10aKhXIOscpUZn)17juqvR2`et^7#J%XZ>GJ(C)36 zt;9CvWqafWQxW8X4{~b9!re>29v0T_?L12*^s;IZmbQ_Vb{S7hk&Y`2RBtBM!=+hE znH!q_0Ex6eiM|=vd?$DUL!+4#l?#Usy?H$=^33=zTkzhis9PNr+}SI#Lv{RBs@+1ftZK+XZmMyE z`qw>8;%^smG;IbMl3RErk#_}|q})d&_s_j_E2Il4=Z@y%&HGGJLgOHgMG)L>=hdGH z^nFg-;gphH5cL#yd`nu1xyWn{}F(-%aF8-6!4=Y;@Q)PJ>C#vh755IjM3qWl8! zGDD&KD2XG};fdk%Zy=0ql0;wQ8P7d&T$!~v*7j;&3e}onW$#I?(eSmW#*dAfO~uEG z;MZY>cuEPb356!exp3C8H_$)1skD%*N__M;g<=(MzIFc5MWQr9`9D=ycI(M&+{{U$J0Qf1N#jlFT z`zOK{(fEH)njj^P)urDfHyPY`>~rr`hQl~la^}#+DJ!3yHr_MUbv;S0HI08#lgVtm zDPxHbUEKGpi#D<19d_nx8-;bdaFGa(LjlHf{Ohxo+?k|~!ox_u$kXn%t5~Ix$~u#{ zvYvnr{{Z7(X8aEQkbHab9`0FS@YbVoZ)F#rvZNE4COPCT00Xzj!mov&3*W`Mo}z9hxt@5R?C_5) zg31D)UiI)##&3nc5aqJc{8!@N4%=8;#u$WH@fxl<+BnIqC{uB*R!#0{2|FvFFkR{K z&m4O%*#u;e-@?F*VEa|AKfzI4KDZh^;I2JySrjFzG1= z_QldT4DA~23&-^}Gh5ypV)mXK)EQ^}+;c;crId1c?rT)^IaImRS2>MZdtlL9>vF?t zV~ou%?2?3Z9W#^s>RlU3@J6AcYq#2ujBG8|-3p=;DQ9DY!l=z-R!G`~^szPWpWvqO z)z645d~ISTwF70VE(?_)V+4bfo-tl%w^kxYy%TCtwW0HnrsL*FImSB=&ziKdim>GmKkxOE82o;f(?xbG17Li@woh4fmT<%I1A%oz_m7raWIS1KO!u!p4x5&T zU0qh@9G?liec~}HXc}bKk;Dw5LK|>Sod;fhK9$d>z)u`oUVmn5HqbNM?2*KZ>QIsI z>0bUGG~6M5&oXV;`YXV{2~LdqbaCnys@!?VM^b&yPr|=k{{Uf+*%}XvKN0Sx@im+e zqIh!NJNvmAllQV@fQz2z9jjb)RVq!H;Ug(ZFQNL^@eAWuh5iqC4(q{R1-t{{Ju>FY zEV51ItH_FZ$p987jMwE)?IyppM!n%HKZ`#Tk_hd7C0#rg_P{cnLIZA82ZhG~o(*`k zDYtpfTJ$^lQ)lIm#QC(%3qWgId9Ec}`C41UDj?b11;<|X`EBtk;N0rEzO4|93z=fCti^7A;P1xn1=>TGYJztGT|{w|cP;v|tD8jCQM@6pvC}e%I{K&(87#4s+X{ z!nz`_avrUpvcI!Gh_$5Bv>h*7%(H0GARE-|DmlUDo~OS`{b=|t<4+LBt!Xxvn%{@) z{@NBamShns%ha9OQ6Q6z7g?0iKp6YnwWvF0!Xr_+6j?@4ltv& zLUwzTC3AuJ@8X>^!q?g@)X+sFek}?ut&8Nw{BwcO4A-7nc<;sbHd^Ju)3ocTETd^Q zgR#&IatZ7H6)=?FQ#O-q@2z}sb*P=HY z)^2pxV*4eHT!znLzwPCu)U>FtY#K%~e8EmfE0f=jD$a%D zF9KRDeiHEPy0gt1$Yh1i;IR?%kVbQlN^TBn)+bhvFxEafX#W5V^^04N80z+k3f%ph z%M7LWkT9$>$7=E~8hml_J?Dz#mOm0`S|x;0{il476qB?q&&r^TkOgG0@p5;LhOv## zPgVW1ydC|Cq3Kq>FKd%>1asf+Wt9%&y9?ZbT~4k0aQ@9+47sqfz42#_$(3V`rMFg= zHJwIDZgMkG3_VJ1*rycElTrTwf`fb%ywEJC(>!0V>Hdwo2sgXG+?DtZz?Mj63mP{{XeGhTlxqF8nd6t>AeoIV>m~Z?o!n5+G{N>jm%|3ZD?I0nH+)0V8Gy4 zl*jup{0#Vks9as@J^}D5o80+~ZLEnddXe(+T-Bj9cNeMAhm%d}ct^$W*>mqoQEysLYewK(FJYI1kRLUPC4 z^skS8Cw|C2H1Vg4wGiJNJP&IXyGZuUZ*O!&Q4z>1oD;=WYP!Z!>{4p?x#jwo>`U>E z=1m_~U)mQyx{F1YIZ`>S6x*>u@`4zi4{^nMH;exOV3YeuA-4FNy{0!63h7%?^8eeSgG0B%Q6^Snlp^VoQHAGBK4M ztIlqJ;Edm~6t;GnKZJfH{A7*ixZKTmcFL&(ef7ZyKHk;UhRkIM$#N3hk5|_J0N{k5 zvASMqI){b4Q{s&>+C4r?IcAKB&BfUSlH`%bPJXrc_3=yo2zBxQ0899Jsq6m$4SY-B ztNGUITYGIhO(&oBWoH}6BLSEJpRIK)dc{SlM%FWPZudVZbuaiQx9w5jEAJ6%emVF} z@e(!gtL?v%+BTjxw>*Xz?Octwf;@So_O|@N^nZrw*YM`~?mx4mSzJ11HBwLAW7PVA&1F$NLXv9A=c-BL%|W!Or|~LA`B7r+3KfJae~ zYYuG#OYsz1rKR=AmBeVSvIG0G!5`txXUpbwMI%Npg*O+v6_43=m;0K+rKs_D7~%&d)bXXX;<+jf$pdglheWPSpE!(J)dH&26o~M2%{hoxi z)ct5S7Iqds9MZICtTZvFyh=3f9R;DZm#&gr2)x!AiUDKPza(HuA@b#P6>ySxx zJ2ZRuu|G0`f2Di)cymTBTb?I1?%O_Z)Vy`4{5$d1hil<2J6Q7XSgh90k;o&2^&tr8 zMn4MTJazj}{6z4djNlQ3;wy<-D+tO-1f-vklB<9_SLR=cJ`Q-p!=5XXNBEcU>rH}D z8_6U$5r|euK*@FB1Dei^9Ad8ZElo;W>#_5Pi*GD+{U2494-Q{7hne63CEdNkZr!KO0xC0{{QVAaa($|CG3KWGv!@9c2&=REME#PyfAIeR z_HO-@J_39Q@E(hOs$S|^eU`hgYH%nKPjhmEMy^mi7g7&oeu6*6B{7>;WjJ#oCqycj9;eQ8Pcw*B}@a^QjAzfd>v)fH?pafeLl32T_%x?Y+4-FL#3M;TB9D(ecj9S2AV=W;035^NTTLUwx0ZUOdVQ>rv5MYA zRNN0GnOg;b?OgBe2A&^HPeQq08BeN1A}9jc?h#ByzEVyAIK~csmENZQ`y3T1^U4kM zJ~kSMfuG{VwAv1%eGFbMN3oL5M?l|eWdXndkOof%xX%>$_V>Z}nzozZtvcNx@b%30 zU|w%`bRT$ejFanC?Paamqo>TZJWA8VFzR+P-CyZ8HhT`jU<>B%IXJ+snjeYY9MUuh z&E1reTu0|LQV`_6-kY!we^b`9!s0DcapGxSo6}R*?e*UgYPtu7HL>A0mTRR6987>C zfQIPHGCEEV@U9)g08$F;QcPdE}?Lj1l*}ogdTW3NA#}K#-24AXNmkds zIg?AN^SA9K3;ad!55n&UX`U3+?{98&rMhdoW)NE2T$dp3VUA8Y_OHjEi2nc(JS%bV z!&LZnug##vK8)8AHMC6}lFx9bZuNX*0mepotvR>U<-=2UvgmMs4YaQT+;~>%>*7z1 zwCydlJ7Tu5>7#Yi?gWN8Kcqhc(9h+FYlfdK2mP?p|tg5-%4j7(u z+OltRx{H&qHEj|R8~=v&@u)-k`5mkPgk2ex{9R`i{o=MqzvB2Dagzx*w49qG1K9vbmA#jUz& z>psi7#ZXWKz{WGX(-rUE3Up5lc$dQw_^(paauD)F?j>K3v6p>(0LFWr{pDeZyjUv&P@J^=V*;+ecXp?oa(DWx4$>JT;V zuQn&05-wPRRF%)QeSS`#u%qaF{$XF5wUPJt?R}$ok4&=CX3(ec7Mr5mT*)1ygl39c zjks>3xfS_sr1%F~)bG4gsoWcxq0-Vxp5kC)-#JoO@C0Tei6^&9|`zV$673(Zq;P?ozMZLR2@BJjP%=Y$f{_T=feTkVoH{{U8vjP*Q|{Hm6u-XzoYEjv!u zbgRe>*fVq?e6hzk?rVmw9rILaow;@)N)Wk1XmyP}EblKOnizE^Q*UtRjil|!&pSvT{X>4pLWk& z{gVFxWsipbH-Cvg6TU8J$3@cg3rP~v($tm`%vkPXas~hgn&kc|d>!~_tNzbkD)_zd z>r=eZbw39q-r3v3B1PxKB@rkYIV`~E<*rHNCpysA$(rIQb3#|yAC?~yd};9q#d^k? zm!2x|#qZeBVTwIcYpG&Z3x>dBz~hR})4U(!h_u(&?Q{!U_tDT?+<@P?X>))MM?JXa zx-giP8Cv=yp0x-(3$`#X|C#88`&=70FhtmCn4q zUKc$s=5^GqVY}LbI~R^Lb-)Z;zu{hopy^&0GCrH)87^Y;gi@=fF`mSdd8}6|oLe@W zrx?o2>pVl?Ux%^V!rG^bEa$>p2w4^6^4tvV#yBU6`A<;rhll0XKGAP%*B@zZ!f7&2 z(bEE+Cak30wlcs@Qk&-3>1=#0HN~EhSmIn}8dX!@N^DLv0nxzKd24m(*ixNU9jZV_`bDNxaq$UeB|6}#aL zOJC9aLwk9q-c2M)*sQf$6}nTQ99CH+Qk-*QaPnv)DX0;|*WK9})DQh%_h`)+5xdv^y(C)NW;Y)-XJ=Zccg(a%--Y-Anl# z4Zdfg=bkd~)~To1Y7*iLi6BLIUdu6BSnw()8<}a0TlB!Q2oN`5M z)$Uam_0;)`;vAiaBb)8phILW3YHw|+AGJ_t(9?2BH;CbS6kswIs+To|3FsPFb>2h_93?A6 z+9si>s@f$V4=6=*?V7va8*ukonnU4V7qeOcgBOp|>$0VJlPx9q+Gn#1{oL|%A?YiN zz>N8Pu~N@5#uTT#{w7hIhfq0u$)_t!fdPNM=$EHQT(8z;s~!E)ptXs= zX;Kl9=)3d?aer?Q^uE+x8efoEi8v`Xl1S_ibY<~8@?}}5?Q=JD;*z^+Vo1bVskJS* zI4i=Q|8V3TtsKbYl5O*Zs&vI^(XE&jQisNJIZfXWPU#St?`WsVmKw9rp{J*nDHHt# zF@yBW93|#zITbCd?kKgSz8&AV{xRL|>_Vl9oNzx`6`WqdI_zjg)>PUJ>O;Z1F!xOd zGb1lMNyBf}4z3PNTBE9R_{EmO$wZ3u$RS)wD}KOFj*!`GSwtq1Gj$XD=A#nJB`+;f zrQ^Lk+{oZ|9}`mu-}P#eQM! z!(UW`w6v{HJr}|d_ zg^_!ox4`X}m$c+1x#p-(7O$7hhJC?@)mgOUzS1lVqbFtDM{XI=zExq}#*9t<)>dC6 zXidHvp$Z+9_4hLn#qm0>eqJ`}nk`5ovHNV(_|Wc^^t0>F9bld(#Jwuwwc_Ts)qc;5 zldT^@?5EGJ7{A$Q&8RmAp0^zM0{}K969Q4k3RJ_ak(&TlMz zR;F=jPzzm6@3<|WTZ=AT>-gCkx`I?CG%)Tl7ZQolOY&LC{_wj&NdiXmTJ7+HU|QR_ zMwi_+VBgeW`sr^3Sc=GHe3=4aau}dGypr$1wBq(ASJPk2q0>0AfZ$}cbs1M7!a zQ)}%|nb{M$ZbBUfz39cf{_d45yv6y*Yzgjmh8=I$30My^5LE}JuvH*cT4rXn>1qZq z*1vv9-g&`}-<*hhRy1x^TSxSjwL$pzgprJ%%bC$-Uy?M#o4F|vZyig~ak*kgl=SfbVQ+F!6b^O<=8rDgP6POBQUl$G&Iyb|caV;7V593`&vTFA)BcX%B zEJMf%7o&MG*$%=!b7StD3#lrll)NkvZc)nM2GT?JlEjEKaU6dr5<_T@>4AjuyJ*TDLzF3=IcyX81KK+0B6@W$yda`9(d`_ zf8gDl)5P0_fqy^OJjC`23${$vyz1 zxhr1jOGzkK!z&kGpgMS+(^9!tX2Y7KGPBKWO)|pq2B-MMYdPDnIFj|R(dNsM z4tQ}O^}ZD`Sb9THv)}S%xGF5&j+61jXjANuA;yuxAilAwAfQ#)wV#FAKQ^K%D3i&S zhy3nuM3}a_?0mC>p`FD^hk(Z})kR`?rUG7kfq|%C-c6|@C>~>7CW83zDbAC%@e1u0 zsShE#H0+js3mv97K-}c0^f{CU=$*V5V2m=vo7jBY#ZQ}EZfh2Y>fyt-AFY_{2{S7r^RVE*G&T><6JulCp zm9$U2fM$G}1%La})j0+0Fk&EH8E@+Z^<1e0$XA#Wj~1yqQHm|O1OBc~frG04N6@Qd z?^6jxTa9oqHa6?+%ScE`|KmTN;OaMp1bf0Mu#o-?KzPFx^6wETQ^0SM#$^UQ?Eaw% z@^jgYPKy_3%aV?AkGP4#^Ppb)f)8sVf1WY5e)u!m-Tuck&iK3U$a$GKGb=!U?kG(Q zW2(uO-|u`BO_3G!l(x?_i>YujOBQI{Rp}_%$t;n>5*0v)-4jt2zKGotu%@otzR20i ziZAjts;HDGDxL5`T2b|eY&e}9a-AdyNj>yoyyd3_8fE^AJCL)gb!kbl-rT>X(elmf zvEw*dq%G9T*ZGiTPdl^Mx*h>zsJ5-eux`(t56;pxzKCSHWXVzIT`uy}YATC0Rcv!Q z^1yRggF9d2R6Af+bo;MF8bDD?E5nk6Y~S6w8KCa-=luU8xQ~53qdA+0&dT^zt4Y5o z_p3GeVANICRh3=Y;;iIRXx++btys23qNXkQYQyC*)^Xrcl1>-Mw9;CimIO*=)D!bo ze6eK{b-e(;2mBn z@Ka@ye*{cl{CD*Os%B+KAYOKbl*IVQ1=U&oa&(CsG2_nz(+)t0X3kdUXn-qH! zvtOR-YeAU6dX1RdxW+qdcTFh(94H$k|uhR#+(sB#g{}f)&fc=5MytS|8 z3r3-X1;5mClLWG|SKQ)YMKWUc+D~50Q*SqhFUgdI{CCqMzZRA=0H5+hgc@0S?# z#G8$+LaVVgTk+rqlXG*SrNAAazj2pX$!fGVKTw?U3f%JGND*`{26n!!t5SFcRzY7z zdMbu91;zqPmehCY8k^MR&U-glJSN@Z=6tK!mp@y-fWM1<;o|Ib$QMg^pzLvH+U z8cXNj@HHJq_*L*{y@qHLX@M()_?{1hsgo1W_6=m1X@6j6?Nn^q$3n%bq${B`NgMat zHNYQ0XLY#AQ+U>l`L(I*(k2UCycx87j3MfG^4q@%!vy3&NZE&!#{ifafVrrC|+u*35qx;K2-BZ=# z#uoe;4cqNzB|`9i_iE-`00+3)dj)uU_t%(lCfp~G$(}>Igmn_GV(pks+84Ozj&zM4 zC812XU*YLgBU0uBK}>zrR*QUTs58ltvJzs6_!1mh^$JL*HzVH>U#Ed)I+$zLrqim9 zmiOBec08e=2F)OyqX{E7bi#yv$rH*KB>BagV^`x|`B08rK>4Xvm(<5Hm8(SzR^i#5 zJlN>ouKQkL_#ehP!Y7jL#KwucW`sqXE41@MCaj{9784ZGZi8e63@oW6aLlx8ip2&1 zOT{RCMbJGeJ;7(yR=wvsX&XCfNSiw_L{p1S2wR1e|bI2xW=*UO=mP&=uiRMAl@hl8X*6mH-~9H zkOe0(g%czJ*7ngB9lf#WcH(}?$bG%AlNQzWRnUK+wK7fS{J_NnnI`G+I~`ZIapHYF z-G6h=r`~a3_gG%1tLu~3wAXQL=M$^LD#GrS@w%(D59LK^)uJo$^Icy5)rOathAzCZ zjL0gFo`r;!wKtgf2D4wT(J!xRly3eKCC*e?0-rOvE(8#1N!nbsW1$%Qj+m-l+6OtI z+HV@|kRW$Vm&~2nv+`OUuIIn7Gq)Qe$7&Pgg2(EmZ zPfzjEkhqCOC;DVBA{FU6W%t-5XR2@<8;T^inICFE3$CP=hU_oD@K*a};N<}1Ak~la z-;iz!X%A)Os-ABxyyn*2YLwvRw#AsYfO(GA4)!a6Z;3tSD~9|I`vaMqrVpQ^H_evb z(LJ_FT1=oK+>w&TKd*s=e+gFDV3-cf5~=>+kb>i#om`4Jn*2qX?4)V3`g5Kmf7YC| zfC{*me8!*=nl>@*UX3(DwaDM4H$F6wa{;I6DBl@fL1GZZ^KzBZuxE(Nr@1Y@HM9_(1D17=SmIaXy~FUskS`PzzXtFQB` zx21@;-ya3)Vv*D9eRqO$;>(&>)$_L*My;Q=qQCo^d(6OW9xJ+V<>TV)3&4ultrTfwzb%`5hA3naj?QsJ6v#a6{9cs0D|LTl_TEV|}IQi+eO@7U(q4@2!( zZC^%hx6WP70#J^>|L>hBqlm%G2W7IsgA|*lc%@ddgSTElCp+v%LjK{T`(2g~{(m7= ztnqqTsCQ;^%YP9AIh(R|b5$F+qN>@XhB|dw4)TZ&HQqmfc^^gk2DOH-Vr{gJ;j_%I z-wWOTjtxZj?9F$ebhk^2cQa%4lH)qGsf{u0kzkt=G9F??#)PQbb}kXKip~c#|Dd>3 zwOw%3V#$#i8L#xno=G!GYF$4qQk;ZUlk!!ZNix`l&Y&fdl%o(UV8|7o8dmt3z7OL;Gq|AXeS`8@D>G1fkEGgZ`d;8`@u?<$_ z_z_lH1NwbsTB>b0J>TSZH%jEYn{H&1=h3@uF}Ma+6RNbOBpFc&Q=50CHMB{H+5HaM z0F-}aqnrU7ZZ0(9XWAz0(osjDx(e>g%LYc?JcC1@+kRC<-aulQym ztv+h0I^lO2>YO{v`E&{O)BNpepIF3JyZs8edN)*j8C2g<*=n&V@^B>Xi8PB>H6Xm} z?NvLRWkFE5{f&L}$7YyB=BFpjHA@2zgvaTVBu-J-aa!4C&8?#) zd!%>cb$WbX*=MR}jaxrW3@zWod0C#yUO=ULH42>mIU4yCFW5}r0995FOsVnQqVMs) z?e6u4pDC0qyU^lCUV$9gU8Ew(s>NOoAv!QU{sq63@)*j$+GK<3dt;a=l zqxF3L9-l#2@qMO6$w)mA8ZV(4(PnqwX0Ujd3AkbIz>sS~n9!z@`waNn1AHcS6pkQS#@ zq-j%*^0P{_-+5>}l@=)9y{mxNmA{VVUpMgLzS8R)N`Ussb8eA&qoy(BOj2WNHss9P z8#akqo|QrLV969(CwimyMj$PKzvH4)`XRuQs_s&5f=0~ei%<%B>>aG`M9Ar=P@nzx z;;FKH_uU&jgXg@8>i};9VZzvZPvJJRR!ds}lnXUVHf zpQl|sGBG}}p2ts=6w+-fEtkxe?>~=h@8M3mm0d_FiOD!wF*n89_g7yDSaCTMac_3b zx1puJPH5|RTg#;Fyw3!BIel8O2(rh9dq&aBbFcwW!!bmhD|4ZOCtge*Z z6KOBBmyN(9EAX<7u`)hqplFim((TCM9j!U4c1;~wG1i=9@Jr0ctbl}?4f1S%IRj7i zBf%?u2X^YMOF-&p0Ya->#B!&Ngm1RHxsq@BKh$;AW}Q!E0t#;jy%y5eSkc?rTSfqk zl~RFdpIoWRV0Mpeohre-tA+258EfIlRg=MFe|L0i&*fqx5f|BEe37f6URAXFzbAk6 zzM34?a}~NYO}=L zU?HosMTLHfmQhF}<}Mkp6+ixa+Bg3Zm=TtnFuY*>+$-jOcVbS!{&{?F7ZFah2q;k- z?Z)ukb=QT&Do?sab_F-H*kZmVz8=wsXg?Kf_;aNi#_RH7Aq#{TI83?ZHn|*XN(kck zrow0^;;IOFqCqi7iEZ+yS;5Cg^1*PweIWb4~h` zv?Pwm#$0UorHAnx2Ur}_q}tW+YVrBRtle{$hA@l77#~LH7(9mkX}e+}&SGY(*;@GG zXQ`E|ivZ~^LEM@3mu()15~N&_tN}s@M`Tl5*35er-c4!ku}`#^b-B!UmZ9MhXaB?& zt9USi4g62nJ6~z0J_sJh1IYOYGywiI$#%Th==`f#7Z+bVjyEr+jsWmqfCdcs^R04V zyBrvM@mbNA-?}lUDref5(1b!G0^-cmVE6tg{8 zQSusPbZ1cD=}=Uk`XI*t3-sycLAk{NO|qV<4wC%|Hq&J0ZVDIx&g&EDv)R6YvSH|8 zNDA_=CrV{C&%htI`^lW3D6a`$0X(dEa}v$%(pvtQ<;VHP!i*IO zj?p)FO}TM2=)%v_RUW{2->^s*gv*dL<`Qr;H z6}AW8>OMH6a=funcIvCFrm5c!X263uPh6#f?2L-mcHix6Yx6C$L%efdVnFR3Ezuv_ zf*J|z;#Ax#hMYIWhu2oDEJSsl|Ag*l`DWF^13N@4bI4i@TmK@f^4_k$nbo^Ie0+Lf z9m1Mkqa(idRdNROWgE)Xs%P~uxS34>_77(JsfgDDieJ|93)8N^JxT|7t_YdE$<^3$ zQr56U7uB=i=XvIPdoG-swl<)WXg+Y!O?Uigef4V8${tSr#vT%3bV(B6#WlXw$#D3I z;4o?j%y^@1jF%?&`w2&jZMWCVC5(`xOYHvW(UU51)@W;N;O|29yF<`>|0I{D*Ma#o z&2eVY-g<#1%e=vHT3(%sx21O+*khM4&wXOyhjw!e)WI&Zbl3iKtE+Ls`eR^41UnV5 zDR%QwyE;#B4D@pZp`@1_9upyYH|9I$X!rfkXH&)&+ zLkZ=(WyLP%MAiuNs&oXL>Uh@q>V~;T?JmOtL=f@I8vBO$lW|zPBGMn&7*aFhdT<2p zCi>(`zy^!;dZ{6CB5A_&8>_1H9;FkEVVcG|4q6mN^^8j4@+g=?V?t72D+#=nyKJp8#7 z*(AN?w?LK~_~(BFb*f=Y`;%r8ao1~BJllrawp{U0dH(V=*}~&yckV5Cx&kN810UO$ zZHo>fG2`s-eze>z-$a@`Qf<~}_0VfQ+SG2aVxz5}s-HWkZg_Zn0Q79P1?|Mq`Q7|<}{f5lN3JDVb+Q@ z#BCyuF)u=#Ou4_P3K5W`4j1ynrB4!<8yd>g8m)LI$HLX{SzkNhuuIaJt{6{P>MDRx zen+d2)Dy0-2D_x_whDpVZ*U=A0{t+WJA*V~wR!~#A!5NHg|=SRm6P=;QVlQ_Dchyl zRc!2y7D#(@kn-R4mpmKci_hN@RGZUuV{FNTo*>%|5mhcjGOP>H4T4NdvQB(2zqBM% z<#92>wI8Y02Tt$+83&}UAaFd}0ul>(S`D@jvR!Jp!2A`fRb^_2yjYFF#A&&;Dh@y* z(JPg7mOMG{+w~tXu10=Z{{vu?;iJ-3+lx9?xWPV0qtwBY)&a=2KJmspw};U#KLxpe z;wHb}&avKV1=M5AF1*9d&<$&%Xx72Z06S2ZU0Y+zgNcUbC&b-EagS&mS`118!;Js7 zykCSU;uz6vkvpI`d8WBam=nMK?>4nK$M=e_CS|Vu0JBDG@>mN|GJ$23h}B;eiRH=K zwBdg~HjpY0d(=t5wAk>>h1yvVofXK(3T>A?4|6OUxc!;q)iFEdn9IwOxWGQz^|BqW zjeK-(8Z5f08Ba_iOB6P>-QYj=Zey}}IaU7NH6Zxs&sxhVD}?+9xh1Fi6l}l^2=rrs zsVXI6UMTgR8;9YFr2AhM^1i4W{eCOT;wd@eN^I8TNwkq~Rx7{nZ}wHLtPI1w(RiV@ zOufq@Zuql>b73N!{vSEvO1zWyE=77a>^w<~4yhbt9RUr-$9#p!K_rOO(Bj-b#SOE< zYq|ojq(O+t$dhFOnaxrtfO`;Nm`B7FPX9w&uzu5Q#FF@@Pow06!>`GvlY~$6Sc#7u zI>Mk%MPV&D?m}}lbN?N^=6<%Kay{@N;E=2@kre$$V3&ckJIe!?Q^S6eHk^ zHtm#>8BYdF?zJ$o_z=+^DKMhhBVmr&GBbTLkG2L3EkWHpdWHD$g}&Zg=7;H*_51in z8S~I}d{_fM$G8kuTnJek4EHSWj?8QdJU`#V_dI}o9_Y;8bxJQ*Z5k)za`WZKC10XG zcHc{oozNCp3{h4S|qDjE-spH5*?Ky`XZO7Eq6E}cV<|+kX zA@CV!=pB|ABl>ZsDBJm*QMbEEEnkJX-$5pLd8y4R$_PS_w}biJ#}oRzH1{o%b^Obv zVH~eiylq2ttabr!^#Xg;+fo#akgke^fg&I)#8AjO(jBKYd+xs{#1))+{xgZ7dC7o~ zo77dRI_RPVdx@srl>BjYu1Gb4$Q0E1_)5dD@(wbko^d`Ti` zhb;vy=}3R`mD22HUBdm&UgCty+bn6-ilb~eLXr2<4ak+as`*VFb)^-C=DHrs=>x05 zvOkpQ0F+js_bF7INraw6&u)^fY;pLwj2n`jt}9YJ+Qh~Y!!#VnP+ocv*fj}@t3(X! z>!JdYD8)KF)!-3P-!VCF?`_TAolx{x=hNYy*vk+O#j`2;bMDP~ zNf%A!g_yMnppmjrt)U<5oXr);GJ}fY9H@%7T|)_zhtm-}tlevK`8Mzjl}LnNeE>vB zO3nHDZKY)AR6p!yphu3xMdWH7D3{yRlx0Jgd?+0L717)M717)NRwfkhQqe$36LG|+ zED4>jFb7HO>$cRs3te=&e931F4$t`k6>l(vD->?yhGrnd_>Y$rEgp|yk2rj&Nws@O zFA7e08?-Fn3`bbu&BYt>-SEYF3-n!d1$OAotWXYe%|F5^szHtAKK7F@%0olX!Odc% zOs}$t#7iL&>x(J4;6^LP*mo(=!@AP#lN2R1ZC)8YfQ~=b{pWaSp?~)z939=0L!rt3 z0K~0x+ukc{?8MN`@ucLK#Vrd!r;zP{dU9=kP*MetS9o@}w#I}}45^Y+D*R_fnP%?G zYh)sHVW!HtNlFw5!&FD!sDdV$p|tP{2UD#%NYu*eikZWQ)9pmi6IbtD+6In;+2A3M z2?b`X!sVty71HJDKRQ3B^1mEisgjFqs}l`;xZaT^~>gY#nc{?c6%(t~mhbaY#S+a_` z1PkRo_!8ptDkGIy$e~hEFpCDlI4)i8-m&pX3KL4t526%^Kc2TC-&QtW_p!8<6uSN$D&6zRPvxVVSZ4`DuC_4QrE^R0%;8LB=TC ze#Nn8UCK)h2)zEqr-p*oE9wU_-i<6Rd~a8js3^v1qZ>>w>XP5zLV(<-wC^9r8L&{} z_T$hx2l|^7G`x&$-Ujl$z=0nf1Mh>ph$Xm zKX6=mAl7Hoh0qZ|Y{O((RGeYn8xz|^CBi7Ms?C44-tFfT@{QhfCXfs#+c=f#K0V;Y zRcll0-Y%?k7{!ltm{XU`t@-2HSu&K?NsS4B_j}E@`{X&c9;G9$Y;tsMzNy=^c}r5q zc3I9{t=@PCPP4tl_F-^)rq7Q$?DM~(#!B{N(vk^6-`aeAw+SWqvo5xf*nxwO!Iz%i zW~$9FCfPO5u8F5hT7M+R4*B8sF?Lz_4z;PH+XI@)zbC!btiHD|5rtbYnq|50!9dog znIkqeP5>~fMI?CSn@#*+hZTbNhfUXrFYM&W;%wQE)~@~ z=|DbjTiR+OU6#L+iE%=C;MZpj?3@dgPSI^Kb9# zEJY9a84ffA(#}?H-grOD_`*Cdm1P~bcH{U#Kqz}8x%MweXP}D$W&yxo#<_8y>Sm9> zA#MzO62-SjSeHe5N#jJ~e!$q|@#Vd~V^Y(9^`@XI@d)Pv&rag!y|iC=2{3St`L)x= zLG#IDWw;n*S#i+Ek_qDhWG4|T6ZD*-g>{_SrgO$p*h}?111KWmmr||hRI5SZJxp>W zLDfUF_%V#bhf-@>Uhdtp&Gk6opwMM=W}6g*8tj1)%5y}llcMsGCQi-?$F;7->gF*g z6mn-gor@6sRs3f=aR35B=D0MNS+tG~k)kuRPtfvU0gW9we-A#MuNEv0^*>j9E)HeF zN0Ha$Fuc*89hwI1HDMS3mQ}sD>)skXrO9&Dq5X@x<4hZ9g8P;R6r1gTJUMptcH&|N zG!j`G(z|&`;4jj0Hf|-T42ei!J}R~>516N7d(!)gC3I*_9FFzqz2llY*V5O;kl|b{ z_970@nxQtQ6bV26y+~%xYM8xb<=gKoLtyPXfSv33T1j6+p~K1%TgkQ2!o^))@t!3I ztZ6nkiXnkyEY0NI5k1lNgQod>_iyP2DO>T97~u;6xOh=-Lt=IRwk-J47E)p0+)K< z)Vq%g;v5tofM%3uaGDom{`+m|HfzPwiI+BVw?VyGfZuc4cK$h6))?Xb>$&+NWVAd* zKj5j!>$i!O&Yyj$6DR_KVCy1>*1-4*(6U9^L4|+hhB5AMPu8ZZ+(p&1_Tj81`wrYQ z>Ur2Z-sFxw<4aSi!>YSC|axbZub*WDWxBy6hj+C{Hy^779$TpJ5T2ZNQ_ zUHr6bf_iUQ>^KJ_c!xlh3Q~T-%q5pBl{CJOaNem zX&HX4jJ`Z1<4Hs;XPUw9joVY~E}CoAFc8b?kc=^%Sv^Kwv|6^5?%|U);@Oi)f?GM; z&y8X=&mVLVX3NmbE~{zR)!VcF_tz+ig6(Hh^!d=W#=L5d8F79a!Vui%VbiGP&L-D| z^+C9h^^lhZl$x&WbqVOWaVwauHoY-xW{-6`nDMD)TdmLe)AjX`b3r{0t{Nq%qLwfC zlI(=L??;0VFQ)p~2#=OQ*Evb{)uN8=>^-Vdo8HBwB-mp+b1{(Kq8W#G(v9#pGf;)6 zj?o_Z*i7}X9r5_l96(}M0OMYg%)-#p<$>4DOPs+RSQ#AyQ<_Xg;(xK5hPM%&!Z;@Mqr=17+Bw2xH#tDyJK-IHACG*j19ijjEbDz`4E(33 zrsFL@{}0T*d1icgUXUdbw-TaeJxthATh3Ro?ZT>|2{$rv69-2Nt*`Kxyqe8pWbo^fVzp+x-`M; zc!eqp)_%iL5(_yP4+*ROsjh|L5nJAY1+jW;eH#<-C3CB$}`srkB!4okCVd)x_Q4bk-%5okk5 zXs0-cM7JaSUF^4S=QX2sri->m(t0EbpsRR|88gugT?h4bdk;+VMLhm855j5O{w~JQ z$12cbCo} zN8vnoZn)leNZ;cQN5UDFP!u=6#R-luh{6{X!_6bS^884tVycpu@`8)_pm2vSYwoq7 zq3fW2VN#QQnZ|NYC!?in6mr41E@SDnt?}msV!6J-xhFc}muaD$6xeaF;~cDmCnU4QahuBNBuU6o;M3seXl)llhQ26wYg$^_nKz0yS+;~p}6-* ztC&FU*~2PvSz#- z^GWmPbb!S7K4OKD>|r>LyfM2mgYS<8GBxxRHB{IP>=G zwQT?T)3Y1)@Ic079n4WYThT_*(-CJxPbP~f=k*1CdR$k;)M{*D9j8*EdLZWW&=dYqy26sG zwhaUMfz#h4QzoMi-vlTLlyk2z5RN7%C#ui4XB;>?V(Hapj*FWx7FikZw_FEplc*|9 zNIdm(3jF~!#@N6U*{?@uP7;%6*eGHr#5ydMCiz){;?KCD`7~H;_6Ts*;TzVzkDXeM zvuo+U8)i%wf~!t#u{aL6b${WRB&iw$K4!nC+6^bfqE35d`Y{%utf1cR(e;(uWbkBk z68T#Dg3%M*@{%%md|cXr9Ox3s8Xn;UrnISWX!YuVwPT!CIT`Pt>s3lWsKWRAputSl zRmh--*46N^YA?<3+Rm0H<3=f#9Ul-}>ASY0iJ+utulid&C!@FB10hWDbtx>Rs;K>> zVd$|axzRg6TPYkf&gsY!Pr~q*rIM}QFZHI=GRG{$6<;O59pRwi1jGoBA6Lpr2-`|CdS+<+^ zvdCdWZ(jq>WsFKtI(_V{V15jFV&Pa`V`t*PrxJag=fmm+2gE3K-EL?gCVl|Qf`xXo zv7isvBcJ^SHtL9)I6a@JZ#n5B{d7p+ra`U?6aF z*0(@ANlMG4s9MTNBJj1*+5Wei-!?B_mR0~gw(x4iz~>mcW#4v97aP*(pP?LstFe8O zv&mLs4yFy>rgq~V?RpGPox&`J{BmF;mRgOT(`qN7=!3QAaVF2Bq$H_%k4$04(~ z2(`nI7@`6+sKa%Y)hX()uly5;Qf6j*jZaWA?!xTje*9c|uUo;Uws>GN*RF(IRd&vXj!+~P`HHkl z>D_xvyt^>pq0`UQU4t&J->y~XK6y<1os@f*fj!i9HqV#GXSy^W-yn|w)h$@eKbvu? zI%h1vFAg4iC$R)CEOj84dllGg>ZXEfj*qHc3Ml)(WIjlLCGkBFGlHwg>10&_s5;Z- zr>4oz;FGZj6F%0+t4)km?4e+x%IRS%4YPsB2H>A+-^6FQ_MhtAg=(;TSrKfnLDNar zePujYnQH5Vh^q>8HTUjnS{0h2ig5o2KE%XdEX|24h6O!UV8H_VB$nj!SC~beqaKFL zQnz`K7qY>wj;pZ8W*$y?(QOfjM~9=Z{&K)vL#x%DgFM8 z?XZ%fMPp!^qiaGXM{zWB&L=|OLB9nP#IlplM=WR|R(`wEU58uG>@wj+kD`)AV&AHE z00pP`OjPt2yY(pXD%n12tdC|(voVY$f(;X)XB+%lRY#*AzmK%=c!%MsDgtTn+X~y4 zO~_4$t#hmHE~(ue5m)ieS#Cp=3`;;GEFW~2;AMN$jz`8LVrg|RR^$#gS+1Y#3pZ4$ z>@4eI=+Xq!LtY&|Di`G{8<9&~rYVqop=Q7}A~?E6kAZC^2!5-@2I z4=3>e@+DTTK~=3rdeebSp>&oc0ry`v+(RsEj&=u2%IeXuFs;qHOB?3QbIM-z_G+FO^_h-9go2t zV3WsdIjWDUo;Nprw|yA#>%oKM0egP)!*2MJ{)ZdQ3m0@ObnrObG(I$KXv`YPZ}xj@ zh6*>XFdr;w&Hdo-IWz-jzqw8aan+v&(Dx*zB}%-Nc5Cr)s-D%(Il$-&Ql_o6==L^iTSb6#d5$Y*OgX z_>EQie$$M-R_?IF1Hs8Zc7mtw6qfu$>mM<8lj%O6uLJt0S5jkhd>mNDX{npw9?VTd|9ynkFRSzcBqIid>V+VlS~~ zX(bHq>^JX1%`5F-!N)hU>~XZJdXbL}7m6*kLMgnSp39?L)daE_ZU0Ii8PrnzeDUZrlx-SGCuL$rQO_$ z3o@@@JcwI@@#Iy=iS~7o$#FQ9_ee&5bJobGYf=M9<83KlFYdR<2X%|=T}RI6wq)u6 z1J#f{loC3Oy8Bk|pEEXn@oh?WmkA(JZpt!QLP;!KrYV_h`hVVVo82(1GMed2n_4w} zFO(ZwEEUR?NUV~~xZ2iad2Rq~)e1@e3ZFg`eB5Tb!ZPa9wDvdGFW$;;wF6Bb-c`?S z!K-(&+sa^XF<$OY4j_Wg0*siZbu2z?^Ol+JzD+-q7Hd594&k=fjj7qozzBMLXpc5% z`pV16y)yIi)ctVzq38Wt{3&qz`ACPx)I?A^Z=*mbK=GA#clB7Wa1fFtv%tekl!P@j z#96o5ef92_esO+fI(6cK(URWev|57pNb;XewiNk(8L!ASB+@RFM6)*A(3X{Ew>qGr zJnN9A`pdTaYH^!QNjI0oN6CxS)wcBS_@J-n#j!s@j2K^=Hu<_$mHC$pBhmiV_w_b_ zdD|OOZ+Gop6#&UI?(c3nIxZ*tOzVa>DiE<=bz%>;dAI>r*5}BHM!DDRhKr%kZ|8nV z&d9BEw;Ae4FUS47EQGbp>?(=*%%A$oX(XmTqR1QGSm5E*|5dc*MDq#Ndh&LGq9jb1 zJ8G&Q>rszwJ?Cu6w4%{2HL{SQ`D_yL{)w+VW@SNO88%_mp?P^d*PqBKMrmgtE3DjD zD-2e%o$_3#P%Y}_h+Q&y&V4N4_df!S7x1;WNq`OX>G>$@v;5+%O=^R3 zfq+-T6(YYiFM!O?hD0Tsa*=KS)LWcA=9DXOZyNn#i;~5Zilm<9c$`5C8{C~gcE?_- ze~8*IKDNoobF@e^ZSD*p(VUyPwA5HpDQ8STs}0M$>Ao)-^YRqbTSBx4pT2mQ@|c~l|sqN_HNjU5+?i*+iJyV4kF*VSmPj-nC8qU z=>C-Bdz{11bUlFb`Di}%;Z_SjE|~%%*vU|qJm|)s8IWl3M{Y`U?L+=$>MW-> z|Ll3Wce}3L_r7(``BZ0Mp>#Abw7YZhK`v=S%PC7^Jp6M5g%@1^(~phe3Wf_)@krNi zD9z-K_`9#l0+{Jx(zrIr05`h~R3OfKSf_cRFufptb(=@Yv0Mz1af{GLu@6@0bx6YE zi28O{?F8y2hZg1H+Um*0a*8{SJBRX9HumgqwQ6BNZs_A{w2$H9aYHXLVzpd_bznmi z-%*6U6y6!r8$bc%2(a{8Ar0ZKT6$f+b#UjtVR-&I5sxNwJZJJ8?*wqo~C)zk*{wNbOIs2}BkR`al^*Ld~wr8g%g+8!B7 ztnX{c0vTEA+57Sbv$8e{1SXV6nB zYxB}+s;9zd<-Xv1)TWJ58sgiK|F+}93;>H8qNWG4#Uv?|V}^7&4%j9K!^#ysEYGt4 zY`ayF68Um1`U*eGtVXxXp|m^FC_JQPS{S(~ z6Lm(P=kq+tqJXu=@0NeJQj0_-B!zpspV_T!#t0ClLInxw2nsu+z74eE8AxRPbP>}H zMz6wi2b|~!8SY9VUuQpkyRw|Yrp3S*xB}t=#d#@}oslMf!h@l`-`0R$w zruz*ijieK*&7TY~b05#N1%xjx&Fv2r#Za_K)9f+wPb+U@IJXk$(3?iJA$=F?Qx^h> z%8BxsR8R3eT>n{CxxmVl`Lm~GakWyDR5LR+Lng~w{d5P@_>?T$Oy6#-=LkuDP{ekq z>lhJaCqfUT3UZqX_#%cI&MKU=}H$)5|%LD5wFhFxVYiJu)&SSZi?%W9&wfw`tmu(JNNu8tY>7W zURCfVmY+9G3)|t8oKt(CN^s<1f`fIrU54MP6+_@lhd-o$_GoE=R|&#F0uMTDOO4(1 z{|1?UjsN7fB2a0SARZyCGATM5E-2o zyyQthsr05A2uBL8YxOVH(5v7*PR_lt{*m@|N;uK`9iyC^pZQQMSv*g2xp*$%h?&L= zTAmP|DbHWJJ}B0wGk_>aaU-o=z3Rf7=(YYbSg@ZSmq_ zqBmZxYV9s3sZm8kEgCn&y4b*4{Y^lIMbmFKzS^{%t&tMd=c2t|_WqtlZzA2Zv$Io+ ztgEn|23M-9@7&GhsNeDO&N>Tb)j2~AnJ!msF|t6Bcvkp*cdbH+Je+Wwi$&(|3AR4L zTTX=jhhu^S=F|5+vd$HP7P-buT#6*=k0!Y3oF?XbEB2X9MQwSoG)LMK3m<;^!11uxLoD2X2gpdt9q?I~fB%~Y zXZ|L|N@styHXh%u1)h`)p~xll8dE$!v2ql+k5Rnj7BXH5tpa4iQx9!>Y2>yTaC}Iv zj>U9CFrT`Z2~i~X13D^>C;=sqBl0Bjq9JLcxkRJQCCSI$Z6Ua=U9i!V=0HrX`R_2y z27$dioO=p2k$b+OkN@zYoNv&t3JK|f1~4N~X^|cJa7OZBbtDMCTg+alX;ujkSfdeN z0_pTZhaYMtIepW1KQ1eCqcE8ZuDt?I+l}+uyfpG=+asoc5RG+;)o2 zrRxxA5r9mlG`5riyWkr@)gzbysItf1yY!+vWP1RUK0I)8t8Cg*!h#_t<`&P^VOw{n8#T=IZsFU(Dx1ew(Ip_Tb9l= z0xSPMBqWk2ck>L&#&vCG?!T&_3ZNBGC*4qmfgTLb!9h{%s&X4TE9w(*hc288MQSl& zLIo8IvF_I5tW~J#6K6Pt%wQCGq}bXrE8rl~LR9EATRC=!OOET>&Jcauw>Oj#7B-oc z2rO|qO9_8(@I!}n0Xx{tCEsGD;3?v~A5~ek?{zxtd5%w5I=ffjecQ8nZAR_`o$)6` z7MFNQc#>^4ocoT`iT^5)^nxf5dX+Yf3@p^C4R37LOZ7XE9pzGBXbY?B?VHKh4I|BY z;zOKQ269?(wl7SJn47|zL9nwhgP}OsB({DGZz)cO*Om&TIUmH7raJPi*WeqWvA(=Qp7))#VjOoXvF)2NKiSa9cKrMEfKoFEFa&rA^PLwI| zr{vM9FEg?q*4o(8f=)rubE>F-ggV{hes?TO|0jgy5bT z=a`3s-Eh0&<^2-c9XZr5m#Nf%RIBHyX3cn?pK3G^=3+>+khIca3THlHg^v{LUvARM z7B;pCHc)wlYjeNG#TVVW+FL58ELYRHV6<}7>Z|;J$?QwCyy4_$bo|4a1t8(nxJnG!aK@A3Qluk+aw7 zfDu6(7l6C&H7RUr?0}%O=D0udMN#9r@+1W*@)NZ}#;VdtwN1G+?b-yn+L#m9%B9*M z`nJ#b>(ip!OW6s59kP~{2N`TBMa9|9{9OoFijVy9A+J%nd&bEe?5(jm?Y|C9Se82Y z1-HdgDy1(tHGP0LH{Z8kekOfivBJs1Sde_oU zyP%Qio&D~iq=QwYt8?*KkkfWclWg^^>ffOGTU{dIK~p^NwAP0MAr^J+W~m&sE06fr zi=UwWiT6qi=VCwWw{45Pg(Et6VLqjfr;d&doL+C`+~ah<_Q@R<)joj6B>c9fiNT30 zXDXRrY-z|+W1l>^->s`s$*7`sAS)~%Qx%$i+Ksk|azXVv{QUO%Lt?}Wg|CVSL3$Uy z!gVdFD};_Oa1tju%2T<(d%%=Moh%CbB2iJ39r4YldTVmUJqb?(%(TdyGI@iQ*5h~E z=$#^#gyNjs=-#s??7ckw9j->=oJ0J*iYhyN)%sH{75|7?D#2_rmoqgjm*~Fhq)8p} zAv9QIq(iPphb>nGms&X)$fFFq zgVL`xjEVDK8*Wwkj7!DVp8J=w$|HZJHD#K$b-}G448g0h8OxW5>P*IC$Pv%jZ*U;$ zYlAh-vn*Ayh$X>1ofL1nZ!&ADy^Kfg+{_E68iBR50hYP{_41^@+K`%8>agAyjk>TIf8@y(7|Jb>DxHiI2lLIo}t}EN?kmPqL~h@CWJpN zI%(_A!YPDHuv2EvEo>`%)9{;(;$c-FiJ?@AABit3vgvfe_X|1#rJ&Q&*|q%C8SK9z zM7FAk)AO{{a?o=J-PSQ$|3dCnPJ-pi6(lsbjyYU{x7Y++fzTb&bG&*tP+hmO(yF&+ zeHwuXG0`vdC3^^NNViy!5J$-l&c{?XB&k}{{Z2}x=iw|lN)bIY5Mw1#0r^dt!qWzM zm;2S0*pbcsWxmd(#5m<|^I~kwk}Tr0l47B|_yeR2J#9I)6)VOnL>nV>0u$r?InP9B zo-~h_FJ?MaO{~xUE&!|D8_z=liYsIIYh(Q$h+a+a-6k%7S~~;A9%_#-MviNwFQiEA zuJ$F#!fYkg3nVBCq#X+S9X#@CJL-}!_F{;YPBsa~7c0i;$fEjHbpYAzkjyHRnJ6oJ zo>Y~))|cHf{s!dq@l8HB%g6{M1XbtaJInY^gUG{WRKJAihrryS5gRM_pY`cRS;JoN z=!vA2te>jio_(v%DU>O12acgBw){W?IUMs`Qm_|L$h;bn%j>V7Eq1(&ACQW)OevS1 zQNDaALql{g!ju}Lw6JCP=d#wJP|x5rdgI^33vjO#FD?>-AAdMRqnzePd-!wPt5)DN zVUHf+A5m)4CA?s7&zqwJ?*NBx2ZIk?*GRlBtCJK}ZcS80omjBhi`3fU(k`NJlpv8s zntHKMxfkyD+f}r3Q4xL21p8tFIf5vX3bvg~3#G?#$9sRZo}@EV0kDCe=KvF{@UDnk zyY))}<)9pyXmxz#AP;?-gq<8DR6k5fD-l$7b%1)|VZzvkH3-Qhs{M}9v;X0e*^B>l z%kAll3!|n?$c8CBvCz`K{zDb~;)M}u@=JBr-_r(gx7I^#UEzM!6Qo$dZ{$Z z4#;_Lu~xnqgD-vFsZKf%1latvs~`3XVEB0u!*%k!jI%Z%tQ}f{K7tSTv!erGF;3Wr zW3tTdnOBjO`}6T0dfjTtiZA_{iE(X>F07L$Di)!JK|D0maE^qT2v7VX*B#gTX}q$0}uBW;)CRj_WblIXrTv_N55)3$2> z>XPi3-iq)seZIdE+SJ86x3ufbMM03%{e}2{I0?#d|F^z!HM3jIO~}270oOz8Q_}b8 zT0seY4ZXUq*UG#qN$z8-0s?&H=;$Hwb;mh9hvW0rQ4VU>f4T+Bt7su&p*_QT6lDR? zyAjax_aMe*;yev?E-wUSlUQ4D8t3A#DnTmOX1d}C*ZlwCd|x(c%RCA9;+dXOJj)rA zGT7mU_O`vc5sR<)qeP{OKGm5Ohzv_tKHYYk64QOfrd?p$Ua(uGqoQiNhpb+=P;~mf zRx8_TE{|LBL3DIFpvZ0&BY_If1v!})7ry*FB+8`pANz<&%YjKMS-CQgv6`q6Si`6u10rjRD(vDfnU~WZ9G|*R_~pT+uvG| zioa-3K5cLZ@hCQN)b|y-%&H{CzPpC;_O+yM|PRc62~JS1jp` zmB?dqO+4Rjt9)`dg@lq7tf_uRLWRrJj+7x&pECNFxVP>E-Bba@cr)RI=(fa6NnbB< zY_D2UYN$9`Y0Ov;4q12*c}Vni#g2f_fhqKY{h?0vfW2MK&i@2Yf&7a=k(D8~+V*pT zr;#&FxJ>X?lmM%yOFQSrsaL=?beK@*=i~bY%X^cjnYivEj7No?$cX4Ow;?)6B;=Ge z4KGTBt+QKfm6$-jPt70)g*5HckW4n42E^Grzi+$!CNCCG>}Q^jb{XqCVOE>Fln?*p zDZrg-TE<@G<+bDWej)nM4QA1*JvFVHsXiki*0C%di^Y^&!5Kj+{0@|4%D2>glFcO;#MuUb6?snB^6%CEd3g0pXfQIwe0DIkmkZ3 zCb#DRyiQ_jpSVt2m$MKXot0e4s|$kz``A`J&!&i{$}IEbjdqqVWZ0?dvxJJX!~0;+ z6HRhy?Qik`zjsx})mHyX6=ds>z%m$Un%ux-Q(AbNd!l*Omv4^wUX`wylrhm;Ec+*xy1JaD%o`uu+$X8AI~5VNIKUhg;qFmdrzEN zL}y8#<&Mvqarx1pCfTHfM2y10#*2T_*)jlJBk@@XMRO7?Qi-s1FU61lS=c3wlPC(2 zmf}yfo7l%%6VimejV4K!CtG+*Sl!Ir?=sGB1?HXHC9`H_WS{u^{=!FRsB0Rnh_gGgXQ`2j0e}?-zwux`b8{VM|y_fyEK;CywuLVfA8p3B?fO3N;XG8o{&Ag5GdIMZ}$7CW>8*9-;{^Ck&{ zVr(<@F-8kjx$G$(+QWI1&MP6C#!A<5>Kg4WNjSIh-WD}^rm2R9(K=RPsOJX%y0WZk zEC4_Jj=_xlM*al?VtqrcF%PdOKLY}Nt`7`VC^Z^O3q86>YT|gZ;jOV=<3XK)xJ>Dg zybeiJ_h9aG2ze_^LzHyq)eB)}C zhs`0jr*^o+?x6r3fMSMepC%MbJp%ATQy# z2@<|$iQW3XZ#z4?sR)gY{oB<+Y+7v>`@Vrt$&X(ftA`mV`uzG>z^|ziHdEX{XA?tI z%ym=;ayZakodz87DV))QV8*~s^qub@7CSW@y+2VlRyp4a*4e5|m_E_EZbnxj9;lX2 zF_vD8@x`d+H3FjSs+&5663QKacBhagVis@$+%dT=x_+GFqj8!`f4m1ma95{@OClo} zoeotqnn{_OzxG)4r_f(B1<&;log4i-NIcHrOi{d^>IkC|#p)}s{Y zzqW0Hq3`f|J;|aB0011q?Y$YTvIubbL1&)%T-jJo36{n1Ov2}(2-{nWtxsaaVg?cc zsm&xTdL^uQ$(J;zlAIR_*BI2o&D~iT7eJ`=O)w$tugVI5{a#jr^sr#od*vL-QTv!| zU6CT!ig{mAY@$@S2~&IfJy#54g9|IqT4j1K!;9GHTP?U$&=rjXChawS9ZR}$Dh zu<;W8?Dl>A(2%@ZWfH#xCuKq`z06EO@aHzoro-svH>0Ar3R-jBa=v_6DQ+Peg($sL zH8bF%x^d<=q=)Sg;+n-;($ZGd>WzGjH7ay1Csz6F%{Yyr$V8O%@61;v!OpU`vy)Vx z@@Q=S%Qa|c$B^w|Z4r%&D1kQalenCkOrnY6*MSdPuK!%+xKwEkj8>kg3M4dl5e4+p zV~CL(dRNTMc6@doIw<7}{gq#UAH&RiH;@7eqI(Ws3bYp7Fc+JOaq06mvv1Zb(cti7 zW$l{;v>`*dAROVm$YH_pu8L$tey{ zE;gDl3ilemxXA9XGj~R!p)QJ?*H}oceKSFCkQA5{E;`(4sicNd&#N@w^$CMqs}D>^ zvKa5mPha+v#azqQ~c6#b9;4d3OiXt&OO?FZBj#HBWdy&Z!YNlwdM0bIBi} z-A^z9$ZJ*Vp@5gX4dTXfE3!p;w=M$D_Hi8y#-H&Vyc zu(PN82EaJfk8Ksn$qs0p0(s-8qRY2uxHzsOkiU?}xBf$>`*fVD5IfD*;IUEP z#-#D2M72dx3GCWwl{BjC{YlY8t)3@a0q`3->Hd|i?#l)s<1B3M^h$|{K=6YOzvI8v zMx@xeD1;MLa_oh|haDf~+Y-9`SUf>ky)I1MS0nuzQ01{$LD;8s^+BzWfwy+I8(9Iw zqOs>Kpc3Faujo}bC3liR1VeVKXzx|^^j5$LEvf(}m>YY^OM+ez4ly)$w!`brrNfQe zOB$v<(kmB^hnH!)jxvk;g3$ADDcauBquQdl>Vm?KqH6p6`w#Dj&UMj$auALF>KG+d z(Pq^4lB2_3qW<^g7j-q_AtZWBalqXMwn?h#G{MU`L1XoPF_K2N-*0Q3DcdGI6IFgb z^Yi08Nr?1TE3-z*aI>7l;g6(5Yx??mk)lAEH$*L0?6}=_7Z>Tvv+5NJ75zsBP(RvR zez+->swEtB>(;^^8EpA)ME!L7tJ0~T9|#Jh14nNTtmx#zR5|v(Mrd(jjV-+#9Z!}Y z{TKHK^-cCDRT^9G5J0Pq8fr?c|V6-2+hs%Zx zMhds)H<`8^ozjfX#!aD)&YjaX0Z~kBOmw-@$m#^IVuM587f`~IC;(}o^yndf#_jY# zY7X_1C-saVsBBHFqn>A;A)?On!v#!kZTp4^C^`$Dsax@q3AAJ$8qTVPS_ z%n5=AKoX>NaAS;I#`Wqq&`A1#;djNEcMRkNl6D*>XPTWQ>ElPaL=v*E#EQD23cwkL z3eP?#3jY43Je)-~Y_QFZ`41kcG?fkr0J$3{Mt!8Y3lzaF%O{twI4BGb1Ee?WJdbs^ zrh`prYfuXD-<#VPfh^1a#$VxZ7PXPn2#X9eR-73tzz2kQx)^79@)zO*>-sV+jR+Qh z$~*V;R5N_u<49^6sRre~`u|&Nm1;gnXwF9HW!21EQKF~f=QzFC2oX#>Dk2#BJVdrt zSM8agCuINACNp3iB~rv%?3lV1i%k|N9HKRWwMgCLQCHsZz2^GV$0?A_moDFExViw( zu_et{9L&+2+qx{QW8;-6DMmVgVtr#MucO68F}X=BxYOsmu5xB-vuFuzmy_1CgL^j~ z+5<6Q!dyFx8EqJ+>aKe|GItx8D2qx8iU;*!JPU2HrTMt>O2pA^Qmnu4$idUcQ-TYS zk_)uJT1OdtTy>w_Hgi-O)LuAj_DWJ1v@QB7!A1mCVpJ4j+m690zb=NryDiwsyB|hO zHFfvM{M1nP#pk%Bt^<`EaZAB@lZNtlUgU_k)46OYwcq~SEKJX`3q#!A>GA2)1NPzr z#O|njy71HB9IM${{g15kRIhb?H3TX@ZQ+#Ep6DrwQ-&AkZ*OW{YF*nsH8vFi% z_jGe^v^WEVGM&hWxxU7h%Kx4}V{*Y)K6vEvpE4!(<;?GggQg>X*%S|{tcH{~j&)Aw zAXvTaak4IktDG&0Y?TVSaZ$MvzT^)vU9WsUBR$Gcpn**~0pqtb8>6qtHu{rX#>0Q% zJvDR1@=UQo&QjEoCi5`=64=xE4)LctRP(C}6KO;k{iBxqn`#jYhNIG={I#QjlJR{{ zW?bMa@U$u_ClirC0p2}vaI0;SV;}!I<%Q>y_51<1u^uUz5b6NgLPZ(<_@%#}e%32t#~h4aJ3m2p45T4}vcq(;6Arpaom0 zm0VcKu?!My*=Itl(muis&k%1fOG!vQe10=(ndPc)ZfT&I=%;Lu8!tr>uvKcx(8bbV z-4A3*kTDD!NWCUtbrFT3Z!0dE;R=JM%;5fk8VpvGG3j=vujshjOx9$%9yfr+Z_FjX zvZQx>3w7=9`Uq~BJr5>8#OjXbQV1Nq%OG?cZ%DLRk_Bke zG8Cq7`^%P=MSoXT$|?>4rd639oFD2mS8dmQ7}~~5`)ePcf_1!wU=?wf1%6HdY~T*8 zS4ULhrGj1ICRZq=?2@-X+hAB}>BJFG-=P08^rPr&F{Z!wSUL>JmE;$6{`fcKzwmSV zGIOAb+9vPnWod{5%e;q_w?7?N$mux-h-8nE@XRCrDD{fa;p8+=iO!tqxYSJCx&)$p z!Xsrvj0@XML--J_tKDlnPVmL}yp?6p>>(Hd6R`rlx2I>#Uc zFRlrCzITHY-4AzqvAWM8F=^PpL=F(<2%`P=vS&M~0i|3b7P|a0$(D)T9lnVRPE>zs z0Or+#Itc8)ZSSlNKi5v0XvPmZ56ThqaW)bTb+0&K9c0&QsI3vo2=(Mk{@IH=5*yYt ztdTpF^WW6BvQ}>UAFH~4Q`M6G?(=yOYI?=3$YW$!d-8Akm#g*h=waHEL2GpN=1>j%hRYksvOsyw_pjb# z^Hmk4$MK zOi?PsOf1Mjj8L0k8;v6`8+}2$CSNc?PtR~(5&QRHd827p>g!}=#BjE?`oeUC)l4C> zD?W1%q|(Bg_}V-8KT*JA%7q66F)0&3u#6?flO58z{WJvdD+1np&tmu>g&lRC{}Hs* zuA0srs;@xLf3m@-qImjL4C((_#*62Dl$aC7|4+IvWY7&Ol@Vkn!p1~6JvTN8dY&LM zh8lbo82FJ00Z96mok7XDq3{>|@j@51s&3_p;O19NQa5+NNunt17G~u{Lz`A?T=tpC zAilI%8;Gutp1?tMhL=(}v$#!|L?1YN@}Rzk6^CupksXGmM|>=@_l?aXO2d;4P3jiQf^NsMDQgWM z8gnCWgmefUtl$sk)%IlH+d1lZ77zIzDJ|j5F>ajG|Jimi31?hg*Lvh%Jc$2UlcG;% zZo?TgNxfiGk$2so?`TEx_7ls18)>TCiIq=RkJFetq#5M&gxSlcI2uz%ppChNU1b1a z75jPxzn_Xmr~3+X#ReHNr>Zx==sMK6elC$7m{lW{^N;V5Eg-AmcZzv002OrTt(#`o z)*S~x4F$nY=(U=oP9P4Glb6IhQQy;hS5riW8#!$0`uq$$qE&|dX%-rYNf3|Zi$bU4l*b)%Z9y;KhBnf2rHFcBgyobpO$Ra1+nI+j^P+Og+3oQ{P=*=a*I&D(zx@KD2WI zMABORJ~DB7IXPF@YE@xfK-;1u;2(m)LkA#nugzx8d})!qy#dQYcm0EGI|I`I2q5}H zx`q0e+^Kq}F7DN7IGBqUqO|FPo4iMsYqu1;u572tSLW3!ZqW;N`7+TKWv)sO#2|M|0 zp~<>7-}!~xf`J_EotvmeMtM#o4 zw2amCZx#?`5^j+1b3jpFg&DzJlxJ+iB;77Oy~<96S_l8%#A$KsFSr484_uwwpTdw-=^wZRIBLV0;pNaIWjK+lTs8);($4Syz6H4ZQJGBJ<-WSpJg^Hs_IMY|Bz=o zi&}8Jn|?ok?oWrzWL25+3a+&A0FQB|EQ%oLfoTDd_~BQ_|5K#3kkB~!<}DD&Db$>3 z*jFFZOYUXP5Y#hVlLuhI_kpy5(y_xNa6 zU+OwW-a06o;eq|t2OhaI70{Z+C^uUNUt6bFZ9mfN_W@*MtCkle*x2(%-(2`6DQG2S zad4>Kx_FhXRc}QyuJP4>y;l;tk^yUzLX${jR<-XaT#{u-(yChfgaenJ6GdGEK|Qj)G?M(-QvO2A!Dnc(tdVBzA~*V4cqP89 zQs35fJ;qqZ)h*Fvn1RdEvbDCE9Vg>LJdVB}wccRB*ls%hO6q_tM7-w*>(gN8U@7Ip z0`2nau5c2jlhOE)f`cU>apbBxZA-L#OYHZ++aX;^^tQLIegJR3A-C42`Ah>t*-Aqr zqLd%0ubn77Q|aS{&9GdJ+G|h$AMR8o%uW>>2cBtZI-caiP9kxy-P!pjNNHGuL3zlM z$PW9q(-2#~YPOWli6aJR(Vqs7RzMBI6TePS0^_TV9hvtR%tg$#s+|dg%+V{*kkbyO zD!Vqv63dUP(~})@Qj=pLSzAF@knSRMXVv4d3x;RjmzO%`Z6oTlt^;x9zh6Sdb@o#4 zpZ@wth+E~pb)ftzyQpK8gDLj zJ~7A;!!rZOm2OAw#W?KI#m3eaZQCc6nt4tA{J_D^^Lg8CSSO(jwsgse+jplBaS1Z? zF?4tsqO*@aKh^+)YTN{i|z2w_b zKA+nnzJb7dzi%!)24yh)@!~n0yUbMR`>z>#yi1n?9#eXj-oHLcShVh6C>JIXRqugd zyy2V(V&T4{e7pZnF>-q6NKfIpJxZWW|N3$xr)rCP;hmg13lj1OaLen) zW!=gp|9bXG!gIGP2F;D)Fr@+KnjnoAa+ssB!~8G8??Q>pY`=u)=@TeB2}CWRys~5P z*y>{D7v-al{==9T=qea9&OsuvN`G^6S!Dy+$lzG1Rj<7dNeN@ciQy(z*oF@Cf^j=u z^!w8`&vi(JxO>!!kJPLGQeely>7ctQc)NJ&%flhq+5Is!)U=_b?<{JwfjQ6@7j_nU zcbfS4a_)aPV1O^HVdZxhJ+h#nX$#JC!be75{kn%@fq)?I=~y?xxz`%b#HW8Jt~FPM zC0_he^QN1NUHG0U)H9WBYL~I}*7SrAE)|8%^k6%ZBH%r3Xn*G`#lSyIm4>DBkdx5o zv8)6|vK7b;sk7!$ z4raKHjWUI+2-2#KW^AxLf5R2J`9<9=r+rL4A4Oet1d1Vnf75SM^M z`n60}q|!Ooh+K*o)u;hEf36@rG~Zj3+j171H5}|*bv2C8$t!(GJ1W%ClP#lhevT;i z9};_W9TkT2dG{XKRd$+FGY6B~^3f+zlp+$I6@BK5O7h$kS@2fN0?F>JgfL&xYQ@Jl z3*?+WPg^oRQoQy$6k%G1v;pbCo-oWKCF---S=e_lm)vnp^Pf+)#y?vT#R_{Sadx&^ z&dstz?#yComfO?l&)h%e&weO!&8ej8n}<`6bGR;eo|tH`ou+SP`%i7^uaB%ScG_wic=thiLv(4`E{%8}8T@Vy<)Sq>(a5QICJ5Mf>I zp(#%_ns#)fzc7_c-svjA5}tx9^fEP5UqvgOe0g4DzMes`9#Na8aa~U4_XM2D;~3G5 zKD`;*BtDg@5j^1`Og&#=S4q~K2{WIX@g_T1=}_otn@GERsEUO|J`EHx^LGn4FiNj9 z7F$@19A|C})4yQ;iMCrJ=KreFBCwyTD)cs7k7Cy}GxlPW@(_8jlz7t8@riQSIhIuU z+GWgEQ=)CLNDTYE#h@6L898%-_X5ER!vCrN_btop!CCJvHRso+@dg`Ax-^6^^!sln zZ@0Zh(7S)ij-T5yZC5-(p5;0{ryoyeO)okGBbb(}Eylb~uBcKE63#A05kK!d2UU-i zW6}h#nc<91vUU0|$VSemw1c*P^|-OuKya2Y4$R?`JxgES{8bm?u&%97LAmT25sF0pIlj~YU;EtoV_L)ss5lrbN@da4vZHnApBFt zzTaP2){s}hUk_U~g1xRP!i!t-HdMAt+Q9llyHRY8A(LzUunRYdQzxWaLKO?E*yM-x>#j-%K9sE{j zZ%4lb)aF)1tdvzZHJZ7d+;<*0??cjtt@P28^(bYqQ+zh=}cg;cw%G|){ zjgB&m=n^8`K_?1Y)Z}aG3@R^#4nwjh9|iX-zqghZPcXj9^ow(P<_kbhPN}+D!swMiX5X&Du_c>QC#I5IPc@FIbZvv zlv|FN+emf9Fx^d9$B+NvkixNg|0b5UrNPbtXyuom+d|LFx7>O#oL!V0vM;9;l(~ns zP7*>4OplAUHpvoRf&$2ncUxx2svWuBj_?n4{23C@GV_5>Vj)ZONPpD;)6Bj{W{}&$ zZVs4x=ZQ4KQzXp|7Q0=>kqFKIP$1))byi2e?D$)fEIZPl7rJ$kGG9d#v@Qb<M5ZDi}0-5C|E zrYy;2-QjUi) z+k@L(rS5Jn&~%1da(6t^UyBnEW><}{pf*;sS{WPtyHf6v-9z$;wbN5*gB3Iaom#N? zT|INFsI*4i%G8%FIQCn8Lu_4GwW(#kS)laMfGQwedi_!`A;5_^yIzHOrVW&Csb?N1 zb1WUa4BQ+m8};PKvUf3E}u>=B)l(C9oH%h1;Yok5i`MOf{PNz4z1!RsuA__(!J0L5nx`b|ZS(fdX>NGCuE7PY_FeKlXv&aaXaZT?auDY-_*U&6O z_ttF^!estc{61r6Nc-#Vxvr!HolBzP0}#nOkPu}0qH!BV8ZKbS$q0P+hHORc(RXew zAC`4PE9nPXtm<|c5#)V=kw=9!hhF&%A*-qooUDZ}yI$h0h}GgnFr}O?CzZu$Q%

XGBGyGwg%8%L&ODcr0J0^KA%f|-GJsd}Da8uPyg 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 z�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', '', '
YH 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 w3 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%0D-2hhuq=C=*5pW^*~%F;_zGfgbR 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

Cf>7Fi>e*yNxCrUB{e&3ZS4 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ðk$)+hd04OT(VIw4~TB0 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

8@djf zbxZktA>l1P!s;uMBx{saO@)9Bk3n1Q;SY#E3Us;jS@mleG>iWLwHLCQZNP5+IP=_* z$gXOMcRDF4SA)ASz8~mos%jQiTH4QdWfXTBm6UOS?Q-}d%RZwxuSNZxd_&?NhgVv@ zwR_=7UfE{4Te$7~!tp8T9Edyf!K|9RT07`X-5*1L!p5`K(i=|=YEw0XZZ|g4DOQHy zo>jT)?_MeK7vdI);i&aR*1Sjdb+tm#j0a|Z<8Sgc^7y*7qgBS+9+fDiXLG{g`1Zaa zxQ5(#L&g)t%Y?Z_%y}aU*~cFBJ@&NP*tWNyQJZDEh@)8

tP4&qWm#)mX_kw>mx8 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�{Ka4tXB6o$){RkhO=!R-O;|J8)(i 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

-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

H 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

Z1J8Skp5;+Ah(s?E!DDz+)vN<(w}a6f)l%=hV2a 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%0DiUmr#Ji(kM>va?x!Dz^^Hec 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 d^B#xN7M(XX?ZIWYf?= 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

-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 z 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[! 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

{{Y1X(@M&%6taOKB>I49*Pj-(Ye93STzD%_ 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

*nv3w?90nKcz+DIPEo=bSQL~wyu>D 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

  • NfL1F2&Pz$=0WLm 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', '', '', '', '
    ', '
    ', '
    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ç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�v8#VI*#V>Iun!07(~68;%n z>(}ypBGvR;k!)@a%Ut=3r^g{rO{bQ?!RcMU!H*hV>u{@U6I=bJ2D(Z03z?!idGi>Q zR9s*TU;t_rNzal_TkJiL%%9tP;wSA1to%&ZeirFBULMiB33LU%w{xOJXA*hi1~Bp< z1hL1heAB9ri2neyJ)eNSHu!7fw}@|b`x&P;x_tgc^{~^KM$!q+4<{qBrH7#9%~9_s zV`$fmBL!{GM({s^e1H2}c-?g0+8f3im7HE6S+!eRo8_7ta*`8)8mi#-1KPZo_JjC0 z;t$!+NbxqE@U!9%jHkEIZezEWXss`yw{pahi3q_19s5<*%i~IMh4qpTtS5D2)4mP- zcKE^J%@KYlc%$KFrQ*xWh*HMSRM#!%mfqSjFq;S6CyWj&^w#_1M!&B9$EQ*8zPI5G z6HwQ!^%i>@Yh<^MILu@)+6H$q$2H5CQ>ll-$tmfgGx+4${Hoa9{{Uvst7=y9z3a&= z%OtDwDQ{&u~~M+p`k)o%W*cM zEM{;)Rb(g%6&?6B-JL3uqbR9-MiiGh@J6?-==U0`OC^_|Gcjpj=0tKhJaNa;x~MI! zKeI1&%PYSQi%lIFuF@7L?K$La40BjMW|-fp<-RTWhox$^`W>y7kg2LqZqdgi#YqqX zPDx*{Q%&$DiQ*3tT0;a^Y9K=CJcS&fm%mS6dN9=Fp|0Y-=dkG(=fd~4SGmz|?1sZE zQ!ZRgoNd}hanEY~F8C$z%g4VOqB@-Sx<|w92G#7+eN#@3;Utze2j)OeJq|$cOE<&E z5lvt0>TQFm?B~pRPlLWNkA*)Ld~W*ZjN8QbJ`=XOwbP}PnHBCMVyQ4BC8F-J!9wPCt z#&3u|8H>VKvHt*PX}a@jE@QT3{oW-2f)^Mg(xRn5V>K)2(WMnACnMD?v|k(iQ1IuC zb&n7HYW~q*htkJ$1=Wg8G;++!d2Pxuf#0#On|>Mm3iyZP&x-N*-@y9R_BZ$P&UGu} znHEc&@=;rb&!??+V0j}^N%kY*x;~2W{rANwzAyN$nv$Te0gj=&jjfLKF zNHTi*QQ+%MBgPt(o*vU=@ZOzqqFK9{yyPi+wV1JNfE3^Yc|6xXDpcimrK1IN**+R; zKMr+Yg^=B78i&JW)NkhUFUGkQt-_ewDC!KKbP=2t@6CJ%<1Y<<%pMW()1*)08~EhA zjybNB#Ri_MHxeq~5I{XJM-|V5uX?p2#}5H~1hmt2%Wn_r`oH#_xB5n( z1W32ZJV1k!AYrva=R9?;KGVbAHSr(7Pl$SN!@WDkPZx&lS5?&Q;KY{l+q0mQg*d

    0R6_4tg}C*twdDN9;er{{V&h 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 ltfrZz{{RXy!&}fb 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

    U>TpYg800au#DprKT?B_JE3F%rzt+ketNNYX* zYaO9O?$0?qoY$myatkd+OP0EZTe-CIg5i}>V_ftce<4c0!6t1PMMB+91I9S;_N4aj zV{f)%tf4nCe&k?u45&;|@*zH`$hvv|{L#V}LWusep%41n&x!$ekF+F_% z;<5HEsb~&wYn>m9JR{;O;dwTrsrY6{G|;Zr$ssSXaG(Hs`+;6LYp1Q%!y6qpP-xl2 zVo;nT5!*euuKXKng0m&mv()LWH2I-c)ZW8fYghqRAvWerah|+nAFXWa`fjUZrdwS{ zrnL6=h$WI(nl@wva6NPFT`5bIYI4_-lex`kIDoumB9jN$yihl9^=t$NJg zAATz6J`C4<2jR=zb|=&~Tgj>KxX;+6UPeJ6k;vz@ZB5Ci8|Y;0-sgaLMh$CMzMXGH z_m!}*z9%Kf9UCJgpIYp!JS}T#{{U#blFs4onTjfg%wyh(Rh(^RR4jJdEry+>wD)#4 zD6`Btk=XNrj=hCqPdJzr%~YdhYsLeGcB{6^`X6f8J&y*g4~X zK+R~aqa{t>R&*K{z>PlGnGUh7TgJ|vh$vbd!UXv$`bt{WKJou|zo*TgmPOBVaU}o;Um;7tUoSdspSL}2s zy-w4>SC`%@xk!!fp)J&Myo!W;zDj}6_U~V{zp_W{ett7sE~VpU{>ZZ?FS5Z7`6szQ z#Qw@V^Ig=TX>+xq6TQ#ZF9(0YJ-!xrdg?oy*#7{uu4NISY1eA31E>IZ$3xnsz&iUeCHY4#~z;5vcxKJZrT~U-RgPogMVRv*}~>6L&N?dhgp_6 zkOaAnp^D+im0 z!go(|z;xgECI0}zeOl59BJn=GV;jiLExhX!NfN31qmF$(mFoTz{{Vt>e#(9mxBk%a zY4Lo?a*WeL?-E8qJp7?}&0aGT3UFTON>aY(yhGt1*;_)m@#MZK(`{r-*#Q)4_lk0%h#-|doyQgR{rBu` z`z+pkM2a5}d<^h}bL%TK)~RjhB5Yi4W>sutn(u}?nb|E!_q(5uU$r;vdHX*6U-7q% zd;{=?9V1QFye~4AFDl0iLd2%UQ_C?Va5@V7UHF&(00jN`o$#B)z9G?WejIC;DP=Jp zeTqDm@-glljy=V6<@kzKS1g{SRBkD=oABrCY4In-jBV_^9=pfR*7Ky#BE|+zNX9TL z&2GPE$@C3!??corb!&^gGkdTLI9L}s1=|M-Gu-s9mr9$loM(2??Rrn_74fs;Kf~Lv z9{5w?#pTYIZp*(|w2hfR-3Q;A@h=$uz<;z)h4gRuPpAirBPH&&lOmjPdJVqF=JN{1cnvZ^v&O zT4>fD3DiUvyG-}mvdEV4C^$LJ2?{gsiqcf#l6TmLHrq$*55yn%Ca=MN*<-`HZmaPf z^uH6!ta*^4S}gHH4C~7cpyc`t*N0ws6ZTord^d3=zrvdlsYi2aw&Gv3g(yQdN2mk< zLG4`btD2jO(5{49hlu_c_-b7<#hOlw;7u~=1dWpfQU3S2Q^?4!b4B?5reFAiYpYAx zH6oyq5s}m=PrZ$#U<`GvCy1#lYp|SddLN3uEO#@@1A&Sx21|LotEgC<1Cqdy zPxG!L$NvBczh^6}XgpbA@YhO$=@mu5hDMDd2OGXnI+81V1$vRu^%SC#XI0^^hF`G% z0D*il{{RULdd;2Aw{dSJ)OrHiYBv#?n;^!{sg2E!4tPJO8{!WUd>qqm?L4p9uExm2 z95RBDOi5N5D#1z1eQTo~iKyisS!m4Z#_8PkYt3W!VewCcmR&>PM~0({#ud4|d(f7x z8D6Rm+>&xT^sK)DC+vr#-Rl~kgnkj|cUMs?PVFY^h}cXB`3M-u$4;QvBgNK>enr_> z!q;Q{n00MqPHFxM>6Y_6sy4vVs_z{9z;w{EKzP8tY;a6!k(^^XxmkD`9 zVC})&OLxUwF%_D-CBfZ0o}2#w3#Y@${6rC7tf*4_inL`h~xaT?b^shzm z=j|kJZtS#=2Y6dcjkWu7ZrTX#VN)`YQZ{T11|#WQbul%0+fv-68CmLA)&Br)Yo8a` zK8>&F+D4MT6#HV{!7|$o&%oe!IrOi~Z;oH^P!HLU>>B5V{v-S}@csHpByS=`Y!YV) zoB-ek!)KA2x>%e{Vw!rQYEp0QAD>#k#_!lO;-;-DY8q$6F9yYW-)#|F+uU40UmOgR z$4-O2c<+k-9Dd6G01|KYC_WebT(G=~;wVfBsmC>|BH?LgRt9V1=F1c|wkA0%}CRnvi8KS?A(l^?MbReFix$9m&WT!)! zu7{(8pS4K+Tlk0n00p7_p^-cZrRq9_z8Ssn)JYs|VfJTdAuu;!9+~6bzB_*%e$ZY% z@vYaz4~qW)6}(xfY1fD(i%a{`UY5zhILJgC0MhL zbKKX|WO+PjI4Nw88yAY5N^joPoaMLdtE;lhCad8MW?6F^ER#nnI_>GScluYN*?!61 zCcC+`x3|%ClO(}Pk0xda$DVLH{x$Rv!PARLNb@R5rhDguKVvOi>zaLpnrDnY+o=;A zaV@>h)^_WHK*oQaeZ}B!_$HUeU2^?&drts(ip<+YW@pv>s8GZX4<)%ZoVjCjH7QQ_ zJF6e~CBMeKdR<-(KjE&PiD2e6p6XjgMC%Zc?iw(@QaauBxsmSuKaXYt~+!eQS$ zuh2QSJeS3P@KSFOTFHxTKgL?kq{tEDxG?~-#&Ekx!O!7PX1 zTSS@Sc+m6=z>MOwSb0>8?YOSmdXs4%x6h5dU#r{cJ`ngp;uT3(l zIOuah@Z#f7_?1PIRrNO-e>B8~I*=4>{?@b38tm zOt?zuuki{`8Ee{>wW#$TcRAVQlZAuMYj$Wr_;Xes@-@~mYq>thYyOn@}Y|k_7Bpfp~F~ILw zm);B3XR*{gd+{sBIvf$h6aAY>FFW01BN&V~B#;0kQ7d-{rG3uJ;rD|rz9RS=U%F2V z{6etQB81;uTnOTZ6^nAJFf4PN9FdNd^54V%0NIAu$Da|rS%2|sp_fV4AVtE+} zR4h*{_~O1c@o()_;>o@)TWNm|{7bFqmcAa-A&TX$ps}7QZy9ke)yW%2s5$Rf3___p zBqaxJPo6wA@#o@i#$9=}4~|-;&9;@KH1I^)YW<(>*BiFRb{@qR}}ZFeC!U@#*>3(J=TM!M-!G(7Z9?KN4PRdcEX!H#ZVk#OXA0NeE(u zg2Vt@+nOUKEp7=dPfpN(Vef-q4mB%J8hGo)daahL6k=^ZO`dznZVY`_8$sKX$35%Q z^k0Sl00J~9?X@q6`d^2l)aL(Njx8sXB^nHhk&fPuSDL8ehaH?exEfu-iuzMW%{%b1qvy zyx4jHjGT(-{wH|j;D^C~D%Zu{8}J13_y$Xai%ik&{?&6cf?1i0sVkoO?^#C@)GyR^ zlb!C*jWquN+Kb_Lh<+sK+NZ*w*^gGSf_X%D`m)4KTsnu5KegFy(diZjpJ(e`USD@{2G3a{!%T!l>08vLA+-SYiQL~ zIkhg&xu4_6^{rm&ZxX|Ir9pS2m@T*7&1l<-550oi?f2%nEnoJFPYMkp_r~dEdM;I3 zXR^1L$kDIMy$H_(6#1KE-uFH>{iVNdZv=QZL-AFo!N2%e3#(sjNOdViA3c4%D?@1zu@0d_cC2Yekep z95Pun-(`(*=_;|v1CkCaOTla5kB0Wvr(U+Sg7;FB?9km^m1#VPz{V54?#HE6@f77L za`YymZ1>-Ye-nHuFT)Ez6kK0v_K{l!hF2y0uPmRL*+<;~cRlOClj4`b`weU1-OOGv z(lsl4^qgqgf{UofoHAKiv4Rwyy~RXvQF7eHQfagEd-k%_HBZ`K;y%4~dGU_V`#a&R z-`O@%NjQQrFd2}pK_@xDCcbynzh${}J2?Dxcj8E*@Xv>4w~+|EB5Rpli4K^+enA}d zqMYFsd;CQ~@-2@t@rR1OFxu;yWu}MXF9_Iay2x`BlYgV#7?_-^l?2Fh-#shm?OyBR zPmHhpNp0fIet!{Oth0rdSu<>^6dnobTGWJUG~YvLNo#ZTQ}$KRbw7tTUKa5k&Vi=d zwe_nl>CsEgaCbHpWCMeYWMZ^DYx_)D{iDU&4X47}ZCpm;D@m@Uk*AXFjvp~U3IN7E z>Z&eeWYy-MW8&>Q$Nmbx@y)aNqJJ4$+v;*Ow_0t=$!#1r1O<&FWh6JuIu6y-_~*nn z(0H#?((imZs~CV=QF(K;CIH~69Ds9K1mB*)qWd zmy#++B+hUSPB1%U)?_|D)qWdWX#N<~?K~@~t(215zxHg=G|=9a$S?C_0RDAbCJnZ8 zJ{SF?wL4g^uDpHX3v&hOSc~~e^TD)`88OHTJu95}k>Wqu?r1da2zd8Ky}Z1gx8GVN zz?Lg^`G)SBo9o)9w5FVFOG%#$_^ZU4M}~Y$s#|DxkZMp{w(B`IO1@$+$qq(9@VT333$KbUYBhZ&Aq+Wmov=<)AywuuH5$+_pF=bP4+aUuT%F|#m(dI5z8*S zcdXvrT8Ne>j^TpF+jsT}O? z(DdCW$F_^7+vqkL6!w~K9~0aJk(Ijc;PkGq;jhHs5@?s+F7V%pw5z~SHOHT1?8L#q zz&#EPapEl8i=xi1!^hqmy|=!!y0e}uXqW9KM*$@&IV#LYHO_oc_~r0k&p^}WvD7tE z!WDb4lUr_XzyL@GZ?$;X+VYMf$4w=5x$>hyY|Tav2OnWY@I7h@k96%LD8b{3ZnyUBCwh_7=7c^)^(#@R>RBerf=+2 zlJ~Vf7Vw#d?^d84x zH-J1%7KQNFz&d5R+edG072-%lvxQN;h{4Y!Wbu>DEaJ1L3TiKMd2Y_{R1j$`E#9|% zX7_fByK;kw)OIc0*XD2SJNr}oKJZqHs%uktp)|&X$c6+g#o2un9Ob)v*N2L&?3KE* zu+;se(m$S0+AsFZv+>`IJO!wDH^%<}6s@c+V!4{`;`sS+waT{vP;x=f8SP&K_}juh zAMswVs}Bu$vsAoYVb=BS3aXZAapsZ%=sjuW6lSU?F1I@~8vf6g5$I|+?31qQ_V#kV zt)|N+#rr*-#L-4kPXGc>UtwL}iGBrq5BN*q8+%_Ec(YN5U6vy>l zn)h(?rA~{}Q<9|RRYe@;ho$@;(Ddy!yfviiy0)RH!ylVIsLCO?X2yHqpRa1ujeIE< zy+4PwO@8a_viWgcL1hC(h)*XjxEK|Md{s?*4k_+&-w^Eo0B6~Btxn3%!I#%}c9ICz z<~y6M*$0OngV!~k;0+T;((JFa811etR!mpz2j8Ssz8>$q-X(=@p?SPapDI!7ch zqk<$L9F5+GJXO+@r-y5(Cn&=$Chw7P?=9*xobDhCQ=nXZX0{yu(-c!KwK% zcz;aMyd`gcG_gnaxZ{N$9Q7fH>-g4joaGd{vf!`OWJHSL z8*b!0?q>Bh^%ke&T@vTQIu?|k9PoBDwpsqqr&`%Zapx%|gEFp4^Vd9z(wwCja+6Xm zte%OC4p zkB2@De`9J^_WuCdnuEo3hFEPb+G0hgvh-X7+o7U_lzt=;Zu_3wAAvMocSoDS+7+*o zlND6CmTAgGDeHhcw@z!zG_Tq2!VCDO@fV47OLekoqKZqFLn^R1!uoO2u&c}OJ8E1f zqd3nMco)N$J}Fy^DD^#I^frlOmwGd*5rDZQgOBB0zlywF;?D=9+7-Tq;e@u7i-wm| zh6yfrk%mxM90Be1r-zgFP}5e*a&ob;sQ8oN7mxfuqMs4`J@FFi+I$8H?yM&ZZtf2Z zv4z0n99Nag@QU5E%bUwB1jA{3WKffk?%ZVLcF*&ztI&+(?zRZdQAuB8-u@H(0@QBe zkjQMb`0TBP(@M<}%OVaNYMS~>z}^V)XN9JkPYY<;4ybh~OonY*8*79@cmt3?Bie{1 zN$h6*`Abt{#2y5DsPE?Zlkr~W8DNXd{>anfNFv(90It!;r!~#^Lr?G)p{Cr!FO0q= zUd?k8TUkMT-@Ah2pkVmO{cD=7Sk#Ly8ftvuao~L)M%8sIapCPlRG&=-DP_8rV{Ui0 z3lWT(*72=`);1S)7` zAo2Es z`&HIfQzg99#Id4`eC)l6&vRL6r+5O##kTTzcfdo;c-~1SNlehK!vFv(eo>4H<*ely zN0n%Zr8&9Dxo&oIc=KGe{?3ZW!Q#=p$YGxP(gjwWCnrU30+-;BI#uj>h{>Aw!X zGWX^{z`_@us____hsQ{3$F`T?r#Y zBE;&q2Rj*XH~{gAD%5h8z@vVq_lG=Z@movqzNM`AhTg|gzcbr~w|MP*nD&E}Dn@eL zR9-3lqrN0~_rrI~bMXHFP`AABoUkNVhSn=({FnK5tT9ulxvaJ}r%p0b)a86b;r{>? zT=-_|#eOmPo#0DS(HShPbn?%3^LJMO41H_B>^yC+_&dVhCv6UY6#oEh_@zj;)Ksbq zc2S+9a5*NqF;bh8UGy|iN)kN&&rkTvr1-pB_`d4?*5AZw9q81rm`G2_oQxcBe_GJd zwC{{wCXZLr^zCV{W7JRC&)MEYc_Kre6mmJP`Z##PoKlwNScyfXIs5^y=(;Ye1@@1x z%YS}EK;Fq97SgUc8RTc*irdh>8eD2t6Y84xh^-OgLho&8MA8W}_g#+zj`gfno7Bc~ z=4YZ%iDKph>@MV=G<6g zuW#|L`@?@0ekNJ&uqg|DkxFkOM`54gV@*bG5@w06ruDy#yhVLFMSjB8NKQ#`M)G?c z{*~I_c^>XR7V73Wo?DX0mzxU@WjQr4RK z{LiZRm&R6!8)S*0k~9YxAmo24(l>tyC%4orE$uaXyNM#qx{0`!ILxO2g-+hptvYMj z#djJ{bHDgc;je(+7P7z9eP3=I^Pie{1l+K=5~jbZ_`c@2@VbHQ>1(8}Rwi1Uh=WQtDUh8@1O=yJJ6@1QoF zuFtBz4M*X<3fo(M6>D+ZK8+LIL%+@c07xte3b+{0^{&^$-?ap~)r;sFhlTYN(*w(G zi=|`dA;9I&Pw}X!FRV_UyBSIBlvINy;|<@={_^l&Gp2l z;z@4yBA3oa7$4HSi&yY&t)|~xSi#{Xx>%r|M!d6?JhIrxIL{~2vsGg3t`XfB9t79p z@LsK^YI14P71Us6zK-i~3n1tR_*bCY{7JCa2B&F1i1ipe)iWO?XJY3V80NWglZ>SU zShjwZd=UMhG%pAE27N-I%e}vp_}G93Qs8m{V4EGinL9!oy0mvVQEAY4e3H9L1e~G?6@K=MTy0t^%dzj&ANen!*{qDH@ zYtZ1?PNhs#p3Ueg^jv7hPjmY-(L5EPcor)!3ddwWv-~it9JiKXxx#?Q9mylLb>1bD zz_yyco1N3LGo={g;h8&2EHv*pfW7}`cVo|vpXbH#ctfvmxG zcckfeT9l#0HxZvPqd&xP>&R~AA^*l@Bzs0|YI&X(>uP*#U<7@eFRw4H z;cJ+1@hCtC-SY==SJLfZ8)wEtNLh|XBx>4=zcHj8&SE`dQnG8Pr9m=YlFH>2?QCFj zYdvqHw}>O%-Ta?{y?svCmEJU4Kj@6{sp%&um>gB<> zV8QZT{K3;CbggPl-LYTH;Po4+?yjV{wnsBKcIrZwJxTtxqom(l%cp~`Uq(FjM}}TX zD-PqlV`7_uAlyu2q%e0|4N3$GvR}{az2K6mJAQ4@$KfJ*|}XJ{{BHONo{=lTg%LsEt(ff^p6V zTIMe$({)I$b$wUGdTDJmDlrbMTLS`=!9Lj26kFE!5q#1pvRqeOV{op(@>+TI;m-!peg}4rSTi)dK@K<3G;6k?_BTw7oLOT==^~ut}weUHq{l zNVg*e6QIUNYMeb!V~3l*r6}C=%}e6f#jhV5e-ZeO`%tm)=Y|>KTYHHuZRD5BMT~iI z7Rkp00CeWO0{g{KYInD`vRvyo0^4&%_TWlI83gUebM&rkR4Px|-)E>RT*~n7sju1D zYDu9*0E$vBCG$5Ra(Dn^w>>GERma4wYgnBxwCyadly5v|Yd8>(ymCijTD5l_b`I?7 ztnDve%HHejT7;rK@<}c*jJ}oVpAYR5RMKv5b)9|<8Y2w12?MN-_aJBF>Be#S)1Ha2 zzJ`vI@jt^4V04>54Bai;<|~kFfCsHkZ1srjw~dIMU-rg|eVITmncPef_KE{{S0!{{U6+ zmcL_rapFrz((FlbG*HI7cc&;X zA%`T4CtwF^=ROsS%RdzjM^4kV3Gb$e$GqVcRe>29@68xGUe0p#Hzd-LUQ)zYn(F@mA|#!?PQuGq*1Rp_?IT9inQg42g)Xh(PnYMAe-Rn$^smj&iMkJhZ?EOK&>K>V&$yM$)4Wm{+#K>pMIWtn z)2Zz%(Ua(mo$k*>yOLAk3kc>R?coV3HVz9Om_LP7@aC7RM3%S9rt0@HOlR9~0+)X; z_(&Kus>#Z8XdX7X#TajfpHP4f%3 zo)%(Z8T+IVI`Pt~Yd;xvn~g^D-%jxS*3#dIp^jM&^<%=0I<9}6Miok?B8)u7maP7) zz8mY>&+OOxCww&0d_AjMO)OTCYI?Pt?uGpM*KsPnbAknaUH;Xdwg<%j01^0C!u}Jp z@ZFV#wzl`Ta}ZiW>z%ph?%)n_-m&7j%Mp#LucB!RlpUM7`Aa44w`;H6T%CVYJo$$b zN~%d7hu0O=ct7HAh_oF~P}Dp%tlcHW=zDpZ6^=r8VWdWWe?36|ERa%A}-bpP5xOd#i03{6VSO>3&wDnbtX93)U~ZD@)+&}PY4WEjBUUT^fafUh$j1v@aCQ2Z89sX&k^Z5{P|bf(ay?<(hf4c z2^svVPXx)3*v3M6u{K)=f-%y$D`ENT z-N!^zeg+@uz^iALOouXW@9@i2@aMQ0llGjQ!$kEKVcegkrWgp+P4m=c)3y#_!rD;?rK! zENm|{D=SOkAu}?eMj0J&I-2;$;^&M!H>+LW;y5m(m4w3P$)*Yc!BP)zrFz*nG+ixE z6Fi)1RjF-}Kf=$3o+r-WCPPY*MGE(Wh2kFr_`ShyfbJtZ7WvsH;ZkRt)kpvStDfxo`$?H<9Ej$ z3rX>v&4#Vx*k4bvj$3tGK!S8;UzGIdJ^Iy9t?eqxDeO{LJ_px6D#v-R!FAwYiF&2L zeakd5CUBjIZ1R5!JVD|_@fGwpnv5n}n8K-+MPLIjb@Vm0B^b)~)R((6HQzT~w2H-+ z-bm3JF}+uCR^;=JYroO;FAV%Y@TH8JMXN3C)M}E(;aC}z@T88MR<$ciF|ehtQ|dhn z_Vn@RfNk`PUk~_ce{>*@P&X=qzye1GyzkCNLBz(cB_`Pno*lIFKaOFI$^L)gvYdcY22Yre=rh%67+O>6cz z_#v%o*Z1BTy4S3{`2>DVxs3U24gns7SCfjx{a+g-{uv{pgn7E2>G3D_6!6 zD5UeB?&7&9;;B46Nb>CT`JF0)swbE-4tZ^+x3OR4M{zLB6`>5p{;`mplWVu=_LmLOzgXSv0E^QLRwE3}l_&!m{` zx9??Y~i$wm;x6-T)@+c9KtlOmrB$M0T zy@Kz<_S(;eF7)}GRrNUX&uEISr?CSV;}uYLYq5)N?cDjHei&WZ_@Z4l(_OfZdzggH zw6Dz(?B3?PEj!^IwZ4&cX{w9q*`@PSabl%;>-pD3Nb}TkGrL#R+HZyz2Hw_N8%9O6 zMnWO(8~fSoj>oNe-LJx3P6Rq#`j$qOrFlMOInH^-MLG(1=30cRILC8sJ`U(GYOy=5 zcY>(aOoOnWf|B9Gn5y70dWr;k~`4ss8{84bHK19MUt(ve?K6nVgQjE2c}?Q)voy zrz_m`%l`l>&gSOod%Hw!MM5lhIbiB~oO+t$Zu}_>bH#mVzhjQg#L^f50h{Q0)^uX! z6hx{eeNDZ7OWj*k@b;@^ZK=KGw5VhxFP8BYAh%8c<2?1Q=fXCB+4I4z#iEIR*DHxk zrvR#q9D3%r!^J5k`Vl(GE8OcPo5Trvx1sJOK)4peGB9q~#cue6!MArBo|}28_!q<` z&Uhkthm|7YV!W})JQmGAX1%MG_a-xKBg^&Ah<-eZ7Vy`H{4c4m*kpaK`%!U$lY{B& zUU<4s+9tZX)ipmN>i7ha2P84~#&UB+DX7X%xm?$|=)MQ=0$9Uo8?urenE9lTM`P>F zdcL*bOO<(iLv?X(<7{zmjY@!{fH|!xB_{L+&Ldy&?zar~F=?^1(cH)8xne@2_5}OZ z#+~r-^>mZ%J|q^SVjP6XGWQ;}r0Dy%CR6OmZ$1)O>Ut#iwz}jkcVY5Kp;)(>*b+K% zUpDJj8lHiu2xeW&kRD(QNXhA+L0qp;r#Cd6&TC4&)opdH>tk+!nF7e$nUPOi0y^Tm z-ws(vtlixz>CgM;RWC8*jDwZI{&gvP$&T{ZQ(kWanRO{ODfGKmblv3!P~m;Yy;`yt zb3ce}F0DdG95BTUZ^8+K0?a<6tx}Nb%1?8Hnkzk9Q@Q@txVnz!6kviiDjGlcxUAHR zOp4)POGk7IjFLEhoY$R*=5=I_nr~yi(e$;tw@YQRwFWj;S53s8 zZ@4dm^+(ig+S5|hr3Hps9hnE$1XpFL=^BQgCD^$R#{xaXaAa<$iWF7V%DJPZcuL;z z>FoB1_Zd}56m#bKitBWbhp}1xw#G}%K_(tz;4?3Fi-H2u41*bzLFSHSY|2x z<{8>c9yt}{aV&Xo_v;sbxb!lrs#Ri}(D{GkpN%{j;Z0WGz`h^T{5x}Fq7u?Yln5_f zaLldW2aNhx=8wf+iC!4ht)#J+Oz?J`kg@*&N`+);j^3j@{*~w9D^#0JtzM_K7fXAe zJ?g&`ei&TArRkAgYS*9Hh20_$y9I1uk&~a&zS#c&f_(noUkHC>zuE^(@y4TTb8l%a zrRAO2nkiN}gsQ=J9-I?P7fTWBF)>TxOww|o;jE98{v-a@o(S=m#V;BBM6vNz#U6 zL{4y3F~%$7e-rp~SMdS6n^n{zc%)-B&8z_evh*N;f0cGt#yH{VL9MO%8R4n9YkkjS z_)*~RGgH2^)3n$Y)@Zz>c^W@4a;E?oAY@IBLYTA;0l_PjNE*PjVAfD*!53>zBRP*hwTU8&2!@Q*Mo2DJS}N( zmp|HZu#Vy51%b*OlG(>K`m5rN3*dIY@FP~xJP)LJP+a)d&|c~C%_74XRezWePdk5v z`d3UbUdj|Ana@&}G_HOM_@*&uHoI<{{OuztEQunR-E)QkM_!$MIj=pN#MhH(*0)e< zS6)W2q{6Z`&`98rx#$g6V^Z~-TQf^GUezr;C$8)IBx+-ZJvQFdUd;#x&6@zQ0G{Tv zd}FTLTVLC0i{Nb~>_*9KqjqGJl1U_i*0J`HlTkILDMmY;m%;6ON;bEe7QE0|&vtHR zfvq;}UUC%Y9OI#`Zun|`BGvCT3mbVDSU;7yixvnvWP#0NR&kX@*zKaFDBblr&$7#H zbtG~{3}!YZl#rnJC$D<%JR{+)PsG>OvRG=ikgeQ;A?FXh^gfxV?IRZ<%8g2?qv~%1 zd>HtP;ydpYPvNf)UFz}p0VKH8C$z+h+kW!ka!xXEE97sApV<)jmq*Y>=~CnysnT&G z`F9!llW%NdmMW}jRE3_%oHZv4#`>e{KL&gwx$*x1!PoI;h3?{->%yhQ^^8L^Mu3AE zQQo|##$Ot~CtS;MrTCk~S3=^}D6L6t-f~6;5EGsV6^;{{RolP9Y|`Xv=Z|=g;%u6w zj*(+~Z!F26Ho%f@a^Z$I1Duk3*9GDIW5kcBUfB_M99D~!^A)*bdsC8fl$n&%<+Ed~ zJS@H_@pG=PVHMrGMmIwz4&BKd*SgQ3X$MGV(=BJy1X)PP1=}NxAMvidJRQ7_X;e^G zXEWh>&V_M(cYSpX^2DN7bdeN{aJdJ+PAjg}JX;0jt&Aq(DOXe*pUcDihu0pJSgJBr z6I}%=oXSTt7P;dO4BI||re0a3b0IO@BJV31HJ<1LT@J;poL z`!uu@sO)=Ag{NF;M$Xd8Ej{nD{{U!di6!mvz{h-7K`xsuq|Ij%TR<(Urr5_tph z{&bx$G95<6#9I0#wZ)yL#t5%7XU*E641EV`$<=%(v+EvJ>0Wt*6=}psidx}<}_Ynj!z|ig1cV}cwQYw^4{7ztF79DLXRU7*w3kM zpW{V1E@tnsZf(V#AC0H+4uxwDkL6rPZ2oI~ra2_Uw&Y{CQN?&A&XcBihr|{(dVX#I zXbVpma>_`_1bQhPR<#oLe944ln>`}N+GamsON*I&i5#hLI{NWe^qqUfdOR0b+HR=U z*7MBvw*_JnHb)rerbTitep$ZbdhBNE9uJ$&I>qj(r9wVz#^PKO-14K0nzP{;?KE+y z>UJ81_nbWEkV~{g$~fUq&|;h-X@1^;mwKPL z3l68R6)uC~uMOJ7MvbCr*PmtB7D<|4ES}lNQfmq@sFjSdGmN>3yg~7cSn%@N={8n2 zP~E|{Td^cbBo2+pPzd7y@m#fs#CSYW=eqbd(JtV8zmiCg9kMg}3fhOYlw$5@XuWQC zS|x{xFK*%0ZZwY%ODl)BiX{p{#{Ef5ex{-E47YZdFhgUhTv|2T$qmF7>Zu68>+jEM z?87HHJq+bx{td9byRpL%Ph@fD}2GkGCW=6@>%(S{jE9l62$Y4@5Zh_rjX zA-oUadx$LUp+h3elA*h+G3lI|C5E2FN@>_FJT-N#c*p({O=m?zAC#djt$~mNJCpj= z3mq$5@P)^T(?x|mpAos7z_GUB(*PdX`cSD#H$-8i>i!V;A@N7z(=LPH-wJC} zTtov%V2z|uF_I5q#d`*${{RH%{h>T5V_~j%m*K9m!f2X%U6Hde&vpYir3l4ICnKY& zQXkoe<3*}0aQrXvoT}`M?66ITkw`r-copk@AN`d-Y9AV3$u5)dr(N>wOHFdE4A52NhQVRen~w(TR*;#Sz^X_=n+B5XFLyj#)K3g#eGkb zd@J$$!#17)@n4VpQKoA;ByikKC8Rom^NhBqK1zVRg4_;!*Gc<6d|~hp#jS5s)Vx=3 z4V)KI6Ka}-%M?OP{J^Orlj~ghtR~}oXtgPC@gDK5c;DdSt&Xn`iab8H+C$46P{pzQ z+ki2JJ@M_D`ETM6iT)+sXtH>h;rdvA!a01>!FwdXV@a-1V|O{+5PSC(=isEPNj9`Y zl4|!n>HZ+tSx@jU!MaA4Bag*%T&>=tZ!)3tV_}2x^$WNTYw5p-zZCR6GRs={&ElUD z>UXw&ANzidB2LKC!z?E)<&5X%$9mp1Td&Nz=u5t*;xECk6zKjs{j~f?S z*H$SvIxS0EYD~2z@n?WO5o!J-)9pM{7PoPz_^b<)ac*LTWmj#XKAn0FmGl1qiM{~q ze+|AZc-GfO@Gh0CXr4UNm>{}GSfYVja7U02nT{*B30`xhDD!L3&PgdfH#Kj5IM{dx z_FMSDplCLJAJR1&6}(L|Nw$twfo;+yUzYqVUd^KsO`19h=#JvLk z;s*2MvTK8E1A;;_vBq=x8hKOd@vd0*XZ4s?Th1If!+`CE#;1j;az)9)FF!Y4OZGY;kXk>2J{Mm=N+qT%AH!# znp3sH9I5PlU-4`9_m}pK@YLT4tvm;)TVLt7cGpqd%w&pK@G`(D8DiD)e~3OV4Vpw& z`bFABqNy{qr!4b~=Yh~xSw$L@X*kM3Ti$NQo{Oh^E%Bw8Ul90LMvYv^$|Sg$F`dSG z6UI-qRJib8!ru(Tb!Vo-a~!vVMcV+}7mk6mlbX_vnvyb3P406Ve}c4INZ{3M^&b`5 zJ<|DeMKiFBusI+uN4Kqdo`Te#D_L@{SS8?1V*Gkho^G(JCfVKjI(~fHDTew~8 zsdGw(%S6+)d&YU5OL-a?R7jDOR3CXk8968NuQ}HKA?o^T+ulv$8(VnE{o&rSw>@&X z>shxoU@&ywjG8X2+OC(b-)NTt>JYKpT}FpK!d8KWNjoH29f7(;QwmL!6^*aqFb8OMhZ!H9VZv12hJ$e3h@|EZ9 zQ~v-7eZP-?v2LEi*TWIpOXl8{jik6I17K6nU+YSBDy8IHRnI3sv@=;;SZepaFu%LL z)IQ8^;zpBd#?7#)Bwz&`@m}xYkK2>N{{RMcpAqVM$HR?F#I_|aEv;lrpRpKv{fGm~Di;=kF$ zz`qZt(>z(@HlJA4^;lv{I}Js*#HvPe4oN4kUe)PfBN`BkZ&q^RB`C_*JAa1$5BOc< zJ%2>gyjS2K2w3P=#L0iCS}U~biU`_2AJ)AIzhxiT`&*A)pTph;@jUjH;tOWfrIBOX zbnIJt0HbKY!33Jy+Uo9LrCHR5x*n0?{{Yzo_CV4;8{TO8uCe0V+l^jREEcx+GrUlY z{K`>C88z}>jXz@l0EON$)NbrP7XJWf*hgx!5--f#OsF%AgWn&WIN~EZjJkCtX)>)sq>vYDfn;yY!LmO{O-r+`O1 zaal*=ZkHal_CF76w^k8OjTDeg8-lW)0Sw%MgI;!J%~mQWtCvAVrn()6?4|I#SNO%_ ztIMw($85R>g|3Rva0IV)JfFh6o}bRYv%mN!-@t#^&s+FY9;vJRHP&wYO`~02Y2o#C zne8M++E;Hl18MKj(tqsKlZaAyT{jX#s2^bv*D(hVWWq)i|k2m zrc?KbIOUkvH?4lj+9$(ZI{R7pbEd-_x|@`dZXvW~3VM9RS56ZdDbs|T-5k{w@2UCE z<9{3JUKG_YZuKt#7rU`%MKHj*Ndf9MspQv#c;ohl_=ThWhf>nK0j>z`nVehSEv!+= zy8(KTdC#S5MzuReDTjZ#IeMSi~xF^{{Slc zH^U#cP1da?o}c5t5hjzX2#~{PbT(%IZsQp_By(Fvl$w>^;O(jO3H_&SG|O!&)5em; zC)*UW&!>>UM#JRX2jRthhw-oW^4C5YK94*;8?{xvmN_j9`=e`^OBLR^ISMdpD&hIL zbrNUh{{Y5s_$haXZ!K>0>n#gZ)Gy+Z;|X+FM3Mgh5d)IkpUS=f@eCd`_`%`}&28-B zj_P>J!4FoT9fySDJL21 zYwj-!T;F_AkHT8C_kK9O)qFi4_GPiQh2^(PWmWRaNC#XDWc04uloXs>=ubL!vp-IM zXOGz))5IPVkK!lAPlrA_zxywmNU;!vniu0Ic>^8&Yqaqn?EUbQ;sl-!@UnbA)-<~f zB1vvXKAQh zrN_vA=wbmOh&{(z`upLJ>>>LycuqS{_)EMesq52QO1D!yvdt7zk=SFBpw^US2opYc zt~*4)W^HF4ufB@p26VSrB+CEehvcl3QD; zzRztqHc_fD+<>uWb_b}%WO!@fPL(Bwv95ei@w(p6ty5ja;^)NsKMUJ@K=`wu zNqeW0I@wJU%^SE?BptXrzHeUD=zbvmtbb=6JK@3CJ|jWmTRWX!eDPY@!07B(IZ_)R zrA>Rr3c(mz-sjXGvUkUS26*$~W}mHTS}ZmR<8=!X+^|BZje^H740O6;wvx2VuuS z#b9Z_20U%>k4EwDgnUcz_gTDEv1`e1b$KqM!m$OEdXRl9I#gp-PD$#`RNaz3GPLkt zi#%&3j)9_G>hBEh9?IGN*D4u+#|nC%O8p}Joxfr0&lAZPi+(WtG}mrn@XfZ%D@{H& zg=U@D6XxKKI^>-3#dP7QI&+%|&i2=1**+qC0@l1A<0+=_SHK-ztgJ0e7Uo!l(Ru8- z3^^kqyPu_bKY%_Ce$bvV_?h5sVlRevnkCCYwzY2aI=^78i zZwz1fBjO|;AD7}ZDR*(InDp|}n8{6w>^M=zG4-x!Nm8Qi(5Re`$6tt^7X6>^H9ddD zKNUV4Yu7gxFvNSPscw6{6+9Li9Q-y#c_Wnoz9Ae zd9DI5KQ;*fWPmG^7b#AyHnv-qlhL1i{>%RWv(JS*CGdm8{{S9*9eb+UU0cGY?%GMC zP`ZpqESmrX@OlDHE9gyg#s2`bhl!E2F9LY8;ix_=wYZR8iz5uS;kerJm*KkL;@%HePi%5;9Oq@^#u5d@o(ZD zoej^#kp$2YCA-S=N^=Nf&OT-t2i#X}3Q$!!-(x%7qmKQe^q-8s6?{o);Y)9dw_j=S zwaB%x(%uiV#Tzy-#g&M|e|XoI{4V&d@q^)|=ZpLc;>dLLu<-5b$#;JYmjh+YeOGdy znV5rF(xvR-qugg%;r{^In_BTpYC3hdi1aw^VR?$daA%R`4dca%cM=E>Rs3I}6VqEAvF-S<34;%=w#)503ImnD{; zsOl2xk%{emi3222?)l=C2#QvU46$NbQa}ud6;d z{@985%LNTAEXXn@JzZ z-^UFyD&YN!7LcNbYSl5A5}ZCRrH>jiPcgRao*pIjh9iQNp&Kzve{SjYk%bm`B7rT{p#c z{w32sF8Gn zs6Dvyu?vt@LUhhRz^|J$4-)v_!M+TG;epk!9t#N?M2h4qDtUtvZT{|XI#(tFm1t3y zHs;*0<=o(OpM_fHtK#ce^k^<*(e+oDdHp zzgYeccu&Iq7MsHF@eW1THSZVPTxlt^rS_zmN26qNXYGhq?)t&`5yI9Vq}oJ*#P1E-Tg+Mxg-c`kR}tckcS`X-zM9^XrRnxD$g)c!E?Bj}#{(S)T5T{> z?sI+@w>~M=Zme}%9Uk69j#F+HOeBs806A=J$Q^xa)ATaTV{h^h0 z4I*(T+GChxFjI^Z^zBnNRCPT9+gj3fIN-T!$s@WRWJbn+y|HjJ_*ZN2k5Se99pjr1 z6nI|o?Bvj{t=%r7wrak#U`PSp1NG?{{WYF?r`24 ze;yEZZC6S}w7cdxREInG>c7G;e>(Ktdsox+eF3gDO?yO10f?f)N0{+2$>4P(-o2Xj zV@_7N%Jpo-&^{!|Z+U;H>C>UpQV1lE$By;U=-w)aQ`YbF{S0ifYe?Os z2QJP}D#Q+X#dEpFZL+EK(D;Y;w)mOi&jw2;!`&wC#w)qwTb)A5WRrNcZVNBC7$gJl zUy^#qj6Tv#cY2NC7Q~oX?~p5xb6j|8aFiz})aa(#N1f`vHNNom+N7=L9cRmxyrQj` z@$!+6PU5|v;WmTgkBa()9un}@hdY15O6eb$3p%{5(0r$_UV^*w{6Dv+uE@B}rk`W< zH{fsVo2=;`Hq^W`t_^11_fL>pNoa`js$76F7@bmOnY%X6q zwIYs98$i@qMf{4lDTjrU)ShGjjzxYrd{y|n;SU!0*HPE}M|G@g*3&7UONKRQm2rR; zL;PIi0E|%YM+z344y@Z^(Oe;IRS)1`sqKC!DRT~+vlCdlPlz5V)BHK$>5|V)XwfFQo+ECP9Ob@D^ai(lPo_oT`^(KERq?g8 z&z5|ttu%nduo%YdoQ!}fqZHD8%Tj5hjkeOY8|xU?!d@JEJ4@+S3Et$h%W)fZAme~P zoqO+ueh{XSs7hV5TV2tk38#LrzkWL4)6&fZWG{*I?+q>8x@!8BmE2HDfg0RS2xRAQ z&M-LdU6zUCy$e>dnD~0&$s^pYkd0zza)f3^7#sjS>j^8wsLNx{ul!Ygq}urI>fX-c z;wvU-;fYlX$bb(0KpjXG;~p8%wGS1wkBNRDUn<%NrIyCZ+1+YF4eT-bEvcyZxy~gz`MRsSR6Jx`&Sd=J#Sdm zwVxPhI_HUH(xR9lTYDIZZK}a}Q{3Y`Q?2hLud!BIn|=q;{vLR5!m?Z?&b#*C5nam^ z?J$x!n`i+^41Q2?>DH?F*W#~(^y_A}@h6LQh$MnVfFv=>?9qYKco+-79GEGu_P_LH2l*Dy_Z;Tzcc0<9tJ=d`Hr*H2HN86SkjabG2fM z!gXj`W1OkNWD}A6U28PsI+l>38(rMa(3er_`@hLn}>m&mx0{E4Ozf zbH#62PBkl?CG<<#wEJ~PB74blyC*0&wmpbAHP1y-gevK=w6(CFAn_)n;hhJ<8fKZ| z9Wv(U#WLQmr*PxV{nTuB5-%tl~uDbJu(`7sd^1RMmVldw+3#rs*KaRU=qg;*+8#CGho)_lPxpTf-5^CAi2)otc7ynHa+7`qY08bSn*0OtaRmG>F!H z0j`;1xm*DwpO|3%=3+ZnSGT7bMfnXzTAtl`@mEB(@YbKB>)#4|Lbf*1zuWHCML?Gf zP8|RT0~q4GQ^guYSGI5BkB7S3%5H%WdAr=Be|MfUSxRbCz4t1dTHTnpK0NUM0K?x2 zK8rQJoiB-6Xyv^YD(314i21SD5t`{V5BN#-YYjf{P15zdX;wKc;(PIK%;@7Gx}3Is zaam%g%IZFf)-ROF(6tW`cy3#*KU}fChW6~-+_m1V7-jQQBw+yWz!|O=#@;>F^;-!e zzrM3KZzOL1QlwFkdgWJ)`WmR!zP-wVw^PVyF8&C@(D z=U$a%dl$nk6*cV(LA1NPw3qiY+Q}ksjEpG&jGP~(H&W1gnR2HS&%9UTUm1AD^4>d* z4Q`2zW}ACS6R;!(R#JH&^gfl<_;)~pcyFwA4F^QD^VKmGyO%y$86k;0wP^?L$5Le* z9jA&LOx3I`G@D&A)(JG|*b)d0EFgCE#dzdamlp!(PF9{UpSmvr!=XNd)|Jw2i(8T3 zXc{fVmNvd1ZC&HcQAcfY!FT@gbU7LCnz?Cr;oTzZQPa{0f-El~kt8V2Cxp0$l> zT@|ZZoi2%`{4nsfjQ1B_7x0dwZ(>p=TfrmAyBPrE915|kd`$2&$M$UxMEHMh(mK5B zZwB`%$I3nH8nx?2e5+#N4td7s6{-A6_F~<7mYP5i>A}QGhf-t;k>1uIX04eaCkpT!gV>+lOBrqL>Bs2#!UiaHo5Ub z!Me_!rMXwIy=kS~xaWhPnAa0>G=CFbEu;KB(th(RUBGS>gN*Tm{VSrSNT}0MdmwUG zDC@oy@VD45bdL_(_>kQXCP47XwLs(_z0?A0%e4OhhaVE`CAiluC4VnUK6A-)5S4~b z7Yth+j~v!ixhCdJ=gOOGqhWKZ>KE4&$|FRJ2I1Nkjy=TW;efy=@vZ*=5NY2HwYha` zi{BGVY#mu&$x$QahEZ}jIP{|v`?zS0DK$5%IG+aiAo$XGbcNORYk1;SjU;h|d>!8~ z2Z8--W8wb*jJ!ec^TZ!u7q>7@%<;$enEc2l1mGTct8L0HcQd+apLJ<}v`54%Z5rcE z8V7;y^(j=XtoIPaR7QAwAY5b)_2S+x)&4N}fHMWYd$0K zya{6okIF~1xLMyABphTG2h`WCj*U8M3$e#pxyt9A>VFzcnw8Ft;lB)cz2u0ElHAIu zR1ttmp1jwOc$fB~{h@pz7d2+*4oZE8Ts&P+q z3&Z~aw6Db*%^K%Y@lT0v($?9wmA{4JRT-xe5tLjB3L<^(MWp6MVF#>cv)4l?Yv*-RJDj`&f7<8DGETez)me8F*X896+Wz#Z}4xOjc6HVU-b*z_}bIH)9#C-|4*KZX}Nmxdwu9k1#J z+fldw08cloGa}2LHuTPa`t|cQ{{VvTwJY13jeFuY#0-p!Vx!I{s}auteQU1|dAQD7 zvyG`mpE>+?)#sZ)weZ2ao@LUc^CNj>-y@?DmLs+R74ep%deX=P%Pfeeagg##ejb(G zhEeuX^$kqD$$Jl-Wp-F3MpDQh2_|q9lu!=ul<-eZxT~@Vw)&m5 zmCc@msp{X^_YPin-m|Zm-!3o?qt4Wl*Z>8+Rmu(-jn#x=EE1N{+d0#|NKN-nMQQ z<}E(TNg{B^%#@NkA>n_mXqDFDi)_iX)GvTz9*<=)b$y>`&dmCb`8A=V-bbX{>atkb zLWcCLO}Bp3JTqhKiqf5vV@~Iu>Jtekvvi8z%-tmF&B@0~>$DWLcaH9Rn}quea&uPbo3fq#d&KbaXrBveOPF5P$=d$=}EoWS`gHqP@D+@Mq%&_w0J~BZAkzIAQfrnAkd|Z>> z$qtq#@}AYUDY#|AoRRuhp5m#!UZY!^-Wc8DO@G5$WSV;3KCB!`YUHr<@^BpX=~{j> z@b`pnd_{4k>i!b&xlFQ^}dbyxRVuZ*Vf_L&X*w(DaHEc3LU zQU?cv$sMsuym_H(l%&16-+34(M8Tzj@%jV^Y*DH^wBE{aIQ#*nGo+LF890UVmuP*ett^(X=ZKLsrw^ z@n!!2i7lbOLh(TZBvF`w!8JdNbq@*X)(}}~cl%(8nXTfKywkd87z7Ug0M5E+P0iDb zVBeWS_+Hwt_C39(u8~}XmVc5m9I413-WmRNM_-3kz42%Ex>;XGYb;8K?H{~j^6d(9 z=}Q)pl0g@CQqZk*ldTOeNwl!ImEw`SyPc2{SP=Nh#sNOH@>j&YN9@|XHX43}q=tr2 z*9#jNFxYUskU%vQC;Rx^(i@fF(4f|CuQjg_X<8kdLm5W3g^QTc`VgZSVhH2bw>&%H z3oi?5@-@zosQ0lvaIClv2^$=B-wfoIZP0_ADw(^mA(zIWIfTRb3N| z4{ik%syWSAQR;d&sSTcqV%n~&rrs}=Bgr+v67F41f5!Ee`u_k_)O->B zp`>X^EK4VuBzvS`z&YwNKPptJN^VlP&y;>D{7ka=nc|DRM#I8-4uu(pD5JE~o@ZBe z;fXELjxurHyhh&pRMLzs98e^dz_81baKjj5iqj4Ix=lB@?CfgjUMtkCb;$L5T~t}i z6Whq1UP`RUdV}g~^}E9!D%XE$4}%&#zPs^%M!E3^hfVMNOYZh2$Q6~8GZqD$f_dkP z=&X~$-Ti{+sz=JVemS=A_lPevtt#UF;qC*h;y?9H!{s4PdU5@0>aW<_;H~G!FO9w$ z(8aC8%J+8nF04asfktq{r(X58ONZvf)2Y!bk%^U*+5HTD(OwhM^p6@X*14^X20stk z+etKcqE8}tlmWFs7&ym4U(a{P-Dgzse~$GnUrg~mmF13;J3(Z&r)q-7`@KM~4ZmrP zlfIX1tTwdPr<7_sABk?Fnq6MX<=*SdZ!iV}$x(m-^fkZXeNMx}@#+5nXV7GcwAmz@ zW>6Og8SBuJYpR}{_8jEx%JRMI>0gGQ3Vd^~ zYgQUgiK2LR8N6DIZc^fCkz;Uk>%hmYdYK(0;R~5ol%G@WJva6>_~CP?OXA;%-w5sX zjVr*G@!#9nXzd)nZop1lDH#BAah@yUJy%rLyhGw$V(jUY+AL1uOL-SyiB-O3+tdIs z1!q<uGCYgVx-(AIUL5WcOiYujqRnxS856x$$Xxe3(`LIP4E+uw+ zgO(WS^*!sFcI9ih)}von{=w6hYt0){`)udUhDh)uROyWRn)zSjUZLYnT7L{{7E7zg zV|6IDYbIeM%{j(6=Z(knrIxR0S}DB%>a08~;>}LmNxtzmv8(B}`eBY4tacsJNXLME zIQ?tTAd6qHzt?o_I%l%9)g&@2GK`pdDKFopIWJ=>iFFj8nUSyjSojg*tJ!qU!bXg{oipZ^v4zTxsf(8(9}*Zy?Y4>s1WG z6>6yRZc@TOWZyQ&#nxUa(2{F?k;4cv%5qqS-GFP>yba=+JWqXZrfAof_HB8&etA_v zVaF;+&#%(EaTqsI*)0wkw-~q0vHDlwPuT3}lh#E$pb*SsH*+(2mrLuWsJa;{-uj=ZJP0kvQ za=SQdKZmyq0DC_e+}lL$neD^Mr1Q=PdiTp4>HIz6jd#KpcOGq?tRrP?uyvDyNF&#r z(ypn=i77X!lcV12_F6UVvt87^n5%eT7!0G5JRmN0>c5*Nt8Ohn#@UDncyk&jD z{$(9w#C{vFv((pAxR1_rlu%COZv279YvUb5U9r*pQ!Li^Qf!%~RFYOCY<{^X@urly zB#mh_&iBG!5ic~K6X_cMm3nOrp;mW+n>Za0_}BI&`v>^XN%)uW7ew)mw~74g-8Ggw zxo}y?Bjs`H&U)8_#T49VMsIk(%?g6cYxPL2(qLw7+g z@lW=*(d`ai9rYV}-0@farMxb5DdpCDR`N6$A8JPE z*vaERrG97pX7Sn8>^xU#EY=#3)g5PoX+c&XbRNSTS9Vst>Y8YCYWHW%J`(X2=AUPRq10?Ok=!&!~8gDYbYnZRORc*wXChrz(2|7~-8?XHut_r0-*MK=5~l zw7n+xTh}7Ki^~q?QbyNea0nf%LhcU?ORw7|jdG$0VuVew9C^3|=RMC_?aO1$7j#a& z&Wpr08WL!FW#!Jhw{LTv;<#;ROYol6mrn6si~H^vG@)H(Cj=F5{=FDw z81p+3DZO<(j_KO=YfEiDYpF$&$pq=Q4ATb2;ggI3`HJ*CKTcl{TE}qK7gt}}F>KhG z$~iqwJuzKQlbjRoWr(VyW|`9Hz6tS9**~IeweutCL3Yxr;SH8w_=4VG2 z{1cP*g*wfaggh}Sw2odm*dbF2kDDCiXVll8e1H9ezBhb1mcnzQYBE~tW-l&i)v| zx^9K2=Tas}h0#S^9^XNp)vaDzyRcWgJ$}pf0Qli?brr{nHJ=3O@L9Z3OvRy*j4Tca zEz<&@b^9OMTwJGz?!GAae)1QWdGcYA*$Vf_=s2i#>BTD`vX$<8_kq7>pMl;Gw$!b4 zFBgAo+!)qT50xTpU^xRlzZ&i}d*6k}L5sq^9`KKcA$eFyB+m}{co@JvtCFrFrAmvJ zVJcB4@F&9`3S3-4uIc^+(x%ibq6x)e>DW`LUCN_Z*wRqZJ8p2l4L@Tq2KezK@ejp~c_FyB^P-k32>g)v zJRFXs*P(0w0PstHg*x;I{txjb?Xun!mEPqGvh6)HpXE}s2-BUPK>E9GO!d7l{s~p^ zp5E5X+<2+(rMZnti*{Zda6!*PYti*j_$RmQpW*ESd%b(aUNMF}Dl~Z@XF(gw#_oq6 zwWTb|4qF)FaP=C}M}6V%*-Q2GXW%VU#TL;|1n%Kxx%2`3!GtcI0rSP@w!U%0+h68bR8J-4KA2Iay{{R}T%35_jt3mM{ z<>rGWt<+IOX7eGEJTCN?vB>Mqcy65!i>)qodp&yk_UWOSys8*IP=&_8*=A`Z*Rh~G+hqIQMZFvH``>jkVKa4ym`U1ocjt`c-^MfrE?zXqUdb} zvtKY&dwgXGVsY(OCHqCr!FhKi`XIQBi2hjE({;FC$#K*OqIQp6v&j z4@F>3PT}0sY`iB9tEfnq7S|G`!!wl0IM1N;sBzXPY25k~;rGJbYVT9Fv+%rHyf-q< z6GtVozU6KPIR2IUBW?cx1f9`5Q}Clk@g2vFb*q0B>d~9I;g<@MIOq!=g#Q3K$27x3 zmNJ^tV(Cezqdy%#Xb;%m;vd7?tzzHAIv0sVA+`rGgBvbz2yAnj{MGSa!W}C>o_j03 z9f_UQA#%HL$C7jEPI}Zlwwi6Nj;dAU?3|89KZABy`(%(?`HIFdfTh>oy!*z#2h!t3 z)MXlc#g;IO0A0%RgOYtlN9$9EjAcDgO04f2y^n_cYw*_hPy0-k+AOS<&sw#- zyi0qq^ZCK#bGeUv9&uOntvkh`rMA}mVW}%ay+p9H>_6S$^UZNq!&0fub+OTe#z|<1 z?eDx<;mgfqa_Q|5~+>xa3)bt%Y_SXHMv_BHsYFaULYgBQ9me84^AoihsDo_I?bk=KDFZ5rYrhvf4|8>B)>gMyK44X2I5F*Qyx{lbR*%EakFaa-ywi5- zD)GS;+6h(}PXW0E0zRE;5gCJKb*P;^>4>v7@>9lxMfnx60`A z^Ue0L&rsCmRZFSJboo20eWoTX)@fFniq}qmqXNqwu^H* zknRZcV_VYyM2M7W4H3FUPbP!WRm&T(+$A`hA8_J1a#zq?^7C0+`nkAxqe*_Q?S$I z@dS1k4{H8oa!x~R5|Pi=qOsC7i6TubTv@DlEez2|8WQZ?wzhvUN_cjz?oU1RJvTvt z?e$$c+gfm&reu-N-b4ebHQ8&{kjHi-)UWIv?o|DX;x{knL;xMSWBJxDF6cTO#ihEf z(??}&%*d=*sU@;Hhx_o7sjh19oGQ-C zLHkV#Q~0;U9zWG|+k1_D;@|%z4Nho+ylO

    ?rGk4RqGUCZBd^>G_{kf!+ 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

    r? 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

    )YVZWh9 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 z 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
    dtHeoY?FUd|F7R&_yGy^G%@XoGTvuoxjVCcn5 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�k&07F(nym@#cxOP35YaU~L3ozD$a5~Io_i~Q; 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�=~9=D-hDk8GdH+rCE*Yfxsv|HGv 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%0AdwRPf&4GZJ^bB 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

    *dt=Ex_2E6cnarg&FY@qF|AP576n+`}xY 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 z%0A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 z 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�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%0A-AK;TS|d7? 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ƭ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

  • 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%0A5zNb8$t~111y6b)# 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≠20d$bwGCyjyY)C|{;LZg*S-$r+|?yk@8 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

    ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']; + for (var i = 0; i < atags.length; ++i) + { + var aaa = atags[i]; + html = html.replace(new RegExp(aaa,'gi'),aaa+lb); + } + + return html; + }, + formatting: function(html) + { + html = this.formattingRemove(html); + + // empty tags + html = this.formattingEmptyTags(html); + + // add formatting before + html = this.formattingAddBefore(html); + + // add formatting after + html = this.formattingAddAfter(html); + + // indenting + html = this.formattingIndenting(html); + + return html; + }, + + // TOGGLE + toggle: function() + { + var html; + + if (this.opts.visual) + { + var height = this.$editor.innerHeight(); + + this.$editor.hide(); + this.$content.hide(); + + html = this.$editor.html(); + //html = $.trim(this.formatting(html)); + + this.$el.height(height).val(html).show().focus(); + + this.setBtnActive('html'); + this.opts.visual = false; + } + else + { + this.$el.hide(); + var html = this.$el.val(); + + //html = this.savePreCode(html); + + // clean up + //html = this.stripTags(html); + + // set code + this.$editor.html(html).show(); + this.$content.show(); + + if (this.$editor.html() === '') + { + this.setCode(this.opts.emptyHtml); + } + + this.$editor.focus(); + + this.setBtnInactive('html'); + this.opts.visual = true; + + this.observeImages(); + this.observeTables(); + } + }, + + // AUTOSAVE + autoSave: function() + { + this.autosaveInterval = setInterval($.proxy(function() + { + $.ajax({ + url: this.opts.autosave, + type: 'post', + data: this.$el.attr('name') + '=' + escape(encodeURIComponent(this.getCode())), + success: $.proxy(function(data) + { + // callback + if (typeof this.opts.autosaveCallback === 'function') + { + this.opts.autosaveCallback(data, this); + } + + }, this) + }); + + + }, this), this.opts.interval*1000); + }, + + // TOOLBAR + buildToolbar: function() + { + if (this.opts.toolbar === false) + { + return false; + } + + this.$toolbar = $('
      ').addClass('redactor_toolbar'); + + if (this.opts.air) + { + $(this.air).append(this.$toolbar); + $('body').append(this.air); + } + else + { + if (this.opts.toolbarExternal === false) + { + this.$box.prepend(this.$toolbar); + } + else + { + $(this.opts.toolbarExternal).html(this.$toolbar); + } + } + + $.each(this.opts.buttons, $.proxy(function(i,key) + { + + if (key !== '|' && typeof this.opts.toolbar[key] !== 'undefined') + { + var s = this.opts.toolbar[key]; + + if (this.opts.fileUpload === false && key === 'file') + { + return true; + } + + this.$toolbar.append($('
    • ').append(this.buildButton(key, s))); + } + + + if (key === '|') + { + this.$toolbar.append($('
    • ')); + } + + }, this)); + + }, + buildButton: function(key, s) + { + var button = $(''); + + if (typeof s.func === 'undefined') + { + button.click($.proxy(function() + { + if ($.inArray(key, this.opts.activeButtons) != -1) + { + this.inactiveAllButtons(); + this.setBtnActive(key); + } + + if (this.browser('mozilla')) + { + this.$editor.focus(); + //this.restoreSelection(); + } + + this.execCommand(s.exec, key); + + }, this)); + } + else if (s.func !== 'show') + { + button.click($.proxy(function(e) { + + this[s.func](e); + + }, this)); + } + + if (typeof s.callback !== 'undefined' && s.callback !== false) + { + button.click($.proxy(function(e) { s.callback(this, e, key); }, this)); + } + + // dropdown + if (key === 'backcolor' || key === 'fontcolor' || typeof(s.dropdown) !== 'undefined') + { + var dropdown = $('' if !admin + + - css_class = "" + - css_class = "fond-gris" if input.style == 2 + - css_class = "fond-bleu" if input.style == 3 + + =raw "
      " if !admin + + %div{:class => css_class} + .row-fluid + -for i in 1..input.nbr_columns.to_i + %div{:class => "span"+eval("input.row#{i}").to_s} + -if admin + =render :partial => "admin/blocks/block", :locals => {:admin => false,:block => input.blocks[i-1], :sortable => false} + -else + =render :partial => "public/blocks/block", :locals => {:admin => false, :block => input.blocks[i-1], :sortable => false} + + + =raw "
      " if !admin + =raw '
      ' if !admin + + \ No newline at end of file diff --git a/app/views/portlets/render_public/_breakcontent.html.haml b/app/views/portlets/render_public/_breakcontent.html.haml new file mode 100644 index 0000000..a287381 --- /dev/null +++ b/app/views/portlets/render_public/_breakcontent.html.haml @@ -0,0 +1 @@ +%hr \ No newline at end of file diff --git a/app/views/portlets/render_public/_downloadcontent.html.haml b/app/views/portlets/render_public/_downloadcontent.html.haml new file mode 100644 index 0000000..8165052 --- /dev/null +++ b/app/views/portlets/render_public/_downloadcontent.html.haml @@ -0,0 +1,11 @@ +-if input.data_file + + + + .portlet.download_content + =link_to input.title.to_s, input.data_file.file.url + +-else + + .portlet.download_content + =link_to input.title.to_s, "" diff --git a/app/views/portlets/render_public/_dynamiccontent.html.haml b/app/views/portlets/render_public/_dynamiccontent.html.haml new file mode 100644 index 0000000..7b58256 --- /dev/null +++ b/app/views/portlets/render_public/_dynamiccontent.html.haml @@ -0,0 +1,3 @@ + + +=render :partial => "portlets/dynamic_contents/"+input.name.to_s.downcase if input.name \ No newline at end of file diff --git a/app/views/portlets/render_public/_eventcontent.html.haml b/app/views/portlets/render_public/_eventcontent.html.haml new file mode 100644 index 0000000..c312515 --- /dev/null +++ b/app/views/portlets/render_public/_eventcontent.html.haml @@ -0,0 +1,106 @@ +.event{:class => input.event_type.to_i} + %a{:id => "event_#{input.id}"} + -if input.image_file + + %p.img{:style =>"float:left;"} + =image_tag(input.image_file.file.large.medium.small.thumb) + + + + + + + + + + + + + %h2=input.title + %h3= input.artist + %h4 + ="Rencontre avec l'artiste" if input.event_type.to_i == 1 + = l input.start_at, :format => :human + %p{:style => "clear:both;margin-top:20px;"} + + #map.map{:id => input.id, :style => "width:400px; height:200px;"} + + + + + + + + + %p + %strong=input.place + %br + =simple_format input.address + + + + =simple_format input.description + %p=link_to "voir la carte en grand", "http://maps.google.com/maps?q="+u(input.address), :target => "blank" + + -if input.with_cible? + + + - if input.cible + =link_to "site de l'artiste", input.cible.cible_url, :target => ("_blank" if input.popup).to_s + + %p{:style => "clear:both;margin-top:10px;"} + \ No newline at end of file diff --git a/app/views/portlets/render_public/_gallerycontent.html.haml b/app/views/portlets/render_public/_gallerycontent.html.haml new file mode 100644 index 0000000..a9a2a60 --- /dev/null +++ b/app/views/portlets/render_public/_gallerycontent.html.haml @@ -0,0 +1,136 @@ + +-if admin + + %h2=input.name + .description + =raw input.description + + %p{:style => "text-align:center;"}=link_to "Ajouter des images", "#", :onclick => "select_gallery_images_from_manager('"+input.id.to_s+"');return false;", :class => "btn" + + .gallery_images + =render :collection => input.gallery_images, :partial => "portlet/gallery_images/gallery_image" + %p{:style => "clear:both;"} + + :coffeescript + + adjustment = "" + + $('.gallery_images').sortable({ + itemSelector:".gallery_image", + containerSelector :".gallery_images", + nested:true, + placeholder:"
      ", + onDragStart: ($item, container, _super) -> + $("body").addClass("dragging") + + offset = $item.offset() + pointer = container.rootGroup.pointer + adjustment = { + left: pointer.left - offset.left, + top: pointer.top - offset.top + } + onDrag: ($item, position, _super) -> + + $item.css({ + + left: position.left - adjustment.left, + top: position.top - adjustment.top - $(window).scrollTop() + + }) + + onDrop: ($item, container, _super) -> + + $item.removeClass("dragged").removeAttr("style") + $("body").removeClass("dragging") + + result = [] + container.el.find(".gallery_image").each -> + result.push $(this).data("id") + + + + + $.ajax({ + url:"/portlet/gallery_images/reorder.js", + type: "GET", + data: { + order : result + } + + }) + }); + + + + +-else + -if input.style == 4 + %ul#portfolio-filter + + %li + %a.current{:href => "#all"} Tous + + -input.tags.each do |tag| + %li + %a{:href => "##{tag.to_slug}"}= tag + + + + %ul#portfolio-list + -input.gallery_images.each do |gallery_images| + %li{:class => gallery_images.tags_class}=link_to image_tag(gallery_images.image_file.file.square.url),gallery_images.image_file.file.large.url, :title => "#{gallery_images.title}", :rel => "prettyPhoto" + + + :coffeescript + $('#portfolio-list').filterable({ + animationSpeed: 300, + show: { height: 'show',width: 'show' }, + hide: { height: 'hide' ,width: 'hide'} + }) + + + + -if input.style == 3 + .portlet.input + .gallery_images + -input.gallery_images.each do |gallery_images| + =link_to image_tag(gallery_images.image_file.file.square.url, :alt => "#{gallery_images.title}"), gallery_images.image_file.file.large.url, :rel => "prettyPhoto" + %p{:style => "clear:both;"} + + + -elsif input.style==2 +
      + + #slider + +
      + +
      +
      + + + + -elsif input.style==1 + .portlet.input + %table.gallery_images + =raw "" + + - i = 0 + -input.gallery_images.each do |gallery_images| + - i = i+1 + + %td=link_to image_tag(gallery_images.image_file.file.large.medium.small.thumb.url, :alt => "#{gallery_images.title}"), gallery_images.image_file.file.large.url, :rel => "prettyPhoto" + + -if i % 4 == 0 + =raw "" + + + =raw "" + \ No newline at end of file diff --git a/app/views/portlets/render_public/_htmlcontent.html.haml b/app/views/portlets/render_public/_htmlcontent.html.haml new file mode 100644 index 0000000..edf5dc6 --- /dev/null +++ b/app/views/portlets/render_public/_htmlcontent.html.haml @@ -0,0 +1,5 @@ + +-begin + =render :inline => input.content, :type => input.content_type +-rescue Exception=>e + =raw "



      " \ No newline at end of file diff --git a/app/views/portlets/render_public/_imagecontent.html.haml b/app/views/portlets/render_public/_imagecontent.html.haml new file mode 100644 index 0000000..57f456a --- /dev/null +++ b/app/views/portlets/render_public/_imagecontent.html.haml @@ -0,0 +1,51 @@ + +-if input.image_file + + -if input.style== "1" + -url =input.image_file.file.large.medium.url + + -elsif input.style== "2" + -url =input.image_file.file.large.medium.small.url + + -elsif input.style== "3" + -url =input.image_file.file.square.url + + -elsif input.style== "4" + -url =input.image_file.file.large.medium.small.thumb.url + + -elsif input.style== "5" + -url =input.image_file.file.large.url + + + +-else + -url ="" + +-url = "http://"+request.host_with_port+url +-style = "" +-style = "text-align:center;" if input.alignement == "center" + + +-style = "float:right;" if input.alignement == "right" + + +-style = "float:left;" if input.alignement == "left" + +- if input.cible + -link = input.cible.cible_url + +-styleimg="" +-styleimg += "width:"+input.width.to_s+"px;" if input.width? +-styleimg += "height:"+input.height.to_s+"px;" if input.height? + +%p.img{:style =>style} + -if link + + =link_to image_tag(url, :alt => input.alt.to_s, :style => styleimg ), link, :title => input.alt.to_s, :target => (input.popup ? "_blank" : "") + + + -elsif input.expandable + =link_to image_tag(url, :alt => input.alt.to_s, :style => styleimg ), (input.image_file ? input.image_file.file.large.url : ""), :rel => "prettyPhoto", :title => input.alt.to_s + + -else + =image_tag(url, :alt => input.alt.to_s, :style => styleimg ) diff --git a/app/views/portlets/render_public/_imglinkcontent.html.haml b/app/views/portlets/render_public/_imglinkcontent.html.haml new file mode 100644 index 0000000..673a185 --- /dev/null +++ b/app/views/portlets/render_public/_imglinkcontent.html.haml @@ -0,0 +1,27 @@ +.img_link_portlet + + - if input.cible + -url = input.cible.cible_url + + .image_file + =link_to image_tag(input.image_file.file.square.url), url if input.image_file + + .title + %h3=link_to input.title, url + .description + = link_to simple_format(input.description), url + .clear + + + -else + + + .image_file + =image_tag(input.image_file.file.square.url) if input.image_file + + .title + %h3=input.title + .description + = simple_format(input.description) + .clear + diff --git a/app/views/portlets/render_public/_linkcontent.html.haml b/app/views/portlets/render_public/_linkcontent.html.haml new file mode 100644 index 0000000..6cf9229 --- /dev/null +++ b/app/views/portlets/render_public/_linkcontent.html.haml @@ -0,0 +1,6 @@ +.portlet.link_content + - if input.cible + -url = input.cible.cible_url + -else + -url = "" + =link_to input.name.to_s, url.to_s, :class => "external_link", :target => ("_blank" if input.popup).to_s \ No newline at end of file diff --git a/app/views/portlets/render_public/_mapcontent.html.haml b/app/views/portlets/render_public/_mapcontent.html.haml new file mode 100644 index 0000000..7fd76a6 --- /dev/null +++ b/app/views/portlets/render_public/_mapcontent.html.haml @@ -0,0 +1,64 @@ +#map_content_map.map_content_map{:id => input.id, :style => "width:100%; height:400px;margin:auto;"} + + + + \ No newline at end of file diff --git a/app/views/portlets/render_public/_tablecontent.html.haml b/app/views/portlets/render_public/_tablecontent.html.haml new file mode 100644 index 0000000..bed8375 --- /dev/null +++ b/app/views/portlets/render_public/_tablecontent.html.haml @@ -0,0 +1,74 @@ +-if admin + + + + + + %table + -table_rows = input.table_rows + %tr + -i = 0 + -input.nbr_cols.times do + -i += 1 + %td.add_col{:style => "text-align:center;"} + + .btn-group + %a.btn.dropdown-toggle{:href => "#", :data => {:toggle => "dropdown"}} + = i(:cog) + + %ul.dropdown-menu + %li=link_to "Ajouter une colonne avant", portlet_table_cols_path(:position => i, :table_content_id =>input.id ), :method => :post, :remote => true + + %li=link_to "Ajouter une colonne après", portlet_table_cols_path(:position => i+1, :table_content_id =>input.id ), :method => :post, :remote => true + + -if input.nbr_cols > 1 + %li=link_to "Supprimer cette colonne", portlet_table_col_path(:id => i, :table_content_id =>input.id ), :method => :delete, :remote => true, :confirm => "Voulez-vous vraiment supprimer cette colonne ?" + + + %td + + -table_rows.each do |table_row| + %tr{:id => table_row.id} + + + -CelTable.where(:table_row_id => table_row.id).order("position ASC").each do |cel_table| + + %td.input_cel{:id => cel_table.id, :style => "border:1px solid black;"} + + =render :partial => "admin/blocks/block", :locals => {:block => cel_table.block, :sortable => false} + + %td.add_cel + + .btn-group{:style => "position:relative;"} + %a.btn.dropdown-toggle{:href => "#", :data => {:toggle => "dropdown"}} + = i(:cog) + + %ul.dropdown-menu{:style => "position:absolute;right:40px !important;left:auto !important;top:-2px !important;"} + %li=link_to "Ajouter un rang avant", portlet_table_rows_path(:table_row => {:table_content_id => input.id, :position => (table_row.position)}), :method => :post, :remote => true + + %li=link_to "Ajouter un rang après", portlet_table_rows_path(:table_row => {:table_content_id => input.id, :position => (table_row.position+1)}), :method => :post, :remote => true + -if input.nbr_rows > 1 + %li=link_to "Supprimer ce rang", portlet_table_row_path(table_row), :method => :delete, :remote => true, :confirm => "Voulez-vous vraiment supprimer ce rang ?" + + + + + +-else + + %table + -table_rows = input.table_rows + + + -table_rows.each do |table_row| + %tr + + -table_row.cel_tables.each do |cel_table| + + %td + + =render cel_table.block + + + + diff --git a/app/views/portlets/render_public/_textcontent.html.haml b/app/views/portlets/render_public/_textcontent.html.haml new file mode 100644 index 0000000..81883ed --- /dev/null +++ b/app/views/portlets/render_public/_textcontent.html.haml @@ -0,0 +1 @@ +=raw(input.content) \ No newline at end of file diff --git a/app/views/portlets/render_public/_titlecontent.html.haml b/app/views/portlets/render_public/_titlecontent.html.haml new file mode 100644 index 0000000..72e2a08 --- /dev/null +++ b/app/views/portlets/render_public/_titlecontent.html.haml @@ -0,0 +1,5 @@ +-level = (input.level || "1").to_s + +=raw '" +=input.content +=raw '" diff --git a/app/views/public/articles/_article.html.haml b/app/views/public/articles/_article.html.haml new file mode 100644 index 0000000..da4815d --- /dev/null +++ b/app/views/public/articles/_article.html.haml @@ -0,0 +1,19 @@ +%article + + + %h2=article.title + + %time.updated{:datetime => Time.now, :pubdate => true} + Écrit + ="le "+l(article.published_at, :format => :human_date) + + + + -if article.description + %p.desc + %strong + = article.description + + %hr + + =render article.block \ No newline at end of file diff --git a/app/views/public/articles/_article_intro.html.haml b/app/views/public/articles/_article_intro.html.haml new file mode 100644 index 0000000..ffe51ee --- /dev/null +++ b/app/views/public/articles/_article_intro.html.haml @@ -0,0 +1,35 @@ +%article + + %header + + %aside + + + %p + Article de + %strong + + Nicolas Bally + + + %time.updated{:datetime => Time.now, :pubdate => true} + publié + ="le "+l(article.published_at, :format => :human_date) + + %p{:style => "margin-top:1em;"} + -if article.comments.count == 0 + =link_to "Pas de commentaires", article_path(:slug => article.slug, :anchor => "comments") + -elsif article.comments.count == 1 + =link_to "1 commentaire", article_path(:slug => article.slug, :anchor => "comments") + -else + =link_to "#{article.comments.count} commentaires", article_path(:slug => article.slug, :anchor => "comments") + + + + + %h1=link_to article.title, article_path(:slug => article.slug), :title => "blog conseil en image : "+article.title.to_s + + %h2= article.description + + =render article.block + diff --git a/app/views/public/articles/_index.html.haml b/app/views/public/articles/_index.html.haml new file mode 100644 index 0000000..5cfb199 --- /dev/null +++ b/app/views/public/articles/_index.html.haml @@ -0,0 +1,6 @@ + + +%h1 Nouvelles pélerines +=render :partial => "public/articles/article", :collection => @articles, :as => "article" +#articles_pagination= paginate @articles + diff --git a/app/views/public/articles/_sidebar_archives.html.haml b/app/views/public/articles/_sidebar_archives.html.haml new file mode 100644 index 0000000..dd74ee3 --- /dev/null +++ b/app/views/public/articles/_sidebar_archives.html.haml @@ -0,0 +1,16 @@ + +%h3 Archives + + +%ul + -first_month = Article.where(:enabled => true).order(:published_at).first.published_at.beginning_of_month + -last_month = Article.where(:enabled => true).order(:published_at).last.published_at.beginning_of_month + -the_month = last_month + + -while the_month >= first_month + -articles = Article.where("enabled = ? and published_at > ? and published_at < ?", true, the_month.beginning_of_month, the_month.end_of_month ).count + + -if articles > 0 + %li=link_to l(the_month.to_date, :format => :only_month)+" (#{articles})", archive_public_article_path(:year => the_month.year, :month => the_month.month) + + -the_month = the_month.prev_month \ No newline at end of file diff --git a/app/views/public/articles/_sidebar_categories.html.haml b/app/views/public/articles/_sidebar_categories.html.haml new file mode 100644 index 0000000..f77226e --- /dev/null +++ b/app/views/public/articles/_sidebar_categories.html.haml @@ -0,0 +1,7 @@ + +.categories.widget + %h3 Catégories + %ul + -Category.order(:name).each do |category| + %li + =link_to category.name+" (#{category.articles.recents.count})", category_public_article_path(:slug => category.slug), :title => "Conseil en image : articles de la catégorie \""+category.name.to_s+'"' diff --git a/app/views/public/articles/_sidebar_recents.html.haml b/app/views/public/articles/_sidebar_recents.html.haml new file mode 100644 index 0000000..7f7bb0b --- /dev/null +++ b/app/views/public/articles/_sidebar_recents.html.haml @@ -0,0 +1,8 @@ + +.recents.widget + %h3 Articles récents + %ul + -Article.recents.limit(10).each do |article| + %li= link_to article.title, article_path(:slug => article.slug),:title => "Blog conseil en image - "+article.title.to_s + + \ No newline at end of file diff --git a/app/views/public/articles/_sidebar_tags.html.haml b/app/views/public/articles/_sidebar_tags.html.haml new file mode 100644 index 0000000..8717ac4 --- /dev/null +++ b/app/views/public/articles/_sidebar_tags.html.haml @@ -0,0 +1,8 @@ + +.tags.widget + %h2 Tags + %ul + -Tag.order(:name).each do |tag| + %li + =link_to tag.name+" (#{tag.recents_articles.count})", public_tag_path(tag.slug), :title => "Conseil en image : articles avec le tag \""+tag.name.to_s+'"' + \ No newline at end of file diff --git a/app/views/public/articles/feed.rss.builder b/app/views/public/articles/feed.rss.builder new file mode 100644 index 0000000..0c46de4 --- /dev/null +++ b/app/views/public/articles/feed.rss.builder @@ -0,0 +1,22 @@ + + + +xml.instruct! :xml, :version => "1.0" +xml.rss :version => "2.0" do + xml.channel do + xml.title "Blog de Nicolas Bally" + xml.description "" + xml.link "http://blog.nicolasbally.com" + + for article in @articles + xml.item do + xml.title article.title + xml.description( (image_tag(article.image_file.file.large.medium.small.url) if article.image_file).to_s+simple_format(article.description)) + xml.pubDate article.published_at.to_s(:rfc822) + xml.link article_url(:slug => article.slug) + xml.guid article_url(:slug => article.slug) + end + end + end +end + diff --git a/app/views/public/articles/index.html.haml b/app/views/public/articles/index.html.haml new file mode 100644 index 0000000..7eac5fd --- /dev/null +++ b/app/views/public/articles/index.html.haml @@ -0,0 +1 @@ +=render :partial => "index" \ No newline at end of file diff --git a/app/views/public/articles/index.js.erb b/app/views/public/articles/index.js.erb new file mode 100644 index 0000000..dd08136 --- /dev/null +++ b/app/views/public/articles/index.js.erb @@ -0,0 +1,50 @@ + +$('#main_content').fadeOut({ + + complete:function(){ + + + $("#main_content").html('<%=escape_javascript(render(:partial => "index"))%>') + + $("#menu_top").html("<%= escape_javascript(render(:partial => "public/shared/first_menu") )%>"); + + + <% if content_for?(:bandeau) %>; + $("#bandeau").html("<%= escape_javascript(render(:partial => "bandeau") )%>"); + $("#bandeau").fadeIn() + $("#main").addClass("with_banner"); + + <% else %> + $("#bandeau").fadeOut() + $("#main").removeClass("with_banner"); + + <% end %> + + + + var stateObj = { url: "<%=request.fullpath%>" }; + if(popstat == false){ + history.pushState(stateObj, "", "<%=request.fullpath%>"); + }else{ + popstat = false; + } + window.onpopstate = function(event) { + popstat= true; + + if(event && event.state) { + $.ajax({url:event.state.url,dataType:"script"}); + + } + } + + + $('#main').fadeIn(500); + $('#accueil').fadeOut(500); + $('#color_background').fadeIn(500); + $(this).fadeIn(500); + + $("#top").removeClass("acceuil"); + +} + +}); \ No newline at end of file diff --git a/app/views/public/articles/show.html.haml b/app/views/public/articles/show.html.haml new file mode 100644 index 0000000..10fae37 --- /dev/null +++ b/app/views/public/articles/show.html.haml @@ -0,0 +1,23 @@ + +=render :partial => "public/articles/article_intro", :locals => {:article => @article} +.share_in_social + =link_to image_tag("front/twitter_dark.png", :mouseover => "front/twitter_active.png" ), "http://twitter.com/intent/tweet?source=sharethiscom&text=Blog de Nicolas Bally : "+@article.title+"&url="+article_url(:slug => @article.slug), :target => "_blank",:title => "partager sur twitter l'article du blog de Nicolas Bally : "+@article.title.to_s + =link_to image_tag("front/facebook_dark.png", :mouseover => "front/facebook_active.png"), "https://www.facebook.com/sharer.php?u="+article_url(:slug => @article.slug)+"&t=Blog de Nicolas Bally : "+@article.title+"", :target => "_blank",:title => "partager sur facebook l'article du blog de Nicolas Bally : "+@article.title.to_s + =link_to image_tag("front/viadeo_dark.png", :mouseover => "front/viadeo_active.png"), "http://www.viadeo.com/shareit/share/?url="+article_url(:slug => @article.slug)+"&title=Blog de Nicolas Bally : "+@article.title+"", :target => "_blank",:title => "partager sur viadeo l'article du blog de Nicolas Bally : "+@article.title.to_s + =link_to image_tag("front/in_dark.png", :mouseover => "front/in_active.png"), "http://www.linkedin.com/shareArticle?mini=true&summary="+@article.description+"&url="+article_url(:slug => @article.slug)+"&title=Blog de Nicolas Bally : "+@article.title+"", :target => "_blank",:title => "partager sur linked in l'article du blog de Nicolas Bally : "+@article.title.to_s + + + +#comments + %h2 Commentaires + =render :partial => "public/comments/comment", :collection => @article.comments.recents + +#comment_form.background_opacity.padding_20 + =render :partial => "public/comments/form" + + + + + + + \ No newline at end of file diff --git a/app/views/public/artworks/_artwork.html.haml b/app/views/public/artworks/_artwork.html.haml new file mode 100644 index 0000000..d5659c5 --- /dev/null +++ b/app/views/public/artworks/_artwork.html.haml @@ -0,0 +1,22 @@ + +%hr + +#artwork.artwork.close_large{:id => artwork.id, :onclick => "if($(this).closest('#large_place').length == 0){$('#large_place').html($(this).closest('.artwork').clone());$('#large_place').fadeIn();return false;}else{$(this).closest('.large_place').fadeOut();}"} + .frame.close_large + + .inner.close_large + + -artwork.artwork_images.each do |artwork_image| + .column.close_large{:style => "width:"+(100/artwork.artwork_images.size).to_s+"%;text-align:center;float:left;"} + + + .img.close_large + =image_tag(artwork_image.image.large.url) + %p{:style => "clear:both;"} + + %h3=artwork.title + %em= artwork.description + =artwork.artwork_image.image.filename + + + diff --git a/app/views/public/blocks/_block.html.haml b/app/views/public/blocks/_block.html.haml new file mode 100644 index 0000000..bf565ed --- /dev/null +++ b/app/views/public/blocks/_block.html.haml @@ -0,0 +1,5 @@ +.row-fluid + -block.portlets.each do |p| + -if p.content_type + + =render :partial => "portlets/render_public/"+p.content_type.to_s.downcase, :locals => {:admin => false,:input => p.content} \ No newline at end of file diff --git a/app/views/public/comments/_comment.html.haml b/app/views/public/comments/_comment.html.haml new file mode 100644 index 0000000..f90dc24 --- /dev/null +++ b/app/views/public/comments/_comment.html.haml @@ -0,0 +1,26 @@ +.comment#comment{:class => ("author" if comment.email == "info@nicolasbally.com"), :id => comment.id} + %aside=gravatar_image_tag(comment.email? ? comment.email : comment.pseudo, :gravatar => {:default => "http://#{HOSTNAME}/assets/front/default_avatar.jpg"}) + + + %p.header + + Commentaire de + %strong + + -if comment.website? + =link_to comment.pseudo, comment.website, :target => "_blank" + -else + =comment.pseudo + + %time.updated{:datetime => Time.now, :pubdate => true} + envoyé + ="le "+l(comment.created_at, :format => :human_date) + + + + + %blockquote=simple_format comment.comment + + + + \ No newline at end of file diff --git a/app/views/public/comments/_form.html.haml b/app/views/public/comments/_form.html.haml new file mode 100644 index 0000000..ac122f4 --- /dev/null +++ b/app/views/public/comments/_form.html.haml @@ -0,0 +1,32 @@ + +%h3 + Ajouter un commentaire + +=form_for [:public,(@comment || Comment.new(:commentable_id => @article.id, :commentable_type => "Article"))], :remote => true do |f| + =f.hidden_field :commentable_id + =f.hidden_field :commentable_type + + %p + =f.label :pseudo, "Pseudo :" + + =f.text_field :pseudo + + %p + + =f.label :email, "Email :" + =f.text_field :email + + %p + + =f.label :website, "Site :" + =f.text_field :website + + %p + + =f.label :comment, "Commentaire :" + =f.text_area :comment, :style => "width:98%;height:200px;" + + + + + =f.submit "Envoyer", :class => "submit" \ No newline at end of file diff --git a/app/views/public/comments/create.js.erb b/app/views/public/comments/create.js.erb new file mode 100644 index 0000000..b559899 --- /dev/null +++ b/app/views/public/comments/create.js.erb @@ -0,0 +1,12 @@ +$("#comment_form").html("<%= escape_javascript(render(:partial => "form")) %>"); + +$("#comments").html("<%= escape_javascript(render(@comment.commentable.comments.recents)) %>"); + + + + + + +$(document.body).animate({ + 'scrollTop': ( $("#comment_<%= @comment_id %>").offset().top - 150) +}, 700); \ No newline at end of file diff --git a/app/views/public/home/home.html.haml b/app/views/public/home/home.html.haml new file mode 100644 index 0000000..31c0cda --- /dev/null +++ b/app/views/public/home/home.html.haml @@ -0,0 +1,7 @@ + +-if @index_title + %h1=@index_title +=render :partial => "public/articles/article", :collection => @articles, :as => "article" +#articles_pagination= paginate @articles + + \ No newline at end of file diff --git a/app/views/public/menu_items/show.html.haml b/app/views/public/menu_items/show.html.haml new file mode 100644 index 0000000..9c80c6a --- /dev/null +++ b/app/views/public/menu_items/show.html.haml @@ -0,0 +1,23 @@ +-content_for :sidebar do + .menu + -if @menu_item.parent_id + -if @menu_item.ancestors.reverse[0] + -first_level_menu = @menu_item.ancestors.reverse[0] + + -else + + -first_level_menu = @menu_item + + -if first_level_menu.children.size > 0 + + %h3=menu_item_link(first_level_menu) + %ul + -first_level_menu.children.where(:enabled => true).order(:position).each do |menu_item| + + %li=menu_item_link(menu_item) + + + + +=render :partial => "public/blocks/block", :locals => {:block => @menu_item.menu_content.blocks[0]} + diff --git a/app/views/public/menu_items/show.js.erb b/app/views/public/menu_items/show.js.erb new file mode 100644 index 0000000..e3d7a50 --- /dev/null +++ b/app/views/public/menu_items/show.js.erb @@ -0,0 +1,51 @@ + +$('#main_content').fadeOut({ + + complete:function(){ + + + $("#main_content").html('<%=escape_javascript(render(:partial => "public/blocks/block", :locals => {:block => @menu_item.menu_content.blocks[0]}))%>') + + $("#menu_top").html("<%= escape_javascript(render(:partial => "public/shared/first_menu") )%>"); + + <% if content_for?(:bandeau) %>; + $("#bandeau").html("<%= escape_javascript(render(:partial => "bandeau") )%>"); + $("#bandeau").fadeIn() + $("#main").addClass("with_banner"); + + <% else %> + $("#bandeau").fadeOut() + $("#main").removeClass("with_banner"); + + <% end %> + + var stateObj = { url: "<%=request.fullpath%>" }; + if(popstat == false){ + history.pushState(stateObj, "", "<%=request.fullpath%>"); + }else{ + popstat = false; + } + window.onpopstate = function(event) { + popstat= true; + + if(event && event.state) { + $.ajax({url:event.state.url,dataType:"script"}); + + } + } + + if("accueil" == "<%=@menu_item.slug %>"){ + $('#accueil').fadeIn(500); + $('#main').fadeOut(500); + $('#color_background').fadeOut(500); + $("#top").addClass("acceuil"); + }else{ + $('#main').fadeIn(500); + $('#accueil').fadeOut(500); + $('#color_background').fadeIn(500); + $("#top").removeClass("acceuil"); + $(this).fadeIn(500); + } +} + +}); \ No newline at end of file diff --git a/app/views/public/photos/_bandeau.html.haml b/app/views/public/photos/_bandeau.html.haml new file mode 100644 index 0000000..e7a9120 --- /dev/null +++ b/app/views/public/photos/_bandeau.html.haml @@ -0,0 +1,6 @@ +%h1.inner{:style => "margin-bottom:0.4em;"} Reposoir + +.sous-menu.inner{:style => "background:white url(/assets/front/paper2.png);padding-top:1em;padding-bottom:1em;padding-right:1em;"} + =link_to "Photos", public_photos_path, :remote => true + =link_to "Sage parole", public_quotes_path, :remote => true + =link_to "Proposer une sage parole", new_public_quote_path, :remote => true \ No newline at end of file diff --git a/app/views/public/photos/_form.html.haml b/app/views/public/photos/_form.html.haml new file mode 100644 index 0000000..e35e0b6 --- /dev/null +++ b/app/views/public/photos/_form.html.haml @@ -0,0 +1,15 @@ +=semantic_form_for [:admin, @photo], :remote => true do |f| + .content + = f.inputs do + = f.input :title, :label => "Titre :" + = f.input :description, :label => "Description :" + = f.input :tags_cache, :label => "Tags :" + + %script + $("#photo_tags_cache").select2({ + =raw'tags:'+Tag.tag_list.to_json+',' + tokenSeparators: [","]}); + + + .actions + =f.submit "Sauvegarder", :class => "btn" \ No newline at end of file diff --git a/app/views/public/photos/_index.html.haml b/app/views/public/photos/_index.html.haml new file mode 100644 index 0000000..2a3e3fc --- /dev/null +++ b/app/views/public/photos/_index.html.haml @@ -0,0 +1,43 @@ +.reposoire + -content_for :bandeau do + =render :partial => "bandeau" + + %h2 Contemplez ces images + + %p + Elles sont ici en reposoir, en pause un instant dans les dynamiques qui les animent. + %br + Entrez en résonance avec ce qui niche en chacune d’elles le temps de votre rencontre, pour une découverte en clin d’œil, un déchiffrage magique de ce qui aurait pu passer inaperçu. + %p + Si vous en êtes inspirés , oser proposer ici un titre , un thème , une parole, celle d’un poète, d’un enfant , d’un sage , la vôtre….. + %br + Alors ma plume pourra peut-être s’aventurer sur l’onde de l’harmonie ainsi réveillée et servir les résonances. + %p A bientôt ! + %br + %br + + + + + + #tags + %span.active.tag_label{ :onclick => '$(".photo").removeClass("disable");$(".photo").not(".disable").fadeIn();$(".tag_label").removeClass("active");$(this).addClass("active");'} + Toutes + -Tag.all.each do |tag| + %span.tag_label{:"data-tag_slug" => tag.slug, :onclick => '$(".photo").addClass("disable");$(".photo:regex(data-tags, .*"+$(this).data("tag_slug")+".*)").removeClass("disable");$(".photo").not(".disable").fadeIn();$(".disable").fadeOut();$(".tag_label").removeClass("active");$(this).addClass("active");'} + =tag.name + #photos=render @photos + + + + + + + + + + + + + + diff --git a/app/views/public/photos/_photo.html.haml b/app/views/public/photos/_photo.html.haml new file mode 100644 index 0000000..0f55b3c --- /dev/null +++ b/app/views/public/photos/_photo.html.haml @@ -0,0 +1,11 @@ +#photo.photo{:id => photo.id, :"data-id" => photo.id, :data => {:tags => photo.tags.map{|a| a.slug}.join(",")}} + %a{:href => public_photo_path(photo), :"data-remote" => true} + .img + =image_tag(photo.image.large.medium.small.thumb.url) + + %h3 + =photo.title + + + + \ No newline at end of file diff --git a/app/views/public/photos/_show.html.haml b/app/views/public/photos/_show.html.haml new file mode 100644 index 0000000..451a57c --- /dev/null +++ b/app/views/public/photos/_show.html.haml @@ -0,0 +1,122 @@ + + + + + + + + + +%table.large_photo + %tr + %td.prev-photo + + < + + %td.photo_place + .photo_artwork.artwork{:id => @photo.id, :style => "", :data => {:photo_thumb => "photo_"+@photo.id.to_s}} + .frame{:style => "display:inline-block;"} + .img{:style => "width:100%;float:none;"} + =image_tag(@photo.image.large.url,:style => "max-height:100%;", :class => "close_large") + + %h3 + =@photo.title + + %td.next-photo + + > + + :coffeescript + $(".next-photo").click -> + + active = $("#"+$(this).closest(".large_photo").find(".photo_artwork").data("photo-thumb")) + + + if active.next(".photo").length > 0 + $.ajax(url:active.next(".photo").find("a:first").attr("href"),dataType:"script") + else + $.ajax(url:$("#photos").children(".photo:first").find("a:first").attr("href"),dataType:"script") + + + $(".prev-photo").click -> + active = $("#"+$(this).closest(".large_photo").find(".photo_artwork").data("photo-thumb")) + + + if active.prev(".photo").length > 0 + $.ajax(url:active.prev(".photo").find("a:first").attr("href"),dataType:"script") + else + $.ajax(url:$("#photos").children(".photo:last").find("a:first").attr("href"),dataType:"script") + + + + +%p + Cette image pourrait être associée aux sages paroles suivantes, par exemple ( + =link_to "ou vous pouvez proposer une citation pour cette photo", newphoto_public_quotes_path(:photo_id => @photo.id), :remote => true + ): +.photo_quotes + + + %table + %tr + %td.prev-quote + + < + + %td.quotes + + =render Quote.where(:enabled => true, :photo_id => @photo.id).all + -if @photo.tags.size > 0 + -quotes = Quote.joins(:tag_taggables).where(["enabled = ? and (photo_id <> ? or photo_id IS NULL)",true, @photo.id]).where("tag_taggables.taggable_type == 'Quote' and tag_taggables.tag_id in (?)", @photo.tag_ids).group(:id) + -else + -quotes = Quote.where(["enabled = ? and (photo_id <> ? or photo_id IS NULL)",true, @photo.id]).all + -quotes.each do |quote, count| + + =render quote + :coffeescript + + $(".photo_quotes .quote").click -> + $(this).fadeOut(300) + $(this).removeClass("active") + + if $(this).next(".quote").length > 0 + $(this).next(".quote").delay(300).fadeIn(300).addClass("active") + else + $(".photo_quotes .quotes").children(".quote:first").delay(600).fadeIn(300).addClass("active") + + + $(".next-quote").click -> + active = $(".photo_quotes .active:first") + active.fadeOut(300).removeClass("active") + + if active.next(".quote").length > 0 + active.next(".quote").delay(300).fadeIn(300).addClass("active") + else + $(".photo_quotes .quotes").children(".quote:first").delay(600).fadeIn(300).addClass("active") + + $(".prev-quote").click -> + active = $(".photo_quotes .active:first") + active.fadeOut(300).removeClass("active") + + if active.prev(".quote").length > 0 + active.prev(".quote").delay(300).fadeIn(300).addClass("active") + else + $(".photo_quotes .quotes").children(".quote:last").delay(600).fadeIn(300).addClass("active") + + + + $(".photo_quotes .quotes").children(".quote:first").show().addClass("active") + + resize_photo_artwork = -> + $(".photo_artwork").delay(600).css "height", ($(window).height()- 250) + + resize_photo_artwork() + + $(window).on "resize", -> + resize_photo_artwork() + + %td.next-quote + > + + + \ No newline at end of file diff --git a/app/views/public/photos/index.html.haml b/app/views/public/photos/index.html.haml new file mode 100644 index 0000000..7eac5fd --- /dev/null +++ b/app/views/public/photos/index.html.haml @@ -0,0 +1 @@ +=render :partial => "index" \ No newline at end of file diff --git a/app/views/public/photos/index.js.erb b/app/views/public/photos/index.js.erb new file mode 100644 index 0000000..144cc9b --- /dev/null +++ b/app/views/public/photos/index.js.erb @@ -0,0 +1,51 @@ + + + + +$('#main_content').fadeOut({ + + complete:function(){ + + + $("#main_content").html('<%=escape_javascript(render(:partial => "index"))%>') + + $("#menu_top").html("<%= escape_javascript(render(:partial => "public/shared/first_menu") )%>"); + + <% if content_for?(:bandeau) %>; + $("#bandeau").html("<%= escape_javascript(render(:partial => "bandeau") )%>"); + $("#bandeau").fadeIn() + $("#main").addClass("with_banner"); + + <% else %> + $("#bandeau").fadeOut() + $("#main").removeClass("with_banner"); + + <% end %> + + + + var stateObj = { url: "<%=request.fullpath%>" }; + if(popstat == false){ + history.pushState(stateObj, "", "<%=request.fullpath%>"); + }else{ + popstat = false; + } + window.onpopstate = function(event) { + popstat= true; + + if(event && event.state) { + $.ajax({url:event.state.url,dataType:"script"}); + + } + } + + + $('#main').fadeIn(500); + $('#accueil').fadeOut(500); + $('#color_background').fadeIn(500); + $(this).fadeIn(500); + $("#top").removeClass("acceuil"); + +} + +}); \ No newline at end of file diff --git a/app/views/public/photos/show.js.erb b/app/views/public/photos/show.js.erb new file mode 100644 index 0000000..544d02e --- /dev/null +++ b/app/views/public/photos/show.js.erb @@ -0,0 +1,4 @@ +$('#large_place').html("<%=escape_javascript(render(:partial => "show"))%>"); + +$('#large_place').fadeIn(); + diff --git a/app/views/public/portfolios/_portfolio.html.haml b/app/views/public/portfolios/_portfolio.html.haml new file mode 100644 index 0000000..a1bfbb7 --- /dev/null +++ b/app/views/public/portfolios/_portfolio.html.haml @@ -0,0 +1,15 @@ +%tr#portfolio_row{:id => portfolio.id} + %td=portfolio.title + + + + + %td + = link_to i(:trash), [:admin, portfolio], :confirm => 'Voulez-vous vraiment supprimer ce portfolio ?', :method => :delete, :remote => true + + = link_to i(:pencil), edit_admin_portfolio_path(portfolio), :remote => true + = link_to i(:info), admin_portfolio_path(portfolio) + + + + \ No newline at end of file diff --git a/app/views/public/portfolios/_show.html.haml b/app/views/public/portfolios/_show.html.haml new file mode 100644 index 0000000..c88064b --- /dev/null +++ b/app/views/public/portfolios/_show.html.haml @@ -0,0 +1,28 @@ +.portfolio + %h1= @portfolio.title + =raw @portfolio.description + + + + + + + + + + #artworks=render @portfolio.artworks + + + :coffeescript + + resize_artworks = -> + $(".artwork .column img").css("max-height", ($(window).height()-130)+"px") + + resize_artworks() + + $(window).on "resize", -> + resize_artworks() + + + + \ No newline at end of file diff --git a/app/views/public/portfolios/index.html.haml b/app/views/public/portfolios/index.html.haml new file mode 100644 index 0000000..b1eb229 --- /dev/null +++ b/app/views/public/portfolios/index.html.haml @@ -0,0 +1,38 @@ += link_to 'Ajouter un portfolio', new_admin_portfolio_path, :remote => true, :class => "btn btn-success btn-large", :style => "float:right;" +%h1 Liste des portfolios + + + + +%table.table.table-striped + %thead#Admin_rows_header.rows_header + + %tr + %td + Titre du portfolio + + + + + %td{:style => "width:100px"} +   + + + + + %tbody#portfolio_rows.rows + + =render @portfolios + + + + + + + + + + + + + diff --git a/app/views/public/portfolios/show.html.haml b/app/views/public/portfolios/show.html.haml new file mode 100644 index 0000000..eca5e0d --- /dev/null +++ b/app/views/public/portfolios/show.html.haml @@ -0,0 +1 @@ +=render :partial => "show" \ No newline at end of file diff --git a/app/views/public/portfolios/show.js.erb b/app/views/public/portfolios/show.js.erb new file mode 100644 index 0000000..38ac576 --- /dev/null +++ b/app/views/public/portfolios/show.js.erb @@ -0,0 +1,50 @@ + +$('#main_content').fadeOut({ + + complete:function(){ + + + $("#main_content").html('<%=escape_javascript(render(:partial => "show"))%>') + + $("#menu_top").html("<%= escape_javascript(render(:partial => "public/shared/first_menu") )%>"); + + + <% if content_for?(:bandeau) %>; + $("#bandeau").html("<%= escape_javascript(render(:partial => "bandeau") )%>"); + $("#bandeau").fadeIn() + $("#main").addClass("with_banner"); + + <% else %> + $("#bandeau").fadeOut() + $("#main").removeClass("with_banner"); + + <% end %> + + + + var stateObj = { url: "<%=request.fullpath%>" }; + if(popstat == false){ + history.pushState(stateObj, "", "<%=request.fullpath%>"); + }else{ + popstat = false; + } + window.onpopstate = function(event) { + popstat= true; + + if(event && event.state) { + $.ajax({url:event.state.url,dataType:"script"}); + + } + } + + + $('#main').fadeIn(500); + $('#accueil').fadeOut(500); + $('#color_background').fadeIn(500); + $(this).fadeIn(500); + + $("#top").removeClass("acceuil"); + +} + +}); \ No newline at end of file diff --git a/app/views/public/quotes/_bandeau.html.haml b/app/views/public/quotes/_bandeau.html.haml new file mode 100644 index 0000000..c7812a7 --- /dev/null +++ b/app/views/public/quotes/_bandeau.html.haml @@ -0,0 +1,6 @@ +%h1.inner{:style => "margin-bottom:0.4em;"} Reposoir + +.sous-menu.inner{:style => "background:white url(/assets/front/paper2.png);padding-top:1em;padding-bottom:1em;padding-right:1em;"} + =link_to "Photos", public_photos_path, :remote => true + =link_to "Sages paroles", public_quotes_path, :remote => true + =link_to "Proposer une sage parole", new_public_quote_path, :remote => true \ No newline at end of file diff --git a/app/views/public/quotes/_create.html.haml b/app/views/public/quotes/_create.html.haml new file mode 100644 index 0000000..1d4e52f --- /dev/null +++ b/app/views/public/quotes/_create.html.haml @@ -0,0 +1,22 @@ +.reposoire + + + + -content_for :bandeau do + =render :partial => "bandeau" + + + %p Merci beaucoup pour votre participation ! + + + + + + + + + + + + + diff --git a/app/views/public/quotes/_create_photo.html.haml b/app/views/public/quotes/_create_photo.html.haml new file mode 100644 index 0000000..f459a23 --- /dev/null +++ b/app/views/public/quotes/_create_photo.html.haml @@ -0,0 +1,9 @@ +.photo_artwork.artwork{:id => @photo.id, :style => ""} + .frame + .img{:style => "width:100%;float:none;"} + =image_tag(@photo.image.large.url,:style => "max-height:100%;", :class => "close_large") + + %h3 + =@photo.title + +%h3 Merci pour votre participation ! \ No newline at end of file diff --git a/app/views/public/quotes/_form.html.haml b/app/views/public/quotes/_form.html.haml new file mode 100644 index 0000000..2a7a5f7 --- /dev/null +++ b/app/views/public/quotes/_form.html.haml @@ -0,0 +1,15 @@ +=form_for [:public, @quote], :url => createphoto_public_quotes_path, :remote => true do |f| + =f.hidden_field :photo_id + %p + =f.label :quote, "Citation :" + =f.text_area :quote, :style => "width:100%;height:100px;" + %p + =f.label :author, "Auteur de la citation :" + + =f.text_field :author, :style => "width:100%;" + + =f.submit "envoyer", :class => "btn" + + + + diff --git a/app/views/public/quotes/_index.html.haml b/app/views/public/quotes/_index.html.haml new file mode 100644 index 0000000..5fca32a --- /dev/null +++ b/app/views/public/quotes/_index.html.haml @@ -0,0 +1,36 @@ +.reposoire + + + + -content_for :bandeau do + =render :partial => "bandeau" + + + + + + #tags + %span.active.tag_label{ :onclick => '$(".quote").removeClass("disable");$(".quote").not(".disable").fadeIn();$(".tag_label").removeClass("active");$(this).addClass("active");'} + Toutes + -Tag.all.each do |tag| + %span.tag_label{:"data-tag_slug" => tag.slug, :onclick => '$(".quote").addClass("disable");$(".quote:regex(data-tags, .*"+$(this).data("tag_slug")+".*)").removeClass("disable");$(".quote").not(".disable").fadeIn();$(".disable").fadeOut();$(".tag_label").removeClass("active");$(this).addClass("active");'} + =tag.name + + #quotes=render @quotes + + + + + + + + + + + + + + + + + diff --git a/app/views/public/quotes/_new.html.haml b/app/views/public/quotes/_new.html.haml new file mode 100644 index 0000000..f808d50 --- /dev/null +++ b/app/views/public/quotes/_new.html.haml @@ -0,0 +1,24 @@ +.reposoire + + + + -content_for :bandeau do + =render :partial => "bandeau" + + + %h2 Proposer une sage parole + %p Vous pouvez me proposer une citation. Elle figurera dans le reposoire après validation. Merci ! + + =image_tag "front/reposoir.jpg" + + + =render :partial => "form" + + + + + + + + + diff --git a/app/views/public/quotes/_new_photo.html.haml b/app/views/public/quotes/_new_photo.html.haml new file mode 100644 index 0000000..ac24616 --- /dev/null +++ b/app/views/public/quotes/_new_photo.html.haml @@ -0,0 +1,11 @@ +.row-fluid + .span6 + .photo_artwork.artwork{:id => @photo.id, :style => ""} + .frame + .img{:style => "width:100%;float:none;"} + =link_to image_tag(@photo.image.large.url,:style => "max-height:100%;"), public_photo_path(@photo.id), :remote => true + + %h3 + =@photo.title + .span6 + =render :partial => "form" \ No newline at end of file diff --git a/app/views/public/quotes/_quote.html.haml b/app/views/public/quotes/_quote.html.haml new file mode 100644 index 0000000..b0dbdb9 --- /dev/null +++ b/app/views/public/quotes/_quote.html.haml @@ -0,0 +1,5 @@ +.quote#quote{:id => quote.id, :data => {:tags => quote.tags.map{|a| a.slug}.join(",")}} + %h3 + =quote.quote + %p.author + =quote.author diff --git a/app/views/public/quotes/_tags.html.haml b/app/views/public/quotes/_tags.html.haml new file mode 100644 index 0000000..f00374e --- /dev/null +++ b/app/views/public/quotes/_tags.html.haml @@ -0,0 +1,14 @@ +#tags + -Tag.order(:name).all.each do |tag| + .tag_label#tag_label{:"data-tag_id" => tag.id, :id => tag.id} + =tag.name + =i(:"level-up", :icon => false) + + +:coffeescript + + if typeof(tag_id) != 'undefined' + $(".set_tag").show() + $.each tag_id, (i,a) -> + $("#tag_label_"+a).addClass("active") + \ No newline at end of file diff --git a/app/views/public/quotes/create.html.haml b/app/views/public/quotes/create.html.haml new file mode 100644 index 0000000..3052edd --- /dev/null +++ b/app/views/public/quotes/create.html.haml @@ -0,0 +1 @@ +=render :partial => "create" \ No newline at end of file diff --git a/app/views/public/quotes/create.js.erb b/app/views/public/quotes/create.js.erb new file mode 100644 index 0000000..86c4ec2 --- /dev/null +++ b/app/views/public/quotes/create.js.erb @@ -0,0 +1,50 @@ + + + + +$('#main_content').fadeOut({ + + complete:function(){ + + + $("#main_content").html('<%=escape_javascript(render(:partial => "create"))%>') + + $("#menu_top").html("<%= escape_javascript(render(:partial => "public/shared/first_menu") )%>"); + + <% if content_for?(:bandeau) %>; + $("#bandeau").html("<%= escape_javascript(render(:partial => "bandeau") )%>"); + $("#bandeau").fadeIn() + $("#main").addClass("with_banner"); + + <% else %> + $("#bandeau").fadeOut() + $("#main").removeClass("with_banner"); + + <% end %> + + + + var stateObj = { url: "<%=request.fullpath%>" }; + if(popstat == false){ + history.pushState(stateObj, "", "<%=request.fullpath%>"); + }else{ + popstat = false; + } + window.onpopstate = function(event) { + popstat= true; + + if(event && event.state) { + $.ajax({url:event.state.url,dataType:"script"}); + + } + } + + + $('#main').fadeIn(500); + $('#accueil').fadeOut(500); + $('#color_background').fadeIn(500); + $(this).fadeIn(500); + $("#top").removeClass("acceuil"); +} + +}); diff --git a/app/views/public/quotes/createphoto.js.erb b/app/views/public/quotes/createphoto.js.erb new file mode 100644 index 0000000..03dd9ac --- /dev/null +++ b/app/views/public/quotes/createphoto.js.erb @@ -0,0 +1,3 @@ +$('#large_place').html("<%=escape_javascript(render(:partial => "create_photo"))%>"); + +$('#large_place').fadeIn(); diff --git a/app/views/public/quotes/destroy.js.erb b/app/views/public/quotes/destroy.js.erb new file mode 100644 index 0000000..358be5d --- /dev/null +++ b/app/views/public/quotes/destroy.js.erb @@ -0,0 +1,2 @@ +$('#quote_row_<%= @quote.id %>').remove(); +$('#tags').replaceWith("<%= escape_javascript(render(:partial => 'tags'))%>"); \ No newline at end of file diff --git a/app/views/public/quotes/edit.js.erb b/app/views/public/quotes/edit.js.erb new file mode 100644 index 0000000..383e5d9 --- /dev/null +++ b/app/views/public/quotes/edit.js.erb @@ -0,0 +1,2 @@ + +show_pane_hover("<%= escape_javascript(render(:partial => "form"))%>",550,600); diff --git a/app/views/public/quotes/index.html.haml b/app/views/public/quotes/index.html.haml new file mode 100644 index 0000000..7eac5fd --- /dev/null +++ b/app/views/public/quotes/index.html.haml @@ -0,0 +1 @@ +=render :partial => "index" \ No newline at end of file diff --git a/app/views/public/quotes/index.js.erb b/app/views/public/quotes/index.js.erb new file mode 100644 index 0000000..e351033 --- /dev/null +++ b/app/views/public/quotes/index.js.erb @@ -0,0 +1,50 @@ + + + + +$('#main_content').fadeOut({ + + complete:function(){ + + + $("#main_content").html('<%=escape_javascript(render(:partial => "index"))%>') + + $("#menu_top").html("<%= escape_javascript(render(:partial => "public/shared/first_menu") )%>"); + + <% if content_for?(:bandeau) %>; + $("#bandeau").html("<%= escape_javascript(render(:partial => "bandeau") )%>"); + $("#bandeau").fadeIn() + $("#main").addClass("with_banner"); + + <% else %> + $("#bandeau").fadeOut() + $("#main").removeClass("with_banner"); + + <% end %> + + + + var stateObj = { url: "<%=request.fullpath%>" }; + if(popstat == false){ + history.pushState(stateObj, "", "<%=request.fullpath%>"); + }else{ + popstat = false; + } + window.onpopstate = function(event) { + popstat= true; + + if(event && event.state) { + $.ajax({url:event.state.url,dataType:"script"}); + + } + } + + + $('#main').fadeIn(500); + $('#accueil').fadeOut(500); + $('#color_background').fadeIn(500); + $(this).fadeIn(500); + $("#top").removeClass("acceuil"); +} + +}); \ No newline at end of file diff --git a/app/views/public/quotes/new.html.haml b/app/views/public/quotes/new.html.haml new file mode 100644 index 0000000..7f0d1b9 --- /dev/null +++ b/app/views/public/quotes/new.html.haml @@ -0,0 +1 @@ +=render :partial => "new" \ No newline at end of file diff --git a/app/views/public/quotes/new.js.erb b/app/views/public/quotes/new.js.erb new file mode 100644 index 0000000..73f5a50 --- /dev/null +++ b/app/views/public/quotes/new.js.erb @@ -0,0 +1,50 @@ + + + + +$('#main_content').fadeOut({ + + complete:function(){ + + + $("#main_content").html('<%=escape_javascript(render(:partial => "new"))%>') + + $("#menu_top").html("<%= escape_javascript(render(:partial => "public/shared/first_menu") )%>"); + + <% if content_for?(:bandeau) %>; + $("#bandeau").html("<%= escape_javascript(render(:partial => "bandeau") )%>"); + $("#bandeau").fadeIn() + $("#main").addClass("with_banner"); + + <% else %> + $("#bandeau").fadeOut() + $("#main").removeClass("with_banner"); + + <% end %> + + + + var stateObj = { url: "<%=request.fullpath%>" }; + if(popstat == false){ + history.pushState(stateObj, "", "<%=request.fullpath%>"); + }else{ + popstat = false; + } + window.onpopstate = function(event) { + popstat= true; + + if(event && event.state) { + $.ajax({url:event.state.url,dataType:"script"}); + + } + } + + + $('#main').fadeIn(500); + $('#accueil').fadeOut(500); + $('#color_background').fadeIn(500); + $(this).fadeIn(500); + $("#top").removeClass("acceuil"); +} + +}); \ No newline at end of file diff --git a/app/views/public/quotes/newphoto.js.erb b/app/views/public/quotes/newphoto.js.erb new file mode 100644 index 0000000..daf65b9 --- /dev/null +++ b/app/views/public/quotes/newphoto.js.erb @@ -0,0 +1,3 @@ +$('#large_place').html("<%=escape_javascript(render(:partial => "new_photo"))%>"); + +$('#large_place').fadeIn(); diff --git a/app/views/public/quotes/show.html.haml b/app/views/public/quotes/show.html.haml new file mode 100644 index 0000000..e69de29 diff --git a/app/views/public/quotes/update.js.erb b/app/views/public/quotes/update.js.erb new file mode 100644 index 0000000..52eb9dd --- /dev/null +++ b/app/views/public/quotes/update.js.erb @@ -0,0 +1,3 @@ +$('#quote_row_<%= @quote.id %>').replaceWith("<%= escape_javascript(render(@quote))%>"); +$('#tags').replaceWith("<%= escape_javascript(render(:partial => 'tags'))%>"); +close_pane_hover(); \ No newline at end of file diff --git a/app/views/public/shared/_first_menu.html.haml b/app/views/public/shared/_first_menu.html.haml new file mode 100644 index 0000000..def4de7 --- /dev/null +++ b/app/views/public/shared/_first_menu.html.haml @@ -0,0 +1,16 @@ + +-MenuItem.where(:parent_id => nil, :enabled => true).order(:position).each do |menu_item| + -if menu_item.slug != "accueil" + =menu_item_link(menu_item) + %br + +%hr + +=link_to "Nouvelles pélerines", public_articles_path(), :remote => true +%br +%hr +-Portfolio.order(:title).all.each do |portfolio| + =link_to portfolio.title, public_portfolio_path(:id => portfolio.slug), :remote => true, :class => ("active" if @portfolio and @portfolio == portfolio) + %br +%hr +=link_to "Reposoir", public_photos_path, :remote => true diff --git a/app/views/public/shared/_ga.html.erb b/app/views/public/shared/_ga.html.erb new file mode 100644 index 0000000..f47f676 --- /dev/null +++ b/app/views/public/shared/_ga.html.erb @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/bin/bundle b/bin/bundle new file mode 100755 index 0000000..66e9889 --- /dev/null +++ b/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/bin/rails b/bin/rails new file mode 100755 index 0000000..728cd85 --- /dev/null +++ b/bin/rails @@ -0,0 +1,4 @@ +#!/usr/bin/env ruby +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/bin/rake b/bin/rake new file mode 100755 index 0000000..1724048 --- /dev/null +++ b/bin/rake @@ -0,0 +1,4 @@ +#!/usr/bin/env ruby +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/config.ru b/config.ru new file mode 100644 index 0000000..5bc2a61 --- /dev/null +++ b/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 0000000..d4528c9 --- /dev/null +++ b/config/application.rb @@ -0,0 +1,26 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(:default, Rails.env) + +module CMSnb + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + config.time_zone = 'Paris' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + config.i18n.default_locale = :fr + + config.assets.precompile += %w(public.css public.js admin.css admin.js admin_auth.css) + + end +end diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 0000000..3596736 --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,4 @@ +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) diff --git a/config/compass.rb b/config/compass.rb new file mode 100644 index 0000000..2b22d5d --- /dev/null +++ b/config/compass.rb @@ -0,0 +1,2 @@ +# Require any additional compass plugins here. +project_type = :rails diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 0000000..51a4dd4 --- /dev/null +++ b/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +development: + adapter: sqlite3 + database: db/development.sqlite3 + pool: 5 + timeout: 5000 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + adapter: sqlite3 + database: db/test.sqlite3 + pool: 5 + timeout: 5000 + +production: + adapter: sqlite3 + database: db/production.sqlite3 + pool: 5 + timeout: 5000 diff --git a/config/deploy.rb b/config/deploy.rb new file mode 100644 index 0000000..e953513 --- /dev/null +++ b/config/deploy.rb @@ -0,0 +1,137 @@ + + +set :application, 'danielle_app' +set :user, 'web' +set :scm_user, "git" +set :scm_host, "gitlab.bally.me" + + +set :domain, 'test.script-art.net' + +set :rvm_ruby_string, 'ruby-2.0.0-p195' +set :rvm_autolibs_flag, "read-only" + +set :bundle_cmd, "/home/#{user}/.rvm/gems/#{rvm_ruby_string}@global/bin/bundle" +set :bundle_dir, "/home/#{user}/.rvm/gems/#{rvm_ruby_string}" +set :use_sudo, false + + + + + +set :deploy_to, "/home/#{user}/#{application}/" +set :deploy_via, :remote_cache + +set :normalize_asset_timestamps, false + +set :rails_env, "production" + +role :app, domain +role :web, domain +role :db, domain, :primary => true + +set :scm, :git + +set :repository, "#{scm_user}@#{scm_host}:root/#{application}.git" + +set :branch, "master" + +default_run_options[:pty] = true + + +require "rvm/capistrano" +require 'bundler/capistrano' + + + + +load 'deploy/assets' + +namespace :deploy do + +# namespace :assets do +# task :precompile, :roles => :web, :except => { :no_release => true } do +# from = source.next_revision(current_revision) +# if releases.length <= 1 || capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ | wc -l").to_i > 0 +# run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile} +# else +# logger.info "Skipping asset pre-compilation because there were no asset changes" +# end +# end +# end + + + + desc "Symlink shared config files" + task :symlink_config_files do + + + run "ln -s #{deploy_to}shared/storage/private #{current_path}/private_medias" + + run "ln -s #{deploy_to}shared/storage/public #{current_path}/public/public_medias" + + run "ln -s #{deploy_to}shared/production.sqlite3 #{current_path}/db/production.sqlite3" + + sudo "cp #{current_path}/config/unicorn_init_d /etc/init.d/#{application}" + + sudo "chmod +x /etc/init.d/#{application}" + sudo "update-rc.d #{application} defaults " + end + + + + task :start do + sudo "service #{application} start" + end + task :stop do + run "service #{application} stop" + end + task :restart do + sudo "service #{application} restart" + end + + task :reload_nginx do + + sudo "rm -rf /etc/nginx/sites-enabled/#{application}" + sudo "ln -s #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application} " + + sudo "service nginx reload" + end + + + + task :seeds do + run "cd #{deploy_to}current && rake db:seed RAILS_ENV=#{rails_env}" + + end + + + task :create_files_folders do + + run "mkdir #{deploy_to}shared/storage" + run "mkdir #{deploy_to}shared/storage/private" + run "mkdir #{deploy_to}shared/storage/public" + end + + + +end + + +#before 'deploy:setup', 'rvm:install_rvm' # install RVM +#before 'deploy:setup', 'rvm:install_ruby' # install Ruby and create gemset, OR: +#before 'deploy:setup', 'rvm:create_gemset' # only create gemset + + + +after "deploy:setup", "deploy:create_files_folders" + +#after "deploy:restart", "deploy:cleanup" + + +before "deploy:restart", "deploy:symlink_config_files" + +after "deploy", "deploy:cleanup" + + + \ No newline at end of file diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 0000000..2689191 --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,5 @@ +# Load the rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the rails application. +CMSnb::Application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 0000000..e9c23c8 --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,33 @@ +CMSnb::Application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + + config.action_mailer.delivery_method = :file + config.action_mailer.default_url_options = { :host => 'localhost:3000' } +end diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 0000000..9887fda --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,90 @@ +CMSnb::Application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both thread web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable Rails's static asset server (Apache or nginx will already do this). + config.serve_static_assets = false + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Generate digests for assets URLs. + config.assets.digest = true + + # Version of your assets, change this if you want to expire all your assets. + config.assets.version = '1.0' + + + #config.assets.initialize_on_precompile = false + + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Set to :debug to see everything in the log. + config.log_level = :info + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets. + # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. + + + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation can not be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Disable automatic flushing of the log to improve performance. + # config.autoflush_log = false + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + config.action_mailer.default_url_options = { :host => "/" } + + config.action_mailer.delivery_method = :sendmail + +end diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 0000000..d22b830 --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,36 @@ +CMSnb::Application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static asset server for tests with Cache-Control for performance. + config.serve_static_assets = true + config.static_cache_control = "public, max-age=3600" + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr +end diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 0000000..59385cd --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000..4a994e1 --- /dev/null +++ b/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/config/initializers/formtastic.rb b/config/initializers/formtastic.rb new file mode 100644 index 0000000..262f893 --- /dev/null +++ b/config/initializers/formtastic.rb @@ -0,0 +1,94 @@ +# -*- encoding : utf-8 -*- +Date::DATE_FORMATS[:default] = '%d/%m/%Y' +Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S' +module Formtastic + + + module Inputs + + class QiCibleSelectInput + include Base + + def to_html + r = rand(1000000000000000000000000000) + + + input_wrapping do + label_html + + template.content_tag(:fieldset, template.text_field_tag("cible_name", (object.cible ? object.cible.cible_name : "aucuns élément séléctionné"), :id =>"name_#{r}" ) + + self.manager_select_cible_link(method, options, r) + builder.hidden_field(method.to_s+"_id", input_html_options.merge!(:id => "input_id_"+r.to_s)) + + builder.hidden_field(method.to_s+"_type", input_html_options.merge!(:id => "input_type_"+r.to_s)) ) + end + + end + + + def manager_select_cible_link(method, options, r) + + template.content_tag(:a, "Modifier ce lien", :href => "#", :onclick => "select_cible_from_manager('"+r.to_s+"');return false;") + + end + end + + class QiImageSelectInput + include Base + + def to_html + r = rand(1000000000000000000000000000) + + + input_wrapping do + label_html + + template.content_tag(:fieldset, manager_select_link(method, options, r) + template.tag(:br) + image_preview(method, options, r) + builder.hidden_field(method.to_s, input_html_options.merge!(:id => "input_"+r.to_s)) ) + end + + end + + + def manager_select_link(method, options, r) + template.content_tag(:a, "Modifier cette image", :href => "#", :onclick => "select_image_from_manager('"+r.to_s+"');return false;") + end + + def image_preview(method, options,r) + if object.send("#{method}?") and ImageFile.exists?(object.send("#{method}")) + template.content_tag(:span, template.image_tag(object.image_file.file.large.medium.small.thumb.url, :id => "img_"+r.to_s, :onclick => "select_image_from_manager('"+r.to_s+"');return false;"), :class => "preview ") + else + template.content_tag(:span, template.image_tag("admin/default_image.png", :id => "img_"+r.to_s, :onclick => "select_image_from_manager('"+r.to_s+"');return false;"), :class => "preview ") + end + end + + end + + class QiDatePickerInput + include Base + + def to_html + r = rand(1000000000000000000000000000) + + + input_wrapping do + label_html + + builder.text_field(method.to_s, input_html_options.merge!(:class => "datepicker")) + #template.content_tag(:fieldset, manager_select_link(method, options, r) + template.tag(:br) + image_preview(method, options, r) + builder.hidden_field(method.to_s, input_html_options.merge!(:id => "input_"+r.to_s)) ) + end + + end + + + + end + + + + + + + + + + + + + + end +end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 0000000..ac033bf --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 0000000..72aca7e --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb new file mode 100644 index 0000000..775f289 --- /dev/null +++ b/config/initializers/secret_token.rb @@ -0,0 +1,12 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure your secret_key_base is kept private +# if you're sharing your code publicly. +CMSnb::Application.config.secret_key_base = '59a132e7113d2350f13e28b8c1bd333e5846cfb0307cc0e31940055871fbc2d9252805b204f55b5997f10983a60d01a76baae3cf1275e80706a89e4373df0414' diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb new file mode 100644 index 0000000..a4ac16b --- /dev/null +++ b/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +CMSnb::Application.config.session_store :cookie_store, key: '_CMSnb_session' diff --git a/config/initializers/to_slug.rb b/config/initializers/to_slug.rb new file mode 100644 index 0000000..9d119ea --- /dev/null +++ b/config/initializers/to_slug.rb @@ -0,0 +1,43 @@ +# -*- encoding : utf-8 -*- +module ToSlug + + # Generate a slug for the string +value+. + # + # A slug should consist of numbers (0-9), lowercase letters (a-z) and + # dashes (-). Any other characters should be filtered. + # + # ==== Example + # + # "The World is Beautiful!".to_slug # => "the-world-is-beautiful" + # + # ==== Returns + # String:: A 'sluggified' version of this string + # + # -- + # @api public + def to_slug + # Perform transliteration to replace non-ascii characters with an ascii + # character + value = self.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').to_s + + # Remove single quotes from input + value.gsub!(/[']+/, '') + + # Replace any non-word character (\W) with a space + value.gsub!(/\W+/, ' ') + + # Remove any whitespace before and after the string + value.strip! + + # All characters should be downcased + value.downcase! + + # Replace spaces with dashes + value.gsub!(' ', '-') + + # Return the resulting slug + value + end + +end +String.send(:include, ToSlug) \ No newline at end of file diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000..33725e9 --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/config/locales/en.bootstrap.yml b/config/locales/en.bootstrap.yml new file mode 100644 index 0000000..271b49c --- /dev/null +++ b/config/locales/en.bootstrap.yml @@ -0,0 +1,17 @@ +# Sample localization file for English. Add more files in this directory for other locales. +# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + +en: + helpers: + actions: "Actions" + links: + back: "Back" + cancel: "Cancel" + confirm: "Are you sure?" + destroy: "Delete" + new: "New" + titles: + edit: "Edit" + save: "Save" + new: "New" + delete: "Delete" diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..0653957 --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/config/locales/fr.yml b/config/locales/fr.yml new file mode 100644 index 0000000..8ee6cb0 --- /dev/null +++ b/config/locales/fr.yml @@ -0,0 +1,244 @@ +# French translations for Ruby on Rails +# by Christian Lescuyer (christian@flyingcoders.com) +# contributors: +# - Sebastien Grosjean - ZenCocoon.com +# - Bruno Michel - http://github.com/nono +# - Tsutomu Kuroda - http://github.com/kuroda (t-kuroda@oiax.jp) +# Emended by Benjamin des Gachons and Patrick Chew : + + +fr: + views: + pagination: + first: "«" + last: "»" + previous: "‹ " + next: " ›" + truncate: "…" + helpers: + page_entries_info: + one_page: + display_entries: + zero: "No %{entry_name} found" + one: "Displaying 1 %{entry_name}" + other: "Displaying all %{count} %{entry_name}" + more_pages: + display_entries: "Displaying %{entry_name} %{first} - %{last} of %{total} in total" + + date: + formats: + default: "%d/%m/%Y" + short: "%e %b" + long: "%e %B %Y" + day_names: + - dimanche + - lundi + - mardi + - mercredi + - jeudi + - vendredi + - samedi + abbr_day_names: + - dim + - lun + - mar + - mer + - jeu + - ven + - sam + month_names: + - ~ + - janvier + - février + - mars + - avril + - mai + - juin + - juillet + - août + - septembre + - octobre + - novembre + - décembre + abbr_month_names: + - ~ + - jan. + - fév. + - mar. + - avr. + - mai + - juin + - juil. + - août + - sept. + - oct. + - nov. + - déc. + order: + - :day + - :month + - :year + + time: + formats: + default: "%d %B %Y %H:%M:%S" + date: "%d %B %Y" + short: "%d %b %H:%M" + long: "%A %d %B %Y %H:%M" + human: "le %A %d %B %Y à %Hh%M" + human_date: "%A %d %B %Y" + + am: 'am' + pm: 'pm' + + datetime: + distance_in_words: + half_a_minute: "une demi-minute" + less_than_x_seconds: + zero: "moins d'une seconde" + one: "moins d'une seconde" + other: "moins de %{count} secondes" + x_seconds: + one: "1 seconde" + other: "%{count} secondes" + less_than_x_minutes: + zero: "moins d'une minute" + one: "moins d'une minute" + other: "moins de %{count} minutes" + x_minutes: + one: "1 minute" + other: "%{count} minutes" + about_x_hours: + one: "environ une heure" + other: "environ %{count} heures" + x_days: + one: "1 jour" + other: "%{count} jours" + about_x_months: + one: "environ un mois" + other: "environ %{count} mois" + x_months: + one: "1 mois" + other: "%{count} mois" + about_x_years: + one: "environ un an" + other: "environ %{count} ans" + over_x_years: + one: "plus d'un an" + other: "plus de %{count} ans" + almost_x_years: + one: "presqu'un an" + other: "presque %{count} ans" + prompts: + year: "Année" + month: "Mois" + day: "Jour" + hour: "Heure" + minute: "Minute" + second: "Seconde" + + number: + format: + separator: "," + delimiter: " " + precision: 3 + significant: false + strip_insignificant_zeros: false + currency: + format: + format: "%n %u" + unit: "€" + separator: "," + delimiter: " " + precision: 2 + significant: false + strip_insignificant_zeros: false + percentage: + format: + delimiter: "" + precision: + format: + delimiter: "" + human: + format: + delimiter: "" + precision: 2 + significant: true + strip_insignificant_zeros: true + storage_units: + format: "%n %u" + units: + byte: + one: "octet" + other: "octets" + kb: "ko" + mb: "Mo" + gb: "Go" + tb: "To" + decimal_units: + format: "%n %u" + units: + unit: "" + thousand: "millier" + million: "million" + billion: "milliard" + trillion: "billion" + quadrillion: "million de milliards" + + support: + array: + words_connector: ", " + two_words_connector: " et " + last_word_connector: " et " + + helpers: + select: + prompt: "Veuillez sélectionner" + submit: + create: "Créer un(e) %{model}" + update: "Modifier ce(tte) %{model}" + submit: "Enregistrer ce(tte) %{model}" + + errors: &errors + format: "%{attribute} %{message}" + messages: &errors_messages + inclusion: "n'est pas inclus(e) dans la liste" + exclusion: "n'est pas disponible" + invalid: "n'est pas valide" + confirmation: "ne concorde pas avec la confirmation" + accepted: "doit être accepté(e)" + empty: "doit être rempli(e)" + blank: "doit être rempli(e)" + too_long: + one: "est trop long (pas plus d'un caractère)" + other: "est trop long (pas plus de %{count} caractères)" + too_short: + one: "est trop court (au moins un caractère)" + other: "est trop court (au moins %{count} caractères)" + wrong_length: + one: "ne fait pas la bonne longueur (doit comporter un seul caractère)" + other: "ne fait pas la bonne longueur (doit comporter %{count} caractères)" + not_a_number: "n'est pas un nombre" + not_an_integer: "doit être un nombre entier" + greater_than: "doit être supérieur à %{count}" + greater_than_or_equal_to: "doit être supérieur ou égal à %{count}" + equal_to: "doit être égal à %{count}" + less_than: "doit être inférieur à %{count}" + less_than_or_equal_to: "doit être inférieur ou égal à %{count}" + odd: "doit être impair" + even: "doit être pair" + taken: "n'est pas disponible" + record_invalid: "La validation a échoué : %{errors}" + + template: &errors_template + header: + one: "Impossible d'enregistrer ce(tte) %{model} : 1 erreur" + other: "Impossible d'enregistrer ce(tte) %{model} : %{count} erreurs" + body: "Veuillez vérifier les champs suivants : " + + activemodel: + errors: + <<: *errors + activerecord: + errors: + <<: *errors \ No newline at end of file diff --git a/config/nginx.conf b/config/nginx.conf new file mode 100644 index 0000000..bb03945 --- /dev/null +++ b/config/nginx.conf @@ -0,0 +1,29 @@ +upstream danielle_app_unicorn { + server unix:/home/web/danielle_app/shared/unicorn.sock fail_timeout=0; +} + +server { + listen 80; + server_name test.script-art.fr; + root /home/web/danielle_app/current/public; + try_files $uri/index.html $uri @unicorn; + + location @unicorn { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_pass http://danielle_app_unicorn; + } + + error_page 500 502 503 504 /500.html; + client_max_body_size 4G; + keepalive_timeout 10; +} + + +server { + listen 80; + server_name test2.script-art.fr; + rewrite ^(.*) http://test.script-art.fr$1 permanent; +} + diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000..b6ec22e --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,179 @@ +CMSnb::Application.routes.draw do + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + root 'public/menu_items#show' + + + + get 'nouvelles-pelerines.html' => "public/articles#index", :as => "public_articles" + + #post 'reposoir/sages-paroles/merci-de-votre-participation.html' => "public/quotes#create", :as => "public_quotes" + + get 'reposoir/sages-paroles/proposer.html' => "public/quotes#new", :as => "new_public_quote" + get 'reposoir/photos.html' => "public/photos#index", :as => "public_photos" + get 'reposoir/sages-paroles.html' => "public/quotes#index", :as => "public_quotes" + + + get 'rubriques/:id.html' => "public/portfolios#show", :as => "public_portfolio" + + namespace :public do + resources :portfolios + resources :artworks + + resources :photos + resources :quotes do + collection do + get :newphoto + post :createphoto + end + end + resources :articles + end + + + namespace :portlet do + resources :event_contents + resources :break_contents + resources :download_contents + resources :dynamic_contents + resources :gallery_contents + resources :gallery_images do + collection do + get :reorder + end + end + resources :html_contents + resources :image_contents + resources :link_contents + resources :img_link_contents + resources :text_contents + resources :map_contents + resources :title_contents + resources :table_contents + resources :block_contents + resources :table_rows + resources :table_cols + resources :portlets do + collection do + post :reorder + end + end + end + + namespace :admin do + resources :photos + resources :quotes + + resources :artworks do + collection do + post :reorder + end + end + resources :portfolios + resources :password_resets + + resources :articles + resources :categories + + + resources :admin_auths do + collection do + get :logout + end + end + resources :admins + + + + resources :external_links do + collection do + get :cible + end + end + + + resources :menus + resources :menu_items do + collection do + get :cible + post :reorder + end + member do + get :clone + end + end + resources :image_files do + member do + get :rotate + end + end + resources :file_folders + resources :data_files + resources :pages + resources :menu_urls + resources :menu_aliases + resources :blocks + resources :albums + + resources :cibles + + + end + + + + + + + + + resources :download_data_files + + get 'pages/*url.:f' => 'public/menu_items#show', :as => :menu_item, :f => "html" + + get 'admin' => "admin/admin_auths#index" + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/config/unicorn.rb b/config/unicorn.rb new file mode 100644 index 0000000..365b104 --- /dev/null +++ b/config/unicorn.rb @@ -0,0 +1,10 @@ +@rails_app = "danielle_app" + +working_directory "/home/web/#{@rails_app}/current" +pid "/home/web/#{@rails_app}/shared/unicorn.pid" +stderr_path "/home/web/#{@rails_app}/shared/unicorn.log" +stdout_path "/home/web/#{@rails_app}/shared/unicorn.log" + +listen "/home/web/#{@rails_app}/shared/unicorn.sock" +worker_processes 2 +timeout 30 \ No newline at end of file diff --git a/config/unicorn_init_d b/config/unicorn_init_d new file mode 100644 index 0000000..c0a2f99 --- /dev/null +++ b/config/unicorn_init_d @@ -0,0 +1,64 @@ +#!/bin/bash + + +set -u +set -e + +# Change these to match your app: +APP_NAME=danielle_app +APP_RUBY=2.0.0-p195 +APP_ROOT="/home/web/danielle_app/current" +PID="/home/web/danielle_app/shared/unicorn.pid" +ENV=production + +GEM_HOME="/home/web/.rvm/gems/ruby-$APP_RUBY" + +UNICORN_OPTS="-D -E $ENV -c $APP_ROOT/config/unicorn.rb" + +SET_PATH="cd $APP_ROOT; rvm $APP_RUBY" +CMD="$SET_PATH; unicorn $UNICORN_OPTS" + +old_pid="$PID.oldbin" + +cd $APP_ROOT || exit 1 + +sig () { + test -s "$PID" && kill -$1 `cat $PID` +} + +oldsig () { + test -s $old_pid && kill -$1 `cat $old_pid` +} + +case ${1-help} in + start) + sig 0 && echo >&2 "Already running" && exit 0 + su - web -c "$CMD" + ;; + stop) + sig QUIT && exit 0 + echo >&2 "Not running" + ;; + force-stop) + sig TERM && exit 0 + echo >&2 "Not running" + ;; + restart|reload) + sig HUP && echo reloaded OK && exit 0 + echo >&2 "Couldn't reload, starting '$CMD' instead" + su - web -c "$CMD" + ;; + upgrade) + sig USR2 && exit 0 + echo >&2 "Couldn't upgrade, starting '$CMD' instead" + su - web -c "$CMD" + ;; + rotate) + sig USR1 && echo rotated logs OK && exit 0 + echo >&2 "Couldn't rotate logs" && exit 1 + ;; + *) + echo >&2 "Usage: $0 " + exit 1 + ;; +esac \ No newline at end of file diff --git a/db/migrate/0001_create_admins.rb b/db/migrate/0001_create_admins.rb new file mode 100644 index 0000000..cc1df4b --- /dev/null +++ b/db/migrate/0001_create_admins.rb @@ -0,0 +1,27 @@ +class CreateAdmins < ActiveRecord::Migration + def change + create_table :admins do |t| + t.string :name + t.string :firstname + t.string :avatar + t.string :username, :null => false, :default => "" + t.string :email, :null => false, :default => "" + t.string :password_digest, :null => false, :default => "" + t.string :reset_password_token + t.datetime :reset_password_sent_at + t.datetime :remember_created_at + t.integer :sign_in_count, :default => 0 + t.datetime :current_sign_in_at + t.datetime :last_sign_in_at + t.string :current_sign_in_ip + t.string :last_sign_in_ip + t.string :remember_token + + + t.timestamps + end + + Admin.create(:email => "info@nicolasbally.com", :username => "nico", :password => "123456", :password_confirmation => "123456") + + end +end diff --git a/db/migrate/0003_create_menu.rb b/db/migrate/0003_create_menu.rb new file mode 100644 index 0000000..1e61943 --- /dev/null +++ b/db/migrate/0003_create_menu.rb @@ -0,0 +1,15 @@ +# -*- encoding : utf-8 -*- +class CreateMenu < ActiveRecord::Migration + def self.up + create_table :menus do |t| + t.string :name + t.string :max_levels + t.timestamps + end + Menu.create(:name => "Menu principal", :max_levels => 3) + end + + def self.down + drop_table :menus + end +end diff --git a/db/migrate/0004_menu_items.rb b/db/migrate/0004_menu_items.rb new file mode 100644 index 0000000..be38f32 --- /dev/null +++ b/db/migrate/0004_menu_items.rb @@ -0,0 +1,34 @@ +# -*- encoding : utf-8 -*- +class MenuItems < ActiveRecord::Migration + def self.up + + + create_table :menu_items do |t| + t.string :name + t.string :slug + t.string :permalink + + t.integer :parent_id + t.integer :position + + t.boolean :super_admin + t.boolean :enabled + t.boolean :visible + t.boolean :deleted + + t.references :menu + + #polymorphic + t.integer :menu_content_id + t.string :menu_content_type + + + t.timestamps + end + + end + + def self.down + drop_table :menu_items + end +end diff --git a/db/migrate/0010_create_pages.rb b/db/migrate/0010_create_pages.rb new file mode 100644 index 0000000..87d6503 --- /dev/null +++ b/db/migrate/0010_create_pages.rb @@ -0,0 +1,19 @@ +# -*- encoding : utf-8 -*- +class CreatePages < ActiveRecord::Migration + def self.up + create_table :pages do |t| + t.text :title + t.text :description + t.text :keywords + + + t.timestamps + end + + + end + + def self.down + drop_table :pages + end +end diff --git a/db/migrate/0065_create_blocks.rb b/db/migrate/0065_create_blocks.rb new file mode 100644 index 0000000..51882f5 --- /dev/null +++ b/db/migrate/0065_create_blocks.rb @@ -0,0 +1,19 @@ +# -*- encoding : utf-8 -*- +class CreateBlocks < ActiveRecord::Migration + def self.up + create_table :blocks do |t| + + t.string :block_name + t.string :blockable_type + t.integer :blockable_id + + t.text :content + + t.timestamps + end + end + + def self.down + drop_table :blocks + end +end diff --git a/db/migrate/0070_create_portlets.rb b/db/migrate/0070_create_portlets.rb new file mode 100644 index 0000000..daf118e --- /dev/null +++ b/db/migrate/0070_create_portlets.rb @@ -0,0 +1,19 @@ +# -*- encoding : utf-8 -*- +class CreatePortlets < ActiveRecord::Migration + def self.up + create_table :portlets do |t| + t.references :block + t.integer :content_id + t.string :content_type + t.integer :position + + + + t.timestamps + end + end + + def self.down + drop_table :portlets + end +end diff --git a/db/migrate/0075_create_title_contents.rb b/db/migrate/0075_create_title_contents.rb new file mode 100644 index 0000000..fadbb59 --- /dev/null +++ b/db/migrate/0075_create_title_contents.rb @@ -0,0 +1,17 @@ +# -*- encoding : utf-8 -*- +class CreateTitleContents < ActiveRecord::Migration + def self.up + create_table :title_contents do |t| + t.text :content + t.integer :level + t.string :style + + t.timestamps + end + + end + + def self.down + drop_table :title_contents + end +end diff --git a/db/migrate/0076_create_text_contents.rb b/db/migrate/0076_create_text_contents.rb new file mode 100644 index 0000000..8ea89f1 --- /dev/null +++ b/db/migrate/0076_create_text_contents.rb @@ -0,0 +1,16 @@ +# -*- encoding : utf-8 -*- +class CreateTextContents < ActiveRecord::Migration + def self.up + create_table :text_contents do |t| + t.string :style + t.text :content + + t.timestamps + end + + end + + def self.down + drop_table :text_contents + end +end diff --git a/db/migrate/0077_create_image_contents.rb b/db/migrate/0077_create_image_contents.rb new file mode 100644 index 0000000..22c7ed9 --- /dev/null +++ b/db/migrate/0077_create_image_contents.rb @@ -0,0 +1,25 @@ +# -*- encoding : utf-8 -*- +class CreateImageContents < ActiveRecord::Migration + def self.up + create_table :image_contents do |t| + t.references :image_file + t.integer :width + t.integer :height + t.string :alignement + t.boolean :expandable + t.string :style + t.string :alt + t.integer :cible_id + t.string :cible_type + t.boolean :with_cible + t.boolean :popup + + t.timestamps + end + + end + + def self.down + drop_table :image_contents + end +end diff --git a/db/migrate/0078_create_link_contents.rb b/db/migrate/0078_create_link_contents.rb new file mode 100644 index 0000000..94380c1 --- /dev/null +++ b/db/migrate/0078_create_link_contents.rb @@ -0,0 +1,24 @@ +# -*- encoding : utf-8 -*- +class CreateLinkContents < ActiveRecord::Migration + def self.up + create_table :link_contents do |t| + t.integer :type + t.string :name + t.string :title + t.boolean :popup + + t.string :url + t.string :style + + t.integer :cible_id + t.string :cible_type + + t.timestamps + end + + end + + def self.down + drop_table :link_contents + end +end diff --git a/db/migrate/0079_create_break_contents.rb b/db/migrate/0079_create_break_contents.rb new file mode 100644 index 0000000..07fa1f1 --- /dev/null +++ b/db/migrate/0079_create_break_contents.rb @@ -0,0 +1,16 @@ +# -*- encoding : utf-8 -*- +class CreateBreakContents < ActiveRecord::Migration + def self.up + create_table :break_contents do |t| + t.boolean :line + t.integer :height + t.string :style + t.timestamps + end + + end + + def self.down + drop_table :break_contents + end +end diff --git a/db/migrate/0080_create_html_contents.rb b/db/migrate/0080_create_html_contents.rb new file mode 100644 index 0000000..ed02343 --- /dev/null +++ b/db/migrate/0080_create_html_contents.rb @@ -0,0 +1,16 @@ +# -*- encoding : utf-8 -*- +class CreateHtmlContents < ActiveRecord::Migration + def self.up + create_table :html_contents do |t| + t.text :content + t.string :style + t.string :content_type + t.timestamps + end + + end + + def self.down + drop_table :html_contents + end +end diff --git a/db/migrate/0081_create_download_contents.rb b/db/migrate/0081_create_download_contents.rb new file mode 100644 index 0000000..7ecefaa --- /dev/null +++ b/db/migrate/0081_create_download_contents.rb @@ -0,0 +1,20 @@ +# -*- encoding : utf-8 -*- +class CreateDownloadContents < ActiveRecord::Migration + def self.up + create_table :download_contents do |t| + t.string :title + t.string :style + t.text :description + t.references :data_file + + + t.timestamps + end + + + end + + def self.down + drop_table :download_contents + end +end diff --git a/db/migrate/0082_create_gallery_contents.rb b/db/migrate/0082_create_gallery_contents.rb new file mode 100644 index 0000000..ee2b7fb --- /dev/null +++ b/db/migrate/0082_create_gallery_contents.rb @@ -0,0 +1,19 @@ +# -*- encoding : utf-8 -*- +class CreateGalleryContents < ActiveRecord::Migration + def self.up + create_table :gallery_contents do |t| + t.string :name + t.text :description + + t.integer :style + t.integer :nbr_img + + t.timestamps + end + + end + + def self.down + drop_table :gallery_contents + end +end diff --git a/db/migrate/0101_create_gallery_images.rb b/db/migrate/0101_create_gallery_images.rb new file mode 100644 index 0000000..54498f3 --- /dev/null +++ b/db/migrate/0101_create_gallery_images.rb @@ -0,0 +1,20 @@ +# -*- encoding : utf-8 -*- +class CreateGalleryImages < ActiveRecord::Migration + def self.up + create_table :gallery_images do |t| + t.string :title + t.text :description + + t.string :tags + t.integer :position + t.references :image_file + t.references :gallery_content + + t.timestamps + end + end + + def self.down + drop_table :gallery_images + end +end diff --git a/db/migrate/0102_create_dynamic_contents.rb b/db/migrate/0102_create_dynamic_contents.rb new file mode 100644 index 0000000..4385b7c --- /dev/null +++ b/db/migrate/0102_create_dynamic_contents.rb @@ -0,0 +1,15 @@ +# -*- encoding : utf-8 -*- +class CreateDynamicContents < ActiveRecord::Migration + def self.up + create_table :dynamic_contents do |t| + t.string :name + + t.timestamps + end + + end + + def self.down + drop_table :dynamic_contents + end +end diff --git a/db/migrate/20110215144022_create_table_contents.rb b/db/migrate/20110215144022_create_table_contents.rb new file mode 100644 index 0000000..b5df572 --- /dev/null +++ b/db/migrate/20110215144022_create_table_contents.rb @@ -0,0 +1,17 @@ +# -*- encoding : utf-8 -*- +class CreateTableContents < ActiveRecord::Migration + def self.up + create_table :table_contents do |t| + t.integer :style + t.integer :nbr_rows + t.integer :nbr_cols + + t.timestamps + end + + end + + def self.down + drop_table :table_contents + end +end diff --git a/db/migrate/20110215144326_create_table_rows.rb b/db/migrate/20110215144326_create_table_rows.rb new file mode 100644 index 0000000..c415836 --- /dev/null +++ b/db/migrate/20110215144326_create_table_rows.rb @@ -0,0 +1,15 @@ +# -*- encoding : utf-8 -*- +class CreateTableRows < ActiveRecord::Migration + def self.up + create_table :table_rows do |t| + t.integer :position + t.integer :style + t.references :table_content + t.timestamps + end + end + + def self.down + drop_table :table_rows + end +end diff --git a/db/migrate/20110215144501_create_cel_tables.rb b/db/migrate/20110215144501_create_cel_tables.rb new file mode 100644 index 0000000..710be0f --- /dev/null +++ b/db/migrate/20110215144501_create_cel_tables.rb @@ -0,0 +1,17 @@ +# -*- encoding : utf-8 -*- +class CreateCelTables < ActiveRecord::Migration + def self.up + create_table :cel_tables do |t| + t.integer :position + t.integer :style + t.references :table_row + t.references :table_content + + t.timestamps + end + end + + def self.down + drop_table :cel_tables + end +end diff --git a/db/migrate/20110412073417_create_tags.rb b/db/migrate/20110412073417_create_tags.rb new file mode 100644 index 0000000..8638ec2 --- /dev/null +++ b/db/migrate/20110412073417_create_tags.rb @@ -0,0 +1,19 @@ +# -*- encoding : utf-8 -*- +class CreateTags < ActiveRecord::Migration + def self.up + create_table :tags do |t| + t.string :name + t.string :slug + t.integer :parent_id + t.boolean :public + t.string :taggable_type + t.integer :taggable_id + + t.timestamps + end + end + + def self.down + drop_table :tags + end +end diff --git a/db/migrate/20110412080316_create_image_files.rb b/db/migrate/20110412080316_create_image_files.rb new file mode 100644 index 0000000..989cab0 --- /dev/null +++ b/db/migrate/20110412080316_create_image_files.rb @@ -0,0 +1,22 @@ +# -*- encoding : utf-8 -*- +class CreateImageFiles < ActiveRecord::Migration + def self.up + create_table :image_files do |t| + t.string :file + t.string :name + t.string :slug + t.text :description + t.string :tags + t.references :album + t.string :photograph + t.string :cible_type + t.integer :cible_id + + t.timestamps + end + end + + def self.down + drop_table :image_files + end +end diff --git a/db/migrate/20110414184246_create_albums.rb b/db/migrate/20110414184246_create_albums.rb new file mode 100644 index 0000000..20c5149 --- /dev/null +++ b/db/migrate/20110414184246_create_albums.rb @@ -0,0 +1,17 @@ +# -*- encoding : utf-8 -*- +class CreateAlbums < ActiveRecord::Migration + def self.up + create_table :albums do |t| + t.string :name + t.boolean :super_admin + + t.timestamps + end + Album.create(:name => "Photos diverses", :super_admin => true) + + end + + def self.down + drop_table :albums + end +end diff --git a/db/migrate/20110418153215_create_block_contents.rb b/db/migrate/20110418153215_create_block_contents.rb new file mode 100644 index 0000000..455b062 --- /dev/null +++ b/db/migrate/20110418153215_create_block_contents.rb @@ -0,0 +1,20 @@ +# -*- encoding : utf-8 -*- +class CreateBlockContents < ActiveRecord::Migration + def self.up + create_table :block_contents do |t| + t.integer :style + t.integer :nbr_columns + t.integer :row1 + t.integer :row2 + t.integer :row3 + t.integer :row4 + + t.timestamps + end + + end + + def self.down + drop_table :block_contents + end +end diff --git a/db/migrate/20110420132008_create_menu_aliases.rb b/db/migrate/20110420132008_create_menu_aliases.rb new file mode 100644 index 0000000..3a549f2 --- /dev/null +++ b/db/migrate/20110420132008_create_menu_aliases.rb @@ -0,0 +1,15 @@ +# -*- encoding : utf-8 -*- +class CreateMenuAliases < ActiveRecord::Migration + def self.up + create_table :menu_aliases do |t| + t.references :menu_item + + t.timestamps + end + + end + + def self.down + drop_table :menu_aliases + end +end diff --git a/db/migrate/20110420132127_create_menu_urls.rb b/db/migrate/20110420132127_create_menu_urls.rb new file mode 100644 index 0000000..ccf34a5 --- /dev/null +++ b/db/migrate/20110420132127_create_menu_urls.rb @@ -0,0 +1,15 @@ +# -*- encoding : utf-8 -*- +class CreateMenuUrls < ActiveRecord::Migration + def self.up + create_table :menu_urls do |t| + t.string :url + + t.timestamps + end + + end + + def self.down + drop_table :menu_urls + end +end diff --git a/db/migrate/20110421125532_create_file_folders.rb b/db/migrate/20110421125532_create_file_folders.rb new file mode 100644 index 0000000..6cd34b6 --- /dev/null +++ b/db/migrate/20110421125532_create_file_folders.rb @@ -0,0 +1,16 @@ +# -*- encoding : utf-8 -*- +class CreateFileFolders < ActiveRecord::Migration + def self.up + create_table :file_folders do |t| + t.string :name + t.boolean :super_admin + + t.timestamps + end + FileFolder.create(:name => "Dossier principal", :super_admin => true) + end + + def self.down + drop_table :file_folders + end +end diff --git a/db/migrate/20110421125631_create_data_files.rb b/db/migrate/20110421125631_create_data_files.rb new file mode 100644 index 0000000..a7507a7 --- /dev/null +++ b/db/migrate/20110421125631_create_data_files.rb @@ -0,0 +1,19 @@ +# -*- encoding : utf-8 -*- +class CreateDataFiles < ActiveRecord::Migration + def self.up + create_table :data_files do |t| + t.string :file + t.string :name + t.string :slug + t.string :token + t.string :description + t.references :file_folder + + t.timestamps + end + end + + def self.down + drop_table :data_files + end +end diff --git a/db/migrate/20110427164514_create_map_contents.rb b/db/migrate/20110427164514_create_map_contents.rb new file mode 100644 index 0000000..fa285d4 --- /dev/null +++ b/db/migrate/20110427164514_create_map_contents.rb @@ -0,0 +1,19 @@ +# -*- encoding : utf-8 -*- +class CreateMapContents < ActiveRecord::Migration + def self.up + create_table :map_contents do |t| + t.string :address + t.string :name + t.integer :view + t.boolean :info_bule + t.integer :zoom + + t.timestamps + end + + end + + def self.down + drop_table :map_contents + end +end diff --git a/db/migrate/20110708093908_create_external_links.rb b/db/migrate/20110708093908_create_external_links.rb new file mode 100644 index 0000000..a279e3f --- /dev/null +++ b/db/migrate/20110708093908_create_external_links.rb @@ -0,0 +1,21 @@ +class CreateExternalLinks < ActiveRecord::Migration + def self.up + create_table :external_links do |t| + t.string :title + t.text :description + t.string :url + + t.timestamps + end + + + end + + def self.down + drop_table :external_links + end + + + + +end diff --git a/db/migrate/20110710114840_create_articles.rb b/db/migrate/20110710114840_create_articles.rb new file mode 100644 index 0000000..37fb2a7 --- /dev/null +++ b/db/migrate/20110710114840_create_articles.rb @@ -0,0 +1,22 @@ +class CreateArticles < ActiveRecord::Migration + def change + create_table :articles do |t| + + t.datetime :published_at + t.string :title + + t.string :slug + t.string :tag + t.text :description + t.boolean :enabled + t.references :image_file + + t.string :tags_cache + t.string :tags_cache_slug + t.integer :category_id + + t.timestamps + end + + end +end diff --git a/db/migrate/20111125124808_create_tag_taggables.rb b/db/migrate/20111125124808_create_tag_taggables.rb new file mode 100644 index 0000000..52efe65 --- /dev/null +++ b/db/migrate/20111125124808_create_tag_taggables.rb @@ -0,0 +1,11 @@ +class CreateTagTaggables < ActiveRecord::Migration + def change + create_table :tag_taggables do |t| + t.string :taggable_type + t.integer :taggable_id + t.integer :tag_id + + t.timestamps + end + end +end diff --git a/db/migrate/20111128164327_create_categories.rb b/db/migrate/20111128164327_create_categories.rb new file mode 100644 index 0000000..dca9b0f --- /dev/null +++ b/db/migrate/20111128164327_create_categories.rb @@ -0,0 +1,13 @@ +class CreateCategories < ActiveRecord::Migration + def change + create_table :categories do |t| + t.string :name + t.string :slug + t.boolean :enabled + t.text :description + t.references :image_file + + t.timestamps + end + end +end diff --git a/db/migrate/20130707144152_create_portfolios.rb b/db/migrate/20130707144152_create_portfolios.rb new file mode 100644 index 0000000..93e23ad --- /dev/null +++ b/db/migrate/20130707144152_create_portfolios.rb @@ -0,0 +1,13 @@ +class CreatePortfolios < ActiveRecord::Migration + def change + create_table :portfolios do |t| + t.string :title + t.string :slug + t.text :description + t.references :artwork, index: true + t.boolean :enabled + + t.timestamps + end + end +end diff --git a/db/migrate/20130707144511_create_artworks.rb b/db/migrate/20130707144511_create_artworks.rb new file mode 100644 index 0000000..e777719 --- /dev/null +++ b/db/migrate/20130707144511_create_artworks.rb @@ -0,0 +1,18 @@ +class CreateArtworks < ActiveRecord::Migration + def change + create_table :artworks do |t| + t.string :title + t.text :description + t.date :creation_date + t.integer :position + t.string :art_type + t.references :portfolio, index: true + t.string :tag + t.string :tags_cache + t.string :tags_cache_slug + t.references :artwork_image + + t.timestamps + end + end +end diff --git a/db/migrate/20130707160102_create_artwork_images.rb b/db/migrate/20130707160102_create_artwork_images.rb new file mode 100644 index 0000000..b57220f --- /dev/null +++ b/db/migrate/20130707160102_create_artwork_images.rb @@ -0,0 +1,11 @@ +class CreateArtworkImages < ActiveRecord::Migration + def change + create_table :artwork_images do |t| + t.string :image + t.integer :position + t.references :artwork + + t.timestamps + end + end +end diff --git a/db/migrate/20130707222341_create_photos.rb b/db/migrate/20130707222341_create_photos.rb new file mode 100644 index 0000000..0ce5a07 --- /dev/null +++ b/db/migrate/20130707222341_create_photos.rb @@ -0,0 +1,15 @@ +class CreatePhotos < ActiveRecord::Migration + def change + create_table :photos do |t| + t.string :title + t.text :description + t.integer :position + t.string :tag + t.string :tags_cache + t.string :tags_cache_slug + t.string :image + + t.timestamps + end + end +end diff --git a/db/migrate/20130707222444_create_quotes.rb b/db/migrate/20130707222444_create_quotes.rb new file mode 100644 index 0000000..b49a66b --- /dev/null +++ b/db/migrate/20130707222444_create_quotes.rb @@ -0,0 +1,15 @@ +class CreateQuotes < ActiveRecord::Migration + def change + create_table :quotes do |t| + t.text :quote + t.string :author + t.string :tag + t.string :tags_cache + t.string :tags_cache_slug + t.boolean :enabled + t.boolean :public_from + t.references :photo + t.timestamps + end + end +end diff --git a/db/migrate/20130715171140_add_photo_to_quotes.rb b/db/migrate/20130715171140_add_photo_to_quotes.rb new file mode 100644 index 0000000..bbfb534 --- /dev/null +++ b/db/migrate/20130715171140_add_photo_to_quotes.rb @@ -0,0 +1,5 @@ +class AddPhotoToQuotes < ActiveRecord::Migration + def change + add_reference :quotes, :photo, index: true + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 0000000..de647c8 --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,394 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20130715171140) do + + create_table "admins", force: true do |t| + t.string "name" + t.string "firstname" + t.string "avatar" + t.string "username", default: "", null: false + t.string "email", default: "", null: false + t.string "password_digest", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.integer "sign_in_count", default: 0 + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" + t.string "current_sign_in_ip" + t.string "last_sign_in_ip" + t.string "remember_token" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "albums", force: true do |t| + t.string "name" + t.boolean "super_admin" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "articles", force: true do |t| + t.datetime "published_at" + t.string "title" + t.string "slug" + t.string "tag" + t.text "description" + t.boolean "enabled" + t.integer "image_file_id" + t.string "tags_cache" + t.string "tags_cache_slug" + t.integer "category_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "artwork_images", force: true do |t| + t.string "image" + t.integer "position" + t.integer "artwork_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "artworks", force: true do |t| + t.string "title" + t.text "description" + t.date "creation_date" + t.integer "position" + t.string "art_type" + t.integer "portfolio_id" + t.string "tag" + t.string "tags_cache" + t.string "tags_cache_slug" + t.integer "artwork_image_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "artworks", ["portfolio_id"], name: "index_artworks_on_portfolio_id" + + create_table "block_contents", force: true do |t| + t.integer "style" + t.integer "nbr_columns" + t.integer "row1" + t.integer "row2" + t.integer "row3" + t.integer "row4" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "blocks", force: true do |t| + t.string "block_name" + t.string "blockable_type" + t.integer "blockable_id" + t.text "content" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "break_contents", force: true do |t| + t.boolean "line" + t.integer "height" + t.string "style" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "categories", force: true do |t| + t.string "name" + t.string "slug" + t.boolean "enabled" + t.text "description" + t.integer "image_file_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "cel_tables", force: true do |t| + t.integer "position" + t.integer "style" + t.integer "table_row_id" + t.integer "table_content_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "data_files", force: true do |t| + t.string "file" + t.string "name" + t.string "slug" + t.string "token" + t.string "description" + t.integer "file_folder_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "download_contents", force: true do |t| + t.string "title" + t.string "style" + t.text "description" + t.integer "data_file_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "dynamic_contents", force: true do |t| + t.string "name" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "external_links", force: true do |t| + t.string "title" + t.text "description" + t.string "url" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "file_folders", force: true do |t| + t.string "name" + t.boolean "super_admin" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "gallery_contents", force: true do |t| + t.string "name" + t.text "description" + t.integer "style" + t.integer "nbr_img" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "gallery_images", force: true do |t| + t.string "title" + t.text "description" + t.string "tags" + t.integer "position" + t.integer "image_file_id" + t.integer "gallery_content_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "html_contents", force: true do |t| + t.text "content" + t.string "style" + t.string "content_type" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "image_contents", force: true do |t| + t.integer "image_file_id" + t.integer "width" + t.integer "height" + t.string "alignement" + t.boolean "expandable" + t.string "style" + t.string "alt" + t.integer "cible_id" + t.string "cible_type" + t.boolean "with_cible" + t.boolean "popup" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "image_files", force: true do |t| + t.string "file" + t.string "name" + t.string "slug" + t.text "description" + t.string "tags" + t.integer "album_id" + t.string "photograph" + t.string "cible_type" + t.integer "cible_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "link_contents", force: true do |t| + t.integer "type" + t.string "name" + t.string "title" + t.boolean "popup" + t.string "url" + t.string "style" + t.integer "cible_id" + t.string "cible_type" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "map_contents", force: true do |t| + t.string "address" + t.string "name" + t.integer "view" + t.boolean "info_bule" + t.integer "zoom" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "menu_aliases", force: true do |t| + t.integer "menu_item_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "menu_items", force: true do |t| + t.string "name" + t.string "slug" + t.string "permalink" + t.integer "parent_id" + t.integer "position" + t.boolean "super_admin" + t.boolean "enabled" + t.boolean "visible" + t.boolean "deleted" + t.integer "menu_id" + t.integer "menu_content_id" + t.string "menu_content_type" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "menu_urls", force: true do |t| + t.string "url" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "menus", force: true do |t| + t.string "name" + t.string "max_levels" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "pages", force: true do |t| + t.text "title" + t.text "description" + t.text "keywords" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "photos", force: true do |t| + t.string "title" + t.text "description" + t.integer "position" + t.string "tag" + t.string "tags_cache" + t.string "tags_cache_slug" + t.string "image" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "portfolios", force: true do |t| + t.string "title" + t.string "slug" + t.text "description" + t.integer "artwork_id" + t.boolean "enabled" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "portfolios", ["artwork_id"], name: "index_portfolios_on_artwork_id" + + create_table "portlets", force: true do |t| + t.integer "block_id" + t.integer "content_id" + t.string "content_type" + t.integer "position" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "quotes", force: true do |t| + t.text "quote" + t.string "author" + t.string "tag" + t.string "tags_cache" + t.string "tags_cache_slug" + t.boolean "enabled" + t.boolean "public_from" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "photo_id" + end + + add_index "quotes", ["photo_id"], name: "index_quotes_on_photo_id" + + create_table "table_contents", force: true do |t| + t.integer "style" + t.integer "nbr_rows" + t.integer "nbr_cols" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "table_rows", force: true do |t| + t.integer "position" + t.integer "style" + t.integer "table_content_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "tag_taggables", force: true do |t| + t.string "taggable_type" + t.integer "taggable_id" + t.integer "tag_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "tags", force: true do |t| + t.string "name" + t.string "slug" + t.integer "parent_id" + t.boolean "public" + t.string "taggable_type" + t.integer "taggable_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "text_contents", force: true do |t| + t.string "style" + t.text "content" + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "title_contents", force: true do |t| + t.text "content" + t.integer "level" + t.string "style" + t.datetime "created_at" + t.datetime "updated_at" + end + +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 0000000..e69de29 diff --git a/lib/assets/.keep b/lib/assets/.keep new file mode 100644 index 0000000..e69de29 diff --git a/lib/tasks/.keep b/lib/tasks/.keep new file mode 100644 index 0000000..e69de29 diff --git a/log/.keep b/log/.keep new file mode 100644 index 0000000..e69de29 diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..a0daa0c --- /dev/null +++ b/public/404.html @@ -0,0 +1,58 @@ + + + + The page you were looking for doesn't exist (404) + + + + + +
      +

      The page you were looking for doesn't exist.

      +

      You may have mistyped the address or the page may have moved.

      +
      +

      If you are the application owner check the logs for more information.

      + + diff --git a/public/422.html b/public/422.html new file mode 100644 index 0000000..fbb4b84 --- /dev/null +++ b/public/422.html @@ -0,0 +1,58 @@ + + + + The change you wanted was rejected (422) + + + + + +
      +

      The change you wanted was rejected.

      +

      Maybe you tried to change something you didn't have access to.

      +
      +

      If you are the application owner check the logs for more information.

      + + diff --git a/public/500.html b/public/500.html new file mode 100644 index 0000000..e9052d3 --- /dev/null +++ b/public/500.html @@ -0,0 +1,57 @@ + + + + We're sorry, but something went wrong (500) + + + + + +
      +

      We're sorry, but something went wrong.

      +
      +

      If you are the application owner check the logs for more information.

      + + diff --git a/public/ace_editor/ace-compat-noconflict.js b/public/ace_editor/ace-compat-noconflict.js new file mode 100644 index 0000000..94fea78 --- /dev/null +++ b/public/ace_editor/ace-compat-noconflict.js @@ -0,0 +1 @@ +ace.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")}),ace.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")}),ace.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")}),ace.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")}),ace.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")}),ace.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")}),ace.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")}),ace.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")}),ace.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")}),ace.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")}),ace.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()}}) \ No newline at end of file diff --git a/public/ace_editor/ace-compat-uncompressed-noconflict.js b/public/ace_editor/ace-compat-uncompressed-noconflict.js new file mode 100644 index 0000000..759d6ea --- /dev/null +++ b/public/ace_editor/ace-compat-uncompressed-noconflict.js @@ -0,0 +1,480 @@ +/* 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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(); + } +}); diff --git a/public/ace_editor/ace-compat-uncompressed.js b/public/ace_editor/ace-compat-uncompressed.js new file mode 100644 index 0000000..50efbe1 --- /dev/null +++ b/public/ace_editor/ace-compat-uncompressed.js @@ -0,0 +1,480 @@ +/* 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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(); + } +}); diff --git a/public/ace_editor/ace-compat.js b/public/ace_editor/ace-compat.js new file mode 100644 index 0000000..18d2ed7 --- /dev/null +++ b/public/ace_editor/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()}}) \ No newline at end of file diff --git a/public/ace_editor/ace-noconflict.js b/public/ace_editor/ace-noconflict.js new file mode 100644 index 0000000..057a34f --- /dev/null +++ b/public/ace_editor/ace-noconflict.js @@ -0,0 +1,10 @@ +(function(){function g(a){if(typeof requirejs!="undefined"){var e=b.define;b.define=function(a,b,c){return typeof c!="function"?e.apply(this,arguments):ace.define(a,b,function(a,d,e){return b[2]=="module"&&(e.packaged=!0),c.apply(this,arguments)})},b.define.packaged=!0;return}var f=function(a,b){return d("",a,b)};f.packaged=!0;var g=b;a&&(b[a]||(b[a]={}),g=b[a]),g.define&&(c.original=g.define),g.define=c,g.require&&(d.original=g.require),g.require=f}var a="ace",b=function(){return this}(),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;g1&&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;ab.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})}),ace.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(b){var c=this;if(typeof c!="function")throw new TypeError;var d=g.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,h=c.apply(f,d.concat(g.call(arguments)));return h!==null&&Object(h)===h?h:f}return c.apply(b,d.concat(g.call(arguments)))};return e});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(b){return h(b)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(b){var c=G(this),d=arguments[1],e=0,f=c.length>>>0;if(h(b)!="[object Function]")throw new TypeError;while(e>>0,e=Array(d),f=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var g=0;g>>0,e=[],f=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var g=0;g>>0,e=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var f=0;f>>0,e=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var f=0;f>>0;if(h(b)!="[object Function]")throw new TypeError;if(!d&&arguments.length==1)throw new TypeError;var e=0,f;if(arguments.length>=2)f=arguments[1];else do{if(e in c){f=c[e++];break}if(++e>=d)throw new TypeError}while(!0);for(;e>>0;if(h(b)!="[object Function]")throw new TypeError;if(!d&&arguments.length==1)throw new TypeError;var e,f=d-1;if(arguments.length>=2)e=arguments[1];else do{if(f in c){e=c[f--];break}if(--f<0)throw new TypeError}while(!0);do f in this&&(e=b.call(void 0,e,c[f],f,c));while(f--);return e}),Array.prototype.indexOf||(Array.prototype.indexOf=function(b){var c=G(this),d=c.length>>>0;if(!d)return-1;var e=0;arguments.length>1&&(e=E(arguments[1])),e=e>=0?e:Math.max(0,d+e);for(;e>>0;if(!d)return-1;var e=d-1;arguments.length>1&&(e=Math.min(e,E(arguments[1]))),e=e>=0?e:d-Math.abs(e);for(;e>=0;e--)if(e in c&&b===c[e])return e;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(b){return b.__proto__||(b.constructor?b.constructor.prototype:f)});if(!Object.getOwnPropertyDescriptor){var o="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(b,c){if(typeof b!="object"&&typeof b!="function"||b===null)throw new TypeError(o+b);if(!i(b,c))return;var d,e,g;d={enumerable:!0,configurable:!0};if(n){var h=b.__proto__;b.__proto__=f;var e=l(b,c),g=m(b,c);b.__proto__=h;if(e||g)return e&&(d.get=e),g&&(d.set=g),d}return d.value=b[c],d}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(b){return Object.keys(b)}),Object.create||(Object.create=function(b,c){var d;if(b===null)d={__proto__:null};else{if(typeof b!="object")throw new TypeError("typeof prototype["+typeof b+"] != 'object'");var e=function(){};e.prototype=b,d=new e,d.__proto__=b}return c!==void 0&&Object.defineProperties(d,c),d});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(b,c,d){if(typeof b!="object"&&typeof b!="function"||b===null)throw new TypeError(u+b);if(typeof d!="object"&&typeof d!="function"||d===null)throw new TypeError(t+d);if(s)try{return s.call(Object,b,c,d)}catch(e){}if(i(d,"value"))if(n&&(l(b,c)||m(b,c))){var g=b.__proto__;b.__proto__=f,delete b[c],b[c]=d.value,b.__proto__=g}else b[c]=d.value;else{if(!n)throw new TypeError(v);i(d,"get")&&j(b,c,d.get),i(d,"set")&&k(b,c,d.set)}return b}}Object.defineProperties||(Object.defineProperties=function(b,c){for(var d in c)i(c,d)&&Object.defineProperty(b,d,c[d]);return b}),Object.seal||(Object.seal=function(b){return b}),Object.freeze||(Object.freeze=function(b){return b});try{Object.freeze(function(){})}catch(w){Object.freeze=function(b){return function(c){return typeof c=="function"?c:b(c)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(b){return b}),Object.isSealed||(Object.isSealed=function(b){return!1}),Object.isFrozen||(Object.isFrozen=function(b){return!1}),Object.isExtensible||(Object.isExtensible=function(b){if(Object(b)===b)throw new TypeError;var c="";while(i(b,c))c+="?";b[c]=!0;var d=i(b,c);return delete b[c],d});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 H(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var H=[];for(var b in a)i(a,b)&&H.push(b);if(x)for(var c=0,d=z;c9999?"+":"")+("00000"+Math.abs(e)).slice(0<=e&&e<=9999?-4:-6),c=b.length;while(c--)d=b[c],d<10&&(b[c]="0"+d);return e+"-"+b.slice(0,2).join("-")+"T"+b.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(b){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(d){var e=c.exec(d);if(e){e.shift();for(var f=1;f<7;f++)e[f]=+(e[f]||(f<3?1:0)),f==1&&e[f]--;var g=+e.pop(),h=+e.pop(),i=e.pop(),j=0;if(i){if(h>23||g>59)return NaN;j=(h*60+g)*6e4*(i=="+"?-1:1)}var k=+e[0];return 0<=k&&k<=99?(e[0]=k+400,a.UTC.apply(this,e)+j-126227808e5):a.UTC.apply(this,e)+j}return a.parse.apply(this,arguments)},b}(Date));var B=" \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)}}),ace.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(c5||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||e.isOpera){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)})}};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)}}),ace.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()}}),ace.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)}}),ace.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}}),ace.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.commands=new o(f.isMac?"mac":"win",p),this.textInput=new g(a.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),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.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.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,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.renderer.updateFontSize()},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.$cursorChange=function(){this.renderer.updateCursor()},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.$cursorChange()},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.$cursorChange(),this.$blockScrolling||this.renderer.scrollCursorIntoView(),this.$highlightBrackets(),this.$updateHighlightActiveLine()},this.$updateHighlightActiveLine=function(){var a=this.getSession();a.$highlightLineMarker&&a.removeMarker(a.$highlightLineMarker),a.$highlightLineMarker=null;if(this.$highlightActiveLine){var b=this.getCursorPosition(),c=this.session.getFoldLine(b.row);if(this.getSelectionStyle()!="line"||!this.selection.isMultiLine()){var 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.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(a){this._emit("paste",a),this.insert(a)},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(" ",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;r0;++r)j.charAt(r)==" "?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){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.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.$highlightGutterLine=!0,this.setHighlightGutterLine=function(a){if(this.$highlightGutterLine==a)return;this.renderer.setHighlightGutterLine(a)},this.getHighlightGutterLine=function(){return this.$highlightGutterLine},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.setAnimatedScroll=function(a){this.renderer.setAnimatedScroll(a)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},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.setFadeFoldWidgets=function(a){this.renderer.setFadeFoldWidgets(a)},this.getFadeFoldWidgets=function(){return this.renderer.getFadeFoldWidgets()},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=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.$moveByPage=function(a,b){var c=this.renderer,d=this.renderer.layerConfig,e=a*Math.floor(d.height/d.lineHeight);this.$blockScrolling++,b==1?this.selection.$moveSelection(function(){this.moveCursorBy(e,0)}):b==0&&(this.selection.moveCursorBy(e,0),this.selection.clearSelection()),this.$blockScrolling--;var f=c.scrollTop;c.scrollBy(0,e*d.lineHeight),b!=null&&c.scrollCursorIntoView(null,.5),c.animateScrolling(f)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(a){this.renderer.scrollToRow(a)},this.scrollToLine=function(a,b,c,d){this.renderer.scrollToLine(a,b,c,d)},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,c){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(a-1)||this.scrollToLine(a-1,!0,c)},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(){var a=this.renderer.scrollTop;this.selection.moveCursorFileEnd(),this.clearSelection(),this.renderer.animateScrolling(a)},this.navigateFileStart=function(){var a=this.renderer.scrollTop;this.selection.moveCursorFileStart(),this.clearSelection(),this.renderer.animateScrolling(a)},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),d=0;return c?(this.$tryReplace(c,a)&&(d=1),c!==null&&(this.selection.setSelectionRange(c),this.renderer.scrollSelectionIntoView(c.start,c.end)),d):d},this.replaceAll=function(a,b){b&&this.$search.set(b);var c=this.$search.findAll(this.session),d=0;if(!c.length)return d;this.$blockScrolling+=1;var e=this.getSelectionRange();this.clearSelection(),this.selection.moveCursorTo(0,0);for(var f=c.length-1;f>=0;--f)this.$tryReplace(c[f],a)&&d++;return this.selection.setSelectionRange(e),this.$blockScrolling-=1,d},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,c){this.clearSelection(),b=b||{},b.needle=a,this.$search.set(b),this.$find(!1,c)},this.findNext=function(a,b){a=a||{},this.$search.set(a),this.$find(!1,b)},this.findPrevious=function(a,b){a=a||{},this.$search.set(a),this.$find(!0,b)},this.$find=function(a,b){this.selection.isEmpty()||this.$search.set({needle:this.session.getTextRange(this.getSelectionRange())}),typeof a!="undefined"&&this.$search.set({backwards:a});var c=this.$search.find(this.session);if(c){this.$blockScrolling+=1,this.session.unfold(c),this.selection.setSelectionRange(c),this.$blockScrolling-=1;var d=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(c.start,c.end,.5),this.renderer.animateScrolling(d)}},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy()}}).call(q.prototype),b.Editor=q}),ace.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;c1&&(d.charAt(0)==g?d=d.substr(1):d.charAt(d.length-1)==g&&(d=d.slice(0,-1))),d&&d!=g&&(j?b.onPaste(d):b.onTextInput(d));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.setAttribute("wrap","off"),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}),ace.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(this),new f(this),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)},this.setState=function(a){this.state=a},this.captureMouse=function(a,b){b&&this.setState(b),this.x=a.x,this.y=a.y;var c=this.editor.renderer.$keepTextAreaAtCursor;this.editor.renderer.$keepTextAreaAtCursor=!1;var e=this,f=function(a){e.x=a.clientX,e.y=a.clientY},g=function(a){clearInterval(i),e[e.state+"End"]&&e[e.state+"End"](a),e.$clickSelection=null,e.editor.renderer.$keepTextAreaAtCursor=c,e.editor.renderer.$moveTextAreaToCursor()},h=function(){e[e.state]&&e[e.state]()};d.capture(this.editor.container,f,g);var i=setInterval(h,20);a.preventDefault()}}).call(h.prototype),b.MouseHandler=h}),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/browser_focus"],function(a,b,c){function g(a){a.$clickSelection=null,a.browserFocus=new e;var b=a.editor;b.setDefaultHandler("mousedown",this.onMouseDown.bind(a)),b.setDefaultHandler("dblclick",this.onDoubleClick.bind(a)),b.setDefaultHandler("tripleclick",this.onTripleClick.bind(a)),b.setDefaultHandler("quadclick",this.onQuadClick.bind(a)),b.setDefaultHandler("mousewheel",this.onScroll.bind(a));var c=["select","startSelect","drag","dragEnd","dragWait","dragWaitEnd","startDrag"];c.forEach(function(b){a[b]=this[b]},this),a.selectByLines=this.extendSelectionBy.bind(a,"getLineRange"),a.selectByWords=this.extendSelectionBy.bind(a,"getWordRange")}function h(a,b,c,d){return Math.sqrt(Math.pow(c-a,2)+Math.pow(d-b,2))}"use strict";var d=a("../lib/dom"),e=a("../lib/browser_focus").BrowserFocus,f=5;(function(){this.onMouseDown=function(a){this.mousedownEvent=a;var b=a.inSelection(),c=a.getDocumentPosition(),d=this.editor,e=this;this.ev=a;var f=d.getSelectionRange(),g=f.isEmpty(),h=a.getButton();if(h!==0){g&&(d.moveCursorToPosition(c),d.selection.clearSelection()),this.moveTextarea=function(){d.textInput.onContextMenu({x:e.x,y:e.y})},this.moveTextareaEnd=d.textInput.onContextMenuClose,d.textInput.onContextMenu({x:this.x,y:this.y},g),this.captureMouse(a,"moveTextarea");return}if(b&&!d.isFocused()){d.focus();return}if(!b||this.$clickSelection||a.getShiftKey())this.startSelect(c);else if(b){var i=a.domEvent;i.ctrlKey||i.altKey?this.startDrag():(this.mousedownEvent.time=(new Date).getTime(),this.setState("dragWait"))}this.captureMouse(a)},this.startSelect=function(a){a=a||this.editor.renderer.screenToTextCoordinates(this.x,this.y),this.mousedownEvent.getShiftKey()?this.editor.selection.selectToPosition(a):this.$clickSelection||(this.editor.moveCursorToPosition(a),this.editor.selection.clearSelection()),this.setState("select")},this.select=function(){var a,b=this.editor,c=b.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var d=this.$clickSelection.comparePoint(c);d==-1?a=this.$clickSelection.end:d==1?a=this.$clickSelection.start:(c=this.$clickSelection.end,a=this.$clickSelection.start),b.selection.setSelectionAnchor(a.row,a.column)}b.selection.selectToPosition(c),b.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(a){var b,c=this.editor,d=c.renderer.screenToTextCoordinates(this.x,this.y),e=c.selection[a](d.row,d.column);if(this.$clickSelection){var f=this.$clickSelection.comparePoint(e.start),g=this.$clickSelection.comparePoint(e.end);f==-1&&g<=0?(b=this.$clickSelection.end,d=e.start):g==1&&f>=0?(b=this.$clickSelection.start,d=e.end):f==-1&&g==1?(d=e.end,b=e.start):(d=this.$clickSelection.end,b=this.$clickSelection.start),c.selection.setSelectionAnchor(b.row,b.column)}c.selection.selectToPosition(d),c.renderer.scrollCursorIntoView()},this.startDrag=function(){var a=this.editor;this.setState("drag"),this.dragRange=a.getSelectionRange();var b=a.getSelectionStyle();this.dragSelectionMarker=a.session.addMarker(this.dragRange,"ace_selection",b),a.clearSelection(),d.addCssClass(a.container,"ace_dragging"),this.$dragKeybinding||(this.$dragKeybinding={handleKeyboard:function(a,b,c,d){if(c=="esc")return{command:this.command}},command:{exec:function(a){var b=a.$mouseHandler;b.dragCursor=null,b.dragEnd(),b.startSelect()}}}),a.keyBinding.addKeyboardHandler(this.$dragKeybinding)},this.dragWait=function(){var a=h(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),b=(new Date).getTime(),c=this.editor;a>f?this.startSelect():b-this.mousedownEvent.time>c.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(a){this.mousedownEvent.domEvent=a,this.startSelect()},this.drag=function(){var a=this.editor;this.dragCursor=a.renderer.screenToTextCoordinates(this.x,this.y),a.moveCursorToPosition(this.dragCursor),a.renderer.scrollCursorIntoView()},this.dragEnd=function(a){var b=this.editor,c=this.dragCursor,e=this.dragRange;d.removeCssClass(b.container,"ace_dragging"),b.session.removeMarker(this.dragSelectionMarker),b.keyBinding.removeKeyboardHandler(this.$dragKeybinding);if(!c)return;b.clearSelection();if(a&&(a.ctrlKey||a.altKey)){var f=b.session,g=e;g.end=f.insert(c,f.getTextRange(e)),g.start=c}else{if(e.contains(c.row,c.column))return;var g=b.moveText(e,c)}if(!g)return;b.selection.setSelectionRange(g)},this.onDoubleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;this.setState("selectByWords"),c.moveCursorToPosition(b),c.selection.selectWord(),this.$clickSelection=c.getSelectionRange()},this.onTripleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;this.setState("selectByLines"),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.setState("select")},this.onScroll=function(a){var b=this.editor,c=b.renderer.isScrollableBy(a.wheelX*a.speed,a.wheelY*a.speed);if(c)this.$passScrollEvent=!1;else{if(this.$passScrollEvent)return;if(!this.$scrollStopTimeout){var d=this;this.$scrollStopTimeout=setTimeout(function(){d.$passScrollEvent=!0,d.$scrollStopTimeout=null},200)}}return b.renderer.scrollBy(a.wheelX*a.speed,a.wheelY*a.speed),a.preventDefault()}}).call(g.prototype),b.DefaultHandlers=g}),ace.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}),ace.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=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}e.implement(this,h),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=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=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=f.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()?f.stringRepeat(" ",this.getTabSize()):" "},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;b0&&(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=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;c0?(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=h.row&&k.shiftRow(-c)}f=e}else{var n;if(b){n=[e,0];for(var o=0;o=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(),e=this.$wrapData,g=this.$wrapLimit,h,j,k=a;b=Math.min(b,c.length-1);while(k<=b){j=this.getFoldLine(k,j);if(!j)h=this.$getDisplayTokens(f.stringTrimRight(c[k])),e[k]=this.$computeWrapSplits(h,g,d),k++;else{h=[],j.walk(function(a,b,d,e){var f;if(a){f=this.$getDisplayTokens(a,h.length),f[0]=i;for(var g=1;g=o)h.pop();e[j.start.row]=this.$computeWrapSplits(h,g,d),k=j.end.row+1}}};var b=1,c=2,i=3,l=4,n=9,o=10,p=11,q=12;this.$computeWrapSplits=function(a,b){function g(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 h=e+b;if(a[h]>=o){while(a[h]>=o)h++;g(h);continue}if(a[h]==i||a[h]==l){for(h;h!=e-1;h--)if(a[h]==i)break;if(h>e){g(h);continue}h=e+b;for(h;hj&&a[h]j&&a[h]==n)h--;if(h>j){g(++h);continue}h=e+b,g(h)}return c},this.$getDisplayTokens=function(a,d){var e=[],f;d=d||0;for(var g=0;g39&&h<48||h>57&&h<64?e.push(n):h>=4352&&r(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=4352&&r(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){var b=this.screenToDocumentPosition(a,Number.MAX_VALUE);return this.documentToScreenColumn(b.row,b.column)},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=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),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=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;dg&&(f=b.end.row+1,b=this.$foldData[d++],g=b?b.start.row:Infinity)}return a}}).call(n.prototype),a("./edit_session/folding").Folding.call(n.prototype),a("./edit_session/bracket_match").BracketMatch.call(n.prototype),b.EditSession=n}),ace.define("ace/config",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}"no use strict";var d=a("./lib/lang"),e=function(){return this}(),f={packaged:!1,workerPath:"",modePath:"",themePath:"",suffix:".js"};b.get=function(a){if(!f.hasOwnProperty(a))throw new Error("Unknown confik key: "+a);return f[a]},b.set=function(a,b){if(!f.hasOwnProperty(a))throw new Error("Unknown confik key: "+a);f[a]=b},b.all=function(){return d.copyObject(f)},b.init=function(){f.packaged=a.packaged||c.packaged||e.define&&define.packaged;if(!e.document)return"";var d={},h="",i,j=document.getElementsByTagName("script");for(var k=0;kb.row||a.row==b.row&&a.column>b.column},this.getRange=function(){var a=this.anchor,b=this.lead;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.$desiredColumn=null},this.$moveSelection=function(a){var b=this.lead;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.getWordRange=function(a,b){if(typeof b=="undefined"){var c=a||this.lead;a=c.row,b=c.column}return this.session.getWordRange(a,b)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var a=this.getCursor(),b=this.session.getAWordRange(a.row,a.column);this.setSelectionRange(b)},this.getLineRange=function(a,b){var c=typeof a=="number"?a:this.lead.row,d,e=this.session.getFoldLine(c);return e?(c=e.start.row,d=e.end.row):d=c,b?new g(c,0,d,this.session.getLine(d).length):new g(c,0,d+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var a=this.lead.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.lead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,1))this.moveCursorTo(b.end.row,b.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row=c.length){this.moveCursorTo(a,c.length),this.moveCursorRight(),a0&&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.$shortWordEndIndex=function(a){var b,c=0,d,e=/\s/,f=this.session.tokenRe;f.lastIndex=0;if(b=this.session.tokenRe.exec(a))c=this.session.tokenRe.lastIndex;else{while((d=a[c])&&e.test(d))c++;if(c<=1){f.lastIndex=0;while((d=a[c])&&!f.test(d)){f.lastIndex=0,c++;if(e.test(d)){if(c>2){c--;break}while((d=a[c])&&e.test(d))c++;if(c>2)break}}}}return f.lastIndex=0,c},this.moveCursorShortWordRight=function(){var a=this.lead.row,b=this.lead.column,c=this.doc.getLine(a),d=c.substring(b),e=this.session.getFoldAt(a,b,1);if(e)return this.moveCursorTo(e.end.row,e.end.column);if(b==c.length)return this.moveCursorRight();var f=this.$shortWordEndIndex(d);this.moveCursorTo(a,b+f)},this.moveCursorShortWordLeft=function(){var a=this.lead.row,b=this.lead.column,c;if(c=this.session.getFoldAt(a,b,-1))return this.moveCursorTo(c.start.row,c.start.column);if(b==0)return this.moveCursorLeft();var d=this.session.getLine(a).substring(0,b),f=e.stringReverse(d),g=this.$shortWordEndIndex(f);return this.moveCursorTo(a,b-g)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(a,b){var c=this.session.documentToScreenPosition(this.lead.row,this.lead.column);b===0&&(this.$desiredColumn?c.column=this.$desiredColumn:this.$desiredColumn=c.column);var d=this.session.screenToDocumentPosition(c.row+a,c.column);this.moveCursorTo(d.row,d.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.$keepDesiredColumnOnChange=!0,this.lead.setPosition(a,b),this.$keepDesiredColumnOnChange=!1,c||(this.$desiredColumn=null)},this.moveCursorToScreen=function(a,b,c){var d=this.session.screenToDocumentPosition(a,b);this.moveCursorTo(d.row,d.column,c)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(a){this.setSelectionRange(a,a.cursor==a.start),this.$desiredColumn=a.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(a){var b=this.getRange();return a?(a.start.column=b.start.column,a.start.row=b.start.row,a.end.column=b.end.column,a.end.row=b.end.row):a=b,a.cursor=this.isBackwards()?a.start:a.end,a.desiredColumn=this.$desiredColumn,a}}).call(h.prototype),b.Selection=h}),ace.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.isEqual=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.intersects=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){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?bthis.end.column?1:0:athis.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=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;b1&&e[i].token.length!==j-1)throw new Error("Matching groups and length of the token array don't match in rule #"+i+" of state "+c);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;n1&&(m=g.slice(n+2,n+1+e[n].len)),typeof l.token=="function"?k=l.token.apply(this,m):k=l.token,l.next&&(c=l.next,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=b&&(a.row=Math.max(0,b-1),a.column=this.getLine(b-1).length),a},this.insert=function(a,b){if(!b||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=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}),ace.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=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=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)}),ace.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.currentLine20){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}),ace.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=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=a)return e}return null},this.getFoldedRowCount=function(a,b){var c=this.$foldData,d=b-a+1;for(var e=0;e=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;othis.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)throw"Trying to add fold to FoldRow that doesn't have a matching row";this.folds.unshift(a),this.start.row=a.start.row,this.start.column=a.start.column}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=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}),ace.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=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)return;b=e,g=f,j=!0}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(j0},this.hasRedo=function(){return this.$redoStack.length>0}}).call(d.prototype),b.UndoManager=d}),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/useragent","ace/config","ace/lib/net","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("./config"),i=a("./lib/net"),j=a("./layer/gutter").Gutter,k=a("./layer/marker").Marker,l=a("./layer/text").Text,m=a("./layer/cursor").Cursor,n=a("./scrollbar").ScrollBar,o=a("./renderloop").RenderLoop,p=a("./lib/event_emitter").EventEmitter,q=a("text!./css/editor.css");e.importCssString(q,"ace_editor");var r=function(a,b){var c=this;this.container=a,this.$keepTextAreaAtCursor=!g.isIE,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.setHighlightGutterLine(!0),this.$gutterLayer=new j(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onResize.bind(this,!0)),this.setFadeFoldWidgets(!0),this.$markerBack=new k(this.content);var d=this.$textLayer=new l(this.content);this.canvas=d.element,this.$markerFront=new k(this.content),this.characterWidth=d.getCharacterWidth(),this.lineHeight=d.getLineHeight(),this.$cursorLayer=new m(this.content),this.$cursorPadding=8,this.$horizScroll=!1,this.$horizScrollAlwaysVisible=!1,this.$animatedScroll=!1,this.scrollBar=new n(a),this.scrollBar.addEventListener("scroll",function(a){c.$inScrollAnimation||c.session.setScrollTop(a.data)}),this.scrollTop=0,this.scrollLeft=0,f.addListener(this.scroller,"scroll",function(){var a=c.scroller.scrollLeft;c.scrollLeft=a,c.session.setScrollLeft(a),c.scroller.className=a==0?"ace_scroller":"ace_scroller horscroll"}),this.cursorPos={row:0,column:0},this.$textLayer.addEventListener("changeCharacterSize",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 o(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,this.CHANGE_H_SCROLL=1024,d.implement(this,p),this.setSession=function(a){this.session=a,this.scroller.className="ace_scroller",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.lastRowthis.layerConfig.height)return;b+=(this.showGutter?this.$gutterLayer.gutterWidth:0)-this.scrollLeft;var c=this.container.getBoundingClientRect();this.textarea.style.left=c.left+b+"px",this.textarea.style.top=c.top+a+"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||!this.container.offsetWidth)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_H_SCROLL){this.scroller.scrollLeft=this.scrollLeft;var b=this.scroller.scrollLeft;this.scrollLeft=b,this.session.setScrollLeft(b)}if(a&this.CHANGE_FULL){this.$textLayer.checkForSizeChanges(),this.$updateScrollBar(),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.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight();return}if(a&this.CHANGE_SCROLL){this.$updateScrollBar(),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.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight();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),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),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",e||this.session.setScrollLeft(0));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.$gutter.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",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(be?(b&&(e-=b*this.$size.scrollerHeight),this.session.setScrollTop(e)):this.scrollTop+this.$size.scrollerHeightd?(d0)return!0;if(b>0&&this.session.getScrollTop()+this.$size.scrollerHeight0?1:-1}},this.screenToTextCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=Math.round((a+this.scrollLeft-c.left-this.$padding)/this.characterWidth),e=Math.floor((b+this.scrollTop-c.top)/this.lineHeight);return this.session.screenToDocumentPosition(e,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=" ";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._loadTheme=function(a,b){if(!h.get("packaged"))return b();var c=a.split("/").pop(),d=h.get("themePath")+"/theme-"+c+h.get("suffix");i.loadScript(d,b)},this.setTheme=function(b){function h(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;if(!b||typeof b=="string"){var d=b||"ace/theme/textmate",f;try{f=a(d)}catch(g){}if(f)return h(f);c._loadTheme(d,function(){a([d],function(a){if(c.$themeValue!==b)return;h(a)})})}else h(b)},this.getTheme=function(){return this.$themeValue},this.setStyle=function(b){e.addCssClass(this.container,b)},this.unsetStyle=function(b){e.removeCssClass(this.container,b)},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(r.prototype),b.VirtualRenderer=r}),ace.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]+=" "+b},this.removeGutterDecoration=function(a,b){this.$decorations[a]=this.$decorations[a].replace(" "+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;eh&&(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("
      ",e+1);if(i){var k=i[e];k==null&&(k=i[e]=this.session.getFoldWidget(e)),k&&c.push("")}var l=this.session.getRowLength(e)-1;while(l--)c.push("
      ¦");c.push("
      "),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}),ace.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+" start",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+" start",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
      "),j=this.$getTop(b.end.row,d),i=Math.round(b.end.column*d.characterWidth),a.push("
      "),h=(b.end.row-b.start.row-1)*d.lineHeight;if(h<0)return;j=this.$getTop(b.start.row+1,d),a.push("
      ")},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("
      ")}}).call(f.prototype),b.Marker=f}),ace.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("changeCharacterSize",{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=g.isIE||g.isOldGecko?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="fixed",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)}}if(!this.element.offsetWidth)return null;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}:function(){if(!this.$measureNode){var a=this.$measureNode=e.createElement("div"),b=a.style;b.width=b.height="auto",b.left=b.top="-100px",b.visibility="hidden",b.position="fixed",b.overflow="visible",b.whiteSpace="nowrap",a.innerHTML="X";var c=this.element.parentNode;while(c&&!e.hasCssClass(c,"ace_editor"))c=c.parentNode;if(!c)return this.$measureNode=null;c.appendChild(a)}var d=this.$measureNode.getBoundingClientRect(),f={height:d.height,width:d.width};return f.width==0||f.height==0?null:f},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"+this.TAB_CHAR+(new Array(c)).join(" ")+""):b.push((new Array(c+1)).join(" "))},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;i0;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.firstRowb.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("
      ");var i=this.session.getTokens(f,f);i.length==1&&this.$renderLine(b,f,i[0].tokens,!1),this.$useLineGroups()&&b.push("
      "),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|&|<|( +)|([\u0000-\u0019\u00a0\u2000-\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,g=function(a,c,d,f,g){if(c)return(new Array(a.length+1)).join(" ");if(a=="&")return"&";if(a=="<")return"<";if(a==" "){var h=e.session.getScreenTabSize(b+f);return b+=h-1,e.$tabStrings[h]}if(a==" "){var i=e.showInvisibles?"ace_cjk ace_invisible":"ace_cjk",j=e.showInvisibles?e.SPACE_CHAR:"";return b+=1,""+j+""}return d?""+e.SPACE_CHAR+"":(b+=1,""+a+"")},h=d.replace(f,g);if(!this.$textToken[c.type]){var i="ace_"+c.type.replace(/\./g," ace_"),j="";c.type=="fold"&&(j=" style='width:"+c.value.length*this.config.characterWidth+"px;' "),a.push("",h,"")}else a.push(h);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("
      ");for(var k=0;k=h)i=j.$renderToken(a,i,l,m.substring(0,h-f)),m=m.substring(h-f),f=h,e||a.push("
      ","
      "),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(""+this.EOL_CHAR+""):a.push(""+this.EOF_CHAR+"")),e||a.push("
      ")},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.lengthc-b&&(f=f.substring(0,c-b)),g.push({type:a[d].type,value:f}),e=b+f.length,d+=1}while(ec&&(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}),ace.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.isVisible=!1,this.cursors=[],this.cursor=this.addCursor()};(function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.addCursor=function(){var a=d.createElement("div"),b="ace_cursor";return this.isVisible||(b+=" ace_hidden"),this.overwrite&&(b+=" ace_overwrite"),a.className=b,this.element.appendChild(a),this.cursors.push(a),a},this.removeCursor=function(){if(this.cursors.length>1){var a=this.cursors.pop();return a.parentNode.removeChild(a),a}},this.hideCursor=function(){this.isVisible=!1;for(var a=this.cursors.length;a--;)d.addCssClass(this.cursors[a],"ace_hidden");clearInterval(this.blinkId)},this.showCursor=function(){this.isVisible=!0;for(var a=this.cursors.length;a--;)d.removeCssClass(this.cursors[a],"ace_hidden");this.element.style.visibility="",this.restartTimer()},this.restartTimer=function(){clearInterval(this.blinkId);if(!this.isVisible)return;var a=this.cursors.length==1?this.cursor:this.element;this.blinkId=setInterval(function(){a.style.visibility="hidden",setTimeout(function(){a.style.visibility=""},400)},1e3)},this.getPixelPosition=function(a,b){if(!this.config||!this.session)return{left:0,top:0};a||(a=this.session.selection.getCursor());var c=this.session.documentToScreenPosition(a),d=Math.round(this.$padding+c.column*this.config.characterWidth),e=(c.row-(b?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:d,top:e}},this.update=function(a){this.config=a;if(this.session.selectionMarkerCount>0){var b=this.session.$selectionMarkers,c=0,d,e=0;for(var c=b.length;c--;){d=b[c];var f=this.getPixelPosition(d.cursor,!0),g=(this.cursors[e++]||this.addCursor()).style;g.left=f.left+"px",g.top=f.top+"px",g.width=a.characterWidth+"px",g.height=a.lineHeight+"px"}if(e>1)while(this.cursors.length>e)this.removeCursor()}else{var f=this.getPixelPosition(null,!0),g=this.cursor.style;g.left=f.left+"px",g.top=f.top+"px",g.width=a.characterWidth+"px",g.height=a.lineHeight+"px";while(this.cursors.length>1)this.removeCursor()}var h=this.session.getOverwrite();h!=this.overwrite&&this.$setOverite(h),this.$pixelPos=f,this.restartTimer()},this.$setOverite=function(a){this.overwrite=a;for(var b=this.cursors.length;b--;)a?d.addCssClass(this.cursors[b],"ace_overwrite"):d.removeCssClass(this.cursors[b],"ace_overwrite")},this.destroy=function(){clearInterval(this.blinkId)}}).call(e.prototype),b.Cursor=e}),ace.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}),ace.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}),ace.define("text!ace/css/editor.css",[],"\n.ace_editor {\n position: absolute;\n overflow: hidden;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Consolas', 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.ace_composition {\n position: absolute;\n background: #555;\n color: #DDD;\n z-index: 4;\n}\n\n.ace_gutter {\n position: absolute;\n overflow : hidden;\n height: 100%;\n width: auto;\n cursor: default;\n z-index: 1000;\n}\n\n.ace_gutter_active_line {\n position: absolute;\n right: 0;\n width: 100%;\n}\n\n.ace_gutter.horscroll {\n box-shadow: 0px 0px 20px rgba(0,0,0,0.4);\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: 0.5em;\n height: 1em;\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 /* setting pointer-events: auto; on node under the mouse, which changes\n during scroll, will break mouse wheel scrolling in Safari */\n pointer-events: none;\n}\n\n.ace_gutter .ace_layer {\n position: relative;\n min-width: 40px;\n text-align: right;\n pointer-events: auto;\n}\n\n.ace_text-layer {\n color: black;\n font: inherit !important;\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_editor.multiselect .ace_cursor {\n border-left-width: 1px;\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: 5;\n}\n\n.ace_marker-layer .ace_bracket {\n position: absolute;\n z-index: 6;\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: 4;\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\n.ace_fade-fold-widgets .ace_fold-widget {\n -moz-transition: 0.5s opacity;\n -webkit-transition: 0.5s opacity;\n -o-transition: 0.5s opacity;\n -ms-transition: 0.5s opacity;\n transition: 0.5s opacity;\n opacity: 0;\n}\n.ace_fade-fold-widgets:hover .ace_fold-widget {\n -moz-transition-duration: 0.05s;\n -webkit-transition-duration: 0.05s;\n -o-transition-duration: 0.05s;\n -ms-transition-duration: 0.05s;\n transition-duration: 0.05s;\n -moz-transition-delay: 0.2s;\n -webkit-transition-delay: 0.2s;\n -o-transition-delay: 0.2s;\n -ms-transition-delay: 0.2s;\n transition-delay: 0.2s; \n opacity:1;\n}\n"),ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor"],function(a,b,c){function k(a,b,c){return j.$options.wrap=!0,j.$options.needle=b,j.$options.backwards=c==-1,j.find(a)}function n(a,b){return a.row==b.row&&a.column==b.column}function o(a){a.$onAddRange=a.$onAddRange.bind(a),a.$onRemoveRange=a.$onRemoveRange.bind(a),a.$onMultiSelect=a.$onMultiSelect.bind(a),a.$onSingleSelect=a.$onSingleSelect.bind(a),b.onSessionChange.call(a,a),a.on("changeSession",b.onSessionChange.bind(a)),a.on("mousedown",g),a.commands.addCommands(b.commands.defaultCommands),p(a)}function p(a){function e(){c&&(d.style.cursor="",c=!1)}var b=a.textInput.getElement(),c=!1,d=a.renderer.content;h.addListener(b,"keydown",function(a){a.keyCode==18&&!(a.ctrlKey||a.shiftKey||a.metaKey)?c||(d.style.cursor="crosshair",c=!0):c&&(d.style.cursor="")}),h.addListener(b,"keyup",e),h.addListener(b,"blur",e)}var d=a("./range_list").RangeList,e=a("./range").Range,f=a("./selection").Selection,g=a("./mouse/multi_select_handler").onMouseDown,h=a("./lib/event");b.commands=a("./commands/multi_select_commands");var i=a("./search").Search,j=new i,l=a("./edit_session").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(l.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(a,b){if(!a)return;if(!this.inMultiSelectMode&&this.rangeCount==0){var c=this.toOrientedRange();if(a.intersects(c))return b||this.fromOrientedRange(a);this.rangeList.add(c),this.$onAddRange(c)}a.cursor||(a.cursor=a.end);var d=this.rangeList.add(a);return this.$onAddRange(a),d.length&&this.$onRemoveRange(d),this.rangeCount>1&&!this.inMultiSelectMode&&(this._emit("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),b||this.fromOrientedRange(a)},this.toSingleRange=function(a){a=a||this.ranges[0];var b=this.rangeList.removeAll();b.length&&this.$onRemoveRange(b),a&&this.fromOrientedRange(a)},this.substractPoint=function(a){var b=this.rangeList.substractPoint(a);if(b)return this.$onRemoveRange(b),b[0]},this.mergeOverlappingRanges=function(){var a=this.rangeList.merge();a.length?this.$onRemoveRange(a):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(a){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(a),this._emit("addRange",{range:a})},this.$onRemoveRange=function(a){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var b=this.rangeList.ranges.pop();a.push(b),this.rangeCount=0}for(var c=a.length;c--;){var d=this.ranges.indexOf(a[c]);this.ranges.splice(d,1)}this._emit("removeRange",{ranges:a}),this.rangeCount==0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._emit("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),b=b||this.ranges[0],b&&!b.isEqual(this.getRange())&&this.fromOrientedRange(b)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new d,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeList.ranges.concat()},this.splitIntoLines=function(){if(this.rangeCount>1){var a=this.rangeList.ranges,b=a[a.length-1],c=e.fromPoints(a[0].start,b.end);this.toSingleRange(),this.setSelectionRange(c,b.cursor==b.start)}else{var c=this.getRange(),d=c.start.row,f=c.end.row;if(d==f)return;var g=[],h=this.getLineRange(d,!0);h.start.column=c.start.column,g.push(h);for(var i=d+1;i1){var a=this.rangeList.ranges,b=a[a.length-1],c=e.fromPoints(a[0].start,b.end);this.toSingleRange(),this.setSelectionRange(c,b.cursor==b.start)}else{var d=this.session.documentToScreenPosition(this.selectionLead),f=this.session.documentToScreenPosition(this.selectionAnchor),g=this.rectangularRangeBlock(d,f);g.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(a,b,c){var d=[],f=a.column0)p--;if(p>0){var q=0;while(d[q].isEmpty())q++}for(var r=p;r>=q;r--)d[r].isEmpty()&&d.splice(r,1)}return d}}.call(f.prototype);var m=a("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(a){a.cursor||(a.cursor=a.end);var b=this.getSelectionStyle();return a.marker=this.session.addMarker(a,"ace_selection",b),this.session.$selectionMarkers.push(a),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,a},this.removeSelectionMarker=function(a){if(!a.marker)return;this.session.removeMarker(a.marker);var b=this.session.$selectionMarkers.indexOf(a);b!=-1&&this.session.$selectionMarkers.splice(b,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(a){var b=this.session.$selectionMarkers;for(var c=a.length;c--;){var d=a[c];if(!d.marker)continue;this.session.removeMarker(d.marker);var e=b.indexOf(d);e!=-1&&b.splice(e,1)}this.session.selectionMarkerCount=b.length},this.$onAddRange=function(a){this.addSelectionMarker(a.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(a){this.removeSelectionMarkers(a.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(a){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("multiselect"),this.keyBinding.addKeyboardHandler(b.commands.keyboardHandler),this.commands.on("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(a){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("multiselect"),this.keyBinding.removeKeyboardHandler(b.commands.keyboardHandler),this.commands.removeEventListener("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelectExec=function(a){var b=a.command,c=a.editor;b.multiSelectAction?b.multiSelectAction=="forEach"?c.forEachSelection(b,a.args):b.multiSelectAction=="single"?(c.exitMultiSelectMode(),b.exec(c,a.args||{})):b.multiSelectAction(c,a.args||{}):(b.exec(c,a.args||{}),c.multiSelect.addRange(c.multiSelect.toOrientedRange()),c.multiSelect.mergeOverlappingRanges()),a.preventDefault()},this.forEachSelection=function(a,b){if(this.inVirtualSelectionMode)return;var c=this.session,d=this.selection,e=d.rangeList,g=d._eventRegistry;d._eventRegistry={};var h=new f(c);this.inVirtualSelectionMode=!0;for(var i=e.ranges.length;i--;)h.fromOrientedRange(e.ranges[i]),this.selection=c.selection=h,a.exec(this,b||{}),h.toOrientedRange(e.ranges[i]);h.detach(),this.selection=c.selection=d,this.inVirtualSelectionMode=!1,d._eventRegistry=g,d.mergeOverlappingRanges(),this.onCursorChange(),this.onSelectionChange()},this.exitMultiSelectMode=function(){if(this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getCopyText=function(){var a="";if(this.inMultiSelectMode){var b=this.multiSelect.rangeList.ranges;a=[];for(var c=0;cc.length){this.commands.exec("insertstring",this,a);return}for(var d=c.length;d--;){var e=c[d];e.isEmpty()||this.session.remove(e),this.session.insert(e.start,b[d])}},this.findAll=function(a,b,c){b=b||{},b.needle=a||b.needle,this.$search.set(b);var d=this.$search.findAll(this.session);if(!d.length)return 0;this.$blockScrolling+=1;var e=this.multiSelect;c||e.toSingleRange(d[0]);for(var f=d.length;f--;)e.addRange(d[f],!0);return this.$blockScrolling-=1,d.length},this.selectMoreLines=function(a,b){var c=this.selection.toOrientedRange(),d=c.cursor==c.end,f=this.session.documentToScreenPosition(c.cursor);this.selection.$desiredColumn&&(f.column=this.selection.$desiredColumn);var g=this.session.screenToDocumentPosition(f.row+a,f.column);if(!c.isEmpty())var h=this.session.documentToScreenPosition(d?c.end:c.start),i=this.session.screenToDocumentPosition(h.row+a,h.column);else var i=g;if(d){var j=e.fromPoints(g,i);j.cursor=j.start}else{var j=e.fromPoints(i,g);j.cursor=j.end}j.desiredColumn=f.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(c);else if(b)var k=c.cursor;this.selection.addRange(j),k&&this.selection.substractPoint(k)},this.transposeSelections=function(a){var b=this.session,c=b.multiSelect,d=c.ranges;for(var e=d.length;e--;){var f=d[e];if(f.isEmpty()){var g=b.getWordRange(f.start.row,f.start.column);f.start.row=g.start.row,f.start.column=g.start.column,f.end.row=g.end.row,f.end.column=g.end.column}}c.mergeOverlappingRanges();var h=[];for(var e=d.length;e--;){var f=d[e];h.unshift(b.getTextRange(f))}a<0?h.unshift(h.pop()):h.push(h.shift());for(var e=d.length;e--;){var f=d[e],g=f.clone();b.replace(f,h[e]),f.start.row=g.start.row,f.start.column=g.start.column}},this.selectMore=function(a,b){var c=this.session,d=c.multiSelect,e=d.toOrientedRange();if(e.isEmpty()){var e=c.getWordRange(e.start.row,e.start.column);e.cursor=e.end,this.multiSelect.addRange(e)}var f=c.getTextRange(e),g=k(c,f,a);g&&(g.cursor=a==-1?g.start:g.end,this.multiSelect.addRange(g)),b&&this.multiSelect.substractPoint(e.cursor)}}).call(m.prototype),b.onSessionChange=function(a){var b=a.session;b.multiSelect||(b.$selectionMarkers=[],b.selection.$initRangeList(),b.multiSelect=b.selection),this.multiSelect=b.multiSelect;var c=a.oldSession;c&&(c.multiSelect&&c.multiSelect.editor==this&&(c.multiSelect.editor=null),b.multiSelect.removeEventListener("addRange",this.$onAddRange),b.multiSelect.removeEventListener("removeRange",this.$onRemoveRange),b.multiSelect.removeEventListener("multiSelect",this.$onMultiSelect),b.multiSelect.removeEventListener("singleSelect",this.$onSingleSelect)),b.multiSelect.on("addRange",this.$onAddRange),b.multiSelect.on("removeRange",this.$onRemoveRange),b.multiSelect.on("multiSelect",this.$onMultiSelect),b.multiSelect.on("singleSelect",this.$onSingleSelect),this.inMultiSelectMode!=b.selection.inMultiSelectMode&&(b.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},b.MultiSelect=o}),ace.define("ace/range_list",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.ranges=[]};(function(){this.comparePoints=function(a,b){return a.row-b.row||a.column-b.column},this.pointIndex=function(a,b){var c=this.ranges;for(var d=b||0;d0)continue;return f==0?d:(f=this.comparePoints(a,e.start),f>=0?d:-d-1)}return-d-1},this.add=function(a){var b=this.pointIndex(a.start);b<0&&(b=-b-1);var c=this.pointIndex(a.end,b);return c<0?c=-c-1:c++,this.ranges.splice(b,c-b,a)},this.addList=function(a){var b=[];for(var c=a.length;c--;)b.push.call(b,this.add(a[c]));return b},this.substractPoint=function(a){var b=this.pointIndex(a);if(b>=0)return this.ranges.splice(b,1)},this.merge=function(){var a=[],b=this.ranges,c=b[0],d;for(var e=1;e=0},this.containsPoint=function(a){return this.pointIndex(a)>=0},this.rangeAtPoint=function(a){var b=this.pointIndex(a);if(b>=0)return this.ranges[b]},this.clipRows=function(a,b){var c=this.ranges;if(c[0].start.row>b||c[c.length-1].start.rowe)break;l.start.row==e&&l.start.column>=c.column&&(l.start.column+=h,l.start.row+=g),l.end.row==e&&l.end.column>=c.column&&(l.end.column+=h,l.end.row+=g)}if(g!=0&&j=this.pos.column&&c.start.column<=this.pos.column+this.length+1){var f=c.start.column-this.pos.column;this.length+=e;if(!this.session.$fromUndo){if(b.action==="insertText")for(var g=this.others.length-1;g>=0;g--){var h=this.others[g],i={row:h.row,column:h.column+f};h.row===c.start.row&&c.start.column=0;g--){var h=this.others[g],i={row:h.row,column:h.column+f};h.row===c.start.row&&c.start.column=this.pos.column&&b.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",a)):(this.hideOtherMarkers(),this._emit("cursorLeave",a))},this.detach=function(){this.session.removeMarker(this.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.pos.detach();for(var a=0;a + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/** + * Define a module along with a payload + * @param module a name for the payload + * @param payload a function to call with (require, exports, module) params + */ + +(function() { + +var ACE_NAMESPACE = "ace"; + +var global = (function() { + return this; +})(); + +var _define = function(module, deps, payload) { + if (typeof module !== 'string') { + if (_define.original) + _define.original.apply(window, arguments); + else { + console.error('dropping module because define wasn\'t a string.'); + console.trace(); + } + return; + } + + if (arguments.length == 2) + payload = deps; + + if (!_define.modules) + _define.modules = {}; + + _define.modules[module] = payload; +}; + +/** + * Get at functionality ace.define()ed using the function above + */ +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(parentId, module[i]); + if (!dep && _require.original) + return _require.original.apply(window, arguments); + params.push(dep); + } + if (callback) { + callback.apply(null, params); + } + } + else if (typeof module === 'string') { + var payload = lookup(parentId, module); + if (!payload && _require.original) + return _require.original.apply(window, arguments); + + if (callback) { + callback(); + } + + return payload; + } + else { + if (_require.original) + return _require.original.apply(window, arguments); + } +}; + +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(/[^\/]+\/\.\.\//, ""); + } + } + + return moduleName; +}; + +/** + * Internal function to lookup moduleNames and resolve them by calling the + * definition function if needed. + */ +var lookup = function(parentId, moduleName) { + + moduleName = normalizeModule(parentId, moduleName); + + var module = _define.modules[moduleName]; + if (!module) { + return null; + } + + if (typeof module === 'function') { + var exports = {}; + 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; + return exports; + } + + return module; +}; + +function exportAce(ns) { + + if (typeof requirejs !== "undefined") { + + var define = global.define; + global.define = function(id, deps, callback) { + if (typeof callback !== "function") + return define.apply(this, arguments); + + return ace.define(id, deps, function(require, exports, module) { + if (deps[2] == "module") + module.packaged = true; + return callback.apply(this, arguments); + }); + }; + global.define.packaged = true; + + return; + } + + 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 ***** */ + +/** + * class Ace + * + * The main class required to set up an Ace instance in the browser. + * + * + **/ + +ace.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/multi_select', 'ace/worker/worker_client', 'ace/keyboard/hash_handler', 'ace/keyboard/state_handler', 'ace/placeholder', 'ace/config', '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; +var MultiSelect = require("./multi_select").MultiSelect; + +// The following require()s are for inclusion in the built ace file +require("./worker/worker_client"); +require("./keyboard/hash_handler"); +require("./keyboard/state_handler"); +require("./placeholder"); +require("./config").init(); + + /** + * Ace.edit(el) -> Editor + * - el (String | DOMElement): Either the id of an element, or the element itself + * + * This method embeds the Ace editor into the DOM, at the element provided by `el`. + * + **/ +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"))); + new MultiSelect(editor); + 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 +// -- 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 +*/ + +ace.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 + * + * Provides an augmented, extensible, cross-browser implementation of regular expressions, + * including support for additional syntax, flags, and methods + */ + +ace.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 ( typeof(str) == 'string' && 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 +*/ + +ace.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 +// 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 + * Mihai Sucan + * Irakli Gozalishvili (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 ***** */ + +ace.define('ace/lib/dom', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +var XHTML_NS = "http://www.w3.org/1999/xhtml"; + +exports.createElement = function(tag, ns) { + return document.createElementNS ? + document.createElementNS(ns || XHTML_NS, tag) : + document.createElement(tag); +}; + +exports.setText = function(elem, text) { + if (elem.innerText !== undefined) { + elem.innerText = text; + } + if (elem.textContent !== undefined) { + elem.textContent = text; + } +}; + +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; + } +}; + +/* +* 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); + } + 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); + } + if(add) + classes.push(name); + + el.className = classes.join(" "); + return add; +}; + +/* + * Add or remove a CSS class from the list of classes on the given node + * depending on the value of include + */ +exports.setCssClass = function(node, className, include) { + if (include) { + exports.addCssClass(node, className); + } else { + exports.removeCssClass(node, className); + } +}; + +exports.hasCssString = function(id, doc) { + var index = 0, sheets; + doc = doc || document; + + if (doc.createStyleSheet && (sheets = doc.styleSheets)) { + while (index < sheets.length) + if (sheets[index++].owningElement.id === id) return true; + } else if ((sheets = doc.getElementsByTagName("style"))) { + while (index < sheets.length) + if (sheets[index++].id === id) return true; + } + + 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.owningElement.id = 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"), 10) + + parseInt(exports.computedStyle(element, "paddingRight"), 10) + + element.clientWidth + ); +}; + +exports.getInnerHeight = function(element) { + return ( + parseInt(exports.computedStyle(element, "paddingTop"), 10) + + parseInt(exports.computedStyle(element, "paddingBottom"), 10) + + element.clientHeight + ); +}; + +if (window.pageYOffset !== undefined) { + exports.getPageScrollTop = function() { + return window.pageYOffset; + }; + + exports.getPageScrollLeft = function() { + return window.pageXOffset; + }; +} +else { + exports.getPageScrollTop = function() { + return document.body.scrollTop; + }; + + exports.getPageScrollLeft = function() { + return document.body.scrollLeft; + }; +} + +if (window.getComputedStyle) + exports.computedStyle = function(element, style) { + if (style) + return (window.getComputedStyle(element, "") || {})[style] || ""; + return window.getComputedStyle(element, "") || {}; + }; +else + exports.computedStyle = function(element, style) { + if (style) + return element.currentStyle[style]; + return element.currentStyle; + }; + +exports.scrollbarWidth = function(document) { + + var inner = exports.createElement("p"); + inner.style.width = "100%"; + inner.style.minWidth = "0px"; + inner.style.height = "200px"; + + var outer = exports.createElement("div"); + var style = outer.style; + + style.position = "absolute"; + style.left = "-10000px"; + style.overflow = "hidden"; + style.width = "200px"; + style.minWidth = "0px"; + style.height = "150px"; + + outer.appendChild(inner); + + var body = document.body || document.documentElement; + body.appendChild(outer); + + var noScrollbar = inner.offsetWidth; + + style.overflow = "scroll"; + var withScrollbar = inner.offsetWidth; + + if (noScrollbar == withScrollbar) { + withScrollbar = outer.clientWidth; + } + + body.removeChild(outer); + + return noScrollbar-withScrollbar; +}; + +/* + * Optimized set innerHTML. This is faster than plain innerHTML if the element + * already contains a lot of child elements. + * + * See http://blog.stevenlevithan.com/archives/faster-than-innerhtml for details + */ +exports.setInnerHtml = function(el, innerHtml) { + var element = el.cloneNode(false);//document.createElement("div"); + element.innerHTML = innerHtml; + el.parentNode.replaceChild(element, el); + return element; +}; + +exports.setInnerText = function(el, innerText) { + var document = el.ownerDocument; + if (document.body && "textContent" in document.body) + el.textContent = innerText; + else + el.innerText = innerText; + +}; + +exports.getInnerText = function(el) { + var document = el.ownerDocument; + if (document.body && "textContent" in document.body) + return el.textContent; + else + return el.innerText || el.textContent || ""; +}; + +exports.getParentWindow = function(document) { + return document.defaultView || document.parentWindow; +}; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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("./keys"); +var useragent = require("./useragent"); +var dom = require("./dom"); + +exports.addListener = function(elem, type, callback) { + if (elem.addEventListener) { + return elem.addEventListener(type, callback, false); + } + if (elem.attachEvent) { + var wrapper = function() { + callback(window.event); + }; + callback._wrapper = wrapper; + elem.attachEvent("on" + type, wrapper); + } +}; + +exports.removeListener = function(elem, type, callback) { + if (elem.removeEventListener) { + return elem.removeEventListener(type, callback, false); + } + if (elem.detachEvent) { + elem.detachEvent("on" + type, callback._wrapper || callback); + } +}; + +/* +* Prevents propagation and clobbers the default action of the passed event +*/ +exports.stopEvent = function(e) { + exports.stopPropagation(e); + exports.preventDefault(e); + return false; +}; + +exports.stopPropagation = function(e) { + if (e.stopPropagation) + e.stopPropagation(); + else + e.cancelBubble = true; +}; + +exports.preventDefault = function(e) { + if (e.preventDefault) + e.preventDefault(); + else + e.returnValue = false; +}; + +/* + * @return {Number} 0 for left button, 1 for middle button, 2 for right button + */ +exports.getButton = function(e) { + if (e.type == "dblclick") + return 0; + else if (e.type == "contextmenu") + return 2; + + // DOM Event + if (e.preventDefault) { + return e.button; + } + // old IE + else { + return {1:0, 2:2, 4:1}[e.button]; + } +}; + +if (document.documentElement.setCapture) { + exports.capture = function(el, eventHandler, releaseCaptureHandler) { + function onMouseMove(e) { + eventHandler(e); + return exports.stopPropagation(e); + } + + var called = false; + function onReleaseCapture(e) { + eventHandler(e); + + if (!called) { + called = true; + releaseCaptureHandler(e); + } + + exports.removeListener(el, "mousemove", eventHandler); + exports.removeListener(el, "mouseup", onReleaseCapture); + exports.removeListener(el, "losecapture", onReleaseCapture); + + el.releaseCapture(); + } + + exports.addListener(el, "mousemove", eventHandler); + exports.addListener(el, "mouseup", onReleaseCapture); + exports.addListener(el, "losecapture", onReleaseCapture); + el.setCapture(); + }; +} +else { + exports.capture = function(el, eventHandler, releaseCaptureHandler) { + function onMouseMove(e) { + eventHandler(e); + e.stopPropagation(); + } + + function onMouseUp(e) { + eventHandler && eventHandler(e); + releaseCaptureHandler && releaseCaptureHandler(e); + + document.removeEventListener("mousemove", onMouseMove, true); + document.removeEventListener("mouseup", onMouseUp, true); + + e.stopPropagation(); + } + + document.addEventListener("mousemove", onMouseMove, true); + document.addEventListener("mouseup", onMouseUp, true); + }; +} + +exports.addMouseWheelListener = function(el, callback) { + var factor = 8; + var listener = function(e) { + if (e.wheelDelta !== undefined) { + if (e.wheelDeltaX !== undefined) { + e.wheelX = -e.wheelDeltaX / factor; + e.wheelY = -e.wheelDeltaY / factor; + } else { + e.wheelX = 0; + e.wheelY = -e.wheelDelta / factor; + } + } + else { + if (e.axis && e.axis == e.HORIZONTAL_AXIS) { + e.wheelX = (e.detail || 0) * 5; + e.wheelY = 0; + } else { + e.wheelX = 0; + e.wheelY = (e.detail || 0) * 5; + } + } + callback(e); + }; + exports.addListener(el, "DOMMouseScroll", listener); + exports.addListener(el, "mousewheel", listener); +}; + +exports.addMultiMouseDownListener = function(el, button, count, timeout, callback) { + var clicks = 0; + var startX, startY; + + var listener = function(e) { + clicks += 1; + if (clicks == 1) { + startX = e.clientX; + startY = e.clientY; + + setTimeout(function() { + clicks = 0; + }, timeout || 600); + } + + var isButton = exports.getButton(e) == button; + if (!isButton || Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5) + clicks = 0; + + if (clicks == count) { + clicks = 0; + callback(e); + } + + if (isButton) + return exports.preventDefault(e); + }; + + exports.addListener(el, "mousedown", listener); + useragent.isOldIE && exports.addListener(el, "dblclick", listener); +}; + +function normalizeCommandKeys(callback, e, keyCode) { + var hashId = 0; + if (useragent.isOpera && useragent.isMac) { + hashId = 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) + | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0); + } else { + hashId = 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) + | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); + } + + if (keyCode in keys.MODIFIER_KEYS) { + switch (keys.MODIFIER_KEYS[keyCode]) { + case "Alt": + hashId = 2; + break; + case "Shift": + hashId = 4; + break; + case "Ctrl": + hashId = 1; + break; + default: + hashId = 8; + break; + } + keyCode = 0; + } + + if (hashId & 8 && (keyCode == 91 || keyCode == 93)) { + keyCode = 0; + } + + // 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 && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { + return false; + } + return callback(e, hashId, keyCode); +} + +exports.addCommandKeyListener = function(el, callback) { + var addListener = exports.addListener; + if (useragent.isOldGecko || useragent.isOpera) { + // Old versions of Gecko aka. Firefox < 4.0 didn't repeat the keydown + // event if the user pressed the key for a longer time. Instead, the + // keydown event was fired once and later on only the keypress event. + // To emulate the 'right' keydown behavior, the keyCode of the initial + // keyDown event is stored and in the following keypress events the + // stores keyCode is used to emulate a keyDown event. + var lastKeyDownKeyCode = null; + addListener(el, "keydown", function(e) { + lastKeyDownKeyCode = e.keyCode; + }); + addListener(el, "keypress", function(e) { + return normalizeCommandKeys(callback, e, lastKeyDownKeyCode); + }); + } else { + var lastDown = null; + + addListener(el, "keydown", function(e) { + lastDown = e.keyIdentifier || e.keyCode; + return normalizeCommandKeys(callback, e, e.keyCode); + }); + } +}; + +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. + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; + +/** + * class Editor + * + * The main entry point into the Ace functionality. The `Editor` manages the `EditSession` (which manages `Document`s), as well as the `VirtualRenderer`, which draws everything to the screen. Event sessions dealing with the mouse and keyboard are bubbled up from `Document` to the `Editor`, which decides what to do with them. + * + **/ + +/** + * new Editor(renderer, session) + * - renderer (VirtualRenderer): Associated `VirtualRenderer` that draws everything + * - session (EditSession): The `EditSession` to refer to + * + * Creates a new `Editor` object. + * + **/ +var Editor = function(renderer, session) { + var container = renderer.getContainerElement(); + this.container = container; + this.renderer = renderer; + + this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); + this.textInput = new TextInput(renderer.getTextAreaContainer(), this); + this.renderer.textarea = this.textInput.getElement(); + this.keyBinding = new KeyBinding(this); + + // TODO detect touch event support + if (useragent.isIPad) { + //this.$mouseHandler = new TouchHandler(this); + } else { + this.$mouseHandler = new MouseHandler(this); + new FoldHandler(this); + } + + this.$blockScrolling = 0; + this.$search = new Search().set({ + wrap: true + }); + + this.setSession(session || new EditSession("")); +}; + +(function(){ + + oop.implement(this, EventEmitter); + + /** + * Editor.setKeyboardHandler(keyboardHandler) + * + * Sets a new keyboard handler. + **/ + this.setKeyboardHandler = function(keyboardHandler) { + this.keyBinding.setKeyboardHandler(keyboardHandler); + }; + + /** related to: KeyBinding + * Editor.getKeyboardHandler() -> String + * + * Returns the keyboard handler. + **/ + this.getKeyboardHandler = function() { + return this.keyBinding.getKeyboardHandler(); + }; + + /** + * Editor.setSession(session) + * - session (EditSession): The new session to use + * + * Sets a new editsession to use. This method also emits the `'changeSession'` event. + **/ + this.setSession = function(session) { + if (this.session == session) + return; + + if (this.session) { + var oldSession = 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 selection = this.session.getSelection(); + selection.removeEventListener("changeCursor", this.$onCursorChange); + selection.removeEventListener("changeSelection", this.$onSelectionChange); + } + + this.session = session; + + this.$onDocumentChange = this.onDocumentChange.bind(this); + session.addEventListener("change", this.$onDocumentChange); + this.renderer.setSession(session); + + this.$onChangeMode = this.onChangeMode.bind(this); + session.addEventListener("changeMode", this.$onChangeMode); + + this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); + session.addEventListener("tokenizerUpdate", this.$onTokenizerUpdate); + + this.$onChangeTabSize = this.renderer.updateText.bind(this.renderer); + session.addEventListener("changeTabSize", this.$onChangeTabSize); + + this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); + session.addEventListener("changeWrapLimit", this.$onChangeWrapLimit); + + this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); + session.addEventListener("changeWrapMode", this.$onChangeWrapMode); + + this.$onChangeFold = this.onChangeFold.bind(this); + session.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 = session.getSelection(); + this.selection.addEventListener("changeCursor", this.$onCursorChange); + + this.$onSelectionChange = this.onSelectionChange.bind(this); + this.selection.addEventListener("changeSelection", this.$onSelectionChange); + + this.onChangeMode(); + + this.$blockScrolling += 1; + this.onCursorChange(); + this.$blockScrolling -= 1; + + 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: session, + oldSession: oldSession + }); + }; + + /** + * Editor.getSession() -> EditSession + * + * Returns the current session being used. + **/ + this.getSession = function() { + return this.session; + }; + + /** + * Editor.getSelection() -> String + * + * Returns the currently highlighted selection. + **/ + this.getSelection = function() { + return this.selection; + }; + + /** related to: VirtualRenderer.onResize + * Editor.resize() + * + * {:VirtualRenderer.onResize} + **/ + this.resize = function() { + this.renderer.onResize(); + }; + + /** + * Editor.setTheme(theme) + * + * {:VirtualRenderer.setTheme} + **/ + this.setTheme = function(theme) { + this.renderer.setTheme(theme); + }; + + /** related to: VirtualRenderer.getTheme + * Editor.getTheme() -> String + * + * {:VirtualRenderer.getTheme} + **/ + this.getTheme = function() { + return this.renderer.getTheme(); + }; + + /** related to: VirtualRenderer.setStyle + * Editor.setStyle(style) + * + * {:VirtualRenderer.setStyle} + **/ + this.setStyle = function(style) { + this.renderer.setStyle(style); + }; + + /** related to: VirtualRenderer.unsetStyle + * Editor.unsetStyle(style) + * + * {:VirtualRenderer.unsetStyle} + **/ + this.unsetStyle = function(style) { + this.renderer.unsetStyle(style); + }; + + /** + * Editor.setFontSize(size) + * - size (Number): A font size + * + * Set a new font size (in pixels) for the editor text. + **/ + this.setFontSize = function(size) { + this.container.style.fontSize = size; + this.renderer.updateFontSize(); + }; + + /** internal, hide + * Editor.$highlightBrackets() + * + **/ + this.$highlightBrackets = function() { + if (this.session.$bracketHighlight) { + this.session.removeMarker(this.session.$bracketHighlight); + this.session.$bracketHighlight = null; + } + + if (this.$highlightPending) { + return; + } + + // perform highlight async to not block the browser during navigation + var self = this; + this.$highlightPending = true; + setTimeout(function() { + self.$highlightPending = false; + + var pos = self.session.findMatchingBracket(self.getCursorPosition()); + if (pos) { + var range = new Range(pos.row, pos.column, pos.row, pos.column+1); + self.session.$bracketHighlight = self.session.addMarker(range, "ace_bracket", "text"); + } + }, 10); + }; + + /** + * Editor.focus() + * + * Brings the current `textInput` into focus. + **/ + this.focus = function() { + // Safari needs the timeout + // iOS and Firefox need it called immediately + // to be on the save side we do both + var _self = this; + setTimeout(function() { + _self.textInput.focus(); + }); + this.textInput.focus(); + }; + + /** + * Editor.isFocused() -> Boolean + * + * Returns true if the current `textInput` is in focus. + **/ + this.isFocused = function() { + return this.textInput.isFocused(); + }; + + /** + * Editor.blur() + * + * Blurs the current `textInput`. + **/ + this.blur = function() { + this.textInput.blur(); + }; + + /** + * Editor@onFocus() + * + * Emitted once the editor comes into focus. + **/ + this.onFocus = function() { + this.renderer.showCursor(); + this.renderer.visualizeFocus(); + this._emit("focus"); + }; + + /** + * Editor@onBlur() + * + * Emitted once the editor has been blurred. + **/ + this.onBlur = function() { + this.renderer.hideCursor(); + this.renderer.visualizeBlur(); + this._emit("blur"); + }; + + this.$cursorChange = function() { + this.renderer.updateCursor(); + }; + + /** + * Editor@onDocumentChange(e) + * - e (Object): Contains a single property, `data`, which has the delta of changes + * + * Emitted whenever the document is changed. + * + **/ + 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") + 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.$cursorChange(); + }; + + /** + * Editor@onTokenizerUpdate(e) + * - e (Object): Contains a single property, `data`, which indicates the changed rows + * + * Emitted when the a tokenizer is updated. + **/ + this.onTokenizerUpdate = function(e) { + var rows = e.data; + this.renderer.updateLines(rows.first, rows.last); + }; + + /** + * Editor@onScrollTopChange() + * + * Emitted when the scroll top changes. + **/ + this.onScrollTopChange = function() { + this.renderer.scrollToY(this.session.getScrollTop()); + }; + + /** + * Editor@onScrollLeftChange() + * + * Emitted when the scroll left changes. + **/ + this.onScrollLeftChange = function() { + this.renderer.scrollToX(this.session.getScrollLeft()); + }; + + /** + * Editor@onCursorChange() + * + * Emitted when the cursor changes. + **/ + this.onCursorChange = function() { + this.$cursorChange(); + + if (!this.$blockScrolling) { + this.renderer.scrollCursorIntoView(); + } + + this.$highlightBrackets(); + this.$updateHighlightActiveLine(); + }; + + /** internal, hide + * Editor.$updateHighlightActiveLine() + * + * + **/ + this.$updateHighlightActiveLine = function() { + var session = this.getSession(); + + if (session.$highlightLineMarker) + session.removeMarker(session.$highlightLineMarker); + + session.$highlightLineMarker = null; + + if (this.$highlightActiveLine) { + var cursor = this.getCursorPosition(); + var foldLine = this.session.getFoldLine(cursor.row); + + if ((this.getSelectionStyle() != "line" || !this.selection.isMultiLine())) { + var range; + if (foldLine) { + range = new Range(foldLine.start.row, 0, foldLine.end.row + 1, 0); + } else { + range = new Range(cursor.row, 0, cursor.row+1, 0); + } + session.$highlightLineMarker = session.addMarker(range, "ace_active_line", "background"); + } + } + }; + + + /** + * Editor@onSelectionChange(e) + * - e (Object): Contains a single property, `data`, which has the delta of changes + * + * Emitted when a selection has changed. + **/ + this.onSelectionChange = function(e) { + var session = this.getSession(); + + if (session.$selectionMarker) { + session.removeMarker(session.$selectionMarker); + } + session.$selectionMarker = null; + + if (!this.selection.isEmpty()) { + var range = this.selection.getRange(); + var style = this.getSelectionStyle(); + session.$selectionMarker = session.addMarker(range, "ace_selection", style); + } else { + this.$updateHighlightActiveLine(); + } + + if (this.$highlightSelectedWord) + this.session.getMode().highlightSelection(this); + }; + + /** + * Editor@onChangeFrontMarker() + * + * Emitted when a front marker changes. + **/ + this.onChangeFrontMarker = function() { + this.renderer.updateFrontMarkers(); + }; + + /** + * Editor@onChangeBackMarker() + * + * Emitted when a back marker changes. + **/ + this.onChangeBackMarker = function() { + this.renderer.updateBackMarkers(); + }; + + /** + * Editor@onChangeBreakpoint() + * + * Emitted when a breakpoint changes. + **/ + this.onChangeBreakpoint = function() { + this.renderer.setBreakpoints(this.session.getBreakpoints()); + }; + + /** + * Editor@onChangeAnnotation() + * + * Emitted when an annotation changes. + **/ + this.onChangeAnnotation = function() { + this.renderer.setAnnotations(this.session.getAnnotations()); + }; + + /** + * Editor@onChangeMode() + * + * Emitted when the mode changes. + **/ + this.onChangeMode = function() { + this.renderer.updateText(); + }; + + /** + * Editor@onChangeWrapLimit() + * + * Emitted when the wrap limit changes. + **/ + this.onChangeWrapLimit = function() { + this.renderer.updateFull(); + }; + + /** + * Editor@onChangeWrapMode() + * + * Emitted when the wrap mode changes. + **/ + this.onChangeWrapMode = function() { + this.renderer.onResize(true); + }; + + /** + * Editor@onChangeFold() + * + * Emitted when the code folds change. + **/ + this.onChangeFold = function() { + // Update the active line marker as due to folding changes the current + // line range on the screen might have changed. + this.$updateHighlightActiveLine(); + // TODO: This might be too much updating. Okay for now. + this.renderer.updateFull(); + }; + + /** + * Editor.getCopyText() -> String + * + * Returns the string of text currently highlighted. + **/ + this.getCopyText = function() { + var text = ""; + if (!this.selection.isEmpty()) + text = this.session.getTextRange(this.getSelectionRange()); + + this._emit("copy", text); + return text; + }; + + /** + * Editor.onCopy() + * + * Called whenever a text "copy" happens. + **/ + this.onCopy = function() { + this.commands.exec("copy", this); + }; + + /** + * Editor.onCut() + * + * called whenever a text "cut" happens. + **/ + this.onCut = function() { + this.commands.exec("cut", this); + }; + + /** + * Editor.onPaste() + * + * called whenever a text "paste" happens. + **/ + this.onPaste = function(text) { + this._emit("paste", text); + this.insert(text); + }; + + /** + * Editor.insert(text) + * - text (String): The new text to add + * + * Inserts `text` into wherever the cursor is pointing. + **/ + this.insert = function(text) { + var session = this.session; + var mode = session.getMode(); + + var cursor = this.getCursorPosition(); + + if (this.getBehavioursEnabled()) { + // Get a transform if the current mode wants one. + var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); + if (transform) + text = transform.text; + } + + text = text.replace("\t", this.session.getTabString()); + + // remove selected text + if (!this.selection.isEmpty()) { + cursor = this.session.remove(this.getSelectionRange()); + this.clearSelection(); + } + else if (this.session.getOverwrite()) { + var range = new Range.fromPoints(cursor, cursor); + range.end.column += text.length; + this.session.remove(range); + } + + this.clearSelection(); + + var start = cursor.column; + var lineState = session.getState(cursor.row); + var shouldOutdent = mode.checkOutdent(lineState, session.getLine(cursor.row), text); + var line = session.getLine(cursor.row); + var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); + var end = session.insert(cursor, text); + + if (transform && transform.selection) { + if (transform.selection.length == 2) { // Transform relative to the current column + this.selection.setSelectionRange( + new Range(cursor.row, start + transform.selection[0], + cursor.row, start + transform.selection[1])); + } else { // Transform relative to the current row. + this.selection.setSelectionRange( + new Range(cursor.row + transform.selection[0], + transform.selection[1], + cursor.row + transform.selection[2], + transform.selection[3])); + } + } + + var lineState = session.getState(cursor.row); + + // TODO disabled multiline auto indent + // possibly doing the indent before inserting the text + // if (cursor.row !== end.row) { + if (session.getDocument().isNewLine(text)) { + this.moveCursorTo(cursor.row+1, 0); + + var size = session.getTabSize(); + var minIndent = Number.MAX_VALUE; + + for (var row = cursor.row + 1; row <= end.row; ++row) { + var indent = 0; + + line = session.getLine(row); + for (var i = 0; i < line.length; ++i) + if (line.charAt(i) == '\t') + indent += size; + else if (line.charAt(i) == ' ') + indent += 1; + else + break; + if (/[^\s]/.test(line)) + minIndent = Math.min(indent, minIndent); + } + + for (var row = cursor.row + 1; row <= end.row; ++row) { + var outdent = minIndent; + + line = session.getLine(row); + for (var i = 0; i < line.length && outdent > 0; ++i) + if (line.charAt(i) == '\t') + outdent -= size; + else if (line.charAt(i) == ' ') + outdent -= 1; + session.remove(new Range(row, 0, row, i)); + } + session.indentRows(cursor.row + 1, end.row, lineIndent); + } + if (shouldOutdent) + mode.autoOutdent(lineState, session, cursor.row); + }; + + /** + * Editor@onTextInput(text, pasted) + * - text (String): The text entered + * - pasted (Boolean): Identifies whether the text was pasted (`true`) or not + * + * Emitted when text is entered. + **/ + this.onTextInput = function(text) { + this.keyBinding.onTextInput(text); + }; + + /** + * Editor@onCommandKey(e, hashId, keyCode) + * + * Emitted when the command-key is pressed. + **/ + this.onCommandKey = function(e, hashId, keyCode) { + this.keyBinding.onCommandKey(e, hashId, keyCode); + }; + + /** related to: EditSession.setOverwrite + * Editor.setOverwrite(overwrite) + * - overwrite (Boolean): Defines wheter or not to set overwrites + * + * Pass in `true` to enable overwrites in your session, or `false` to disable. If overwrites is enabled, any text you enter will type over any text after it. If the value of `overwrite` changes, this function also emites the `changeOverwrite` event. + * + **/ + this.setOverwrite = function(overwrite) { + this.session.setOverwrite(overwrite); + }; + + /** related to: EditSession.getOverwrite + * Editor.getOverwrite() -> Boolean + * + * Returns `true` if overwrites are enabled; `false` otherwise. + **/ + this.getOverwrite = function() { + return this.session.getOverwrite(); + }; + + /** related to: EditSession.toggleOverwrite + * Editor.toggleOverwrite() + * + * Sets the value of overwrite to the opposite of whatever it currently is. + **/ + this.toggleOverwrite = function() { + this.session.toggleOverwrite(); + }; + + /** + * Editor.setScrollSpeed(speed) + * - speed (Number): A value indicating the new speed + * + * Sets how fast the mouse scrolling should do. + * + **/ + this.setScrollSpeed = function(speed) { + this.$mouseHandler.setScrollSpeed(speed); + }; + + /** + * Editor.getScrollSpeed() -> Number + * + * Returns the value indicating how fast the mouse scroll speed is. + **/ + this.getScrollSpeed = function() { + return this.$mouseHandler.getScrollSpeed(); + }; + + /** + * Editor.setDragDelay(dragDelay) + * - dragDelay (Number): A value indicating the new delay + * + * Sets the delay (in milliseconds) of the mouse drag. + * + **/ + this.setDragDelay = function(dragDelay) { + this.$mouseHandler.setDragDelay(dragDelay); + }; + + /** + * Editor.getDragDelay() -> Number + * + * Returns the current mouse drag delay. + **/ + this.getDragDelay = function() { + return this.$mouseHandler.getDragDelay(); + }; + + this.$selectionStyle = "line"; + /** + * Editor.setSelectionStyle(style) + * - style (String): The new selection style + * + * Indicates how selections should occur. By default, selections are set to "line". This function also emits the `'changeSelectionStyle'` event. + * + **/ + this.setSelectionStyle = function(style) { + if (this.$selectionStyle == style) return; + + this.$selectionStyle = style; + this.onSelectionChange(); + this._emit("changeSelectionStyle", {data: style}); + }; + + /** + * Editor.getSelectionStyle() -> String + * + * Returns the current selection style. + **/ + this.getSelectionStyle = function() { + return this.$selectionStyle; + }; + + this.$highlightActiveLine = true; + + /** + * Editor.setHighlightActiveLine(shouldHighlight) + * - shouldHighlight (Boolean): Set to `true` to highlight the current line + * + * Determines whether or not the current line should be highlighted. + * + **/ + this.setHighlightActiveLine = function(shouldHighlight) { + if (this.$highlightActiveLine == shouldHighlight) + return; + + this.$highlightActiveLine = shouldHighlight; + this.$updateHighlightActiveLine(); + }; + + /** + * Editor.getHighlightActiveLine() -> Boolean + * + * Returns `true` if current lines are always highlighted. + **/ + this.getHighlightActiveLine = function() { + return this.$highlightActiveLine; + }; + + this.$highlightGutterLine = true; + this.setHighlightGutterLine = function(shouldHighlight) { + if (this.$highlightGutterLine == shouldHighlight) + return; + + this.renderer.setHighlightGutterLine(shouldHighlight); + }; + + this.getHighlightGutterLine = function() { + return this.$highlightGutterLine; + }; + + this.$highlightSelectedWord = true; + /** + * Editor.setHighlightSelectedWord(shouldHighlight) + * - shouldHighlight (Boolean): Set to `true` to highlight the currently selected word + * + * Determines if the currently selected word should be highlighted. + **/ + this.setHighlightSelectedWord = function(shouldHighlight) { + if (this.$highlightSelectedWord == shouldHighlight) + return; + + this.$highlightSelectedWord = shouldHighlight; + if (shouldHighlight) + this.session.getMode().highlightSelection(this); + else + this.session.getMode().clearSelectionHighlight(this); + }; + + /** + * Editor.getHighlightSelectedWord() -> Boolean + * + * Returns `true` if currently highlighted words are to be highlighted. + **/ + this.getHighlightSelectedWord = function() { + return this.$highlightSelectedWord; + }; + + this.setAnimatedScroll = function(shouldAnimate){ + this.renderer.setAnimatedScroll(shouldAnimate); + }; + + this.getAnimatedScroll = function(){ + return this.renderer.getAnimatedScroll(); + }; + + /** + * Editor.setShowInvisibles(showInvisibles) + * - showInvisibles (Boolean): Specifies whether or not to show invisible characters + * + * If `showInvisibiles` is set to `true`, invisible characters—like spaces or new lines—are show in the editor. + **/ + this.setShowInvisibles = function(showInvisibles) { + if (this.getShowInvisibles() == showInvisibles) + return; + + this.renderer.setShowInvisibles(showInvisibles); + }; + + /** + * Editor.getShowInvisibles() -> Boolean + * + * Returns `true` if invisible characters are being shown. + **/ + this.getShowInvisibles = function() { + return this.renderer.getShowInvisibles(); + }; + + /** + * Editor.setShowPrintMargin(showPrintMargin) + * - showPrintMargin (Boolean): Specifies whether or not to show the print margin + * + * If `showPrintMargin` is set to `true`, the print margin is shown in the editor. + **/ + this.setShowPrintMargin = function(showPrintMargin) { + this.renderer.setShowPrintMargin(showPrintMargin); + }; + + /** + * Editor.getShowPrintMargin() -> Boolean + * + * Returns `true` if the print margin is being shown. + **/ + this.getShowPrintMargin = function() { + return this.renderer.getShowPrintMargin(); + }; + + /** + * Editor.setPrintMarginColumn(showPrintMargin) + * - showPrintMargin (Number): Specifies the new print margin + * + * Sets the column defining where the print margin should be. + * + **/ + this.setPrintMarginColumn = function(showPrintMargin) { + this.renderer.setPrintMarginColumn(showPrintMargin); + }; + + /** + * Editor.getPrintMarginColumn() -> Number + * + * Returns the column number of where the print margin is. + **/ + this.getPrintMarginColumn = function() { + return this.renderer.getPrintMarginColumn(); + }; + + this.$readOnly = false; + /** + * Editor.setReadOnly(readOnly) + * - readOnly (Boolean): Specifies whether the editor can be modified or not + * + * If `readOnly` is true, then the editor is set to read-only mode, and none of the content can change. + **/ + this.setReadOnly = function(readOnly) { + this.$readOnly = readOnly; + }; + + /** + * Editor.getReadOnly() -> Boolean + * + * Returns `true` if the editor is set to read-only mode. + **/ + this.getReadOnly = function() { + return this.$readOnly; + }; + + this.$modeBehaviours = true; + + /** + * Editor.setBehavioursEnabled() + * - enabled (Boolean): Enables or disables behaviors + * + * Specifies whether to use behaviors or not. ["Behaviors" in this case is the auto-pairing of special characters, like quotation marks, parenthesis, or brackets.]{: #BehaviorsDef} + **/ + this.setBehavioursEnabled = function (enabled) { + this.$modeBehaviours = enabled; + }; + + /** + * Editor.getBehavioursEnabled() -> Boolean + * + * Returns `true` if the behaviors are currently enabled. {:BehaviorsDef} + **/ + this.getBehavioursEnabled = function () { + return this.$modeBehaviours; + }; + + /** + * Editor.setShowFoldWidgets(show) + * - show (Boolean): Specifies whether the fold widgets are shown + * + * Indicates whether the fold widgets are shown or not. + **/ + this.setShowFoldWidgets = function(show) { + var gutter = this.renderer.$gutterLayer; + if (gutter.getShowFoldWidgets() == show) + return; + + this.renderer.$gutterLayer.setShowFoldWidgets(show); + this.$showFoldWidgets = show; + this.renderer.updateFull(); + }; + + /** + * Editor.getShowFoldWidgets() -> Boolean + * + * Returns `true` if the fold widgets are shown. + **/ + this.getShowFoldWidgets = function() { + return this.renderer.$gutterLayer.getShowFoldWidgets(); + }; + + this.setFadeFoldWidgets = function(show) { + this.renderer.setFadeFoldWidgets(show); + }; + + this.getFadeFoldWidgets = function() { + return this.renderer.getFadeFoldWidgets(); + }; + + /** + * Editor.remove(dir) + * - dir (String): The direction of the deletion to occur, either "left" or "right" + * + * Removes words of text from the editor. A "word" is defined as a string of characters bookended by whitespace. + * + **/ + 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) + range = new_range; + } + + this.session.remove(range); + this.clearSelection(); + }; + + /** + * Editor.removeWordRight() + * + * Removes the word directly to the right of the current selection. + **/ + this.removeWordRight = function() { + if (this.selection.isEmpty()) + this.selection.selectWordRight(); + + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + + /** + * Editor.removeWordLeft() + * + * Removes the word directly to the left of the current selection. + **/ + this.removeWordLeft = function() { + if (this.selection.isEmpty()) + this.selection.selectWordLeft(); + + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + + /** + * Editor.removeToLineStart() + * + * Removes all the words to the left of the current selection, until the start of the line. + **/ + this.removeToLineStart = function() { + if (this.selection.isEmpty()) + this.selection.selectLineStart(); + + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + + /** + * Editor.removeToLineEnd() + * + * Removes all the words to the right of the current selection, until the end of the line. + **/ + this.removeToLineEnd = function() { + if (this.selection.isEmpty()) + this.selection.selectLineEnd(); + + var range = this.getSelectionRange(); + if (range.start.column == range.end.column && range.start.row == range.end.row) { + range.end.column = 0; + range.end.row++; + } + + this.session.remove(range); + this.clearSelection(); + }; + + /** + * Editor.splitLine() + * + * Splits the line at the current selection (by inserting an `'\n'`). + **/ + this.splitLine = function() { + if (!this.selection.isEmpty()) { + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + } + + var cursor = this.getCursorPosition(); + this.insert("\n"); + this.moveCursorToPosition(cursor); + }; + + /** + * Editor.transposeLetters() + * + * Transposes current line. + **/ + this.transposeLetters = function() { + if (!this.selection.isEmpty()) { + return; + } + + var cursor = this.getCursorPosition(); + var column = cursor.column; + if (column === 0) + return; + + var line = this.session.getLine(cursor.row); + var swap, range; + if (column < line.length) { + swap = line.charAt(column) + line.charAt(column-1); + range = new Range(cursor.row, column-1, cursor.row, column+1); + } + else { + swap = line.charAt(column-1) + line.charAt(column-2); + range = new Range(cursor.row, column-2, cursor.row, column); + } + this.session.replace(range, swap); + }; + + /** + * Editor.toLowerCase() + * + * Converts the current selection entirely into lowercase. + **/ + 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); + }; + + /** + * Editor.toUpperCase() + * + * Converts the current selection entirely into uppercase. + **/ + 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); + }; + + /** related to: EditSession.indentRows + * Editor.indent() + * + * Indents the current line. + **/ + this.indent = function() { + var session = this.session; + var range = this.getSelectionRange(); + + if (range.start.row < range.end.row || range.start.column < range.end.column) { + var rows = this.$getSelectedRows(); + session.indentRows(rows.first, rows.last, "\t"); + } else { + var indentString; + + if (this.session.getUseSoftTabs()) { + var size = session.getTabSize(), + position = this.getCursorPosition(), + column = session.documentToScreenColumn(position.row, position.column), + count = (size - column % size); + + indentString = lang.stringRepeat(" ", count); + } else + indentString = "\t"; + return this.insert(indentString); + } + }; + + /** related to: EditSession.outdentRows + * Editor.blockOutdent() + * + * Outdents the current line. + **/ + this.blockOutdent = function() { + var selection = this.session.getSelection(); + this.session.outdentRows(selection.getRange()); + }; + + /** + * Editor.toggleCommentLines() + * + * Given the currently selected range, this function either comments all lines or uncomments all lines (depending on whether it's commented or not). + **/ + this.toggleCommentLines = function() { + var state = this.session.getState(this.getCursorPosition().row); + var rows = this.$getSelectedRows(); + this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); + }; + + /** related to: EditSession.remove + * Editor.removeLines() + * + * Removes all the lines in the current selection + **/ + this.removeLines = function() { + var rows = this.$getSelectedRows(); + var range; + if (rows.first === 0 || rows.last+1 < this.session.getLength()) + range = new Range(rows.first, 0, rows.last+1, 0); + else + 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); + this.clearSelection(); + }; + + /** related to: EditSession.moveLinesDown + * Editor.moveLinesDown() -> Number + * + (Number): On success, it returns -1. + * + * Shifts all the selected lines down one row. + * + * + * + **/ + this.moveLinesDown = function() { + this.$moveLines(function(firstRow, lastRow) { + return this.session.moveLinesDown(firstRow, lastRow); + }); + }; + + /** related to: EditSession.moveLinesUp + * Editor.moveLinesUp() -> Number + * + (Number): On success, it returns -1. + * + * Shifts all the selected lines up one row. + * + * + **/ + this.moveLinesUp = function() { + this.$moveLines(function(firstRow, lastRow) { + return this.session.moveLinesUp(firstRow, lastRow); + }); + }; + + /** related to: EditSession.moveText + * Editor.moveText(fromRange, toPosition) -> Range + * - fromRange (Range): The range of text you want moved within the document + * - toPosition (Object): The location (row and column) where you want to move the text to + * + (Range): The new range where the text was moved to. + * + * Moves a range of text from the given range to the given position. `toPosition` is an object that looks like this: + * + * { row: newRowLocation, column: newColumnLocation } + * + * + **/ + this.moveText = function(range, toPosition) { + if (this.$readOnly) + return null; + + return this.session.moveText(range, toPosition); + }; + + /** related to: EditSession.duplicateLines + * Editor.copyLinesUp() -> Number + * + (Number): On success, returns 0. + * + * Copies all the selected lines up one row. + * + * + **/ + this.copyLinesUp = function() { + this.$moveLines(function(firstRow, lastRow) { + this.session.duplicateLines(firstRow, lastRow); + return 0; + }); + }; + + /** related to: EditSession.duplicateLines + * Editor.copyLinesDown() -> Number + * + (Number): On success, returns the number of new rows added; in other words, `lastRow - firstRow + 1`. + * + * Copies all the selected lines down one row. + * + * + * + **/ + this.copyLinesDown = function() { + this.$moveLines(function(firstRow, lastRow) { + return this.session.duplicateLines(firstRow, lastRow); + }); + }; + + + /** + * Editor.$moveLines(mover) + * - mover (Function): A method to call on each selected row + * + * Executes a specific function, which can be anything that manipulates selected lines, such as copying them, duplicating them, or shifting them. + * + **/ + 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); + + 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); + }); + } + }; + + /** + * Editor.$getSelectedRows() -> Object + * + * Returns an object indicating the currently selected rows. The object looks like this: + * + * { first: range.start.row, last: range.end.row } + * + **/ + this.$getSelectedRows = function() { + var range = this.getSelectionRange().collapseRows(); + + return { + first: range.start.row, + last: range.end.row + }; + }; + + /** internal, hide + * Editor@onCompositionStart(text) + * - text (String): The text being written + * + * + **/ + this.onCompositionStart = function(text) { + this.renderer.showComposition(this.getCursorPosition()); + }; + + /** internal, hide + * Editor@onCompositionUpdate(text) + * - text (String): The text being written + * + * + **/ + this.onCompositionUpdate = function(text) { + this.renderer.setCompositionText(text); + }; + + /** internal, hide + * Editor@onCompositionEnd() + * + * + **/ + this.onCompositionEnd = function() { + this.renderer.hideComposition(); + }; + + /** related to: VirtualRenderer.getFirstVisibleRow + * Editor.getFirstVisibleRow() -> Number + * + * {:VirtualRenderer.getFirstVisibleRow} + **/ + this.getFirstVisibleRow = function() { + return this.renderer.getFirstVisibleRow(); + }; + + /** related to: VirtualRenderer.getLastVisibleRow + * Editor.getLastVisibleRow() -> Number + * + * {:VirtualRenderer.getLastVisibleRow} + **/ + this.getLastVisibleRow = function() { + return this.renderer.getLastVisibleRow(); + }; + + /** + * Editor.isRowVisible(row) -> Boolean + * - row (Number): The row to check + * + * Indicates if the row is currently visible on the screen. + **/ + this.isRowVisible = function(row) { + return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); + }; + + /** + * Editor.isRowFullyVisible(row) -> Boolean + * - row (Number): The row to check + * + * Indicates if the entire row is currently visible on the screen. + **/ + this.isRowFullyVisible = function(row) { + return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); + }; + + /** + * Editor.$getVisibleRowCount() -> Number + * + * Returns the number of currently visibile rows. + **/ + this.$getVisibleRowCount = function() { + return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; + }; + + this.$moveByPage = function(dir, select) { + var renderer = this.renderer; + var config = this.renderer.layerConfig; + var rows = dir * Math.floor(config.height / config.lineHeight); + + this.$blockScrolling++; + if (select == true) { + this.selection.$moveSelection(function(){ + this.moveCursorBy(rows, 0); + }); + } else if (select == false) { + this.selection.moveCursorBy(rows, 0); + this.selection.clearSelection(); + } + this.$blockScrolling--; + + var scrollTop = renderer.scrollTop; + + renderer.scrollBy(0, rows * config.lineHeight); + if (select != null) + renderer.scrollCursorIntoView(null, 0.5); + + renderer.animateScrolling(scrollTop); + }; + + /** + * Editor.selectPageDown() + * + * Selects the text from the current position of the document until where a "page down" finishes. + **/ + this.selectPageDown = function() { + this.$moveByPage(1, true); + }; + + /** + * Editor.selectPageUp() + * + * Selects the text from the current position of the document until where a "page up" finishes. + **/ + this.selectPageUp = function() { + this.$moveByPage(-1, true); + }; + + /** + * Editor.gotoPageDown() + * + * Shifts the document to wherever "page down" is, as well as moving the cursor position. + **/ + this.gotoPageDown = function() { + this.$moveByPage(1, false); + }; + + /** + * Editor.gotoPageUp() + * + * Shifts the document to wherever "page up" is, as well as moving the cursor position. + **/ + this.gotoPageUp = function() { + this.$moveByPage(-1, false); + }; + + /** + * Editor.scrollPageDown() + * + * Scrolls the document to wherever "page down" is, without changing the cursor position. + **/ + this.scrollPageDown = function() { + this.$moveByPage(1); + }; + + /** + * Editor.scrollPageUp() + * + * Scrolls the document to wherever "page up" is, without changing the cursor position. + **/ + this.scrollPageUp = function() { + this.$moveByPage(-1); + }; + + /** related to: VirtualRenderer.scrollToRow + * Editor.scrollToRow(row) + * - row (Number): The row to move to + * + * Moves the editor to the specified row. + * + **/ + this.scrollToRow = function(row) { + this.renderer.scrollToRow(row); + }; + + /** related to: VirtualRenderer.scrollToLine + * Editor.scrollToLine(line, center) + * - line (Number): The line to scroll to + * - center (Boolean): If `true` + * - animate (Boolean): If `true` animates scrolling + * - callback (Function): Function to be called when the animation has finished + * + * TODO scrolls a to line, if center == true, puts line in middle of screen or attempts to) + **/ + this.scrollToLine = function(line, center, animate, callback) { + this.renderer.scrollToLine(line, center, animate, callback); + }; + + /** + * Editor.centerSelection() + * + * Attempts to center the current selection on the screen. + **/ + this.centerSelection = function() { + var range = this.getSelectionRange(); + var line = Math.floor(range.start.row + (range.end.row - range.start.row) / 2); + this.renderer.scrollToLine(line, true); + }; + + /** related to: Selection.getCursor + * Editor.getCursorPosition() -> Object + * + (Object): This returns an object that looks something like this:
      + * ```{ row: currRow, column: currCol }``` + * + * Gets the current position of the cursor. + * + * + * + **/ + this.getCursorPosition = function() { + return this.selection.getCursor(); + }; + + /** related to: EditSession.documentToScreenPosition + * Editor.getCursorPositionScreen() -> Number + * + * Returns the screen position of the cursor. + **/ + this.getCursorPositionScreen = function() { + return this.session.documentToScreenPosition(this.getCursorPosition()); + }; + + /** related to: Selection.getRange + * Editor.getSelectionRange() -> Range + * + * {:Selection.getRange} + **/ + this.getSelectionRange = function() { + return this.selection.getRange(); + }; + + + /** related to: Selection.selectAll + * Editor.selectAll() + * + * Selects all the text in editor. + **/ + this.selectAll = function() { + this.$blockScrolling += 1; + this.selection.selectAll(); + this.$blockScrolling -= 1; + }; + + /** related to: Selection.clearSelection + * Editor.clearSelection() + * + * {:Selection.clearSelection} + **/ + this.clearSelection = function() { + this.selection.clearSelection(); + }; + + /** related to: Selection.moveCursorTo + * Editor.moveCursorTo(row, column) + * - row (Number): The new row number + * - column (Number): The new column number + * + * Moves the cursor to the specified row and column. Note that this does not de-select the current selection. + * + **/ + this.moveCursorTo = function(row, column) { + this.selection.moveCursorTo(row, column); + }; + + /** related to: Selection.moveCursorToPosition + * Editor.moveCursorToPosition(pos) + * - pos (Object): An object with two properties, row and column + * + * Moves the cursor to the position indicated by `pos.row` and `pos.column`. + * + **/ + this.moveCursorToPosition = function(pos) { + this.selection.moveCursorToPosition(pos); + }; + + /** + * Editor.jumpToMatching() + * + * Moves the cursor's row and column to the next matching bracket. + * + **/ + 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); + } + }; + + /** + * Editor.gotoLine(lineNumber, column) + * - lineNumber (Number): The line number to go to + * - column (Number): A column number to go to + * - animate (Boolean): If `true` animates scolling + * + * Moves the cursor to the specified line number, and also into the indiciated column. + * + **/ + this.gotoLine = function(lineNumber, column, animate) { + 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.isRowFullyVisible(lineNumber - 1)) + this.scrollToLine(lineNumber - 1, true, animate); + }; + + /** related to: Editor.moveCursorTo + * Editor.navigateTo(row, column) + * - row (Number): The new row number + * - column (Number): The new column number + * + * Moves the cursor to the specified row and column. Note that this does de-select the current selection. + * + **/ + this.navigateTo = function(row, column) { + this.clearSelection(); + this.moveCursorTo(row, column); + }; + + /** + * Editor.navigateUp(times) + * - times (Number): The number of times to change navigation + * + * Moves the cursor up in the document the specified number of times. Note that this does de-select the current selection. + **/ + this.navigateUp = function(times) { + this.selection.clearSelection(); + times = times || 1; + this.selection.moveCursorBy(-times, 0); + }; + + /** + * Editor.navigateDown(times) + * - times (Number): The number of times to change navigation + * + * Moves the cursor down in the document the specified number of times. Note that this does de-select the current selection. + **/ + this.navigateDown = function(times) { + this.selection.clearSelection(); + times = times || 1; + this.selection.moveCursorBy(times, 0); + }; + + /** + * Editor.navigateLeft(times) + * - times (Number): The number of times to change navigation + * + * Moves the cursor left in the document the specified number of times. Note that this does de-select the current selection. + **/ + this.navigateLeft = function(times) { + if (!this.selection.isEmpty()) { + var selectionStart = this.getSelectionRange().start; + this.moveCursorToPosition(selectionStart); + } + else { + times = times || 1; + while (times--) { + this.selection.moveCursorLeft(); + } + } + this.clearSelection(); + }; + + /** + * Editor.navigateRight(times) + * - times (Number): The number of times to change navigation + * + * Moves the cursor right in the document the specified number of times. Note that this does de-select the current selection. + **/ + this.navigateRight = function(times) { + if (!this.selection.isEmpty()) { + var selectionEnd = this.getSelectionRange().end; + this.moveCursorToPosition(selectionEnd); + } + else { + times = times || 1; + while (times--) { + this.selection.moveCursorRight(); + } + } + this.clearSelection(); + }; + + /** + * Editor.navigateLineStart() + * + * Moves the cursor to the start of the current line. Note that this does de-select the current selection. + **/ + this.navigateLineStart = function() { + this.selection.moveCursorLineStart(); + this.clearSelection(); + }; + + /** + * Editor.navigateLineEnd() + * + * Moves the cursor to the end of the current line. Note that this does de-select the current selection. + **/ + this.navigateLineEnd = function() { + this.selection.moveCursorLineEnd(); + this.clearSelection(); + }; + + /** + * Editor.navigateFileEnd() + * + * Moves the cursor to the end of the current file. Note that this does de-select the current selection. + **/ + this.navigateFileEnd = function() { + var scrollTop = this.renderer.scrollTop; + this.selection.moveCursorFileEnd(); + this.clearSelection(); + this.renderer.animateScrolling(scrollTop); + }; + + /** + * Editor.navigateFileStart() + * + * Moves the cursor to the start of the current file. Note that this does de-select the current selection. + **/ + this.navigateFileStart = function() { + var scrollTop = this.renderer.scrollTop; + this.selection.moveCursorFileStart(); + this.clearSelection(); + this.renderer.animateScrolling(scrollTop); + }; + + /** + * Editor.navigateWordRight() + * + * Moves the cursor to the word immediately to the right of the current position. Note that this does de-select the current selection. + **/ + this.navigateWordRight = function() { + this.selection.moveCursorWordRight(); + this.clearSelection(); + }; + + /** + * Editor.navigateWordLeft() + * + * Moves the cursor to the word immediately to the left of the current position. Note that this does de-select the current selection. + **/ + this.navigateWordLeft = function() { + this.selection.moveCursorWordLeft(); + this.clearSelection(); + }; + + /** + * Editor.replace(replacement, options) + * - replacement (String): The text to replace with + * - options (Object): The [[Search `Search`]] options to use + * + * Replaces the first occurance of `options.needle` with the value in `replacement`. + **/ + this.replace = function(replacement, options) { + if (options) + this.$search.set(options); + + var range = this.$search.find(this.session); + var replaced = 0; + if (!range) + return replaced; + + if (this.$tryReplace(range, replacement)) { + replaced = 1; + } + if (range !== null) { + this.selection.setSelectionRange(range); + this.renderer.scrollSelectionIntoView(range.start, range.end); + } + + return replaced; + }; + + /** + * Editor.replaceAll(replacement, options) + * - replacement (String): The text to replace with + * - options (Object): The [[Search `Search`]] options to use + * + * Replaces all occurances of `options.needle` with the value in `replacement`. + **/ + this.replaceAll = function(replacement, options) { + if (options) { + this.$search.set(options); + } + + var ranges = this.$search.findAll(this.session); + var replaced = 0; + if (!ranges.length) + return replaced; + + this.$blockScrolling += 1; + + var selection = this.getSelectionRange(); + this.clearSelection(); + this.selection.moveCursorTo(0, 0); + + for (var i = ranges.length - 1; i >= 0; --i) { + if(this.$tryReplace(ranges[i], replacement)) { + replaced++; + } + } + + this.selection.setSelectionRange(selection); + this.$blockScrolling -= 1; + + return replaced; + }; + + this.$tryReplace = function(range, replacement) { + var input = this.session.getTextRange(range); + replacement = this.$search.replace(input, replacement); + if (replacement !== null) { + range.end = this.session.replace(range, replacement); + return range; + } else { + return null; + } + }; + + /** related to: Search.getOptions + * Editor.getLastSearchOptions() -> Object + * + * {:Search.getOptions} For more information on `options`, see [[Search `Search`]]. + **/ + this.getLastSearchOptions = function() { + return this.$search.getOptions(); + }; + + /** related to: Search.find + * Editor.find(needle, options) + * - needle (String): The text to search for + * - options (Object): An object defining various search properties + * - animate (Boolean): If `true` animate scrolling + * + * Attempts to find `needle` within the document. For more information on `options`, see [[Search `Search`]]. + **/ + this.find = function(needle, options, animate) { + this.clearSelection(); + options = options || {}; + options.needle = needle; + this.$search.set(options); + this.$find(false, animate); + }; + + /** related to: Editor.find + * Editor.findNext(options) + * - options (Object): search options + * - animate (Boolean): If `true` animate scrolling + * + * Performs another search for `needle` in the document. For more information on `options`, see [[Search `Search`]]. + **/ + this.findNext = function(options, animate) { + options = options || {}; + this.$search.set(options); + this.$find(false, animate); + }; + + /** related to: Editor.find + * Editor.findPrevious(options) + * - options (Object): search options + * - animate (Boolean): If `true` animate scrolling + * + * Performs a search for `needle` backwards. For more information on `options`, see [[Search `Search`]]. + **/ + this.findPrevious = function(options, animate) { + options = options || {}; + this.$search.set(options); + this.$find(true, animate); + }; + + this.$find = function(backwards, animate) { + 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.$blockScrolling += 1; + this.session.unfold(range); + this.selection.setSelectionRange(range); + this.$blockScrolling -= 1; + + var scrollTop = this.renderer.scrollTop; + this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); + this.renderer.animateScrolling(scrollTop); + } + }; + + /** related to: UndoManager.undo + * Editor.undo() + * + * {:UndoManager.undo} + **/ + this.undo = function() { + this.$blockScrolling++; + this.session.getUndoManager().undo(); + this.$blockScrolling--; + this.renderer.scrollCursorIntoView(null, 0.5); + }; + + /** related to: UndoManager.redo + * Editor.redo() + * + * {:UndoManager.redo} + **/ + this.redo = function() { + this.$blockScrolling++; + this.session.getUndoManager().redo(); + this.$blockScrolling--; + this.renderer.scrollCursorIntoView(null, 0.5); + }; + + /** + * Editor.destroy() + * + * Cleans up the entire editor. + **/ + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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("../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.setAttribute("wrap", "off"); + + text.style.left = "-10000px"; + text.style.position = "fixed"; + parentNode.insertBefore(text, parentNode.firstChild); + + var PLACEHOLDER = String.fromCharCode(0); + sendText(); + + var inCompostion = false; + var copied = false; + var pasted = false; + var tempStyle = ''; + + function select() { + try { + text.select(); + } catch (e) {} + } + + function sendText(valueToSend) { + if (!copied) { + var value = valueToSend || text.value; + if (value) { + if (value.length > 1) { + if (value.charAt(0) == PLACEHOLDER) + value = value.substr(1); + else if (value.charAt(value.length - 1) == PLACEHOLDER) + value = value.slice(0, -1); + } + + if (value && value != PLACEHOLDER) { + if (pasted) + host.onPaste(value); + else + host.onTextInput(value); + } + + // If editor is no longer focused we quit immediately, since + // it means that something else is in charge now. + if (!isFocused()) + return false; + } + } + + copied = false; + pasted = false; + + // Safari doesn't fire copy events if no text is selected + text.value = PLACEHOLDER; + select(); + } + + var onTextInput = function(e) { + setTimeout(function () { + if (!inCompostion) + sendText(e.data); + }, 0); + }; + + var onPropertyChange = function(e) { + if (useragent.isOldIE && text.value.charCodeAt(0) > 128) return; + setTimeout(function() { + if (!inCompostion) + sendText(); + }, 0); + }; + + var onCompositionStart = function(e) { + inCompostion = true; + host.onCompositionStart(); + if (!useragent.isGecko) setTimeout(onCompositionUpdate, 0); + }; + + var onCompositionUpdate = function() { + if (!inCompostion) return; + host.onCompositionUpdate(text.value); + }; + + var onCompositionEnd = function(e) { + inCompostion = false; + host.onCompositionEnd(); + }; + + var onCopy = function(e) { + copied = true; + var copyText = host.getCopyText(); + if(copyText) + text.value = copyText; + else + e.preventDefault(); + select(); + setTimeout(function () { + sendText(); + }, 0); + }; + + var onCut = function(e) { + copied = true; + var copyText = host.getCopyText(); + if(copyText) { + text.value = copyText; + host.onCut(); + } else + e.preventDefault(); + select(); + setTimeout(function () { + sendText(); + }, 0); + }; + + event.addCommandKeyListener(text, host.onCommandKey.bind(host)); + + 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 ("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. + pasted = true; + // Some browsers support the event.clipboardData API. Use this to get + // the pasted content which increases speed if pasting a lot of lines. + if (e.clipboardData && e.clipboardData.getData) { + sendText(e.clipboardData.getData("text/plain")); + e.preventDefault(); + } + else { + // If a browser doesn't support any of the things above, use the regular + // method to detect the pasted input. + onPropertyChange(); + } + }); + + if ("onbeforecopy" in text && typeof clipboardData !== "undefined") { + event.addListener(text, "beforecopy", function(e) { + var copyText = host.getCopyText(); + if (copyText) + clipboardData.setData("Text", copyText); + else + e.preventDefault(); + }); + event.addListener(parentNode, "keydown", function(e) { + if (e.ctrlKey && e.keyCode == 88) { + var copyText = host.getCopyText(); + if (copyText) { + clipboardData.setData("Text", copyText); + host.onCut(); + } + event.preventDefault(e); + } + }); + } + else { + event.addListener(text, "copy", onCopy); + event.addListener(text, "cut", onCut); + } + + 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() { + host.onBlur(); + }); + + event.addListener(text, "focus", function() { + host.onFocus(); + select(); + }); + + this.focus = function() { + host.onFocus(); + select(); + text.focus(); + }; + + this.blur = function() { + text.blur(); + }; + + function isFocused() { + return document.activeElement === text; + } + this.isFocused = isFocused; + + this.getElement = function() { + return text; + }; + + this.onContextMenu = function(mousePos, isEmpty){ + if (mousePos) { + if (!tempStyle) + tempStyle = text.style.cssText; + + 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 () { + if (tempStyle) { + text.style.cssText = tempStyle; + tempStyle = ''; + } + sendText(); + }, 0); + }; +}; + +exports.TextInput = TextInput; +}); +/* 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 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; + + new DefaultHandlers(this); + new DefaultGutterHandler(this); + + event.addListener(editor.container, "mousedown", function(e) { + editor.focus(); + return event.preventDefault(e); + }); + event.addListener(editor.container, "selectstart", function(e) { + return event.preventDefault(e); + }); + + var mouseTarget = editor.renderer.getMouseEventTarget(); + 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() { + + this.$scrollSpeed = 1; + this.setScrollSpeed = function(speed) { + this.$scrollSpeed = speed; + }; + + this.getScrollSpeed = function() { + return this.$scrollSpeed; + }; + + 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.getDragDelay = function() { + return this.$dragDelay; + }; + + 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; + + this.editor._emit(name, mouseEvent); + }; + + this.setState = function(state) { + this.state = state; + }; + + this.captureMouse = function(ev, state) { + if (state) + this.setState(state); + + this.x = ev.x; + this.y = ev.y; + + // do not move textarea during selection + var kt = this.editor.renderer.$keepTextAreaAtCursor; + this.editor.renderer.$keepTextAreaAtCursor = false; + + var self = this; + var onMouseSelection = function(e) { + self.x = e.clientX; + self.y = e.clientY; + }; + + var onMouseSelectionEnd = function(e) { + clearInterval(timerId); + self[self.state + "End"] && self[self.state + "End"](e); + self.$clickSelection = null; + self.editor.renderer.$keepTextAreaAtCursor = kt; + self.editor.renderer.$moveTextAreaToCursor(); + }; + + var onSelectionInterval = function() { + self[self.state] && self[self.state](); + } + + event.capture(this.editor.container, onMouseSelection, onMouseSelectionEnd); + var timerId = setInterval(onSelectionInterval, 20); + + ev.preventDefault(); + }; +}).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 + * Mike de Boer + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mouse/default_handlers', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/browser_focus'], function(require, exports, module) { +"use strict"; + +var dom = require("../lib/dom"); +var BrowserFocus = require("../lib/browser_focus").BrowserFocus; + + +var DRAG_OFFSET = 5; // pixels + + + +function DefaultHandlers(mouseHandler) { + mouseHandler.$clickSelection = null; + mouseHandler.browserFocus = new BrowserFocus(); + + var editor = mouseHandler.editor; + editor.setDefaultHandler("mousedown", this.onMouseDown.bind(mouseHandler)); + editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(mouseHandler)); + editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler)); + editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler)); + editor.setDefaultHandler("mousewheel", this.onScroll.bind(mouseHandler)); + + var exports = ["select", "startSelect", "drag", "dragEnd", "dragWait", + "dragWaitEnd", "startDrag"]; + + exports.forEach(function(x) { + mouseHandler[x] = this[x]; + }, this); + + mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, "getLineRange"); + mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, "getWordRange"); +} + +(function() { + + this.onMouseDown = function(ev) { + this.mousedownEvent = ev; + var inSelection = ev.inSelection(); + var pos = ev.getDocumentPosition(); + var editor = this.editor; + var _self = this; + + this.ev = ev + var selectionRange = editor.getSelectionRange(); + var selectionEmpty = selectionRange.isEmpty(); + + var button = ev.getButton(); + if (button !== 0) { + if (selectionEmpty) { + editor.moveCursorToPosition(pos); + editor.selection.clearSelection(); + } + // 2: contextmenu, 1: linux paste + this.moveTextarea = function() { + editor.textInput.onContextMenu({x: _self.x, y: _self.y}); + }; + this.moveTextareaEnd = editor.textInput.onContextMenuClose; + + editor.textInput.onContextMenu({x: this.x, y: this.y}, selectionEmpty); + this.captureMouse(ev, "moveTextarea"); + + return; + } + + // if this click caused the editor to be focused should not clear the + // selection + if (inSelection && !editor.isFocused()) { + editor.focus(); + return; + } + + if (!inSelection || this.$clickSelection || ev.getShiftKey()) { + // Directly pick STATE_SELECT, since the user is not clicking inside + // a selection. + this.startSelect(pos); + } else if (inSelection) { + var e = ev.domEvent; + if ((e.ctrlKey || e.altKey)) { + this.startDrag(); + } else { + this.mousedownEvent.time = (new Date()).getTime(); + this.setState("dragWait"); + } + } + + this.captureMouse(ev) + }; + + this.startSelect = function(pos) { + pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); + if (this.mousedownEvent.getShiftKey()) { + this.editor.selection.selectToPosition(pos); + } + else if (!this.$clickSelection) { + this.editor.moveCursorToPosition(pos); + this.editor.selection.clearSelection(); + } + this.setState("select"); + } + + this.select = function() { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + + if (this.$clickSelection) { + var cmp = this.$clickSelection.comparePoint(cursor); + + if (cmp == -1) { + anchor = this.$clickSelection.end; + } else if (cmp == 1) { + anchor = this.$clickSelection.start; + } else { + cursor = this.$clickSelection.end; + anchor = this.$clickSelection.start; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + + editor.renderer.scrollCursorIntoView(); + }; + + this.extendSelectionBy = function(unitName) { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + var range = editor.selection[unitName](cursor.row, cursor.column); + + if (this.$clickSelection) { + var cmpStart = this.$clickSelection.comparePoint(range.start); + var cmpEnd = this.$clickSelection.comparePoint(range.end); + + if (cmpStart == -1 && cmpEnd <= 0) { + anchor = this.$clickSelection.end; + cursor = range.start; + } else if (cmpEnd == 1 && cmpStart >= 0) { + anchor = this.$clickSelection.start; + cursor = range.end; + } else if (cmpStart == -1 && cmpEnd == 1) { + cursor = range.end; + anchor = range.start; + } else { + cursor = this.$clickSelection.end; + anchor = this.$clickSelection.start; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + + editor.renderer.scrollCursorIntoView(); + }; + + this.startDrag = function() { + var editor = this.editor; + this.setState("drag"); + this.dragRange = editor.getSelectionRange(); + var style = editor.getSelectionStyle(); + this.dragSelectionMarker = editor.session.addMarker(this.dragRange, "ace_selection", style); + editor.clearSelection(); + dom.addCssClass(editor.container, "ace_dragging"); + if (!this.$dragKeybinding) { + this.$dragKeybinding = { + handleKeyboard: function(data, hashId, keyString, keyCode) { + if (keyString == "esc") + return {command: this.command}; + }, + command: { + exec: function(editor) { + var self = editor.$mouseHandler; + self.dragCursor = null + self.dragEnd(); + self.startSelect(); + } + } + } + } + + editor.keyBinding.addKeyboardHandler(this.$dragKeybinding); + }; + + this.dragWait = function() { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + var time = (new Date()).getTime(); + var editor = this.editor; + + if (distance > DRAG_OFFSET) { + this.startSelect(); + } else if ((time - this.mousedownEvent.time) > editor.getDragDelay()) { + this.startDrag() + } + }; + + this.dragWaitEnd = function(e) { + this.mousedownEvent.domEvent = e; + this.startSelect(); + }; + + this.drag = function() { + var editor = this.editor; + this.dragCursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + editor.moveCursorToPosition(this.dragCursor); + editor.renderer.scrollCursorIntoView(); + }; + + this.dragEnd = function(e) { + var editor = this.editor; + var dragCursor = this.dragCursor; + var dragRange = this.dragRange; + dom.removeCssClass(editor.container, "ace_dragging"); + editor.session.removeMarker(this.dragSelectionMarker); + editor.keyBinding.removeKeyboardHandler(this.$dragKeybinding); + + if (!dragCursor) + return; + + editor.clearSelection(); + if (e && (e.ctrlKey || e.altKey)) { + var session = editor.session; + var newRange = dragRange; + newRange.end = session.insert(dragCursor, session.getTextRange(dragRange)); + newRange.start = dragCursor; + } else if (dragRange.contains(dragCursor.row, dragCursor.column)) { + return; + } else { + var newRange = editor.moveText(dragRange, dragCursor); + } + + if (!newRange) + return; + + editor.selection.setSelectionRange(newRange); + }; + + this.onDoubleClick = function(ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + + this.setState("selectByWords"); + + editor.moveCursorToPosition(pos); + editor.selection.selectWord(); + this.$clickSelection = editor.getSelectionRange(); + }; + + this.onTripleClick = function(ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + + this.setState("selectByLines"); + + editor.moveCursorToPosition(pos); + editor.selection.selectLine(); + this.$clickSelection = editor.getSelectionRange(); + }; + + this.onQuadClick = function(ev) { + var editor = this.editor; + + editor.selectAll(); + this.$clickSelection = editor.getSelectionRange(); + this.setState("select"); + }; + + this.onScroll = function(ev) { + var editor = this.editor; + var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + if (isScrolable) { + this.$passScrollEvent = false; + } else { + if (this.$passScrollEvent) + return; + + if (!this.$scrollStopTimeout) { + var self = this; + this.$scrollStopTimeout = setTimeout(function() { + self.$passScrollEvent = true; + self.$scrollStopTimeout = null; + }, 200); + } + } + + editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + return ev.preventDefault(); + }; + +}).call(DefaultHandlers.prototype); + +exports.DefaultHandlers = DefaultHandlers; + +function calcDistance(ax, ay, bx, by) { + return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); +} + +}); +/* 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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("./oop"); +var event = require("./event"); +var EventEmitter = require("./event_emitter").EventEmitter; + +/* + * This class keeps track of the focus state of the given window. + * Focus changes for example when the user switches a browser tab, + * goes to the location bar or switches to another application. + */ +var BrowserFocus = function(win) { + win = win || window; + + this.lastFocus = new Date().getTime(); + this._isFocused = true; + + var _self = this; + + // 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(){ + + oop.implement(this, EventEmitter); + + this.isFocused = function() { + return this._isFocused; + }; + + this._setFocused = function(isFocused) { + if (this._isFocused == isFocused) + return; + + if (isFocused) + this.lastFocus = new Date().getTime(); + + this._isFocused = isFocused; + this._emit("changeFocus"); + }; + +}).call(BrowserFocus.prototype); + + +exports.BrowserFocus = BrowserFocus; +}); +/* 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Mike de Boer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mouse/default_gutter_handler', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +function GutterHandler(mouseHandler) { + var editor = mouseHandler.editor; + + mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) { + if (e.domEvent.target.className.indexOf("ace_gutter-cell") == -1) + return; + + if (!editor.isFocused()) + return; + + var row = e.getDocumentPosition().row; + var selection = editor.session.selection; + + selection.moveCursorTo(row, 0); + selection.selectLine(); + + mouseHandler.$clickSelection = selection.getRange(); + mouseHandler.captureMouse(e, "selectByLines"); + }); +} + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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.x = this.clientX = domEvent.clientX; + this.y = 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; + + this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 clicked 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 + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Julian Viereck + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/keyboard/keybinding', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/event', 'ace/commands/default_commands'], function(require, exports, module) { +"use strict"; + +var keyUtil = require("../lib/keys"); +var event = require("../lib/event"); +require("../commands/default_commands"); + +var KeyBinding = function(editor) { + this.$editor = editor; + this.$data = { }; + this.$handlers = []; + this.setDefaultHandler(editor.commands); +}; + +(function() { + this.setDefaultHandler = function(keyboardHandler) { + this.removeKeyboardHandler(this.$defaultHandler); + this.$defaultHandler = keyboardHandler; + if (keyboardHandler) + this.$handlers.unshift(keyboardHandler); + this.$data = { }; + }; + + this.setKeyboardHandler = function(keyboardHandler) { + if (this.$handlers[this.$handlers.length - 1] == keyboardHandler) + return; + this.$data = { }; + this.$handlers = []; + this.setDefaultHandler(this.$defaultHandler); + if (keyboardHandler) + this.$handlers.push(keyboardHandler); + }; + + this.addKeyboardHandler = function(keyboardHandler) { + this.removeKeyboardHandler(keyboardHandler); + this.$handlers.push(keyboardHandler); + }; + + this.removeKeyboardHandler = function(keyboardHandler) { + var i = this.$handlers.indexOf(keyboardHandler); + if (i == -1) + return false; + this.$handlers.splice(i, 1); + return true; + }; + + this.getKeyboardHandler = function() { + return this.$handlers[this.$handlers.length - 1]; + }; + + 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; + var commands = this.$editor.commands; + + // allow keyboardHandler to consume keys + if (toExecute.command != "null") + success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); + else + success = true; + + if (success && e) + event.stopEvent(e); + + return success; + }; + + this.onCommandKey = function(e, hashId, keyCode) { + var keyString = keyUtil.keyCodeToString(keyCode); + this.$callKeyboardHandlers(hashId, keyString, keyCode, e); + }; + + this.onTextInput = function(text) { + var success = false; + if (text.length == 1) + success = this.$callKeyboardHandlers(0, text); + if (!success) + this.$editor.commands.exec("insertstring", this.$editor, text); + }; + +}).call(KeyBinding.prototype); + +exports.KeyBinding = KeyBinding; +}); +/* 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 + * Julian Viereck + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/commands/default_commands', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) { +"use strict"; + +var lang = require("../lib/lang"); + +function bindKey(win, mac) { + return { + win: win, + mac: mac + }; +} + +exports.commands = [{ + name: "selectall", + bindKey: bindKey("Ctrl-A", "Command-A"), + 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(editor) { + var line = parseInt(prompt("Enter line number:"), 10); + if (!isNaN(line)) { + editor.gotoLine(line); + } + }, + 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(editor) { editor.findNext(); }, + readOnly: true +}, { + name: "findprevious", + bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), + exec: function(editor) { editor.findPrevious(); }, + readOnly: true +}, { + name: "find", + bindKey: bindKey("Ctrl-F", "Command-F"), + exec: function(editor) { + var needle = prompt("Find:", editor.getCopyText()); + editor.find(needle); + }, + readOnly: true +}, { + name: "overwrite", + bindKey: bindKey("Insert", "Insert"), + exec: function(editor) { editor.toggleOverwrite(); }, + readOnly: true +}, { + name: "selecttostart", + bindKey: bindKey("Ctrl-Shift-Home|Alt-Shift-Up", "Command-Shift-Up"), + exec: function(editor) { editor.getSelection().selectFileStart(); }, + readOnly: true +}, { + name: "gotostart", + bindKey: bindKey("Ctrl-Home|Ctrl-Up", "Command-Home|Command-Up"), + exec: function(editor) { editor.navigateFileStart(); }, + readOnly: true +}, { + name: "selectup", + bindKey: bindKey("Shift-Up", "Shift-Up"), + exec: function(editor) { editor.getSelection().selectUp(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "golineup", + bindKey: bindKey("Up", "Up|Ctrl-P"), + exec: function(editor, args) { editor.navigateUp(args.times); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selecttoend", + bindKey: bindKey("Ctrl-Shift-End|Alt-Shift-Down", "Command-Shift-Down"), + exec: function(editor) { editor.getSelection().selectFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotoend", + bindKey: bindKey("Ctrl-End|Ctrl-Down", "Command-End|Command-Down"), + exec: function(editor) { editor.navigateFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectdown", + bindKey: bindKey("Shift-Down", "Shift-Down"), + exec: function(editor) { editor.getSelection().selectDown(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "golinedown", + bindKey: bindKey("Down", "Down|Ctrl-N"), + exec: function(editor, args) { editor.navigateDown(args.times); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectwordleft", + bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), + exec: function(editor) { editor.getSelection().selectWordLeft(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotowordleft", + bindKey: bindKey("Ctrl-Left", "Option-Left"), + exec: function(editor) { editor.navigateWordLeft(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selecttolinestart", + bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"), + exec: function(editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotolinestart", + bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), + exec: function(editor) { editor.navigateLineStart(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectleft", + bindKey: bindKey("Shift-Left", "Shift-Left"), + exec: function(editor) { editor.getSelection().selectLeft(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotoleft", + bindKey: bindKey("Left", "Left|Ctrl-B"), + exec: function(editor, args) { editor.navigateLeft(args.times); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectwordright", + bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), + exec: function(editor) { editor.getSelection().selectWordRight(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotowordright", + bindKey: bindKey("Ctrl-Right", "Option-Right"), + exec: function(editor) { editor.navigateWordRight(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selecttolineend", + bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"), + exec: function(editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotolineend", + bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), + exec: function(editor) { editor.navigateLineEnd(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectright", + bindKey: bindKey("Shift-Right", "Shift-Right"), + exec: function(editor) { editor.getSelection().selectRight(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotoright", + bindKey: bindKey("Right", "Right|Ctrl-F"), + exec: function(editor, args) { editor.navigateRight(args.times); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectpagedown", + bindKey: bindKey("Shift-PageDown", "Shift-PageDown"), + exec: function(editor) { editor.selectPageDown(); }, + readOnly: true +}, { + name: "pagedown", + bindKey: bindKey(null, "PageDown"), + exec: function(editor) { editor.scrollPageDown(); }, + readOnly: true +}, { + name: "gotopagedown", + bindKey: bindKey("PageDown", "Option-PageDown|Ctrl-V"), + exec: function(editor) { editor.gotoPageDown(); }, + readOnly: true +}, { + name: "selectpageup", + bindKey: bindKey("Shift-PageUp", "Shift-PageUp"), + exec: function(editor) { editor.selectPageUp(); }, + readOnly: true +}, { + name: "pageup", + bindKey: bindKey(null, "PageUp"), + exec: function(editor) { editor.scrollPageUp(); }, + readOnly: true +}, { + name: "gotopageup", + bindKey: bindKey("PageUp", "Option-PageUp"), + exec: function(editor) { editor.gotoPageUp(); }, + readOnly: true +}, { + name: "selectlinestart", + bindKey: bindKey("Shift-Home", "Shift-Home"), + exec: function(editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectlineend", + bindKey: bindKey("Shift-End", "Shift-End"), + exec: function(editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + 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 +}, { + name: "jumptomatching", + bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"), + exec: function(editor) { editor.jumpToMatching(); }, + multiSelectAction: "forEach", + readOnly: true +}, + +// commands disabled in readOnly mode +{ + name: "cut", + exec: function(editor) { + var range = editor.getSelectionRange(); + editor._emit("cut", range); + + if (!editor.selection.isEmpty()) { + editor.session.remove(range); + editor.clearSelection(); + } + }, + multiSelectAction: "forEach" +}, { + name: "removeline", + bindKey: bindKey("Ctrl-D", "Command-D"), + exec: function(editor) { editor.removeLines(); }, + multiSelectAction: "forEach" +}, { + name: "togglecomment", + bindKey: bindKey("Ctrl-/", "Command-/"), + exec: function(editor) { editor.toggleCommentLines(); }, + multiSelectAction: "forEach" +}, { + 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(editor) { editor.remove("right"); }, + multiSelectAction: "forEach" +}, { + name: "backspace", + bindKey: bindKey( + "Command-Backspace|Option-Backspace|Shift-Backspace|Backspace", + "Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H" + ), + exec: function(editor) { editor.remove("left"); }, + multiSelectAction: "forEach" +}, { + name: "removetolinestart", + bindKey: bindKey("Alt-Backspace", "Command-Backspace"), + exec: function(editor) { editor.removeToLineStart(); }, + multiSelectAction: "forEach" +}, { + name: "removetolineend", + bindKey: bindKey("Alt-Delete", "Ctrl-K"), + exec: function(editor) { editor.removeToLineEnd(); }, + multiSelectAction: "forEach" +}, { + name: "removewordleft", + bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), + exec: function(editor) { editor.removeWordLeft(); }, + multiSelectAction: "forEach" +}, { + name: "removewordright", + bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), + exec: function(editor) { editor.removeWordRight(); }, + multiSelectAction: "forEach" +}, { + name: "outdent", + bindKey: bindKey("Shift-Tab", "Shift-Tab"), + exec: function(editor) { editor.blockOutdent(); }, + multiSelectAction: "forEach" +}, { + name: "indent", + bindKey: bindKey("Tab", "Tab"), + exec: function(editor) { editor.indent(); }, + multiSelectAction: "forEach" +}, { + name: "insertstring", + exec: function(editor, str) { editor.insert(str); }, + multiSelectAction: "forEach" +}, { + name: "inserttext", + exec: function(editor, args) { + editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); + }, + multiSelectAction: "forEach" +}, { + name: "splitline", + bindKey: bindKey(null, "Ctrl-O"), + exec: function(editor) { editor.splitLine(); }, + multiSelectAction: "forEach" +}, { + name: "transposeletters", + bindKey: bindKey("Ctrl-T", "Ctrl-T"), + exec: function(editor) { editor.transposeLetters(); }, + multiSelectAction: function(editor) {editor.transposeSelections(1); } +}, { + name: "touppercase", + bindKey: bindKey("Ctrl-U", "Ctrl-U"), + exec: function(editor) { editor.toUpperCase(); }, + multiSelectAction: "forEach" +}, { + name: "tolowercase", + bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), + exec: function(editor) { editor.toLowerCase(); }, + multiSelectAction: "forEach" +}]; + +}); +/* 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 + * Mihai Sucan + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/edit_session', ['require', 'exports', 'module' , 'ace/config', 'ace/lib/oop', 'ace/lib/lang', 'ace/lib/net', '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 config = require("./config"); +var oop = require("./lib/oop"); +var lang = require("./lib/lang"); +var net = require("./lib/net"); +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; + +/** + * class EditSession + * + * Stores various states related to a [[Document `Document`]]. A single `EditSession` can be in charge of several `Document`s. + * + **/ + +/** + * new EditSession(text, mode) + * - text (Document | String): If `text` is a `Document`, it associates the `EditSession` with it. Otherwise, a new `Document` is created, with the initial text + * - mode (TextMode): The inital language mode to use for the document + * + * Sets up a new `EditSession` and associates it with the given `Document` and `TextMode`. + * + **/ + +var EditSession = function(text, mode) { + this.$modified = true; + this.$breakpoints = []; + this.$frontMarkers = {}; + this.$backMarkers = {}; + this.$markerId = 1; + this.$rowCache = []; + this.$wrapData = []; + this.$foldData = []; + this.$undoSelect = true; + this.$foldData.toString = function() { + var str = ""; + this.forEach(function(foldLine) { + str += "\n" + foldLine.toString(); + }); + return str; + } + + if (text instanceof Document) { + this.setDocument(text); + } else { + this.setDocument(new Document(text)); + } + + this.selection = new Selection(this); + this.setMode(mode); +}; + + +(function() { + + oop.implement(this, EventEmitter); + + /** + * EditSession.setDocument(doc) + * - doc (Document): The new `Document` to use + * + * Sets the `EditSession` to point to a new `Document`. If a `BackgroundTokenizer` exists, it also points to `doc`. + * + **/ + this.setDocument = function(doc) { + if (this.doc) + throw new Error("Document is already set"); + + 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); + } + }; + + /** + * EditSession.getDocument() -> Document + * + * Returns the `Document` associated with this session. + * + **/ + this.getDocument = function() { + return this.doc; + }; + + /** internal, hide + * EditSession.$resetRowCache(row) + * - row (Number): The row to work with + * + * + * + **/ + this.$resetRowCache = function(row) { + if (row == 0) { + this.$rowCache = []; + return; + } + var rowCache = this.$rowCache; + for (var i = 0; i < rowCache.length; i++) { + if (rowCache[i].docRow >= row) { + rowCache.splice(i, rowCache.length); + return; + } + } + }; + + /** + * EditSession@onChangeFold(e) + * + * Emitted when a code fold changes its state. + * + **/ + this.onChangeFold = function(e) { + var fold = e.data; + this.$resetRowCache(fold.start.row); + }; + + /** + * EditSession@onChange(e) + * + * Emitted when the document changes. + **/ + this.onChange = function(e) { + var delta = e.data; + this.$modified = true; + + this.$resetRowCache(delta.range.start.row); + + var removedFolds = this.$updateInternalDataOnChange(e); + if (!this.$fromUndo && this.$undoManager && !delta.ignore) { + this.$deltasDoc.push(delta); + if (removedFolds && removedFolds.length != 0) { + this.$deltasFold.push({ + action: "removeFolds", + folds: removedFolds + }); + } + + this.$informUndoManager.schedule(); + } + + this.bgTokenizer.start(delta.range.start.row); + this._emit("change", e); + }; + + /** + * EditSession.setValue(text) + * - text (String): The new text to place + * + * Sets the session text. + * + **/ + this.setValue = function(text) { + this.doc.setValue(text); + this.selection.moveCursorTo(0, 0); + this.selection.clearSelection(); + + this.$resetRowCache(0); + this.$deltas = []; + this.$deltasDoc = []; + this.$deltasFold = []; + this.getUndoManager().reset(); + }; + + /** alias of: EditSession.toString + * EditSession.getValue() -> String + * + * Returns the current [[Document `Document`]] as a string. + * + **/ + /** alias of: EditSession.getValue + * EditSession.toString() -> String + * + * Returns the current [[Document `Document`]] as a string. + * + **/ + this.getValue = + this.toString = function() { + return this.doc.getValue(); + }; + + /** + * EditSession.getSelection() -> String + * + * Returns the string of the current selection. + **/ + this.getSelection = function() { + return this.selection; + }; + + /** related to: BackgroundTokenizer.getState + * EditSession.getState(row) -> Array + * - row (Number): The row to start at + * + * {:BackgroundTokenizer.getState} + * + **/ + this.getState = function(row) { + return this.bgTokenizer.getState(row); + }; + + /** related to: BackgroundTokenizer.getTokens + * EditSession.getTokens(firstRow, lastRow) -> Array + * - firstRow (Number): The row to start at + * - lastRow (Number): The row to finish at + * + * Starts tokenizing at the row indicated. Returns a list of objects of the tokenized rows. + * + **/ + this.getTokens = function(firstRow, lastRow) { + return this.bgTokenizer.getTokens(firstRow, lastRow); + }; + + /** + * EditSession.getTokenAt(row, column) -> Array + * - row (Number): The row number to retrieve from + * - column (Number): The column number to retrieve from + * + * Returns an array of tokens at the indicated row and column. + **/ + 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; + }; + + /** + * EditSession.setUndoManager(undoManager) + * - undoManager (UndoManager): The new undo manager + * + * Sets the undo manager. + **/ + this.setUndoManager = function(undoManager) { + this.$undoManager = undoManager; + this.$resetRowCache(0); + this.$deltas = []; + this.$deltasDoc = []; + this.$deltasFold = []; + + if (this.$informUndoManager) + this.$informUndoManager.cancel(); + + if (undoManager) { + var self = this; + /** internal, hide + * EditSession.$syncInformUndoManager() + * + * + **/ + this.$syncInformUndoManager = function() { + self.$informUndoManager.cancel(); + + if (self.$deltasFold.length) { + self.$deltas.push({ + group: "fold", + deltas: self.$deltasFold + }); + self.$deltasFold = []; + } + + if (self.$deltasDoc.length) { + self.$deltas.push({ + group: "doc", + deltas: self.$deltasDoc + }); + self.$deltasDoc = []; + } + + if (self.$deltas.length > 0) { + undoManager.execute({ + action: "aceupdate", + args: [self.$deltas, self] + }); + } + + self.$deltas = []; + } + this.$informUndoManager = + lang.deferredCall(this.$syncInformUndoManager); + } + }; + + this.$defaultUndoManager = { + undo: function() {}, + redo: function() {}, + reset: function() {} + }; + + /** + * EditSession.getUndoManager() -> UndoManager + * + * Returns the current undo manager. + **/ + this.getUndoManager = function() { + return this.$undoManager || this.$defaultUndoManager; + }, + + /** + * EditSession.getTabString() -> String + * + * Returns the current value for tabs. If the user is using soft tabs, this will be a series of spaces (defined by [[EditSession.getTabSize `getTabSize()`]]); otherwise it's simply `'\t'`. + **/ + this.getTabString = function() { + if (this.getUseSoftTabs()) { + return lang.stringRepeat(" ", this.getTabSize()); + } else { + return "\t"; + } + }; + + this.$useSoftTabs = true; + /** + * EditSession.setUseSoftTabs(useSoftTabs) + * - useSoftTabs (Boolean): Value indicating whether or not to use soft tabs + * + * Pass `true` to enable the use of soft tabs. Soft tabs means you're using spaces instead of the tab character (`'\t'`). + * + **/ + this.setUseSoftTabs = function(useSoftTabs) { + if (this.$useSoftTabs === useSoftTabs) return; + + this.$useSoftTabs = useSoftTabs; + }; + + /** + * EditSession.getUseSoftTabs() -> Boolean + * + * Returns `true` if soft tabs are being used, `false` otherwise. + * + **/ + this.getUseSoftTabs = function() { + return this.$useSoftTabs; + }; + + this.$tabSize = 4; + /** + * EditSession.setTabSize(tabSize) + * - tabSize (Number): The new tab size + * + * Set the number of spaces that define a soft tab; for example, passing in `4` transforms the soft tabs to be equivalent to four spaces. This function also emits the `changeTabSize` event. + **/ + this.setTabSize = function(tabSize) { + if (isNaN(tabSize) || this.$tabSize === tabSize) return; + + this.$modified = true; + this.$tabSize = tabSize; + this._emit("changeTabSize"); + }; + + /** + * EditSession.getTabSize() -> Number + * + * Returns the current tab size. + **/ + this.getTabSize = function() { + return this.$tabSize; + }; + + /** + * EditSession.isTabStop(position) -> Boolean + * - position (Object): The position to check + * + * Returns `true` if the character at the position is a soft tab. + **/ + this.isTabStop = function(position) { + return this.$useSoftTabs && (position.column % this.$tabSize == 0); + }; + + this.$overwrite = false; + /** + * EditSession.setOverwrite(overwrite) + * - overwrite (Boolean): Defines wheter or not to set overwrites + * + * Pass in `true` to enable overwrites in your session, or `false` to disable. If overwrites is enabled, any text you enter will type over any text after it. If the value of `overwrite` changes, this function also emites the `changeOverwrite` event. + * + **/ + this.setOverwrite = function(overwrite) { + if (this.$overwrite == overwrite) return; + + this.$overwrite = overwrite; + this._emit("changeOverwrite"); + }; + + /** + * EditSession.getOverwrite() -> Boolean + * + * Returns `true` if overwrites are enabled; `false` otherwise. + **/ + this.getOverwrite = function() { + return this.$overwrite; + }; + + /** + * EditSession.toggleOverwrite() + * + * Sets the value of overwrite to the opposite of whatever it currently is. + **/ + this.toggleOverwrite = function() { + this.setOverwrite(!this.$overwrite); + }; + + /** + * EditSession.getBreakpoints() -> Array + * + * Returns an array of numbers, indicating which rows have breakpoints. + **/ + this.getBreakpoints = function() { + return this.$breakpoints; + }; + + /** + * EditSession.setBreakpoints(rows) + * - rows (Array): An array of row indicies + * + * Sets a breakpoint on every row number given by `rows`. This function also emites the `'changeBreakpoint'` event. + * + **/ + this.setBreakpoints = function(rows) { + this.$breakpoints = []; + for (var i=0; i Number + * - range (Range): Define the range of the marker + * - clazz (String): Set the CSS class for the marker + * - type (Function | String): Identify the type of the marker + * - inFront (Boolean): Set to `true` to establish a front marker + * + * Adds a new marker to the given `Range`. If `inFront` is `true`, a front marker is defined, and the `'changeFrontMarker'` event fires; otherwise, the `'changeBackMarker'` event fires. + * + **/ + this.addMarker = function(range, clazz, type, inFront) { + var id = this.$markerId++; + + var marker = { + range : range, + type : type || "line", + renderer: typeof type == "function" ? type : null, + clazz : clazz, + inFront: !!inFront + } + + if (inFront) { + this.$frontMarkers[id] = marker; + this._emit("changeFrontMarker") + } else { + this.$backMarkers[id] = marker; + this._emit("changeBackMarker") + } + + return id; + }; + + /** + * EditSession.removeMarker(markerId) + * - markerId (Number): A number representing a marker + * + * Removes the marker with the specified ID. If this marker was in front, the `'changeFrontMarker'` event is emitted. If the marker was in the back, the `'changeBackMarker'` event is emitted. + * + **/ + this.removeMarker = function(markerId) { + var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId]; + if (!marker) + return; + + var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers; + if (marker) { + delete (markers[markerId]); + this._emit(marker.inFront ? "changeFrontMarker" : "changeBackMarker"); + } + }; + + /** + * EditSession.getMarkers(inFront) -> Array + * - inFront (Boolean): If `true`, indicates you only want front markers; `false` indicates only back markers + * + * Returns an array containing the IDs of all the markers, either front or back. + * + **/ + this.getMarkers = function(inFront) { + return inFront ? this.$frontMarkers : this.$backMarkers; + }; + + /* + * Error: + * { + * row: 12, + * column: 2, //can be undefined + * text: "Missing argument", + * type: "error" // or "warning" or "info" + * } + */ + /** + * EditSession.setAnnotations(annotations) + * - annotations (Array): A list of annotations + * + * Sets annotations for the `EditSession`. This functions emits the `'changeAnnotation'` event. + **/ + this.setAnnotations = function(annotations) { + this.$annotations = {}; + for (var i=0; i Object + * + * Returns the annotations for the `EditSession`. + **/ + this.getAnnotations = function() { + return this.$annotations || {}; + }; + + /** + * EditSession.clearAnnotations() + * + * Clears all the annotations for this session. This function also triggers the `'changeAnnotation'` event. + **/ + this.clearAnnotations = function() { + this.$annotations = {}; + this._emit("changeAnnotation", {}); + }; + + /** internal, hide + * EditSession.$detectNewLine(text) + * - text (String): A block of text + * + * If `text` contains either the newline (`\n`) or carriage-return ('\r') characters, `$autoNewLine` stores that value. + * + **/ + this.$detectNewLine = function(text) { + var match = text.match(/^.*?(\r?\n)/m); + if (match) { + this.$autoNewLine = match[1]; + } else { + this.$autoNewLine = "\n"; + } + }; + + /** + * EditSession.getWordRange(row, column) -> Range + * - row (Number): The row to start at + * - column (Number): The column to start at + * + * Given a starting row and column, this method returns the `Range` of the first word boundary it finds. + * + **/ + this.getWordRange = function(row, column) { + var line = this.getLine(row); + + var inToken = false; + if (column > 0) { + inToken = !!line.charAt(column - 1).match(this.tokenRe); + } + + if (!inToken) { + inToken = !!line.charAt(column).match(this.tokenRe); + } + + var re = inToken ? this.tokenRe : this.nonTokenRe; + + var start = column; + if (start > 0) { + do { + start--; + } + while (start >= 0 && line.charAt(start).match(re)); + start++; + } + + var end = column; + while (end < line.length && line.charAt(end).match(re)) { + end++; + } + + return new Range(row, start, row, end); + }; + + /** + * EditSession.getAWordRange(row, column) -> Range + * - row (Number): The row number to start from + * - column (Number): The column number to start from + * + * 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; + }; + + /** related to: Document.setNewLineMode + * EditSession.setNewLineMode(newLineMode) + * - newLineMode (String): {:Document.setNewLineMode.param} + * + * {:Document.setNewLineMode.desc} + **/ + this.setNewLineMode = function(newLineMode) { + this.doc.setNewLineMode(newLineMode); + }; + + /** related to: Document.getNewLineMode + * EditSession.getNewLineMode() -> String + * + * Returns the current new line mode. + **/ + this.getNewLineMode = function() { + return this.doc.getNewLineMode(); + }; + + this.$useWorker = true; + + /** + * EditSession.setUseWorker(useWorker) + * - useWorker (Boolean): Set to `true` to use a worker + * + * Identifies if you want to use a worker for the `EditSession`. + * + **/ + this.setUseWorker = function(useWorker) { + if (this.$useWorker == useWorker) + return; + + this.$useWorker = useWorker; + + this.$stopWorker(); + if (useWorker) + this.$startWorker(); + }; + + /** + * EditSession.getUseWorker() -> Boolean + * + * Returns `true` if workers are being used. + **/ + this.getUseWorker = function() { + return this.$useWorker; + }; + + /** + * EditSession@onReloadTokenizer(e) + * + * Reloads all the tokens on the current session. This function calls [[BackgroundTokenizer.start `BackgroundTokenizer.start ()`]] to all the rows; it also emits the `'tokenizerUpdate'` event. + **/ + this.onReloadTokenizer = function(e) { + var rows = e.data; + this.bgTokenizer.start(rows.first); + this._emit("tokenizerUpdate", e); + }; + + this.$modes = {}; + this._loadMode = function(mode, callback) { + if (this.$modes[mode]) + return callback(this.$modes[mode]); + + var _self = this; + var module; + try { + module = require(mode); + } catch (e) {}; + if (module) + return done(module); + + fetch(function() { + require([mode], done); + }); + + function done(module) { + if (_self.$modes[mode]) + return callback(_self.$modes[mode]); + + _self.$modes[mode] = new module.Mode(); + _self.$modes[mode].$id = mode; + _self._emit("loadmode", { + name: mode, + mode: _self.$modes[mode] + }); + callback(_self.$modes[mode]); + } + + function fetch(callback) { + if (!config.get("packaged")) + return callback(); + + var base = mode.split("/").pop(); + var filename = config.get("modePath") + "/mode-" + base + config.get("suffix"); + net.loadScript(filename, callback); + } + }; + + /** + * EditSession.setMode(mode) + * - mode (TextMode): Set a new text mode + * + * Sets a new text mode for the `EditSession`. This method also emits the `'changeMode'` event. If a [[BackgroundTokenizer `BackgroundTokenizer`]] is set, the `'tokenizerUpdate'` event is also emitted. + * + **/ + this.$mode = null; + this.$modeId = null; + this.setMode = function(mode) { + // load on demand + if (typeof mode === "string") { + if (this.$modeId == mode) + return; + + this.$modeId = mode; + var _self = this; + this._loadMode(mode, function(module) { + if (_self.$modeId !== mode) + return; + + _self.setMode(module); + }); + return; + } else if (mode == null) { + mode = "ace/mode/text" + this.$modeId = mode; + this.$modes[mode] = this.$modes[mode] || (new TextMode()); + this.setMode(this.$modes[mode]); + return; + } + + if (this.$mode === mode) return; + this.$mode = mode; + this.$modeId = mode.$id; + + this.$stopWorker(); + + if (this.$useWorker) + this.$startWorker(); + + var tokenizer = mode.getTokenizer(); + + if(tokenizer.addEventListener !== undefined) { + var onReloadTokenizer = this.onReloadTokenizer.bind(this); + tokenizer.addEventListener("update", onReloadTokenizer); + } + + if (!this.bgTokenizer) { + this.bgTokenizer = new BackgroundTokenizer(tokenizer); + var _self = this; + this.bgTokenizer.addEventListener("update", function(e) { + _self._emit("tokenizerUpdate", e); + }); + } else { + this.bgTokenizer.setTokenizer(tokenizer); + } + + this.bgTokenizer.setDocument(this.getDocument()); + this.bgTokenizer.start(0); + + this.tokenRe = mode.tokenRe; + this.nonTokenRe = mode.nonTokenRe; + + this.$setFolding(mode.foldingRules); + + this._emit("changeMode"); + }; + + /** internal, hide + * EditSession.stopWorker() + * + * + **/ + this.$stopWorker = function() { + if (this.$worker) + this.$worker.terminate(); + + this.$worker = null; + }; + + /** internal, hide + * EditSession.$startWorker() + * + * + **/ + this.$startWorker = function() { + if (typeof Worker !== "undefined" && !require.noWorker) { + try { + this.$worker = this.$mode.createWorker(this); + } catch (e) { + console.log("Could not load worker"); + console.log(e); + this.$worker = null; + } + } + else + this.$worker = null; + }; + + /** + * EditSession.getMode() -> TextMode + * + * Returns the current text mode. + **/ + this.getMode = function() { + return this.$mode; + }; + + this.$scrollTop = 0; + /** + * EditSession.setScrollTop(scrollTop) + * - scrollTop (Number): The new scroll top value + * + * This function sets the scroll top value. It also emits the `'changeScrollTop'` event. + **/ + this.setScrollTop = function(scrollTop) { + scrollTop = Math.round(Math.max(0, scrollTop)); + if (this.$scrollTop === scrollTop) + return; + + this.$scrollTop = scrollTop; + this._emit("changeScrollTop", scrollTop); + }; + + /** + * EditSession.getScrollTop() -> Number + * + * [Returns the value of the distance between the top of the editor and the topmost part of the visible content.]{: #EditSession.getScrollTop} + **/ + this.getScrollTop = function() { + return this.$scrollTop; + }; + + this.$scrollLeft = 0; + /** + * EditSession.setScrollLeft(scrollLeft) + * + * [Sets the value of the distance between the left of the editor and the leftmost part of the visible content.]{: #EditSession.setScrollLeft} + **/ + this.setScrollLeft = function(scrollLeft) { + scrollLeft = Math.round(Math.max(0, scrollLeft)); + if (this.$scrollLeft === scrollLeft) + return; + + this.$scrollLeft = scrollLeft; + this._emit("changeScrollLeft", scrollLeft); + }; + + /** + * EditSession.getScrollLeft() -> Number + * + * [Returns the value of the distance between the left of the editor and the leftmost part of the visible content.]{: #EditSession.getScrollLeft} + **/ + this.getScrollLeft = function() { + return this.$scrollLeft; + }; + + /** + * EditSession.getWidth() -> Number + * + * Returns the width of the document. + **/ + this.getWidth = function() { + this.$computeWidth(); + return this.width; + }; + + /** + * EditSession.getScreenWidth() -> Number + * + * Returns the width of the screen. + **/ + this.getScreenWidth = function() { + this.$computeWidth(); + return this.screenWidth; + }; + + this.$computeWidth = function(force) { + if (this.$modified || force) { + this.$modified = false; + + var lines = this.doc.getAllLines(); + var longestLine = 0; + var longestScreenLine = 0; + + for ( var i = 0; i < lines.length; i++) { + var foldLine = this.getFoldLine(i), + line, len; + + line = lines[i]; + if (foldLine) { + var end = foldLine.range.end; + line = this.getFoldDisplayLine(foldLine); + // Continue after the foldLine.end.row. All the lines in + // between are folded. + i = end.row; + } + len = line.length; + longestLine = Math.max(longestLine, len); + if (!this.$useWrapMode) { + longestScreenLine = Math.max( + longestScreenLine, + this.$getStringScreenWidth(line)[0] + ); + } + } + this.width = longestLine; + + if (this.$useWrapMode) { + this.screenWidth = this.$wrapLimit; + } else { + this.screenWidth = longestScreenLine; + } + } + }; + + /** related to: Document.getLine + * EditSession.getLine(row) -> String + * - row (Number): The row to retrieve from + * + * Returns a verbatim copy of the given line as it is in the document + * + **/ + this.getLine = function(row) { + return this.doc.getLine(row); + }; + + /** related to: Document.getLines + * EditSession.getLines(firstRow, lastRow) -> Array + * - firstRow (Number): The first row index to retrieve + * - lastRow (Number): The final row index to retrieve + * + * Returns an array of strings of the rows between `firstRow` and `lastRow`. This function is inclusive of `lastRow`. + * + **/ + this.getLines = function(firstRow, lastRow) { + return this.doc.getLines(firstRow, lastRow); + }; + + /** related to: Document.getLength + * EditSession.getLength()-> Number + * + * Returns the number of rows in the document. + **/ + this.getLength = function() { + return this.doc.getLength(); + }; + + /** related to: Document.getTextRange + * EditSession.getTextRange(range) -> Array + * - range (String): The range to work with + * + * {:Document.getTextRange.desc} + **/ + this.getTextRange = function(range) { + return this.doc.getTextRange(range); + }; + + /** related to: Document.insert + * EditSession.insert(position, text) -> Number + * - position (Number): The position to start inserting at + * - text (String): A chunk of text to insert + * + (Number): The position of the last line of `text`. If the length of `text` is 0, this function simply returns `position`. + * + * Inserts a block of `text` and the indicated `position`. + * + * + **/ + this.insert = function(position, text) { + return this.doc.insert(position, text); + }; + + /** related to: Document.remove + * EditSession.remove(range) -> Object + * - range (Range): A specified Range to remove + * + (Object): The new `start` property of the range, which contains `startRow` and `startColumn`. If `range` is empty, this function returns the unmodified value of `range.start`. + * + * Removes the `range` from the document. + * + * + **/ + this.remove = function(range) { + return this.doc.remove(range); + }; + + /** + * EditSession.undoChanges(deltas, dontSelect) -> Range + * - deltas (Array): An array of previous changes + * - dontSelect (Boolean): [If `true`, doesn't select the range of where the change occured]{: #dontSelect} + * + * Reverts previous changes to your document. + **/ + this.undoChanges = function(deltas, dontSelect) { + if (!deltas.length) + return; + + this.$fromUndo = true; + var lastUndoRange = null; + for (var i = deltas.length - 1; i != -1; i--) { + var delta = deltas[i]; + if (delta.group == "doc") { + this.doc.revertDeltas(delta.deltas); + lastUndoRange = + this.$getUndoSelection(delta.deltas, true, lastUndoRange); + } else { + delta.deltas.forEach(function(foldDelta) { + this.addFolds(foldDelta.folds); + }, this); + } + } + this.$fromUndo = false; + lastUndoRange && + this.$undoSelect && + !dontSelect && + this.selection.setSelectionRange(lastUndoRange); + return lastUndoRange; + }; + + /** + * EditSession.redoChanges(deltas, dontSelect) -> Range + * - deltas (Array): An array of previous changes + * - dontSelect (Boolean): {:dontSelect} + * + * Re-implements a previously undone change to your document. + **/ + this.redoChanges = function(deltas, dontSelect) { + if (!deltas.length) + return; + + this.$fromUndo = true; + var lastUndoRange = null; + for (var i = 0; i < deltas.length; i++) { + var delta = deltas[i]; + if (delta.group == "doc") { + this.doc.applyDeltas(delta.deltas); + lastUndoRange = + this.$getUndoSelection(delta.deltas, false, lastUndoRange); + } + } + this.$fromUndo = false; + lastUndoRange && + this.$undoSelect && + !dontSelect && + this.selection.setSelectionRange(lastUndoRange); + return lastUndoRange; + }; + + /** + * EditSession.setUndoSelect(enable) + * - enable (Boolean): If `true`, selects the range of the reinserted change + * + * ENables or disables highlighting of the range where an undo occured. + **/ + this.setUndoSelect = function(enable) { + this.$undoSelect = enable; + }; + + /** internal, hide + * EditSession.$getUndoSelection(deltas, isUndo, lastUndoRange) -> Range + * + * + **/ + this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { + function isInsert(delta) { + var insert = + delta.action == "insertText" || delta.action == "insertLines"; + return isUndo ? !insert : insert; + } + + var delta = deltas[0]; + var range, point; + var lastDeltaIsInsert = false; + if (isInsert(delta)) { + range = delta.range.clone(); + lastDeltaIsInsert = true; + } else { + range = Range.fromPoints(delta.range.start, delta.range.start); + lastDeltaIsInsert = false; + } + + for (var i = 1; i < deltas.length; i++) { + delta = deltas[i]; + if (isInsert(delta)) { + point = delta.range.start; + if (range.compare(point.row, point.column) == -1) { + range.setStart(delta.range.start); + } + point = delta.range.end; + if (range.compare(point.row, point.column) == 1) { + range.setEnd(delta.range.end); + } + lastDeltaIsInsert = true; + } else { + point = delta.range.start; + if (range.compare(point.row, point.column) == -1) { + range = + Range.fromPoints(delta.range.start, delta.range.start); + } + lastDeltaIsInsert = false; + } + } + + // Check if this range and the last undo range has something in common. + // If true, merge the ranges. + if (lastUndoRange != null) { + var cmp = lastUndoRange.compareRange(range); + if (cmp == 1) { + range.setStart(lastUndoRange.start); + } else if (cmp == -1) { + range.setEnd(lastUndoRange.end); + } + } + + return range; + }, + + /** related to: Document.replace + * EditSession.replace(range, text) -> Object + * - range (Range): A specified Range to replace + * - text (String): The new text to use as a replacement + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}```
      + * If the text and range are empty, this function returns an object containing the current `range.start` value.
      + * If the text is the exact same as what currently exists, this function returns an object containing the current `range.end` value. + * + * Replaces a range in the document with the new `text`. + * + * + * + **/ + this.replace = function(range, text) { + return this.doc.replace(range, text); + }; + + /** + * EditSession.moveText(fromRange, toPosition) -> Range + * - fromRange (Range): The range of text you want moved within the document + * - toPosition (Object): The location (row and column) where you want to move the text to + * + (Range): The new range where the text was moved to. + * Moves a range of text from the given range to the given position. `toPosition` is an object that looks like this: + * + * { row: newRowLocation, column: newColumnLocation } + * + * + * + **/ + this.moveText = function(fromRange, toPosition) { + var text = this.getTextRange(fromRange); + this.remove(fromRange); + + var toRow = toPosition.row; + var toColumn = toPosition.column; + + // Make sure to update the insert location, when text is removed in + // front of the chosen point of insertion. + if (!fromRange.isMultiLine() && fromRange.start.row == toRow && + fromRange.end.column < toColumn) + toColumn -= text.length; + + if (fromRange.isMultiLine() && fromRange.end.row < toRow) { + var lines = this.doc.$split(text); + toRow -= lines.length - 1; + } + + var endRow = toRow + fromRange.end.row - fromRange.start.row; + var endColumn = fromRange.isMultiLine() ? + fromRange.end.column : + toColumn + fromRange.end.column - fromRange.start.column; + + var toRange = new Range(toRow, toColumn, endRow, endColumn); + + this.insert(toRange.start, text); + + return toRange; + }; + + /** + * EditSession.indentRows(startRow, endRow, indentString) + * - startRow (Number): Starting row + * - endRow (Number): Ending row + * - indentString (String): The indent token + * + * Indents all the rows, from `startRow` to `endRow` (inclusive), by prefixing each row with the token in `indentString`. + * + * If `indentString` contains the `'\t'` character, it's replaced by whatever is defined by [[EditSession.getTabString `getTabString()`]]. + * + **/ + this.indentRows = function(startRow, endRow, indentString) { + indentString = indentString.replace(/\t/g, this.getTabString()); + for (var row=startRow; row<=endRow; row++) + this.insert({row: row, column:0}, indentString); + }; + + /** + * EditSession.outdentRows(range) + * - range (Range): A range of rows + * + * Outdents all the rows defined by the `start` and `end` properties of `range`. + * + **/ + this.outdentRows = function (range) { + var rowRange = range.collapseRows(); + var deleteRange = new Range(0, 0, 0, 0); + var size = this.getTabSize(); + + for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { + var line = this.getLine(i); + + deleteRange.start.row = i; + deleteRange.end.row = i; + for (var j = 0; j < size; ++j) + if (line.charAt(j) != ' ') + break; + if (j < size && line.charAt(j) == '\t') { + deleteRange.start.column = j; + deleteRange.end.column = j + 1; + } else { + deleteRange.start.column = 0; + deleteRange.end.column = j; + } + this.remove(deleteRange); + } + }; + + /** related to: Document.insertLines + * EditSession.moveLinesUp(firstRow, lastRow) -> Number + * - firstRow (Number): The starting row to move up + * - lastRow (Number): The final row to move up + * + (Number): If `firstRow` is less-than or equal to 0, this function returns 0. Otherwise, on success, it returns -1. + * + * Shifts all the lines in the document up one, starting from `firstRow` and ending at `lastRow`. + * + * + **/ + this.moveLinesUp = function(firstRow, lastRow) { + if (firstRow <= 0) return 0; + + var removed = this.doc.removeLines(firstRow, lastRow); + this.doc.insertLines(firstRow - 1, removed); + return -1; + }; + + /** related to: Document.insertLines + * EditSession.moveLinesDown(firstRow, lastRow) -> Number + * - firstRow (Number): The starting row to move down + * - lastRow (Number): The final row to move down + * + (Number): If `firstRow` is less-than or equal to 0, this function returns 0. Otherwise, on success, it returns -1. + * + * + * + **/ + this.moveLinesDown = function(firstRow, lastRow) { + if (lastRow >= this.doc.getLength()-1) return 0; + + var removed = this.doc.removeLines(firstRow, lastRow); + this.doc.insertLines(firstRow+1, removed); + return 1; + }; + + /** + * EditSession.duplicateLines(firstRow, lastRow) -> Number + * - firstRow (Number): The starting row to duplicate + * - lastRow (Number): The final row to duplicate + * + (Number): Returns the number of new rows added; in other words, `lastRow - firstRow + 1`. + * + * Duplicates all the text between `firstRow` and `lastRow`. + * + * + * + **/ + this.duplicateLines = function(firstRow, lastRow) { + var firstRow = this.$clipRowToDocument(firstRow); + var lastRow = this.$clipRowToDocument(lastRow); + + var lines = this.getLines(firstRow, lastRow); + this.doc.insertLines(firstRow, lines); + + var addedRows = lastRow - firstRow + 1; + return addedRows; + }; + + + 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); + + if (row < 0) { + row = 0; + column = 0; + } else { + var len = this.doc.getLength(); + if (row >= len) { + row = len - 1; + column = this.doc.getLine(len-1).length; + } else { + 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; + this.$wrapLimitRange = { + min : null, + max : null + }; + + /** + * EditSession.setUseWrapMode(useWrapMode) + * - useWrapMode (Boolean): Enable (or disable) wrap mode + * + * Sets whether or not line wrapping is enabled. If `useWrapMode` is different than the current value, the `'changeWrapMode'` event is emitted. + **/ + this.setUseWrapMode = function(useWrapMode) { + if (useWrapMode != this.$useWrapMode) { + this.$useWrapMode = useWrapMode; + this.$modified = true; + this.$resetRowCache(0); + + // If wrapMode is activaed, the wrapData array has to be initialized. + if (useWrapMode) { + var len = this.getLength(); + this.$wrapData = []; + for (var i = 0; i < len; i++) { + this.$wrapData.push([]); + } + this.$updateWrapData(0, len - 1); + } + + this._emit("changeWrapMode"); + } + }; + + /** + * EditSession.getUseWrapMode() -> Boolean + * + * Returns `true` if wrap mode is being used; `false` otherwise. + **/ + this.getUseWrapMode = function() { + return this.$useWrapMode; + }; + + // Allow the wrap limit to move freely between min and max. Either + // parameter can be null to allow the wrap limit to be unconstrained + // in that direction. Or set both parameters to the same number to pin + // the limit to that value. + /** + * EditSession.setWrapLimitRange(min, max) + * - min (Number): The minimum wrap value (the left side wrap) + * - max (Number): The maximum wrap value (the right side wrap) + * + * Sets the boundaries of wrap. Either value can be `null` to have an unconstrained wrap, or, they can be the same number to pin the limit. If the wrap limits for `min` or `max` are different, this method also emits the `'changeWrapMode'` event. + **/ + this.setWrapLimitRange = function(min, max) { + if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { + this.$wrapLimitRange.min = min; + this.$wrapLimitRange.max = max; + this.$modified = true; + // This will force a recalculation of the wrap limit + this._emit("changeWrapMode"); + } + }; + + /** internal, hide + * EditSession.adjustWrapLimit(desiredLimit) -> Boolean + * - desiredLimit (Number): The new wrap limit + * + * This should generally only be called by the renderer when a resize is detected. + **/ + this.adjustWrapLimit = function(desiredLimit) { + var wrapLimit = this.$constrainWrapLimit(desiredLimit); + if (wrapLimit != this.$wrapLimit && wrapLimit > 0) { + this.$wrapLimit = wrapLimit; + this.$modified = true; + if (this.$useWrapMode) { + this.$updateWrapData(0, this.getLength() - 1); + this.$resetRowCache(0) + this._emit("changeWrapLimit"); + } + return true; + } + return false; + }; + + /** internal, hide + * EditSession.$constrainWrapLimit(wrapLimit) + * + * + **/ + this.$constrainWrapLimit = function(wrapLimit) { + var min = this.$wrapLimitRange.min; + if (min) + wrapLimit = Math.max(min, wrapLimit); + + var max = this.$wrapLimitRange.max; + if (max) + wrapLimit = Math.min(max, wrapLimit); + + // What would a limit of 0 even mean? + return Math.max(1, wrapLimit); + }; + + /** + * EditSession.getWrapLimit() -> Number + * + * Returns the value of wrap limit. + **/ + this.getWrapLimit = function() { + return this.$wrapLimit; + }; + + /** + * EditSession.getWrapLimitRange() -> Object + * + * Returns an object that defines the minimum and maximum of the wrap limit; it looks something like this: + * + * { min: wrapLimitRange_min, max: wrapLimitRange_max } + * + **/ + this.getWrapLimitRange = function() { + // Avoid unexpected mutation by returning a copy + return { + min : this.$wrapLimitRange.min, + max : this.$wrapLimitRange.max + }; + }; + + /** internal, hide + * EditSession.$updateInternalDataOnChange() + * + * + **/ + this.$updateInternalDataOnChange = function(e) { + var useWrapMode = this.$useWrapMode; + var len; + var action = e.data.action; + 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) { + if (action == "insertLines") { + lastRow = firstRow + (e.data.lines.length); + } else { + lastRow = firstRow; + } + len = e.data.lines ? e.data.lines.length : lastRow - firstRow; + } else { + len = lastRow - firstRow; + } + + if (len != 0) { + if (action.indexOf("remove") != -1) { + useWrapMode && this.$wrapData.splice(firstRow, len); + + var foldLines = this.$foldData; + removedFolds = this.getFoldsInRange(e.data.range); + this.removeFolds(removedFolds); + + var foldLine = this.getFoldLine(end.row); + var idx = 0; + if (foldLine) { + foldLine.addRemoveChars(end.row, end.column, start.column - end.column); + foldLine.shiftRow(-len); + + var foldLineBefore = this.getFoldLine(firstRow); + if (foldLineBefore && foldLineBefore !== foldLine) { + foldLineBefore.merge(foldLine); + foldLine = foldLineBefore; + } + idx = foldLines.indexOf(foldLine) + 1; + } + + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= end.row) { + foldLine.shiftRow(-len); + } + } + + lastRow = firstRow; + } else { + var args; + if (useWrapMode) { + args = [firstRow, 0]; + for (var i = 0; i < len; i++) args.push([]); + this.$wrapData.splice.apply(this.$wrapData, args); + } + + // If some new line is added inside of a foldLine, then split + // the fold line up. + var foldLines = this.$foldData; + var foldLine = this.getFoldLine(firstRow); + var idx = 0; + if (foldLine) { + var cmp = foldLine.range.compareInside(start.row, start.column) + // Inside of the foldLine range. Need to split stuff up. + if (cmp == 0) { + foldLine = foldLine.split(start.row, start.column); + foldLine.shiftRow(len); + foldLine.addRemoveChars( + lastRow, 0, end.column - start.column); + } else + // Infront of the foldLine but same row. Need to shift column. + if (cmp == -1) { + foldLine.addRemoveChars(firstRow, 0, end.column - start.column); + foldLine.shiftRow(len); + } + // Nothing to do if the insert is after the foldLine. + idx = foldLines.indexOf(foldLine) + 1; + } + + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= firstRow) { + foldLine.shiftRow(len); + } + } + } + } else { + // Realign folds. E.g. if you add some new chars before a fold, the + // fold should "move" to the right. + 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. + removedFolds = this.getFoldsInRange(e.data.range); + this.removeFolds(removedFolds); + + len = -len; + } + var foldLine = this.getFoldLine(firstRow); + if (foldLine) { + foldLine.addRemoveChars(firstRow, start.column, len); + } + } + + if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { + console.error("doc.getLength() and $wrapData.length have to be the same!"); + } + + useWrapMode && this.$updateWrapData(firstRow, lastRow); + + return removedFolds; + }; + + /** internal, hide + * EditSession.$updateWrapData(firstRow, lastRow) + * + * + **/ + this.$updateWrapData = function(firstRow, lastRow) { + var lines = this.doc.getAllLines(); + var tabSize = this.getTabSize(); + var wrapData = this.$wrapData; + var wrapLimit = this.$wrapLimit; + var tokens; + var foldLine; + + var row = firstRow; + lastRow = Math.min(lastRow, lines.length - 1); + while (row <= lastRow) { + 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( + function(placeholder, row, column, lastColumn) { + var walkTokens; + if (placeholder) { + walkTokens = this.$getDisplayTokens( + placeholder, tokens.length); + walkTokens[0] = PLACEHOLDER_START; + for (var i = 1; i < walkTokens.length; i++) { + walkTokens[i] = PLACEHOLDER_BODY; + } + } else { + walkTokens = this.$getDisplayTokens( + lines[row].substring(lastColumn, column), + tokens.length); + } + tokens = tokens.concat(walkTokens); + }.bind(this), + foldLine.end.row, + 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) + tokens.pop(); + + wrapData[foldLine.start.row] + = this.$computeWrapSplits(tokens, wrapLimit, tabSize); + row = foldLine.end.row + 1; + } + } + }; + + // "Tokens" + var CHAR = 1, + CHAR_EXT = 2, + PLACEHOLDER_START = 3, + PLACEHOLDER_BODY = 4, + PUNCTUATION = 9, + SPACE = 10, + TAB = 11, + TAB_SPACE = 12; + + /** internal, hide + * EditSession.$computeWrapSplits(tokens, wrapLimit) -> Array + * + * + **/ + this.$computeWrapSplits = function(tokens, wrapLimit) { + if (tokens.length == 0) { + return []; + } + + var splits = []; + var displayLength = tokens.length; + var lastSplit = 0, lastDocSplit = 0; + + function addSplit(screenPos) { + var displayed = tokens.slice(lastSplit, screenPos); + + // The document size is the current size - the extra width for tabs + // and multipleWidth characters. + var len = displayed.length; + displayed.join(""). + // Get all the TAB_SPACEs. + replace(/12/g, function() { + len -= 1; + }). + // Get all the CHAR_EXT/multipleWidth characters. + replace(/2/g, function() { + len -= 1; + }); + + lastDocSplit += len; + splits.push(lastDocSplit); + lastSplit = screenPos; + } + + while (displayLength - lastSplit > wrapLimit) { + // This is, where the split should be. + var split = lastSplit + wrapLimit; + + // If there is a space or tab at this split position, then making + // a split is simple. + if (tokens[split] >= SPACE) { + // Include all following spaces + tabs in this split as well. + while (tokens[split] >= SPACE) { + split ++; + } + addSplit(split); + continue; + } + + // === ELSE === + // Check if split is inside of a placeholder. Placeholder are + // not splitable. Therefore, seek the beginning of the placeholder + // and try to place the split beofre the placeholder's start. + if (tokens[split] == PLACEHOLDER_START + || tokens[split] == PLACEHOLDER_BODY) + { + // Seek the start of the placeholder and do the split + // before the placeholder. By definition there always + // a PLACEHOLDER_START between split and lastSplit. + for (split; split != lastSplit - 1; split--) { + if (tokens[split] == PLACEHOLDER_START) { + // split++; << No incremental here as we want to + // have the position before the Placeholder. + break; + } + } + + // If the PLACEHOLDER_START is not the index of the + // last split, then we can do the split + if (split > lastSplit) { + addSplit(split); + continue; + } + + // If the PLACEHOLDER_START IS the index of the last + // split, then we have to place the split after the + // placeholder. So, let's seek for the end of the placeholder. + split = lastSplit + wrapLimit; + for (split; split < tokens.length; split++) { + if (tokens[split] != PLACEHOLDER_BODY) + { + break; + } + } + + // If spilt == tokens.length, then the placeholder is the last + // thing in the line and adding a new split doesn't make sense. + if (split == tokens.length) { + break; // Breaks the while-loop. + } + + // Finally, add the split... + addSplit(split); + continue; + } + + // === ELSE === + // 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 > minSplit) { + addSplit(++split); + continue; + } + + // === ELSE === + split = lastSplit + wrapLimit; + // The split is inside of a CHAR or CHAR_EXT token and no space + // around -> force a split. + addSplit(split); + } + return splits; + } + + /** internal, hide + * EditSession.$getDisplayTokens(str, offset) -> Array + * - str (String): The string to check + * - offset (Number): The value to start at + * + * Given a string, returns an array of the display characters, including tabs and spaces. + **/ + this.$getDisplayTokens = function(str, offset) { + var arr = []; + var tabSize; + offset = offset || 0; + + for (var i = 0; i < str.length; i++) { + var c = str.charCodeAt(i); + // Tab + if (c == 9) { + tabSize = this.getScreenTabSize(arr.length + offset); + arr.push(TAB); + for (var n = 1; n < tabSize; n++) { + arr.push(TAB_SPACE); + } + } + // Space + 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 (c >= 0x1100 && isFullWidth(c)) { + arr.push(CHAR, CHAR_EXT); + } else { + arr.push(CHAR); + } + } + return arr; + } + + /** internal, hide + * EditSession.$getStringScreenWidth(str, maxScreenColumn, screenColumn) -> [Number] + * - str (String): The string to calculate the screen width of + * - maxScreenColumn (Number): + * - screenColumn (Number): + * + ([Number]): Returns an `int[]` array with two elements:
      + * The first position indicates the number of columns for `str` on screen.
      + * The second value contains the position of the document column that this function read until. + * + * Calculates the width of the string `str` on the screen while assuming that the string starts at the first column on the screen. + * + * + **/ + this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { + if (maxScreenColumn == 0) { + return [0, 0]; + } + if (maxScreenColumn == null) { + maxScreenColumn = screenColumn + + str.length * Math.max(this.getTabSize(), 2); + } + screenColumn = screenColumn || 0; + + var c, column; + for (column = 0; column < str.length; column++) { + c = str.charCodeAt(column); + // tab + if (c == 9) { + screenColumn += this.getScreenTabSize(screenColumn); + } + // full width characters + else if (c >= 0x1100 && isFullWidth(c)) { + screenColumn += 2; + } else { + screenColumn += 1; + } + if (screenColumn > maxScreenColumn) { + break + } + } + + return [screenColumn, column]; + } + + /** + * EditSession.getRowLength(row) -> Number + * - row (Number): The row number to check + * + * + * Returns the length of the indicated row. + **/ + this.getRowLength = function(row) { + if (!this.$useWrapMode || !this.$wrapData[row]) { + return 1; + } else { + return this.$wrapData[row].length + 1; + } + } + + /** + * EditSession.getRowHeight(config, row) -> Number + * - config (Object): An object containing a parameter indicating the `lineHeight`. + * - row (Number): The row number to check + * + * Returns the height of the indicated row. This is mostly relevant for situations where wrapping occurs, and a single line spans across multiple rows. + * + **/ + this.getRowHeight = function(config, row) { + return this.getRowLength(row) * config.lineHeight; + } + + /** internal, hide, related to: EditSession.documentToScreenColumn + * EditSession.getScreenLastRowColumn(screenRow) -> Number + * - screenRow (Number): The screen row to check + * + * Returns the column position (on screen) for the last character in the provided row. + **/ + this.getScreenLastRowColumn = function(screenRow) { + var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE) + return this.documentToScreenColumn(pos.row, pos.column); + }; + + /** internal, hide + * EditSession.getDocumentLastRowColumn(docRow, docColumn) -> Number + * - docRow (Number): + * - docColumn (Number): + * + **/ + this.getDocumentLastRowColumn = function(docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.getScreenLastRowColumn(screenRow); + }; + + /** internal, hide + * EditSession.getDocumentLastRowColumnPosition(docRow, docColumn) -> Number + * + **/ + this.getDocumentLastRowColumnPosition = function(docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); + }; + + /** internal, hide + * EditSession.getRowSplitData(row) -> undefined | String + * + **/ + this.getRowSplitData = function(row) { + if (!this.$useWrapMode) { + return undefined; + } else { + return this.$wrapData[row]; + } + }; + + /** + * EditSession.getScreenTabSize(screenColumn) -> Number + * - screenColumn (Number): The screen column to check + * + * The distance to the next tab stop at the specified screen column. + **/ + this.getScreenTabSize = function(screenColumn) { + return this.$tabSize - screenColumn % this.$tabSize; + }; + + /** internal, hide + * EditSession.screenToDocumentRow(screenRow, screenColumn) -> Number + * + * + **/ + this.screenToDocumentRow = function(screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).row; + }; + + /** internal, hide + * EditSession.screenToDocumentColumn(screenRow, screenColumn) -> Number + * + * + **/ + this.screenToDocumentColumn = function(screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).column; + }; + + /** related to: EditSession.documentToScreenPosition + * EditSession.screenToDocumentPosition(screenRow, screenColumn) -> Object + * - screenRow (Number): The screen row to check + * - screenColumn (Number): The screen column to check + * + (Object): The object returned has two properties: `row` and `column`. + * + * Converts characters coordinates on the screen to characters coordinates within the document. [This takes into account code folding, word wrap, tab size, and any other visual modifications.]{: #conversionConsiderations} + * + * + **/ + this.screenToDocumentPosition = function(screenRow, screenColumn) { + if (screenRow < 0) { + return { + row: 0, + column: 0 + } + } + + var line; + var docRow = 0; + var docColumn = 0; + var column; + var row = 0; + var rowLength = 0; + + var rowCache = this.$rowCache; + for (var i = 0; i < rowCache.length; i++) { + if (rowCache[i].screenRow < screenRow) { + row = rowCache[i].screenRow; + docRow = rowCache[i].docRow; + } + else { + break; + } + } + var doCache = !rowCache.length || i == rowCache.length; + + var maxRow = this.getLength() - 1; + var foldLine = this.getNextFoldLine(docRow); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (row <= screenRow) { + rowLength = this.getRowLength(docRow); + if (row + rowLength - 1 >= screenRow || docRow >= maxRow) { + break; + } else { + row += rowLength; + docRow++; + if (docRow > foldStart) { + docRow = foldLine.end.row+1; + foldLine = this.getNextFoldLine(docRow, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + } + if (doCache) { + rowCache.push({ + docRow: docRow, + screenRow: row + }); + } + } + + if (foldLine && foldLine.start.row <= docRow) { + line = this.getFoldDisplayLine(foldLine); + 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; + } + + if (this.$useWrapMode) { + var splits = this.$wrapData[docRow]; + if (splits) { + column = splits[screenRow - row]; + if(screenRow > row && splits.length) { + docColumn = splits[screenRow - row - 1] || splits[splits.length - 1]; + line = line.substring(docColumn); + } + } + } + + docColumn += this.$getStringScreenWidth(line, screenColumn)[1]; + + // We remove one character at the end so that the docColumn + // position returned is not associated to the next row on the screen. + if (this.$useWrapMode && docColumn >= column) { + docColumn = column - 1; + } + + if (foldLine) { + return foldLine.idxToPosition(docColumn); + } + + return { + row: docRow, + column: docColumn + } + }; + + /** related to: EditSession.screenToDocumentPosition + * EditSession.documentToScreenPosition(docRow, docColumn) -> Object + * - docRow (Number): The document row to check + * - docColumn (Number): The document column to check + * + (Object): The object returned by this method has two properties: `row` and `column`. + * + * Converts document coordinates to screen coordinates. {:conversionConsiderations} + * + * + * + **/ + this.documentToScreenPosition = function(docRow, docColumn) { + // Normalize the passed in arguments. + if (typeof docColumn === "undefined") + var pos = this.$clipPositionToDocument(docRow.row, docRow.column); + else + pos = this.$clipPositionToDocument(docRow, docColumn); + + docRow = pos.row; + docColumn = pos.column; + + var wrapData; + // Special case in wrapMode if the doc is at the end of the document. + if (this.$useWrapMode) { + wrapData = this.$wrapData; + if (docRow > wrapData.length - 1) { + return { + row: this.getScreenLength(), + column: wrapData.length == 0 + ? 0 + : (wrapData[wrapData.length - 1].length - 1) + }; + } + } + + var screenRow = 0; + var foldStartRow = null; + var fold = null; + + // Clamp the docRow position in case it's inside of a folded block. + fold = this.getFoldAt(docRow, docColumn, 1); + if (fold) { + docRow = fold.start.row; + docColumn = fold.start.column; + } + + var rowEnd, row = 0; + var rowCache = this.$rowCache; + + for (var i = 0; i < rowCache.length; i++) { + if (rowCache[i].docRow < docRow) { + screenRow = rowCache[i].screenRow; + row = rowCache[i].docRow; + } else { + break; + } + } + var doCache = !rowCache.length || i == rowCache.length; + + var foldLine = this.getNextFoldLine(row); + var foldStart = foldLine ?foldLine.start.row :Infinity; + + while (row < docRow) { + if (row >= foldStart) { + rowEnd = foldLine.end.row + 1; + if (rowEnd > docRow) + break; + foldLine = this.getNextFoldLine(rowEnd, foldLine); + foldStart = foldLine ?foldLine.start.row :Infinity; + } + else { + rowEnd = row + 1; + } + + screenRow += this.getRowLength(row); + row = rowEnd; + + if (doCache) { + rowCache.push({ + docRow: row, + screenRow: screenRow + }); + } + } + + // Calculate the text line that is displayed in docRow on the screen. + var textLine = ""; + // Check if the final row we want to reach is inside of a fold. + if (foldLine && row >= foldStart) { + textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); + foldStartRow = foldLine.start.row; + } else { + textLine = this.getLine(docRow).substring(0, docColumn); + foldStartRow = docRow; + } + // Clamp textLine if in wrapMode. + if (this.$useWrapMode) { + var wrapRow = wrapData[foldStartRow]; + var screenRowOffset = 0; + while (textLine.length >= wrapRow[screenRowOffset]) { + screenRow ++; + screenRowOffset++; + } + textLine = textLine.substring( + wrapRow[screenRowOffset - 1] || 0, textLine.length + ); + } + + return { + row: screenRow, + column: this.$getStringScreenWidth(textLine)[0] + }; + }; + + /** internal, hide + * EditSession.documentToScreenColumn(row, docColumn) -> Number + * + * + **/ + this.documentToScreenColumn = function(row, docColumn) { + return this.documentToScreenPosition(row, docColumn).column; + }; + + /** internal, hide + * EditSession.documentToScreenRow(docRow, docColumn) -> Number + * + * + **/ + this.documentToScreenRow = function(docRow, docColumn) { + return this.documentToScreenPosition(docRow, docColumn).row; + }; + + /** + * EditSession.getScreenLength() -> Number + * + * Returns the length of the screen. + **/ + this.getScreenLength = function() { + var screenRows = 0; + 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++) { + fold = foldData[i]; + screenRows -= fold.end.row - fold.start.row; + } + } else { + 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; + } + } + } + + return screenRows; + } + + // For every keystroke this gets called once per char in the whole doc!! + // Wouldn't hurt to make it a bit faster for c >= 0x1100 + function isFullWidth(c) { + if (c < 0x1100) + return false; + return c >= 0x1100 && c <= 0x115F || + c >= 0x11A3 && c <= 0x11A7 || + c >= 0x11FA && c <= 0x11FF || + c >= 0x2329 && c <= 0x232A || + c >= 0x2E80 && c <= 0x2E99 || + c >= 0x2E9B && c <= 0x2EF3 || + c >= 0x2F00 && c <= 0x2FD5 || + c >= 0x2FF0 && c <= 0x2FFB || + c >= 0x3000 && c <= 0x303E || + c >= 0x3041 && c <= 0x3096 || + c >= 0x3099 && c <= 0x30FF || + c >= 0x3105 && c <= 0x312D || + c >= 0x3131 && c <= 0x318E || + c >= 0x3190 && c <= 0x31BA || + c >= 0x31C0 && c <= 0x31E3 || + c >= 0x31F0 && c <= 0x321E || + c >= 0x3220 && c <= 0x3247 || + c >= 0x3250 && c <= 0x32FE || + c >= 0x3300 && c <= 0x4DBF || + c >= 0x4E00 && c <= 0xA48C || + c >= 0xA490 && c <= 0xA4C6 || + c >= 0xA960 && c <= 0xA97C || + c >= 0xAC00 && c <= 0xD7A3 || + c >= 0xD7B0 && c <= 0xD7C6 || + c >= 0xD7CB && c <= 0xD7FB || + c >= 0xF900 && c <= 0xFAFF || + c >= 0xFE10 && c <= 0xFE19 || + c >= 0xFE30 && c <= 0xFE52 || + c >= 0xFE54 && c <= 0xFE66 || + c >= 0xFE68 && c <= 0xFE6B || + c >= 0xFF01 && c <= 0xFF60 || + c >= 0xFFE0 && c <= 0xFFE6; + }; + +}).call(EditSession.prototype); + +require("./edit_session/folding").Folding.call(EditSession.prototype); +require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); + +exports.EditSession = EditSession; +}); +/* 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/config', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) { +"no use strict"; + +var lang = require("./lib/lang"); + +var global = (function() { + return this; +})(); + +var options = { + packaged: false, + workerPath: "", + modePath: "", + themePath: "", + suffix: ".js" +}; + +exports.get = function(key) { + if (!options.hasOwnProperty(key)) + throw new Error("Unknown confik key: " + key); + + return options[key]; +}; + +exports.set = function(key, value) { + if (!options.hasOwnProperty(key)) + throw new Error("Unknown confik key: " + key); + + options[key] = value; +}; + +exports.all = function() { + return lang.copyObject(options); +}; + +exports.init = function() { + options.packaged = require.packaged || module.packaged || (global.define && define.packaged); + + if (!global.document) + return ""; + + var scriptOptions = {}; + var scriptUrl = ""; + var suffix; + + var scripts = document.getElementsByTagName("script"); + for (var i=0; i + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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("./lib/oop"); +var lang = require("./lib/lang"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Range = require("./range").Range; + +/** + * class Selection + * + * Contains the 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. + **/ + +/** + * new Selection(session) + * - session (EditSession): The session to use + * + * Creates a new `Selection` object. + * +**/ +var Selection = function(session) { + this.session = session; + this.doc = session.getDocument(); + + this.clearSelection(); + this.lead = this.selectionLead = this.doc.createAnchor(0, 0); + this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0); + + var self = this; + this.lead.on("change", function(e) { + self._emit("changeCursor"); + if (!self.$isEmpty) + self._emit("changeSelection"); + if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) + self.$desiredColumn = null; + }); + + this.selectionAnchor.on("change", function() { + if (!self.$isEmpty) + self._emit("changeSelection"); + }); +}; + +(function() { + + oop.implement(this, EventEmitter); + + /** + * Selection.isEmpty() -> Boolean + * + * Returns `true` if the selection is empty. + **/ + this.isEmpty = function() { + return (this.$isEmpty || ( + this.anchor.row == this.lead.row && + this.anchor.column == this.lead.column + )); + }; + + /** + * Selection.isMultiLine() -> Boolean + * + * Returns `true` if the selection is a multi-line. + **/ + this.isMultiLine = function() { + if (this.isEmpty()) { + return false; + } + + return this.getRange().isMultiLine(); + }; + + /** + * Selection.getCursor() -> Number + * + * Gets the current position of the cursor. + **/ + this.getCursor = function() { + return this.lead.getPosition(); + }; + + /** + * Selection.setSelectionAnchor(row, column) + * - row (Number): The new row + * - column (Number): The new column + * + * Sets the row and column position of the anchor. This function also emits the `'changeSelection'` event. + **/ + this.setSelectionAnchor = function(row, column) { + this.anchor.setPosition(row, column); + + if (this.$isEmpty) { + this.$isEmpty = false; + this._emit("changeSelection"); + } + }; + + /** related to: Anchor.getPosition + * Selection.getSelectionAnchor() -> Object + * + * Returns an object containing the `row` and `column` of the calling selection anchor. + * + **/ + this.getSelectionAnchor = function() { + if (this.$isEmpty) + return this.getSelectionLead() + else + return this.anchor.getPosition(); + }; + + /** + * Selection.getSelectionLead() -> Object + * + * Returns an object containing the `row` and `column` of the calling selection lead. + **/ + this.getSelectionLead = function() { + return this.lead.getPosition(); + }; + + /** + * Selection.shiftSelection(columns) + * - columns (Number): The number of columns to shift by + * + * Shifts the selection up (or down, if [[Selection.isBackwards `isBackwards()`]] is true) the given number of columns. + * + **/ + this.shiftSelection = function(columns) { + if (this.$isEmpty) { + this.moveCursorTo(this.lead.row, this.lead.column + columns); + return; + }; + + var anchor = this.getSelectionAnchor(); + var lead = this.getSelectionLead(); + + var isBackwards = this.isBackwards(); + + if (!isBackwards || anchor.column !== 0) + this.setSelectionAnchor(anchor.row, anchor.column + columns); + + if (isBackwards || lead.column !== 0) { + this.$moveSelection(function() { + this.moveCursorTo(lead.row, lead.column + columns); + }); + } + }; + + /** + * Selection.isBackwards() -> Boolean + * + * Returns `true` if the selection is going backwards in the document. + **/ + this.isBackwards = function() { + var anchor = this.anchor; + var lead = this.lead; + return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); + }; + + /** + * Selection.getRange() -> Range + * + * [Returns the [[Range `Range`]] for the selected text.]{: #Selection.getRange} + **/ + this.getRange = function() { + var anchor = this.anchor; + var lead = this.lead; + + if (this.isEmpty()) + return Range.fromPoints(lead, lead); + + if (this.isBackwards()) { + return Range.fromPoints(lead, anchor); + } + else { + return Range.fromPoints(anchor, lead); + } + }; + + /** + * Selection.clearSelection() + * + * [Empties the selection (by de-selecting it). This function also emits the `'changeSelection'` event.]{: #Selection.clearSelection} + **/ + this.clearSelection = function() { + if (!this.$isEmpty) { + this.$isEmpty = true; + this._emit("changeSelection"); + } + }; + + /** + * Selection.selectAll() + * + * Selects all the text in the document. + **/ + this.selectAll = function() { + var lastRow = this.doc.getLength() - 1; + this.setSelectionAnchor(lastRow, this.doc.getLine(lastRow).length); + this.moveCursorTo(0, 0); + }; + + /** + * Selection.setSelectionRange(range, reverse) + * - range (Range): The range of text to select + * - reverse (Boolean): Indicates if the range should go backwards (`true`) or not + * + * Sets the selection to the provided range. + * + **/ + this.setSelectionRange = function(range, reverse) { + if (reverse) { + this.setSelectionAnchor(range.end.row, range.end.column); + this.selectTo(range.start.row, range.start.column); + } else { + this.setSelectionAnchor(range.start.row, range.start.column); + this.selectTo(range.end.row, range.end.column); + } + this.$desiredColumn = null; + }; + + this.$moveSelection = function(mover) { + var lead = this.lead; + if (this.$isEmpty) + this.setSelectionAnchor(lead.row, lead.column); + + mover.call(this); + }; + + /** + * Selection.selectTo(row, column) + * - row (Number): The row to select to + * - column (Number): The column to select to + * + * Moves the selection cursor to the indicated row and column. + * + **/ + this.selectTo = function(row, column) { + this.$moveSelection(function() { + this.moveCursorTo(row, column); + }); + }; + + /** + * Selection.selectToPosition(pos) + * - pos (Object): An object containing the row and column + * + * Moves the selection cursor to the row and column indicated by `pos`. + * + **/ + this.selectToPosition = function(pos) { + this.$moveSelection(function() { + this.moveCursorToPosition(pos); + }); + }; + + /** + * Selection.selectUp() + * + * Moves the selection up one row. + **/ + this.selectUp = function() { + this.$moveSelection(this.moveCursorUp); + }; + + /** + * Selection.selectDown() + * + * Moves the selection down one row. + **/ + this.selectDown = function() { + this.$moveSelection(this.moveCursorDown); + }; + + /** + * Selection.selectRight() + * + * Moves the selection right one column. + **/ + this.selectRight = function() { + this.$moveSelection(this.moveCursorRight); + }; + + /** + * Selection.selectLeft() + * + * Moves the selection left one column. + **/ + this.selectLeft = function() { + this.$moveSelection(this.moveCursorLeft); + }; + + /** + * Selection.selectLineStart() + * + * Moves the selection to the beginning of the current line. + **/ + this.selectLineStart = function() { + this.$moveSelection(this.moveCursorLineStart); + }; + + /** + * Selection.selectLineEnd() + * + * Moves the selection to the end of the current line. + **/ + this.selectLineEnd = function() { + this.$moveSelection(this.moveCursorLineEnd); + }; + + /** + * Selection.selectFileEnd() + * + * Moves the selection to the end of the file. + **/ + this.selectFileEnd = function() { + this.$moveSelection(this.moveCursorFileEnd); + }; + + /** + * Selection.selectFileStart() + * + * Moves the selection to the start of the file. + **/ + this.selectFileStart = function() { + this.$moveSelection(this.moveCursorFileStart); + }; + + /** + * Selection.selectWordRight() + * + * Moves the selection to the first word on the right. + **/ + this.selectWordRight = function() { + this.$moveSelection(this.moveCursorWordRight); + }; + + /** + * Selection.selectWordLeft() + * + * Moves the selection to the first word on the left. + **/ + this.selectWordLeft = function() { + this.$moveSelection(this.moveCursorWordLeft); + }; + + /** related to: EditSession.getWordRange + * Selection.selectWord() + * + * Moves the selection to highlight the entire word. + **/ + this.getWordRange = function(row, column) { + if (typeof column == "undefined") { + var cursor = row || this.lead; + row = cursor.row; + column = cursor.column; + } + return this.session.getWordRange(row, column); + }; + + this.selectWord = function() { + this.setSelectionRange(this.getWordRange()); + }; + + /** related to: EditSession.getAWordRange + * Selection.selectAWord() + * + * 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.getLineRange = function(row, excludeLastChar) { + var rowStart = typeof row == "number" ? row : this.lead.row; + var rowEnd; + + var foldLine = this.session.getFoldLine(rowStart); + if (foldLine) { + rowStart = foldLine.start.row; + rowEnd = foldLine.end.row; + } else { + rowEnd = rowStart; + } + if (excludeLastChar) + return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); + else + return new Range(rowStart, 0, rowEnd + 1, 0); + }; + + /** + * Selection.selectLine() + * + * Selects the entire line. + **/ + this.selectLine = function() { + this.setSelectionRange(this.getLineRange()); + }; + + /** + * Selection.moveCursorUp() + * + * Moves the cursor up one row. + **/ + this.moveCursorUp = function() { + this.moveCursorBy(-1, 0); + }; + + /** + * Selection.moveCursorDown() + * + * Moves the cursor down one row. + **/ + this.moveCursorDown = function() { + this.moveCursorBy(1, 0); + }; + + /** + * Selection.moveCursorLeft() + * + * Moves the cursor left one column. + **/ + this.moveCursorLeft = function() { + var cursor = this.lead.getPosition(), + fold; + + if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + } else if (cursor.column == 0) { + // cursor is a line (start + if (cursor.row > 0) { + this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); + } + } + else { + var tabSize = this.session.getTabSize(); + if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize) + this.moveCursorBy(0, -tabSize); + else + this.moveCursorBy(0, -1); + } + }; + + /** + * Selection.moveCursorRight() + * + * Moves the cursor right one column. + **/ + this.moveCursorRight = function() { + var cursor = this.lead.getPosition(), + fold; + if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { + this.moveCursorTo(fold.end.row, fold.end.column); + } + else if (this.lead.column == this.doc.getLine(this.lead.row).length) { + if (this.lead.row < this.doc.getLength() - 1) { + this.moveCursorTo(this.lead.row + 1, 0); + } + } + else { + var tabSize = this.session.getTabSize(); + var cursor = this.lead; + if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize) + this.moveCursorBy(0, tabSize); + else + this.moveCursorBy(0, 1); + } + }; + + /** + * Selection.moveCursorLineStart() + * + * Moves the cursor to the start of the line. + **/ + this.moveCursorLineStart = function() { + var row = this.lead.row; + var column = this.lead.column; + var screenRow = this.session.documentToScreenRow(row, column); + + // Determ the doc-position of the first character at the screen line. + var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); + + // Determ the line + var beforeCursor = this.session.getDisplayLine( + row, null, + firstColumnPosition.row, firstColumnPosition.column + ); + + var leadingSpace = beforeCursor.match(/^\s*/); + if (leadingSpace[0].length == column) { + this.moveCursorTo( + firstColumnPosition.row, firstColumnPosition.column + ); + } + else { + this.moveCursorTo( + firstColumnPosition.row, + firstColumnPosition.column + leadingSpace[0].length + ); + } + }; + + /** + * Selection.moveCursorLineEnd() + * + * Moves the cursor to the end of the line. + **/ + this.moveCursorLineEnd = function() { + var lead = this.lead; + var lastRowColumnPosition = + this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); + this.moveCursorTo( + lastRowColumnPosition.row, + lastRowColumnPosition.column + ); + }; + + /** + * Selection.moveCursorFileEnd() + * + * Moves the cursor to the end of the file. + **/ + this.moveCursorFileEnd = function() { + var row = this.doc.getLength() - 1; + var column = this.doc.getLine(row).length; + this.moveCursorTo(row, column); + }; + + /** + * Selection.moveCursorFileStart() + * + * Moves the cursor to the start of the file. + **/ + this.moveCursorFileStart = function() { + this.moveCursorTo(0, 0); + }; + + /** + * Selection.moveCursorLongWordRight() + * + * Moves the cursor to the word on the right. + **/ + this.moveCursorLongWordRight = function() { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + + var match; + this.session.nonTokenRe.lastIndex = 0; + this.session.tokenRe.lastIndex = 0; + + // skip folds + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + this.moveCursorTo(fold.end.row, fold.end.column); + return; + } + + // first skip space + if (match = this.session.nonTokenRe.exec(rightOfCursor)) { + column += this.session.nonTokenRe.lastIndex; + this.session.nonTokenRe.lastIndex = 0; + rightOfCursor = line.substring(column); + } + + // 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; + } + + this.moveCursorTo(row, column); + }; + + /** + * Selection.moveCursorLongWordLeft() + * + * Moves the cursor to the word on the left. + **/ + this.moveCursorLongWordLeft = function() { + var row = this.lead.row; + var column = this.lead.column; + + // skip folds + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + 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; + } + + // 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; + } + + this.moveCursorTo(row, column); + }; + + this.$shortWordEndIndex = function(rightOfCursor) { + var match, index = 0, ch; + var whitespaceRe = /\s/; + var tokenRe = this.session.tokenRe; + + tokenRe.lastIndex = 0; + if (match = this.session.tokenRe.exec(rightOfCursor)) { + index = this.session.tokenRe.lastIndex; + } else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index ++; + + if (index <= 1) { + tokenRe.lastIndex = 0; + while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { + tokenRe.lastIndex = 0; + index ++; + if (whitespaceRe.test(ch)) { + if (index > 2) { + index-- + break; + } else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index ++; + if (index > 2) + break + } + } + } + } + } + tokenRe.lastIndex = 0; + + return index; + }; + + this.moveCursorShortWordRight = function() { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + + var fold = this.session.getFoldAt(row, column, 1); + if (fold) + return this.moveCursorTo(fold.end.row, fold.end.column); + + if (column == line.length) + return this.moveCursorRight(); + + var index = this.$shortWordEndIndex(rightOfCursor); + + this.moveCursorTo(row, column + index); + }; + + this.moveCursorShortWordLeft = function() { + var row = this.lead.row; + var column = this.lead.column; + + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) + return this.moveCursorTo(fold.start.row, fold.start.column); + + if (column == 0) + return this.moveCursorLeft(); + + var str = this.session.getLine(row).substring(0, column); + var leftOfCursor = lang.stringReverse(str); + var index = this.$shortWordEndIndex(leftOfCursor); + + return this.moveCursorTo(row, column - index); + }; + + this.moveCursorWordRight = function() { + if (this.session.$selectLongWords) + this.moveCursorLongWordRight(); + else + this.moveCursorShortWordRight(); + }; + + this.moveCursorWordLeft = function() { + if (this.session.$selectLongWords) + this.moveCursorLongWordLeft(); + else + this.moveCursorShortWordLeft(); + }; + + /** related to: EditSession.documentToScreenPosition + * Selection.moveCursorBy(rows, chars) + * - rows (Number): The number of rows to move by + * - chars (Number): The number of characters to move by + * + * Moves the cursor to position indicated by the parameters. Negative numbers move the cursor backwards in the document. + **/ + this.moveCursorBy = function(rows, chars) { + var screenPos = this.session.documentToScreenPosition( + this.lead.row, + this.lead.column + ); + + if (chars === 0) { + if (this.$desiredColumn) + screenPos.column = this.$desiredColumn; + else + this.$desiredColumn = screenPos.column; + } + + var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column); + + // move the cursor and update the desired column + this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); + }; + + /** + * Selection.moveCursorToPosition(position) + * - position (Object): The position to move to + * + * Moves the selection to the position indicated by its `row` and `column`. + **/ + this.moveCursorToPosition = function(position) { + this.moveCursorTo(position.row, position.column); + }; + + /** + * Selection.moveCursorTo(row, column, keepDesiredColumn) + * - row (Number): The row to move to + * - column (Number): The column to move to + * - keepDesiredColumn (Boolean): [If `true`, the cursor move does not respect the previous column]{: #preventUpdateBool} + * + * Moves the cursor to the row and column provided. [If `preventUpdateDesiredColumn` is `true`, then the cursor stays in the same column position as its original point.]{: #preventUpdateBoolDesc} + **/ + this.moveCursorTo = function(row, column, keepDesiredColumn) { + // Ensure the row/column is not inside of a fold. + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + row = fold.start.row; + column = fold.start.column; + } + + this.$keepDesiredColumnOnChange = true; + this.lead.setPosition(row, column); + this.$keepDesiredColumnOnChange = false; + + if (!keepDesiredColumn) + this.$desiredColumn = null; + }; + + /** + * Selection.moveCursorToScreen(row, column, keepDesiredColumn) + * - row (Number): The row to move to + * - column (Number): The column to move to + * - keepDesiredColumn (Boolean): {:preventUpdateBool} + * + * Moves the cursor to the screen position indicated by row and column. {:preventUpdateBoolDesc} + **/ + this.moveCursorToScreen = function(row, column, keepDesiredColumn) { + var pos = this.session.screenToDocumentPosition(row, column); + this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); + }; + + // remove listeners from document + this.detach = function() { + this.lead.detach(); + this.anchor.detach(); + this.session = this.doc = null; + } + + this.fromOrientedRange = function(range) { + this.setSelectionRange(range, range.cursor == range.start); + this.$desiredColumn = range.desiredColumn || this.$desiredColumn; + } + + this.toOrientedRange = function(range) { + var r = this.getRange(); + if (range) { + range.start.column = r.start.column; + range.start.row = r.start.row; + range.end.column = r.end.column; + range.end.row = r.end.row; + } else { + range = r; + } + + range.cursor = this.isBackwards() ? range.start : range.end; + range.desiredColumn = this.$desiredColumn; + return range; + } + +}).call(Selection.prototype); + +exports.Selection = Selection; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/range', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/** + * class Range + * + * This object is used in various places to indicate a region within the editor. To better visualize how this works, imagine a rectangle. Each quadrant of the rectangle is analogus to a range, as ranges contain a starting row and starting column, and an ending row, and ending column. + * + **/ + +/** + * new Range(startRow, startColumn, endRow, endColumn) + * - startRow (Number): The starting row + * - startColumn (Number): The starting column + * - endRow (Number): The ending row + * - endColumn (Number): The ending column + * + * Creates a new `Range` object with the given starting and ending row and column points. + * + **/ +var Range = function(startRow, startColumn, endRow, endColumn) { + this.start = { + row: startRow, + column: startColumn + }; + + this.end = { + row: endRow, + column: endColumn + }; +}; + +(function() { + /** + * Range.isEqual(range) -> Boolean + * - range (Range): A range to check against + * + * Returns `true` if and only if the starting row and column, and ending tow and column, are equivalent to those given by `range`. + * + **/ + this.isEqual = 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 + }; + + /** + * Range.toString() -> String + * + * Returns a string containing the range's row and column information, given like this: + * + * [start.row/start.column] -> [end.row/end.column] + * + **/ + + this.toString = function() { + return ("Range: [" + this.start.row + "/" + this.start.column + + "] -> [" + this.end.row + "/" + this.end.column + "]"); + }; + + /** related to: Range.compare + * Range.contains(row, column) -> Boolean + * - row (Number): A row to check for + * - column (Number): A column to check for + * + * Returns `true` if the `row` and `column` provided are within the given range. This can better be expressed as returning `true` if: + * + * this.start.row <= row <= this.end.row && + * this.start.column <= column <= this.end.column + * + **/ + + this.contains = function(row, column) { + return this.compare(row, column) == 0; + }; + + /** related to: Range.compare + * Range.compareRange(range) -> Number + * - range (Range): A range to compare with + * + (Number): This method returns one of the following numbers:
      + *
      + * * `-2`: (B) is in front of (A), and doesn't intersect with (A)
      + * * `-1`: (B) begins before (A) but ends inside of (A)
      + * * `0`: (B) is completely inside of (A) OR (A) is completely 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) + * + * Compares `this` range (A) with another range (B). + * + **/ + 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; + } + } + } + + /** related to: Range.compare + * Range.comparePoint(p) -> Number + * - p (Range): A point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1
      + * + * Checks the row and column points of `p` with the row and column points of the calling range. + * + * + * + **/ + this.comparePoint = function(p) { + return this.compare(p.row, p.column); + } + + /** related to: Range.comparePoint + * Range.containsRange(range) -> Boolean + * - range (Range): A range to compare with + * + * Checks the start and end points of `range` and compares them to the calling range. Returns `true` if the `range` is contained within the caller's range. + * + **/ + this.containsRange = function(range) { + return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; + } + + /** + * Range.intersects(range) -> Boolean + * - range (Range): A range to compare with + * + * Returns `true` if passed in `range` intersects with the one calling this method. + * + **/ + this.intersects = function(range) { + var cmp = this.compareRange(range); + return (cmp == -1 || cmp == 0 || cmp == 1); + } + + /** + * Range.isEnd(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the caller's ending row point is the same as `row`, and if the caller's ending column is the same as `column`. + * + **/ + this.isEnd = function(row, column) { + return this.end.row == row && this.end.column == column; + } + + /** + * Range.isStart(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the caller's starting row point is the same as `row`, and if the caller's starting column is the same as `column`. + * + **/ + this.isStart = function(row, column) { + return this.start.row == row && this.start.column == column; + } + + /** + * Range.setStart(row, column) + * - row (Number): A row point to set + * - column (Number): A column point to set + * + * Sets the starting row and column for the range. + * + **/ + 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; + } + } + + /** + * Range.setEnd(row, column) + * - row (Number): A row point to set + * - column (Number): A column point to set + * + * Sets the starting row and column for the range. + * + **/ + 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; + } + } + + /** related to: Range.compare + * Range.inside(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range. + * + **/ + 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; + } + + /** related to: Range.compare + * Range.insideStart(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range's starting points. + * + **/ + this.insideStart = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column)) { + return false; + } else { + return true; + } + } + return false; + } + + /** related to: Range.compare + * Range.insideEnd(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range's ending points. + * + **/ + this.insideEnd = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isStart(row, column)) { + return false; + } else { + return true; + } + } + return false; + } + + /** + * Range.compare(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + **/ + 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; + }; + + /** + * Range.compareStart(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + *
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range, or if `isStart` is `true`.
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + * + **/ + this.compareStart = function(row, column) { + if (this.start.row == row && this.start.column == column) { + return -1; + } else { + return this.compare(row, column); + } + } + + /** + * Range.compareEnd(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range, or if `isEnd` is `true.
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + **/ + this.compareEnd = function(row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } else { + return this.compare(row, column); + } + } + + /** + * Range.compareInside(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `1` if the ending row of the calling range is equal to `row`, and the ending column of the calling range is equal to `column`
      + * * `-1` if the starting row of the calling range is equal to `row`, and the starting column of the calling range is equal to `column`
      + *
      + * Otherwise, it returns the value after calling [[Range.compare `compare()`]]. + * + * Checks the row and column points with the row and column points of the calling range. + * + * + * + **/ + 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); + } + } + + /** + * Range.clipRows(firstRow, lastRow) -> Range + * - firstRow (Number): The starting row + * - lastRow (Number): The ending row + * + * Returns the part of the current `Range` that occurs within the boundaries of `firstRow` and `lastRow` as a new `Range` object. + * + **/ + 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); + }; + + /** + * Range.extend(row, column) -> Range + * - row (Number): A new row to extend to + * - column (Number): A new column to extend to + * + * Changes the row and column points for the calling range for both the starting and ending points. This method returns that range with a new row. + * + **/ + 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); + }; + + /** + * Range.isMultiLine() -> Boolean + * + * Returns true if the range spans across multiple lines. + * + **/ + this.isMultiLine = function() { + return (this.start.row !== this.end.row); + }; + + /** + * Range.clone() -> Range + * + * Returns a duplicate of the calling range. + * + **/ + this.clone = function() { + return Range.fromPoints(this.start, this.end); + }; + + /** + * Range.collapseRows() -> Range + * + * Returns a range containing the starting and ending rows of the original range, but with a column value of `0`. + * + **/ + 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) + }; + + /** + * Range.toScreenRange(session) -> Range + * - session (EditSession): The `EditSession` to retrieve coordinates from + * + * Given the current `Range`, this function converts those starting and ending points into screen positions, and then returns a new `Range` object. + **/ + 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(start, end) -> Range + * - start (Range): A starting point to use + * - end (Range): An ending point to use + * + * Creates and returns a new `Range` based on the row and column of the given parameters. + * +**/ +Range.fromPoints = function(start, end) { + return new Range(start.row, start.column, end.row, end.column); +}; + +exports.Range = Range; +}); +/* 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 + * Mihai Sucan + * Chris Spencer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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("../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()); + this.$behaviour = new Behaviour(); +}; + +(function() { + + this.tokenRe = new RegExp("^[" + + unicode.packages.L + + unicode.packages.Mn + unicode.packages.Mc + + unicode.packages.Nd + + unicode.packages.Pc + "\\$_]+", "g" + ); + + this.nonTokenRe = new RegExp("^(?:[^" + + unicode.packages.L + + unicode.packages.Mn + unicode.packages.Mc + + unicode.packages.Nd + + unicode.packages.Pc + "\\$_]|\s])+", "g" + ); + + this.getTokenizer = function() { + return this.$tokenizer; + }; + + this.toggleCommentLines = function(state, doc, startRow, endRow) { + }; + + this.getNextLineIndent = function(state, line, tab) { + return ""; + }; + + this.checkOutdent = function(state, line, input) { + return false; + }; + + this.autoOutdent = function(state, doc, row) { + }; + + this.$getIndent = function(line) { + var match = line.match(/^(\s+)/); + if (match) { + return match[1]; + } + + return ""; + }; + + this.createWorker = function(session) { + return null; + }; + + this.highlightSelection = function(editor) { + var session = editor.session; + if (!session.$selectionOccurrences) + session.$selectionOccurrences = []; + + if (session.$selectionOccurrences.length) + this.clearSelectionHighlight(editor); + + var selection = editor.getSelectionRange(); + if (selection.isEmpty() || selection.isMultiLine()) + return; + + var startOuter = selection.start.column - 1; + var endOuter = selection.end.column + 1; + var line = session.getLine(selection.start.row); + var lineCols = line.length; + var needle = line.substring(Math.max(startOuter, 0), + Math.min(endOuter, lineCols)); + + // Make sure the outer characters are not part of the word. + if ((startOuter >= 0 && /^[\w\d]/.test(needle)) || + (endOuter <= lineCols && /[\w\d]$/.test(needle))) + return; + + needle = line.substring(selection.start.column, selection.end.column); + if (!/^[\w\d]+$/.test(needle)) + return; + + var cursor = editor.getCursorPosition(); + + var newOptions = { + wrap: true, + wholeWord: true, + caseSensitive: true, + needle: needle + }; + + var currentOptions = editor.$search.getOptions(); + editor.$search.set(newOptions); + + var ranges = editor.$search.findAll(session); + ranges.forEach(function(range) { + if (!range.contains(cursor.row, cursor.column)) { + var marker = session.addMarker(range, "ace_selected_word", "text"); + session.$selectionOccurrences.push(marker); + } + }); + + editor.$search.set(currentOptions); + }; + + this.clearSelectionHighlight = function(editor) { + if (!editor.session.$selectionOccurrences) + return; + + editor.session.$selectionOccurrences.forEach(function(marker) { + editor.session.removeMarker(marker); + }); + + editor.session.$selectionOccurrences = []; + }; + + this.createModeDelegates = function (mapping) { + if (!this.$embeds) { + return; + } + this.$modes = {}; + for (var i = 0; i < this.$embeds.length; i++) { + if (mapping[this.$embeds[i]]) { + this.$modes[this.$embeds[i]] = new mapping[this.$embeds[i]](); + } + } + + var delegations = ['toggleCommentLines', 'getNextLineIndent', 'checkOutdent', 'autoOutdent', 'transformAction']; + + for (var i = 0; i < delegations.length; i++) { + (function(scope) { + var functionName = delegations[i]; + var defaultHandler = scope[functionName]; + scope[delegations[i]] = function() { + return this.$delegator(functionName, arguments, defaultHandler); + } + } (this)); + } + } + + this.$delegator = function(method, args, defaultHandler) { + var state = args[0]; + + for (var i = 0; i < this.$embeds.length; i++) { + if (!this.$modes[this.$embeds[i]]) continue; + + var split = state.split(this.$embeds[i]); + if (!split[0] && split[1]) { + args[0] = split[1]; + var mode = this.$modes[this.$embeds[i]]; + return mode[method].apply(mode, args); + } + } + var ret = defaultHandler.apply(this, args); + return defaultHandler ? ret : undefined; + }; + + this.transformAction = function(state, action, editor, session, param) { + if (this.$behaviour) { + var behaviours = this.$behaviour.getBehaviours(); + for (var key in behaviours) { + if (behaviours[key][action]) { + var ret = behaviours[key][action].apply(this, arguments); + if (ret) { + return ret; + } + } + } + } + } + +}).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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/tokenizer', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/** + * class Tokenizer + * + * This class takes a set of highlighting rules, and creates a tokenizer out of them. For more information, see [the wiki on extending highlighters](https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode#wiki-extendingTheHighlighter). + * + **/ + +/** + * new Tokenizer(rules, flag) + * - rules (Object): The highlighting rules + * - flag (String): Any additional regular expression flags to pass (like "i" for case insensitive) + * + * Constructs a new tokenizer based on the given rules and flags. + * + **/ +var Tokenizer = function(rules, flag) { + flag = flag ? "g" + flag : "g"; + this.rules = rules; + + this.regExps = {}; + this.matchMappings = {}; + for ( var key in this.rules) { + var rule = this.rules[key]; + var state = rule; + var ruleRegExps = []; + var matchTotal = 0; + var mapping = this.matchMappings[key] = {}; + + for ( var i = 0; i < state.length; i++) { + + if (state[i].regex instanceof RegExp) + state[i].regex = state[i].regex.toString().slice(1, -1); + + // Count number of matching groups. 2 extra groups from the full match + // And the catch-all on the end (used to force a match); + var matchcount = new RegExp("(?:(" + state[i].regex + ")|(.))").exec("a").length - 2; + + // Replace any backreferences and offset appropriately. + var adjustedregex = state[i].regex.replace(/\\([0-9]+)/g, function (match, digit) { + return "\\" + (parseInt(digit, 10) + matchTotal + 1); + }); + + if (matchcount > 1 && state[i].token.length !== matchcount-1) + throw new Error("Matching groups and length of the token array don't match in rule #" + i + " of state " + key); + + mapping[matchTotal] = { + rule: i, + len: matchcount + }; + matchTotal += matchcount; + + ruleRegExps.push(adjustedregex); + } + + this.regExps[key] = new RegExp("(?:(" + ruleRegExps.join(")|(") + ")|(.))", flag); + } +}; + +(function() { + + /** + * Tokenizer.getLineTokens() -> Object + * + * Returns an object containing two properties: `tokens`, which contains all the tokens; and `state`, the current state. + **/ + this.getLineTokens = function(line, startState) { + var currentState = startState; + var state = this.rules[currentState]; + var mapping = this.matchMappings[currentState]; + var re = this.regExps[currentState]; + re.lastIndex = 0; + + var match, tokens = []; + + var lastIndex = 0; + + var token = { + type: null, + value: "" + }; + + while (match = re.exec(line)) { + var type = "text"; + var rule = null; + var value = [match[0]]; + + for (var i = 0; i < match.length-2; i++) { + if (match[i + 1] === undefined) + continue; + + rule = state[mapping[i].rule]; + + if (mapping[i].len > 1) + value = match.slice(i+2, i+1+mapping[i].len); + + // compute token type + if (typeof rule.token == "function") + type = rule.token.apply(this, value); + else + type = rule.token; + + if (rule.next) { + currentState = rule.next; + state = this.rules[currentState]; + mapping = this.matchMappings[currentState]; + lastIndex = re.lastIndex; + + re = this.regExps[currentState]; + re.lastIndex = lastIndex; + } + break; + } + + if (value[0]) { + if (typeof type == "string") { + value = [value.join("")]; + type = [type]; + } + for (var i = 0; i < value.length; i++) { + if (!value[i]) + continue; + + if ((!rule || rule.merge || type[i] === "text") && token.type === type[i]) { + token.value += value[i]; + } else { + if (token.type) + tokens.push(token); + + token = { + type: type[i], + value: value[i] + }; + } + } + } + + if (lastIndex == line.length) + break; + + lastIndex = re.lastIndex; + } + + if (token.type) + tokens.push(token); + + return { + tokens : tokens, + state : currentState + }; + }; + +}).call(Tokenizer.prototype); + +exports.Tokenizer = Tokenizer; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mode/text_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) { +"use strict"; + +var lang = require("../lib/lang"); + +var TextHighlightRules = function() { + + // regexp must not have capturing parentheses + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [{ + token : "empty_line", + regex : '^$' + }, { + token : "text", + regex : ".+" + }] + }; +}; + +(function() { + + this.addRules = function(rules, prefix) { + for (var key in rules) { + var state = rules[key]; + for (var i=0; i + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mode/behaviour', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +var Behaviour = function() { + this.$behaviours = {}; +}; + +(function () { + + this.add = function (name, action, callback) { + switch (undefined) { + case this.$behaviours: + this.$behaviours = {}; + case this.$behaviours[name]: + this.$behaviours[name] = {}; + } + this.$behaviours[name][action] = callback; + } + + this.addBehaviours = function (behaviours) { + for (var key in behaviours) { + for (var action in behaviours[key]) { + this.add(key, action, behaviours[key][action]); + } + } + } + + this.remove = function (name) { + if (this.$behaviours && this.$behaviours[name]) { + delete this.$behaviours[name]; + } + } + + this.inherit = function (mode, filter) { + if (typeof mode === "function") { + var behaviours = new mode().getBehaviours(filter); + } else { + var behaviours = mode.getBehaviours(filter); + } + this.addBehaviours(behaviours); + } + + this.getBehaviours = function (filter) { + if (!filter) { + return this.$behaviours; + } else { + var ret = {} + for (var i = 0; i < filter.length; i++) { + if (this.$behaviours[filter[i]]) { + ret[filter[i]] = this.$behaviours[filter[i]]; + } + } + return ret; + } + } + +}).call(Behaviour.prototype); + +exports.Behaviour = Behaviour; +}); +ace.define('ace/unicode', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/* +XRegExp Unicode plugin pack: Categories 1.0 +(c) 2010 Steven Levithan +MIT License + +Uses the Unicode 5.2 character database + +This package for the XRegExp Unicode plugin enables the following Unicode categories (aka properties): + +L - Letter (the top-level Letter category is included in the Unicode plugin base script) + Ll - Lowercase letter + Lu - Uppercase letter + Lt - Titlecase letter + Lm - Modifier letter + Lo - Letter without case +M - Mark + Mn - Non-spacing mark + Mc - Spacing combining mark + Me - Enclosing mark +N - Number + Nd - Decimal digit + Nl - Letter number + No - Other number +P - Punctuation + Pd - Dash punctuation + Ps - Open punctuation + Pe - Close punctuation + Pi - Initial punctuation + Pf - Final punctuation + Pc - Connector punctuation + Po - Other punctuation +S - Symbol + Sm - Math symbol + Sc - Currency symbol + Sk - Modifier symbol + So - Other symbol +Z - Separator + Zs - Space separator + Zl - Line separator + Zp - Paragraph separator +C - Other + Cc - Control + Cf - Format + Co - Private use + Cs - Surrogate + Cn - Unassigned + +Example usage: + + \p{N} + \p{Cn} +*/ + + +// will be populated by addUnicodePackage +exports.packages = {}; + +addUnicodePackage({ + 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" +}); + +function addUnicodePackage (pack) { + var codePoint = /\w{4}/g; + for (var name in pack) + exports.packages[name] = pack[name].replace(codePoint, "\\u$&"); +}; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; + +/** + * class Document + * + * Contains the text of the document. Documents are controlled by a single [[EditSession `EditSession`]]. At its core, `Document`s are just an array of strings, with each row in the document matching up to the array index. + * + * + **/ + + /** + * new Document([text]) + * - text (String | Array): The starting text + * + * Creates a new `Document`. If `text` is included, the `Document` contains those strings; otherwise, it's empty. + * + **/ +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); + + /** + * Document.setValue(text) -> Void + * - text (String): The text to use + * + * Replaces all the lines in the current `Document` with the value of `text`. + **/ + 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); + }; + + /** + * Document.getValue() -> String + * + * Returns all the lines in the document as a single string, split by the new line character. + **/ + this.getValue = function() { + return this.getAllLines().join(this.getNewLineCharacter()); + }; + + /** + * Document.createAnchor(row, column) -> Anchor + * - row (Number): The row number to use + * - column (Number): The column number to use + * + * Creates a new `Anchor` to define a floating point in the document. + **/ + this.createAnchor = function(row, column) { + return new Anchor(this, row, column); + }; + + /** internal, hide + * Document.$split(text) -> [String] + * - text (String): The text to work with + * + ([String]): A String array, with each index containing a piece of the original `text` string. + * + * Splits a string of text on any newline (`\n`) or carriage-return ('\r') characters. + * + * + **/ + + // 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/); + }; + + + /** internal, hide + * Document.$detectNewLine(text) -> Void + * + * + **/ + this.$detectNewLine = function(text) { + var match = text.match(/^.*?(\r\n|\r|\n)/m); + if (match) { + this.$autoNewLine = match[1]; + } else { + this.$autoNewLine = "\n"; + } + }; + + /** + * Document.getNewLineCharacter() -> String + * + (String): If `newLineMode == windows`, `\r\n` is returned.
      + * If `newLineMode == unix`, `\n` is returned.
      + * If `newLineMode == auto`, the value of `autoNewLine` is returned. + * + * Returns the newline character that's being used, depending on the value of `newLineMode`. + * + * + * + **/ + 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"; + /** + * Document.setNewLineMode(newLineMode) -> Void + * - newLineMode(String): [The newline mode to use; can be either `windows`, `unix`, or `auto`]{: #Document.setNewLineMode.param} + * + * [Sets the new line mode.]{: #Document.setNewLineMode.desc} + **/ + this.setNewLineMode = function(newLineMode) { + if (this.$newLineMode === newLineMode) + return; + + this.$newLineMode = newLineMode; + }; + + /** + * Document.getNewLineMode() -> String + * + * [Returns the type of newlines being used; either `windows`, `unix`, or `auto`]{: #Document.getNewLineMode} + * + **/ + this.getNewLineMode = function() { + return this.$newLineMode; + }; + + /** + * Document.isNewLine(text) -> Boolean + * - text (String): The text to check + * + * Returns `true` if `text` is a newline character (either `\r\n`, `\r`, or `\n`). + * + **/ + this.isNewLine = function(text) { + return (text == "\r\n" || text == "\r" || text == "\n"); + }; + + /** + * Document.getLine(row) -> String + * - row (Number): The row index to retrieve + * + * Returns a verbatim copy of the given line as it is in the document + * + **/ + this.getLine = function(row) { + return this.$lines[row] || ""; + }; + + /** + * Document.getLines(firstRow, lastRow) -> [String] + * - firstRow (Number): The first row index to retrieve + * - lastRow (Number): The final row index to retrieve + * + * Returns an array of strings of the rows between `firstRow` and `lastRow`. This function is inclusive of `lastRow`. + * + **/ + this.getLines = function(firstRow, lastRow) { + return this.$lines.slice(firstRow, lastRow + 1); + }; + + /** + * Document.getAllLines() -> [String] + * + * 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()); + }; + + /** + * Document.getLength() -> Number + * + * Returns the number of rows in the document. + **/ + this.getLength = function() { + return this.$lines.length; + }; + + /** + * Document.getTextRange(range) -> String + * - range (Range): The range to work with + * + * [Given a range within the document, this function returns all the text within that range as a single string.]{: #Document.getTextRange.desc} + **/ + 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 = this.getLines(range.start.row+1, range.end.row-1); + lines.unshift((this.$lines[range.start.row] || "").substring(range.start.column)); + lines.push((this.$lines[range.end.row] || "").substring(0, range.end.column)); + return lines.join(this.getNewLineCharacter()); + } + }; + + /** internal, hide + * Document.$clipPosition(position) -> Number + * + * + **/ + 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; + }; + + /** + * Document.insert(position, text) -> Number + * - position (Number): The position to start inserting at + * - text (String): A chunk of text to insert + * + (Number): The position of the last line of `text`. If the length of `text` is 0, this function simply returns `position`. + * Inserts a block of `text` and the indicated `position`. + * + * + **/ + this.insert = function(position, text) { + if (!text || text.length === 0) + return position; + + position = this.$clipPosition(position); + + // only detect new lines if the document has no line break yet + 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; + }; + + /** + * Document.insertLines(row, lines) -> Object + * - row (Number): The index of the row to insert at + * - lines (Array): An array of strings + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}```
      + * If `lines` is empty, this function returns an object containing the current row, and column, like this:
      + * ```{row: row, column: 0}``` + * + * Inserts the elements in `lines` into the document, starting at the row index given by `row`. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.insertNewLine(position) -> Object + * - position (String): The position to insert at + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}``` + * + * Inserts a new line into the document at the current row's `position`. This method also triggers the `'change'` event. + * + * + * + **/ + 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; + }; + + /** + * Document.insertInLine(position, text) -> Object | Number + * - position (Number): The position to insert at + * - text (String): A chunk of text + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}``` + * + (Number): If `text` is empty, this function returns the value of `position` + * + * Inserts `text` into the `position` at the current row. This method also triggers the `'change'` event. + * + * + * + **/ + 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; + }; + + /** + * Document.remove(range) -> Object + * - range (Range): A specified Range to remove + * + (Object): Returns the new `start` property of the range, which contains `startRow` and `startColumn`. If `range` is empty, this function returns the unmodified value of `range.start`. + * + * Removes the `range` from the document. + * + * + **/ + 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; + }; + + /** + * Document.removeInLine(row, startColumn, endColumn) -> Object + * - row (Number): The row to remove from + * - startColumn (Number): The column to start removing at + * - endColumn (Number): The column to stop removing at + * + (Object): Returns an object containing `startRow` and `startColumn`, indicating the new row and column values.
      If `startColumn` is equal to `endColumn`, this function returns nothing. + * + * Removes the specified columns from the `row`. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.removeLines(firstRow, lastRow) -> [String] + * - firstRow (Number): The first row to be removed + * - lastRow (Number): The last row to be removed + * + ([String]): Returns all the removed lines. + * + * Removes a range of full lines. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.removeNewLine(row) -> Void + * - row (Number): The row to check + * + * Removes the new line between `row` and the row immediately following it. This method also triggers the `'change'` event. + * + **/ + 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 }); + }; + + /** + * Document.replace(range, text) -> Object + * - range (Range): A specified Range to replace + * - text (String): The new text to use as a replacement + * + (Object): Returns an object containing the final row and column, like this: + * {row: endRow, column: 0} + * If the text and range are empty, this function returns an object containing the current `range.start` value. + * If the text is the exact same as what currently exists, this function returns an object containing the current `range.end` value. + * + * Replaces a range in the document with the new `text`. + * + **/ + 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; + }; + + /** + * Document.applyDeltas(deltas) -> Void + * + * Applies all the changes previously accumulated. These can be either `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + **/ + this.applyDeltas = function(deltas) { + for (var i=0; i Void + * + * Reverts any changes previously applied. These can be either `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + **/ + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; + +/** + * class Anchor + * + * Defines the floating pointer in the document. Whenever text is inserted or deleted before the cursor, the position of the cursor is updated + * + **/ + +/** + * new Anchor(doc, row, column) + * - doc (Document): The document to associate with the anchor + * - row (Number): The starting row position + * - column (Number): The starting column position + * + * Creates a new `Anchor` and associates it with a document. + * + **/ + +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); + + /** + * Anchor.getPosition() -> Object + * + * Returns an object identifying the `row` and `column` position of the current anchor. + * + **/ + + this.getPosition = function() { + return this.$clipPositionToDocument(this.row, this.column); + }; + + /** + * Anchor.getDocument() -> Document + * + * Returns the current document. + * + **/ + + this.getDocument = function() { + return this.document; + }; + + /** + * Anchor@onChange(e) + * - e (Event): Contains data about the event + * + * Fires whenever the anchor position changes. Events that can trigger this function include `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + * + **/ + + 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); + }; + + /** + * Anchor.setPosition(row, column, noClip) + * - row (Number): The row index to move the anchor to + * - column (Number): The column index to move the anchor to + * - noClip (Boolean): Identifies if you want the position to be clipped + * + * Sets the anchor position to the specified row and column. If `noClip` is `true`, the position is not clipped. + * + **/ + + 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 + }); + }; + + /** + * Anchor.detach() + * + * When called, the `'change'` event listener is removed. + * + **/ + + this.detach = function() { + this.document.removeEventListener("change", this.$onChange); + }; + + /** internal, hide + * Anchor.clipPositionToDocument(row, column) + * - row (Number): The row index to clip the anchor to + * - column (Number): The column index to clip the anchor to + * + * Clips the anchor position to the specified row and column. + * + **/ + + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/background_tokenizer', ['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; + +/** + * class BackgroundTokenizer + * + * Tokenizes the current [[Document `Document`]] in the background, and caches the tokenized rows for future use. If a certain row is changed, everything below that row is re-tokenized. + * + **/ + +/** + * new BackgroundTokenizer(tokenizer, editor) + * - tokenizer (Tokenizer): The tokenizer to use + * - editor (Editor): The editor to associate with + * + * Creates a new `BackgroundTokenizer` object. + * + * + **/ + +var BackgroundTokenizer = function(tokenizer, editor) { + this.running = false; + this.lines = []; + this.currentLine = 0; + this.tokenizer = tokenizer; + + var self = this; + + this.$worker = function() { + if (!self.running) { return; } + + var workerStart = new Date(); + var startLine = self.currentLine; + var doc = self.doc; + + var processedLines = 0; + + var len = doc.getLength(); + while (self.currentLine < len) { + self.lines[self.currentLine] = self.$tokenizeRows(self.currentLine, self.currentLine)[0]; + self.currentLine++; + + // only check every 5 lines + processedLines += 1; + if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) { + self.fireUpdateEvent(startLine, self.currentLine-1); + self.running = setTimeout(self.$worker, 20); + return; + } + } + + self.running = false; + + self.fireUpdateEvent(startLine, len - 1); + }; +}; + +(function(){ + + oop.implement(this, EventEmitter); + + /** + * BackgroundTokenizer.setTokenizer(tokenizer) + * - tokenizer (Tokenizer): The new tokenizer to use + * + * Sets a new tokenizer for this object. + * + **/ + + this.setTokenizer = function(tokenizer) { + this.tokenizer = tokenizer; + this.lines = []; + + this.start(0); + }; + + /** + * BackgroundTokenizer.setDocument(doc) + * - doc (Document): The new document to associate with + * + * Sets a new document to associate with this object. + * + **/ + + this.setDocument = function(doc) { + this.doc = doc; + this.lines = []; + + this.stop(); + }; + + /** + * BackgroundTokenizer.fireUpdateEvent(firstRow, lastRow) + * - firstRow (Number): The starting row region + * - lastRow (Number): The final row region + * + * Emits the `'update'` event. `firstRow` and `lastRow` are used to define the boundaries of the region to be updated. + * + **/ + + this.fireUpdateEvent = function(firstRow, lastRow) { + var data = { + first: firstRow, + last: lastRow + }; + this._emit("update", {data: data}); + }; + + /** + * BackgroundTokenizer.start(startRow) + * - startRow (Number): The row to start at + * + * Starts tokenizing at the row indicated. + * + **/ + + this.start = function(startRow) { + this.currentLine = Math.min(startRow || 0, this.currentLine, + this.doc.getLength()); + + // remove all cached items below this line + this.lines.splice(this.currentLine, this.lines.length); + + this.stop(); + // pretty long delay to prevent the tokenizer from interfering with the user + this.running = setTimeout(this.$worker, 700); + }; + + /** + * BackgroundTokenizer.stop() + * + * Stops tokenizing. + * + **/ + + this.stop = function() { + if (this.running) + clearTimeout(this.running); + this.running = false; + }; + + /** related to: BackgroundTokenizer.$tokenizeRows + * BackgroundTokenizer.getTokens(firstRow, lastRow) -> [Object] + * - firstRow (Number): The row to start at + * - lastRow (Number): The row to finish at + * + * Starts tokenizing at the row indicated. Returns a list of objects of the tokenized rows. + * + **/ + + this.getTokens = function(firstRow, lastRow) { + return this.$tokenizeRows(firstRow, lastRow); + }; + + /** + * BackgroundTokenizer.getState(row) -> String + * - row (Number): The row to start at + * + * [Returns the state of tokenization for a row.]{: #BackgroundTokenizer.getState} + * + **/ + + this.getState = function(row) { + return this.$tokenizeRows(row, row)[0].state; + }; + + /** + * BackgroundTokenizer.$tokenizeRows(firstRow, lastRow) -> [Object] + * - startRow (Number): The row to start at + * - lastRow (Number): The row to finish at + * + ([Object]): A list of the tokenized rows. Each item in the list is an object with two properties, `state` and `start`. + * + * Tokenizes all the rows within the specified region. + * + * + **/ + this.$tokenizeRows = function(firstRow, lastRow) { + if (!this.doc || isNaN(firstRow) || isNaN(lastRow)) + return [{'state':'start','tokens':[]}]; + + var rows = []; + + // determine start state + var state = "start"; + var doCache = false; + if (firstRow > 0 && this.lines[firstRow - 1]) { + state = this.lines[firstRow - 1].state; + doCache = true; + } else if (firstRow == 0) { + state = "start"; + doCache = true; + } else if (this.lines.length > 0) { + // Guess that we haven't changed state. + state = this.lines[this.lines.length-1].state; + } + + var lines = this.doc.getLines(firstRow, lastRow); + for (var row=firstRow; row<=lastRow; row++) { + if (!this.lines[row]) { + var tokens = this.tokenizer.getLineTokens(lines[row-firstRow] || "", state); + var state = tokens.state; + rows.push(tokens); + + if (doCache) { + this.lines[row] = tokens; + } + } + else { + var tokens = this.lines[row]; + state = tokens.state; + rows.push(tokens); + } + } + return rows; + }; + +}).call(BackgroundTokenizer.prototype); + +exports.BackgroundTokenizer = BackgroundTokenizer; +}); +/* 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): + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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("../range").Range; +var FoldLine = require("./fold_line").FoldLine; +var Fold = require("./fold").Fold; +var TokenIterator = require("../token_iterator").TokenIterator; + +function Folding() { + /* + * Looks up a fold at a given row/column. Possible values for side: + * -1: ignore a fold if fold.start = row/column + * +1: ignore a fold if fold.end = row/column + */ + this.getFoldAt = function(row, column, side) { + 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]; + if (fold.range.contains(row, column)) { + if (side == 1 && fold.range.isEnd(row, column)) { + continue; + } else if (side == -1 && fold.range.isStart(row, column)) { + continue; + } + return fold; + } + } + }; + + /* + * Returns all folds in the given range. Note, that this will return folds + * + */ + this.getFoldsInRange = function(range) { + range = range.clone(); + var start = range.start; + var end = range.end; + var foldLines = this.$foldData; + var foundFolds = []; + + start.column += 1; + end.column -= 1; + + for (var i = 0; i < foldLines.length; i++) { + var cmp = foldLines[i].range.compareRange(range); + if (cmp == 2) { + // Range is before foldLine. No intersection. This means, + // there might be other foldLines that intersect. + continue; + } + else if (cmp == -2) { + // Range is after foldLine. There can't be any other foldLines then, + // so let's give up. + break; + } + + var folds = foldLines[i].folds; + for (var j = 0; j < folds.length; j++) { + var fold = folds[j]; + cmp = fold.range.compareRange(range); + if (cmp == -2) { + break; + } else if (cmp == 2) { + continue; + } else + // WTF-state: Can happen due to -1/+1 to start/end column. + if (cmp == 42) { + break; + } + foundFolds.push(fold); + } + } + 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. + * E.g. + * foob|arwolrd -> "bar" + * foobarwol|rd -> "world" + * foobarwolrd -> + * + * where | means the position of row/column + * + * The trim option determs if the return string should be trimed according + * to the "side" passed with the trim value: + * + * E.g. + * foob|arwolrd -trim=-1> "b" + * foobarwol|rd -trim=+1> "rld" + * fo|obarwolrd -trim=00> "foo" + */ + this.getFoldStringAt = function(row, column, trim, foldLine) { + 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++) { + fold = foldLine.folds[i]; + var cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + str = this + .getLine(fold.start.row) + .substring(lastFold.end.column, fold.start.column); + break; + } + else if (cmp === 0) { + return null; + } + lastFold = fold; + } + if (!str) + str = this.getLine(fold.start.row).substring(lastFold.end.column); + + if (trim == -1) + return str.substring(0, column - lastFold.end.column); + else if (trim == 1) + return str.substring(column - lastFold.end.column); + else + return str; + }; + + this.getFoldLine = function(docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { + return foldLine; + } else if (foldLine.end.row > docRow) { + return null; + } + } + return null; + }; + + // returns the fold which starts after or contains docRow + this.getNextFoldLine = function(docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.end.row >= docRow) { + return foldLine; + } + } + return null; + }; + + this.getFoldedRowCount = function(first, last) { + var foldData = this.$foldData, rowCount = last-first+1; + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i], + end = foldLine.end.row, + start = foldLine.start.row; + if (end >= last) { + if(start < last) { + if(start >= first) + rowCount -= last-start; + else + rowCount = 0;//in one fold + } + break; + } else if(end >= first){ + if (start >= first) //fold inside range + rowCount -= end-start; + else + rowCount -= end-first+1; + } + } + return rowCount; + }; + + this.$addFoldLine = function(foldLine) { + this.$foldData.push(foldLine); + this.$foldData.sort(function(a, b) { + return a.start.row - b.start.row; + }); + return foldLine; + }; + + /* + * Adds a new fold. + * + * @returns + * The new created Fold object or an existing fold object in case the + * passed in range fits an existing fold exactly. + */ + this.addFold = function(placeholder, range) { + var foldData = this.$foldData; + var added = false; + var fold; + + if (placeholder instanceof Fold) + 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"; + + if (startRow == endRow && endColumn - startColumn < 2) + throw "The range has to be at least 2 characters width"; + + var startFold = this.getFoldAt(startRow, startColumn, 1); + var endFold = this.getFoldAt(endRow, endColumn, -1); + if (startFold && endFold == startFold) + return startFold.addSubFold(fold); + + if ( + (startFold && !startFold.range.isStart(startRow, startColumn)) + || (endFold && !endFold.range.isEnd(endRow, endColumn)) + ) { + throw "A fold can't intersect already existing fold" + fold.range + startFold.range; + } + + // Check if there are folds in the range we create the new fold for. + var folds = this.getFoldsInRange(fold.range); + if (folds.length > 0) { + // Remove the folds from fold data. + this.removeFolds(folds); + // Add the removed folds as subfolds on the new fold. + fold.subFolds = folds; + } + + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (endRow == foldLine.start.row) { + foldLine.addFold(fold); + added = true; + break; + } + else if (startRow == foldLine.end.row) { + foldLine.addFold(fold); + added = true; + if (!fold.sameRow) { + // Check if we might have to merge two FoldLines. + var foldLineNext = foldData[i + 1]; + if (foldLineNext && foldLineNext.start.row == endRow) { + // We need to merge! + foldLine.merge(foldLineNext); + break; + } + } + break; + } + else if (endRow <= foldLine.start.row) { + break; + } + } + + if (!added) + foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); + + if (this.$useWrapMode) + this.$updateWrapData(foldLine.start.row, foldLine.start.row); + + // Notify that fold data has changed. + this.$modified = true; + this._emit("changeFold", { data: fold }); + + return fold; + }; + + this.addFolds = function(folds) { + folds.forEach(function(fold) { + this.addFold(fold); + }, this); + }; + + this.removeFold = function(fold) { + var foldLine = fold.foldLine; + var startRow = foldLine.start.row; + var endRow = foldLine.end.row; + + 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) { + foldLines.splice(foldLines.indexOf(foldLine), 1); + } else + // If the fold is the last fold of the foldLine, just remove it. + if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { + folds.pop(); + foldLine.end.row = folds[folds.length - 1].end.row; + foldLine.end.column = folds[folds.length - 1].end.column; + } else + // If the fold is the first fold of the foldLine, just remove it. + if (foldLine.range.isStart(fold.start.row, fold.start.column)) { + folds.shift(); + foldLine.start.row = folds[0].start.row; + foldLine.start.column = folds[0].start.column; + } else + // We know there are more then 2 folds and the fold is not at the edge. + // This means, the fold is somewhere in between. + // + // If the fold is in one row, we just can remove it. + if (fold.sameRow) { + 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. newFoldLine is the second part + { + var newFoldLine = foldLine.split(fold.start.row, fold.start.column); + folds = newFoldLine.folds; + folds.shift(); + newFoldLine.start.row = folds[0].start.row; + newFoldLine.start.column = folds[0].start.column; + } + + if (this.$useWrapMode) { + this.$updateWrapData(startRow, endRow); + } + + // Notify that fold data has changed. + this.$modified = true; + this._emit("changeFold", { data: fold }); + }; + + this.removeFolds = function(folds) { + // We need to clone the folds array passed in as it might be the folds + // array of a fold line and as we call this.removeFold(fold), folds + // are removed from folds and changes the current index. + var cloneFolds = []; + for (var i = 0; i < folds.length; i++) { + cloneFolds.push(folds[i]); + } + + cloneFolds.forEach(function(fold) { + this.removeFold(fold); + }, this); + this.$modified = true; + }; + + this.expandFold = function(fold) { + this.removeFold(fold); + fold.subFolds.forEach(function(fold) { + 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 + * folded parts such that some parts of the line is still visible. + **/ + this.isRowFolded = function(docRow, startFoldRow) { + return !!this.getFoldLine(docRow, startFoldRow); + }; + + this.getRowFoldEnd = function(docRow, startFoldRow) { + var foldLine = this.getFoldLine(docRow, startFoldRow); + return (foldLine + ? foldLine.end.row + : docRow); + }; + + this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) { + if (startRow == null) { + startRow = foldLine.start.row; + startColumn = 0; + } + + if (endRow == null) { + endRow = foldLine.end.row; + endColumn = this.getLine(endRow).length; + } + + // Build the textline using the FoldLine walker. + var doc = this.doc; + var textLine = ""; + + foldLine.walk(function(placeholder, row, column, lastColumn) { + if (row < startRow) { + return; + } else if (row == startRow) { + if (column < startColumn) { + return; + } + lastColumn = Math.max(startColumn, lastColumn); + } + if (placeholder) { + textLine += placeholder; + } else { + textLine += doc.getLine(row).substring(lastColumn, column); + } + }.bind(this), endRow, endColumn); + return textLine; + }; + + this.getDisplayLine = function(row, endColumn, startRow, startColumn) { + var foldLine = this.getFoldLine(row); + + if (!foldLine) { + var line; + line = this.doc.getLine(row); + return line.substring(startColumn || 0, endColumn || line.length); + } else { + return this.getFoldDisplayLine( + foldLine, row, endColumn, startRow, startColumn); + } + }; + + this.$cloneFoldData = function() { + var fd = []; + fd = this.$foldData.map(function(foldLine) { + var folds = foldLine.folds.map(function(fold) { + return fold.clone(); + }); + return new FoldLine(fd, folds); + }); + + 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 || this.getLength(); + 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.isEqual(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: + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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): + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/edit_session/fold_line', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { +"use strict"; + +var Range = require("../range").Range; + +/* + * If an array is passed in, the folds are expected to be sorted already. + */ +function FoldLine(foldData, folds) { + this.foldData = foldData; + if (Array.isArray(folds)) { + this.folds = folds; + } else { + folds = this.folds = [ folds ]; + } + + var last = folds[folds.length - 1] + this.range = new Range(folds[0].start.row, folds[0].start.column, + last.end.row, last.end.column); + this.start = this.range.start; + this.end = this.range.end; + + this.folds.forEach(function(fold) { + fold.setFoldLine(this); + }, this); +} + +(function() { + /* + * Note: This doesn't update wrapData! + */ + this.shiftRow = function(shift) { + this.start.row += shift; + this.end.row += shift; + this.folds.forEach(function(fold) { + fold.start.row += shift; + fold.end.row += shift; + }); + } + + this.addFold = function(fold) { + if (fold.sameRow) { + if (fold.start.row < this.startRow || fold.endRow > this.endRow) { + throw "Can't add a fold to this FoldLine as it has no connection"; + } + this.folds.push(fold); + this.folds.sort(function(a, b) { + return -a.range.compareEnd(b.start.row, b.start.column); + }); + if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } + } else if (fold.start.row == this.end.row) { + this.folds.push(fold); + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } else if (fold.end.row == this.start.row) { + this.folds.unshift(fold); + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } else { + throw "Trying to add fold to FoldRow that doesn't have a matching row"; + } + fold.foldLine = this; + } + + this.containsRow = function(row) { + return row >= this.start.row && row <= this.end.row; + } + + this.walk = function(callback, endRow, endColumn) { + var lastEnd = 0, + folds = this.folds, + fold, + comp, stop, isNewRow = true; + + if (endRow == null) { + endRow = this.end.row; + endColumn = this.end.column; + } + + for (var i = 0; i < folds.length; i++) { + fold = folds[i]; + + comp = fold.range.compareStart(endRow, endColumn); + // This fold is after the endRow/Column. + if (comp == -1) { + callback(null, endRow, endColumn, lastEnd, isNewRow); + return; + } + + stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); + stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); + + // If the user requested to stop the walk or endRow/endColumn is + // inside of this fold (comp == 0), then end here. + if (stop || comp == 0) { + return; + } + + // Note the new lastEnd might not be on the same line. However, + // it's the callback's job to recognize this. + isNewRow = !fold.sameRow; + lastEnd = fold.end.column; + } + callback(null, endRow, endColumn, lastEnd, isNewRow); + } + + this.getNextFoldTo = function(row, column) { + var fold, cmp; + for (var i = 0; i < this.folds.length; i++) { + fold = this.folds[i]; + cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + return { + fold: fold, + kind: "after" + }; + } else if (cmp == 0) { + return { + fold: fold, + kind: "inside" + } + } + } + return null; + } + + this.addRemoveChars = function(row, column, len) { + var ret = this.getNextFoldTo(row, column), + fold, folds; + if (ret) { + fold = ret.fold; + if (ret.kind == "inside" + && fold.start.column != column + && fold.start.row != row) + { + //throwing here breaks whole editor + //@todo properly handle this + window.console && window.console.log(row, column, fold); + } else if (fold.start.row == row) { + folds = this.folds; + var i = folds.indexOf(fold); + if (i == 0) { + this.start.column += len; + } + for (i; i < folds.length; i++) { + fold = folds[i]; + fold.start.column += len; + if (!fold.sameRow) { + return; + } + fold.end.column += len; + } + this.end.column += len; + } + } + } + + this.split = function(row, column) { + var fold = this.getNextFoldTo(row, column).fold, + folds = this.folds; + var foldData = this.foldData; + + if (!fold) { + return null; + } + var i = folds.indexOf(fold); + var foldBefore = folds[i - 1]; + this.end.row = foldBefore.end.row; + this.end.column = foldBefore.end.column; + + // Remove the folds after row/column and create a new FoldLine + // containing these removed folds. + folds = folds.splice(i, folds.length - i); + + var newFoldLine = new FoldLine(foldData, folds); + foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); + return newFoldLine; + } + + this.merge = function(foldLineNext) { + var folds = foldLineNext.folds; + for (var i = 0; i < folds.length; i++) { + this.addFold(folds[i]); + } + // Remove the foldLineNext - no longer needed, as + // it's merged now with foldLineNext. + var foldData = this.foldData; + foldData.splice(foldData.indexOf(foldLineNext), 1); + } + + this.toString = function() { + var ret = [this.range.toString() + ": [" ]; + + this.folds.forEach(function(fold) { + ret.push(" " + fold.toString()); + }); + ret.push("]") + return ret.join("\n"); + } + + this.idxToPosition = function(idx) { + var lastFoldEndColumn = 0; + var fold; + + for (var i = 0; i < this.folds.length; i++) { + var fold = this.folds[i]; + + idx -= fold.start.column - lastFoldEndColumn; + if (idx < 0) { + return { + row: fold.start.row, + column: fold.start.column + idx + }; + } + + idx -= fold.placeholder.length; + if (idx < 0) { + return fold.start; + } + + lastFoldEndColumn = fold.end.column; + } + + return { + row: this.end.row, + column: this.end.column + idx + }; + } +}).call(FoldLine.prototype); + +exports.FoldLine = FoldLine; +}); +/* 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): + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/edit_session/fold', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/* + * Simple fold-data struct. + **/ +var Fold = exports.Fold = function(range, placeholder) { + this.foldLine = null; + this.placeholder = placeholder; + this.range = range; + this.start = range.start; + this.end = range.end; + + this.sameRow = range.start.row == range.end.row; + this.subFolds = []; +}; + +(function() { + + this.toString = function() { + return '"' + this.placeholder + '" ' + this.range.toString(); + }; + + this.setFoldLine = function(foldLine) { + this.foldLine = foldLine; + this.subFolds.forEach(function(fold) { + fold.setFoldLine(foldLine); + }); + }; + + this.clone = function() { + var range = this.range.clone(); + var fold = new Fold(range, this.placeholder); + this.subFolds.forEach(function(subFold) { + fold.subFolds.push(subFold.clone()); + }); + return fold; + }; + + this.addSubFold = function(fold) { + if (this.range.isEqual(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: + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/token_iterator', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/** + * class TokenIterator + * + * This class provides an essay way to treat the document as a stream of tokens, and provides methods to iterate over these tokens. + * + **/ + +/** + * new TokenIterator(session, initialRow, initialColumn) + * - session (EditSession): The session to associate with + * - initialRow (Number): The row to start the tokenizing at + * - initialColumn (Number): The column to start the tokenizing at + * + * Creates a new token iterator object. The inital token index is set to the provided row and column coordinates. + * + **/ +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() { + + /** + * TokenIterator.stepBackward() -> [String] + * + (String): If the current point is not at the top of the file, this function returns `null`. Otherwise, it returns an array of the tokenized strings. + * + * Tokenizes all the items from the current point to the row prior in the document. + **/ + 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]; + }; + + /** + * TokenIterator.stepForward() -> String + * + * Tokenizes all the items from the current point until the next row in the document. If the current point is at the end of the file, this function returns `null`. Otherwise, it returns the tokenized string. + **/ + 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]; + }; + + /** + * TokenIterator.getCurrentToken() -> String + * + * Returns the current tokenized string. + * + **/ + this.getCurrentToken = function () { + return this.$rowTokens[this.$tokenIndex]; + }; + + /** + * TokenIterator.getCurrentTokenRow() -> Number + * + * Returns the current row. + * + **/ + this.getCurrentTokenRow = function () { + return this.$row; + }; + + /** + * TokenIterator.getCurrentTokenColumn() -> Number + * + * Returns the current column. + * + **/ + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/edit_session/bracket_match', ['require', 'exports', 'module' , 'ace/token_iterator'], function(require, exports, module) { +"use strict"; + +var TokenIterator = require("../token_iterator").TokenIterator; + +/** + * class BracketMatch + * + * + * + * + **/ + +/** + * new BracketMatch(position) + * - platform (String): Identifier for the platform; must be either `'mac'` or `'win'` + * - commands (Array): A list of commands + * + * TODO + * + * + **/ +function BracketMatch() { + + /** + * new findMatchingBracket(position) + * - position (Number): Identifier for the platform; must be either `'mac'` or `'win'` + * - commands (Array): A list of commands + * + * TODO + * + * + **/ + 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/search', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/range'], function(require, exports, module) { +"use strict"; + +var lang = require("./lib/lang"); +var oop = require("./lib/oop"); +var Range = require("./range").Range; + +/** + * class Search + * + * A class designed to handle all sorts of text searches within a [[Document `Document`]]. + * + **/ + +/** + * new Search() + * + * Creates a new `Search` object. The search options contain the following defaults: + * + * * `needle`: `""` + * * `backwards`: `false` + * * `wrap`: `false` + * * `caseSensitive`: `false` + * * `wholeWord`: `false` + * * `scope`: `ALL` + * * `regExp`: `false` + * +**/ + +var Search = function() { + this.$options = { + needle: "", + backwards: false, + wrap: false, + caseSensitive: false, + wholeWord: false, + scope: Search.ALL, + regExp: false + }; +}; + +Search.ALL = 1; +Search.SELECTION = 2; + +(function() { + + /** + * Search.set(options) -> Search + * - options (Object): An object containing all the new search properties + * + * Sets the search options via the `options` parameter. + * + **/ + this.set = function(options) { + oop.mixin(this.$options, options); + return this; + }; + + /** + * Search.getOptions() -> Object + * + * [Returns an object containing all the search options.]{: #Search.getOptions} + * + **/ + this.getOptions = function() { + return lang.copyObject(this.$options); + }; + + /** + * Search.find(session) -> Range + * - session (EditSession): The session to search with + * + * Searches for `options.needle`. If found, this method returns the [[Range `Range`]] where the text first occurs. If `options.backwards` is `true`, the search goes backwards in the session. + * + **/ + this.find = function(session) { + if (!this.$options.needle) + return null; + + if (this.$options.backwards) { + var iterator = this.$backwardMatchIterator(session); + } else { + iterator = this.$forwardMatchIterator(session); + } + + var firstRange = null; + iterator.forEach(function(range) { + firstRange = range; + return true; + }); + + return firstRange; + }; + + /** + * Search.findAll(session) -> [Range] + * - session (EditSession): The session to search with + * + * Searches for all occurances `options.needle`. If found, this method returns an array of [[Range `Range`s]] where the text first occurs. If `options.backwards` is `true`, the search goes backwards in the session. + * + **/ + this.findAll = function(session) { + var options = this.$options; + if (!options.needle) + return []; + + 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; + }; + + /** + * Search.replace(input, replacement) -> String + * - input (String): The text to search in + * - replacement (String): The replacing text + * + (String): If `options.regExp` is `true`, this function returns `input` with the replacement already made. Otherwise, this function just returns `replacement`.
      + * If `options.needle` was not found, this function returns `null`. + * + * Searches for `options.needle` in `input`, and, if found, replaces it with `replacement`. + * + * + * + **/ + this.replace = function(input, replacement) { + var re = this.$assembleRegExp(); + var match = re.exec(input); + if (match && match[0].length == input.length) { + if (this.$options.regExp) { + return input.replace(re, replacement); + } else { + return replacement; + } + } else { + return null; + } + }; + + /** internal, hide + * Search.$forwardMatchIterator(session) -> String | Boolean + * - session (EditSession): The session to search with + * + * + * + **/ + this.$forwardMatchIterator = function(session) { + var re = this.$assembleRegExp(); + var self = this; + + return { + forEach: function(callback) { + self.$forwardLineIterator(session).forEach(function(line, startIndex, row) { + if (startIndex) { + line = line.substring(startIndex); + } + + var matches = []; + + line.replace(re, function(str) { + var offset = arguments[arguments.length-2]; + matches.push({ + str: str, + offset: startIndex + offset + }); + return str; + }); + + for (var i=0; i String + * - session (EditSession): The session to search with + * + * + * + **/ + this.$backwardMatchIterator = function(session) { + var re = this.$assembleRegExp(); + var self = this; + + return { + forEach: function(callback) { + self.$backwardLineIterator(session).forEach(function(line, startIndex, row) { + if (startIndex) { + line = line.substring(startIndex); + } + + var matches = []; + + line.replace(re, function(str, offset) { + matches.push({ + str: str, + offset: startIndex + offset + }); + return str; + }); + + for (var i=matches.length-1; i>= 0; i--) { + var match = matches[i]; + var range = self.$rangeFromMatch(row, match.offset, match.str.length); + if (callback(range)) + return true; + } + }); + } + }; + }; + + this.$rangeFromMatch = function(row, column, length) { + return new Range(row, column, row, column+length); + }; + + this.$assembleRegExp = function() { + if (this.$options.regExp) { + var needle = this.$options.needle; + } else { + needle = lang.escapeRegExp(this.$options.needle); + } + + if (this.$options.wholeWord) { + needle = "\\b" + needle + "\\b"; + } + + var modifier = "g"; + if (!this.$options.caseSensitive) { + modifier += "i"; + } + + var re = new RegExp(needle, modifier); + return re; + }; + + this.$forwardLineIterator = function(session) { + var searchSelection = this.$options.scope == Search.SELECTION; + + 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; + var lastRow = searchSelection ? range.end.row : session.getLength() - 1; + + var wrap = this.$options.wrap; + var inWrap = false; + + function getLine(row) { + var line = session.getLine(row); + if (searchSelection && row == range.end.row) { + line = line.substring(0, range.end.column); + } + if (inWrap && row == start.row) { + line = line.substring(0, start.column); + } + return line; + } + + return { + forEach: function(callback) { + var row = start.row; + + var line = getLine(row); + var startIndex = start.column; + + var stop = false; + inWrap = false; + + while (!callback(line, startIndex, row)) { + + if (stop) { + return; + } + + row++; + startIndex = 0; + + if (row > lastRow) { + if (wrap) { + row = firstRow; + startIndex = firstColumn; + inWrap = true; + } else { + return; + } + } + + if (row == start.row) + stop = true; + + line = getLine(row); + } + } + }; + }; + + this.$backwardLineIterator = function(session) { + var searchSelection = this.$options.scope == Search.SELECTION; + + 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; + var lastRow = searchSelection ? range.end.row : session.getLength() - 1; + + var wrap = this.$options.wrap; + + return { + forEach : function(callback) { + var row = start.row; + + var line = session.getLine(row).substring(0, start.column); + var startIndex = 0; + var stop = false; + var inWrap = false; + + while (!callback(line, startIndex, row)) { + + if (stop) + return; + + row--; + startIndex = 0; + + if (row < firstRow) { + if (wrap) { + row = lastRow; + inWrap = true; + } else { + return; + } + } + + if (row == start.row) + stop = true; + + line = session.getLine(row); + if (searchSelection) { + if (row == firstRow) + startIndex = firstColumn; + else if (row == lastRow) + line = line.substring(0, range.end.column); + } + + if (inWrap && row == start.row) + startIndex = start.column; + } + } + }; + }; + +}).call(Search.prototype); + +exports.Search = Search; +}); +ace.define('ace/commands/command_manager', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/keyboard/hash_handler', 'ace/lib/event_emitter'], function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var HashHandler = require("../keyboard/hash_handler").HashHandler; +var EventEmitter = require("../lib/event_emitter").EventEmitter; + +/** + * class CommandManager + * + * + * + * + **/ + +/** + * new CommandManager(platform, commands) + * - platform (String): Identifier for the platform; must be either `'mac'` or `'win'` + * - commands (Array): A list of commands + * + * TODO + * + * + **/ + +var CommandManager = function(platform, commands) { + this.platform = platform; + this.commands = {}; + this.commmandKeyBinding = {}; + + this.addCommands(commands); + + this.setDefaultHandler("exec", function(e) { + return e.command.exec(e.editor, e.args || {}); + }); +}; + +oop.inherits(CommandManager, HashHandler); + +(function() { + + oop.implement(this, EventEmitter); + + 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; + + try { + var retvalue = this._emit("exec", { + editor: editor, + command: command, + args: args + }); + } catch (e) { + window.console && window.console.log(e); + return true; + } + + return retvalue === false ? false : true; + }; + + this.toggleRecording = function() { + if (this.$inReplay) + return; + if (this.recording) { + this.macro.pop(); + this.removeEventListener("exec", this.$addCommandToMacro); + + if (!this.macro.length) + this.macro = this.oldMacro; + + return this.recording = false; + } + if (!this.$addCommandToMacro) { + this.$addCommandToMacro = function(e) { + this.macro.push([e.command, e.args]); + }.bind(this); + } + + this.oldMacro = this.macro; + this.macro = []; + this.on("exec", this.$addCommandToMacro); + 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; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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): + * Fabian Jakobs + * 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 ***** */ + +ace.define('ace/keyboard/hash_handler', ['require', 'exports', 'module' , 'ace/lib/keys'], function(require, exports, module) { +"use strict"; + +var keyUtil = require("../lib/keys"); + +function HashHandler(config, platform) { + this.platform = platform; + this.commands = {}; + this.commmandKeyBinding = {}; + + this.addCommands(config); +}; + +(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]; + + // exhaustive 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.bindKey = function(key, command) { + if(!key) + return; + + var ckb = this.commmandKeyBinding; + key.split("|").forEach(function(keyPart) { + var binding = this.parseKeys(keyPart, command); + var hashId = binding.hashId; + (ckb[hashId] || (ckb[hashId] = {}))[binding.key] = command; + }, this); + }; + + this.addCommands = function(commands) { + 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.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); + }; + + this.parseKeys = function(keys, val) { + var key; + var hashId = 0; + var parts = keys.toLowerCase().trim().split(/\s*\-\s*/); + + 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 + }; + }; + + this.findKeyCommand = function findKeyCommand(hashId, keyString) { + var ckbr = this.commmandKeyBinding; + return ckbr[hashId] && ckbr[hashId][keyString.toLowerCase()]; + }; + + this.handleKeyboard = function(data, hashId, keyString, keyCode) { + return { + command: this.findKeyCommand(hashId, keyString) + }; + }; + +}).call(HashHandler.prototype) + +exports.HashHandler = HashHandler; +}); +/* 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/undomanager', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/** + * class UndoManager + * + * This object maintains the undo stack for an [[EditSession `EditSession`]]. + * + **/ + +/** + * new UndoManager() + * + * Resets the current undo state and creates a new `UndoManager`. + **/ +var UndoManager = function() { + this.reset(); +}; + +(function() { + + /** + * UndoManager.execute(options) -> Void + * - options (Object): Contains additional properties + * + * Provides a means for implementing your own undo manager. `options` has one property, `args`, an [[Array `Array`]], with two elements: + * * `args[0]` is an array of deltas + * * `args[1]` is the document to associate with + * + **/ + this.execute = function(options) { + var deltas = options.args[0]; + this.$doc = options.args[1]; + this.$undoStack.push(deltas); + this.$redoStack = []; + }; + + /** + * UndoManager.undo(dontSelect) -> Range + * - dontSelect (Boolean): {:dontSelect} + * + * [Perform an undo operation on the document, reverting the last change. Returns the range of the undo.]{: #UndoManager.undo} + **/ + this.undo = function(dontSelect) { + var deltas = this.$undoStack.pop(); + var undoSelectionRange = null; + if (deltas) { + undoSelectionRange = + this.$doc.undoChanges(deltas, dontSelect); + this.$redoStack.push(deltas); + } + return undoSelectionRange; + }; + + /** + * UndoManager.redo(dontSelect) -> Void + * - dontSelect (Boolean): {:dontSelect} + * + * [Perform a redo operation on the document, reimplementing the last change.]{: #UndoManager.redo} + **/ + this.redo = function(dontSelect) { + var deltas = this.$redoStack.pop(); + var redoSelectionRange = null; + if (deltas) { + redoSelectionRange = + this.$doc.redoChanges(deltas, dontSelect); + this.$undoStack.push(deltas); + } + return redoSelectionRange; + }; + + /** + * UndoManager.reset() -> Void + * + * Destroys the stack of undo and redo redo operations. + **/ + this.reset = function() { + this.$undoStack = []; + this.$redoStack = []; + }; + + /** + * UndoManager.hasUndo() -> Boolean + * + * Returns `true` if there are undo operations left to perform. + **/ + this.hasUndo = function() { + return this.$undoStack.length > 0; + }; + + /** + * UndoManager.hasRedo() -> Boolean + * + * Returns `true` if there are redo operations left to perform. + **/ + this.hasRedo = function() { + return this.$redoStack.length > 0; + }; + +}).call(UndoManager.prototype); + +exports.UndoManager = UndoManager; +}); +/* 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/virtual_renderer', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/event', 'ace/lib/useragent', 'ace/config', 'ace/lib/net', '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("./lib/oop"); +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var useragent = require("./lib/useragent"); +var config = require("./config"); +var net = require("./lib/net"); +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"); + +dom.importCssString(editorCss, "ace_editor"); + +/** + * class VirtualRenderer + * + * The class that is responsible for drawing everything you see on the screen! + * + **/ + +/** + * new VirtualRenderer(container, theme) + * - container (DOMElement): The root element of the editor + * - theme (String): The starting theme + * + * Constructs a new `VirtualRenderer` within the `container` specified, applying the given `theme`. + * + **/ + +var VirtualRenderer = function(container, theme) { + var _self = this; + + this.container = container; + + // 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); + + // in IE <= 9 the native cursor always shines through + this.$keepTextAreaAtCursor = !useragent.isIE; + + dom.addCssClass(container, "ace_editor"); + + this.setTheme(theme); + + this.$gutter = dom.createElement("div"); + this.$gutter.className = "ace_gutter"; + this.container.appendChild(this.$gutter); + + this.scroller = dom.createElement("div"); + this.scroller.className = "ace_scroller"; + this.container.appendChild(this.scroller); + + this.content = dom.createElement("div"); + this.content.className = "ace_content"; + this.scroller.appendChild(this.content); + + this.setHighlightGutterLine(true); + this.$gutterLayer = new GutterLayer(this.$gutter); + this.$gutterLayer.on("changeGutterWidth", this.onResize.bind(this, true)); + this.setFadeFoldWidgets(true); + + this.$markerBack = new MarkerLayer(this.content); + + var textLayer = this.$textLayer = new TextLayer(this.content); + this.canvas = textLayer.element; + + this.$markerFront = new MarkerLayer(this.content); + + this.characterWidth = textLayer.getCharacterWidth(); + this.lineHeight = textLayer.getLineHeight(); + + this.$cursorLayer = new CursorLayer(this.content); + this.$cursorPadding = 8; + + // Indicates whether the horizontal scrollbar is visible + this.$horizScroll = false; + this.$horizScrollAlwaysVisible = false; + + this.$animatedScroll = false; + + this.scrollBar = new ScrollBar(container); + this.scrollBar.addEventListener("scroll", function(e) { + if (!_self.$inScrollAnimation) + _self.session.setScrollTop(e.data); + }); + + this.scrollTop = 0; + this.scrollLeft = 0; + + event.addListener(this.scroller, "scroll", function() { + var scrollLeft = _self.scroller.scrollLeft; + _self.scrollLeft = scrollLeft; + _self.session.setScrollLeft(scrollLeft); + + _self.scroller.className = scrollLeft == 0 + ? "ace_scroller" + : "ace_scroller horscroll"; + }); + + this.cursorPos = { + row : 0, + column : 0 + }; + + this.$textLayer.addEventListener("changeCharacterSize", function() { + _self.characterWidth = textLayer.getCharacterWidth(); + _self.lineHeight = textLayer.getLineHeight(); + _self.$updatePrintMargin(); + _self.onResize(true); + + _self.$loop.schedule(_self.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 RenderLoop( + this.$renderChanges.bind(this), + this.container.ownerDocument.defaultView + ); + this.$loop.schedule(this.CHANGE_FULL); + + this.setPadding(4); + this.$updatePrintMargin(); +}; + +(function() { + this.showGutter = true; + + 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; + this.CHANGE_H_SCROLL = 1024; + + oop.implement(this, EventEmitter); + + /** + * VirtualRenderer.setSession(session) -> Void + * + * Associates an [[EditSession `EditSession`]]. + **/ + this.setSession = function(session) { + this.session = session; + + this.scroller.className = "ace_scroller"; + + this.$cursorLayer.setSession(session); + this.$markerBack.setSession(session); + this.$markerFront.setSession(session); + this.$gutterLayer.setSession(session); + this.$textLayer.setSession(session); + this.$loop.schedule(this.CHANGE_FULL); + + }; + + /** + * VirtualRenderer.updateLines(firstRow, lastRow) -> Void + * - firstRow (Number): The first row to update + * - lastRow (Number): The last row to update + * + * Triggers a partial update of the text, from the range given by the two parameters. + **/ + this.updateLines = function(firstRow, lastRow) { + if (lastRow === undefined) + lastRow = Infinity; + + if (!this.$changedLines) { + this.$changedLines = { + firstRow: firstRow, + lastRow: lastRow + }; + } + else { + if (this.$changedLines.firstRow > firstRow) + this.$changedLines.firstRow = firstRow; + + if (this.$changedLines.lastRow < lastRow) + this.$changedLines.lastRow = lastRow; + } + + this.$loop.schedule(this.CHANGE_LINES); + }; + + /** + * VirtualRenderer.updateText() -> Void + * + * Triggers a full update of the text, for all the rows. + **/ + this.updateText = function() { + this.$loop.schedule(this.CHANGE_TEXT); + }; + + /** + * VirtualRenderer.updateFull() -> Void + * + * Triggers a full update of all the layers, for all the rows. + **/ + this.updateFull = function() { + this.$loop.schedule(this.CHANGE_FULL); + }; + + /** + * VirtualRenderer.updateFontSize() -> Void + * + * Updates the font size. + **/ + this.updateFontSize = function() { + this.$textLayer.checkForSizeChanges(); + }; + + /** + * VirtualRenderer.onResize(force) -> Void + * - force (Boolean): If `true`, recomputes the size, even if the height and width haven't changed + * + * [Triggers a resize of the editor.]{: #VirtualRenderer.onResize} + **/ + this.onResize = function(force) { + var changes = this.CHANGE_SIZE; + var size = this.$size; + + var height = dom.getInnerHeight(this.container); + if (force || size.height != height) { + size.height = height; + + this.scroller.style.height = height + "px"; + size.scrollerHeight = this.scroller.clientHeight; + this.scrollBar.setHeight(size.scrollerHeight); + + if (this.session) { + this.session.setScrollTop(this.getScrollTop()); + changes = changes | this.CHANGE_FULL; + } + } + + var width = dom.getInnerWidth(this.container); + if (force || size.width != width) { + size.width = width; + + var gutterWidth = this.showGutter ? this.$gutter.offsetWidth : 0; + this.scroller.style.left = gutterWidth + "px"; + size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth()); + this.scroller.style.width = size.scrollerWidth + "px"; + + if (this.session.getUseWrapMode() && this.adjustWrapLimit() || force) + changes = changes | this.CHANGE_FULL; + } + + this.$loop.schedule(changes); + }; + + /** + * VirtualRenderer.adjustWrapLimit() -> Void + * + * Adjusts the wrap limit, which is the number of characters that can fit within the width of the edit area on screen. + **/ + this.adjustWrapLimit = function() { + var availableWidth = this.$size.scrollerWidth - this.$padding * 2; + var limit = Math.floor(availableWidth / this.characterWidth); + return this.session.adjustWrapLimit(limit); + }; + + /** + * VirtualRenderer.setAnimatedScroll(shouldAnimate) -> Void + * - shouldAnimate (Boolean): Set to `true` to show animated scrolls + * + * Identifies whether you want to have an animated scroll or not. + * + **/ + this.setAnimatedScroll = function(shouldAnimate){ + this.$animatedScroll = shouldAnimate; + }; + + /** + * VirtualRenderer.getAnimatedScroll() -> Boolean + * + * Returns whether an animated scroll happens or not. + **/ + this.getAnimatedScroll = function() { + return this.$animatedScroll; + }; + + /** + * VirtualRenderer.setShowInvisibles(showInvisibles) -> Void + * - showInvisibles (Boolean): Set to `true` to show invisibles + * + * Identifies whether you want to show invisible characters or not. + * + **/ + this.setShowInvisibles = function(showInvisibles) { + if (this.$textLayer.setShowInvisibles(showInvisibles)) + this.$loop.schedule(this.CHANGE_TEXT); + }; + + /** + * VirtualRenderer.getShowInvisibles() -> Boolean + * + * Returns whether invisible characters are being shown or not. + **/ + this.getShowInvisibles = function() { + return this.$textLayer.showInvisibles; + }; + + this.$showPrintMargin = true; + + /** + * VirtualRenderer.setShowPrintMargin(showPrintMargin) + * - showPrintMargin (Boolean): Set to `true` to show the print margin + * + * Identifies whether you want to show the print margin or not. + * + **/ + this.setShowPrintMargin = function(showPrintMargin) { + this.$showPrintMargin = showPrintMargin; + this.$updatePrintMargin(); + }; + + /** + * VirtualRenderer.getShowPrintMargin() -> Boolean + * + * Returns whetherthe print margin is being shown or not. + **/ + this.getShowPrintMargin = function() { + return this.$showPrintMargin; + }; + + this.$printMarginColumn = 80; + + /** + * VirtualRenderer.setPrintMarginColumn(showPrintMargin) + * - showPrintMargin (Boolean): Set to `true` to show the print margin column + * + * Identifies whether you want to show the print margin column or not. + * + **/ + this.setPrintMarginColumn = function(showPrintMargin) { + this.$printMarginColumn = showPrintMargin; + this.$updatePrintMargin(); + }; + + /** + * VirtualRenderer.getPrintMarginColumn() -> Boolean + * + * Returns whether the print margin column is being shown or not. + **/ + this.getPrintMarginColumn = function() { + return this.$printMarginColumn; + }; + + /** + * VirtualRenderer.getShowGutter() -> Boolean + * + * Returns `true` if the gutter is being shown. + **/ + this.getShowGutter = function(){ + return this.showGutter; + }; + + /** + * VirtualRenderer.setShowGutter(show) -> Void + * - show (Boolean): Set to `true` to show the gutter + * + * Identifies whether you want to show the gutter or not. + **/ + this.setShowGutter = function(show){ + if(this.showGutter === show) + return; + this.$gutter.style.display = show ? "block" : "none"; + this.showGutter = show; + this.onResize(true); + }; + + this.getFadeFoldWidgets = function(){ + return dom.hasCssClass(this.$gutter, "ace_fade-fold-widgets"); + }; + + this.setFadeFoldWidgets = function(show) { + if (show) + dom.addCssClass(this.$gutter, "ace_fade-fold-widgets"); + else + dom.removeCssClass(this.$gutter, "ace_fade-fold-widgets"); + }; + + this.$highlightGutterLine = false; + this.setHighlightGutterLine = function(shouldHighlight) { + if (this.$highlightGutterLine == shouldHighlight) + return; + this.$highlightGutterLine = shouldHighlight; + + + if (!this.$gutterLineHighlight) { + this.$gutterLineHighlight = dom.createElement("div"); + this.$gutterLineHighlight.className = "ace_gutter_active_line"; + this.$gutter.appendChild(this.$gutterLineHighlight); + return; + } + + this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none"; + this.$updateGutterLineHighlight(); + }; + + this.getHighlightGutterLine = function() { + return this.$highlightGutterLine; + }; + + this.$updateGutterLineHighlight = function() { + this.$gutterLineHighlight.style.top = this.$cursorLayer.$pixelPos.top + "px"; + this.$gutterLineHighlight.style.height = this.layerConfig.lineHeight + "px"; + }; + + this.$updatePrintMargin = function() { + var containerEl; + + if (!this.$showPrintMargin && !this.$printMarginEl) + return; + + if (!this.$printMarginEl) { + containerEl = dom.createElement("div"); + containerEl.className = "ace_print_margin_layer"; + this.$printMarginEl = dom.createElement("div"); + this.$printMarginEl.className = "ace_print_margin"; + containerEl.appendChild(this.$printMarginEl); + this.content.insertBefore(containerEl, this.$textLayer.element); + } + + var style = this.$printMarginEl.style; + style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; + style.visibility = this.$showPrintMargin ? "visible" : "hidden"; + }; + + /** + * VirtualRenderer.getContainerElement() -> DOMElement + * + * Returns the root element containing this renderer. + **/ + this.getContainerElement = function() { + return this.container; + }; + + /** + * VirtualRenderer.getMouseEventTarget() -> DOMElement + * + * Returns the element that the mouse events are attached to + **/ + this.getMouseEventTarget = function() { + return this.content; + }; + + /** + * VirtualRenderer.getTextAreaContainer() -> DOMElement + * + * Returns the element to which the hidden text area is added. + **/ + this.getTextAreaContainer = function() { + return this.container; + }; + + // move text input over the cursor + // this is required for iOS and IME + this.$moveTextAreaToCursor = function() { + if (!this.$keepTextAreaAtCursor) + return; + + var posTop = this.$cursorLayer.$pixelPos.top; + var posLeft = this.$cursorLayer.$pixelPos.left; + posTop -= this.layerConfig.offset; + + if (posTop < 0 || posTop > this.layerConfig.height) + return; + + posLeft += (this.showGutter ? this.$gutterLayer.gutterWidth : 0) - this.scrollLeft; + var bounds = this.container.getBoundingClientRect(); + this.textarea.style.left = (bounds.left + posLeft) + "px"; + this.textarea.style.top = (bounds.top + posTop) + "px"; + }; + + /** + * VirtualRenderer.getFirstVisibleRow() -> Number + * + * [Returns the index of the first visible row.]{: #VirtualRenderer.getFirstVisibleRow} + **/ + this.getFirstVisibleRow = function() { + return this.layerConfig.firstRow; + }; + + /** + * VirtualRenderer.getFirstFullyVisibleRow() -> Number + * + * Returns the index of the first fully visible row. "Fully" here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen. + **/ + this.getFirstFullyVisibleRow = function() { + return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); + }; + + /** + * VirtualRenderer.getLastFullyVisibleRow() -> Number + * + * Returns the index of the last fully visible row. "Fully" here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen. + **/ + this.getLastFullyVisibleRow = function() { + var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight); + return this.layerConfig.firstRow - 1 + flint; + }; + + /** + * VirtualRenderer.getLastVisibleRow() -> Number + * + * [Returns the index of the last visible row.]{: #VirtualRenderer.getLastVisibleRow} + **/ + this.getLastVisibleRow = function() { + return this.layerConfig.lastRow; + }; + + this.$padding = null; + + /** + * VirtualRenderer.setPadding(padding) -> Void + * - padding (Number): A new padding value (in pixels) + * + * Sets the padding for all the layers. + * + **/ + this.setPadding = function(padding) { + this.$padding = padding; + this.$textLayer.setPadding(padding); + this.$cursorLayer.setPadding(padding); + this.$markerFront.setPadding(padding); + this.$markerBack.setPadding(padding); + this.$loop.schedule(this.CHANGE_FULL); + this.$updatePrintMargin(); + }; + + /** + * VirtualRenderer.getHScrollBarAlwaysVisible() -> Boolean + * + * Returns whether the horizontal scrollbar is set to be always visible. + **/ + this.getHScrollBarAlwaysVisible = function() { + return this.$horizScrollAlwaysVisible; + }; + + /** + * VirtualRenderer.setHScrollBarAlwaysVisible(alwaysVisible) -> Void + * - alwaysVisible (Boolean): Set to `true` to make the horizontal scroll bar visible + * + * Identifies whether you want to show the horizontal scrollbar or not. + **/ + this.setHScrollBarAlwaysVisible = function(alwaysVisible) { + if (this.$horizScrollAlwaysVisible != alwaysVisible) { + this.$horizScrollAlwaysVisible = alwaysVisible; + if (!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(changes) { + if (!changes || !this.session || !this.container.offsetWidth) + return; + + // text, scrolling and resize changes can cause the view port size to change + if (changes & this.CHANGE_FULL || + changes & this.CHANGE_SIZE || + changes & this.CHANGE_TEXT || + changes & this.CHANGE_LINES || + changes & this.CHANGE_SCROLL + ) + this.$computeLayerConfig(); + + // horizontal scrolling + if (changes & this.CHANGE_H_SCROLL) { + this.scroller.scrollLeft = this.scrollLeft; + + // read the value after writing it since the value might get clipped + var scrollLeft = this.scroller.scrollLeft; + this.scrollLeft = scrollLeft; + this.session.setScrollLeft(scrollLeft); + } + + // full + if (changes & this.CHANGE_FULL) { + this.$textLayer.checkForSizeChanges(); + // update scrollbar first to not lose scroll position when gutter calls resize + this.$updateScrollBar(); + this.$textLayer.update(this.layerConfig); + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + this.$markerBack.update(this.layerConfig); + this.$markerFront.update(this.layerConfig); + this.$cursorLayer.update(this.layerConfig); + this.$moveTextAreaToCursor(); + this.$highlightGutterLine && this.$updateGutterLineHighlight(); + return; + } + + // scrolling + if (changes & this.CHANGE_SCROLL) { + this.$updateScrollBar(); + if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) + this.$textLayer.update(this.layerConfig); + else + this.$textLayer.scrollLines(this.layerConfig); + + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + this.$markerBack.update(this.layerConfig); + this.$markerFront.update(this.layerConfig); + this.$cursorLayer.update(this.layerConfig); + this.$moveTextAreaToCursor(); + this.$highlightGutterLine && this.$updateGutterLineHighlight(); + return; + } + + if (changes & this.CHANGE_TEXT) { + this.$textLayer.update(this.layerConfig); + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + } + else if (changes & this.CHANGE_LINES) { + if (this.$updateLines()) { + this.$updateScrollBar(); + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + } + } else if (changes & this.CHANGE_GUTTER) { + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + } + + if (changes & this.CHANGE_CURSOR) { + this.$cursorLayer.update(this.layerConfig); + this.$moveTextAreaToCursor(); + this.$highlightGutterLine && this.$updateGutterLineHighlight(); + } + + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { + this.$markerFront.update(this.layerConfig); + } + + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { + this.$markerBack.update(this.layerConfig); + } + + if (changes & this.CHANGE_SIZE) + this.$updateScrollBar(); + }; + + this.$computeLayerConfig = function() { + var session = this.session; + + var offset = this.scrollTop % this.lineHeight; + var minHeight = this.$size.scrollerHeight + this.lineHeight; + + var longestLine = this.$getLongestLine(); + + var horizScroll = this.$horizScrollAlwaysVisible || this.$size.scrollerWidth - longestLine < 0; + var horizScrollChanged = this.$horizScroll !== horizScroll; + this.$horizScroll = horizScroll; + if (horizScrollChanged) { + this.scroller.style.overflowX = horizScroll ? "scroll" : "hidden"; + // when we hide scrollbar scroll event isn't emited + // leaving session with wrong scrollLeft value + if (!horizScroll) + this.session.setScrollLeft(0); + } + var maxHeight = this.session.getScreenLength() * this.lineHeight; + 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)); + var lastRow = firstRow + lineCount; + + // Map lines on the screen to lines in the document. + var firstRowScreen, firstRowHeight; + var lineHeight = { lineHeight: this.lineHeight }; + firstRow = session.screenToDocumentRow(firstRow, 0); + + // Check if firstRow is inside of a foldLine. If true, then use the first + // row of the foldLine. + var foldLine = session.getFoldLine(firstRow); + if (foldLine) { + firstRow = foldLine.start.row; + } + + firstRowScreen = session.documentToScreenRow(firstRow, 0); + firstRowHeight = session.getRowHeight(lineHeight, firstRow); + + lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); + minHeight = this.$size.scrollerHeight + session.getRowHeight(lineHeight, lastRow)+ + firstRowHeight; + + offset = this.scrollTop - firstRowScreen * this.lineHeight; + + this.layerConfig = { + width : longestLine, + padding : this.$padding, + firstRow : firstRow, + firstRowScreen: firstRowScreen, + lastRow : lastRow, + lineHeight : this.lineHeight, + characterWidth : this.characterWidth, + minHeight : minHeight, + maxHeight : maxHeight, + offset : offset, + height : this.$size.scrollerHeight + }; + + // For debugging. + // console.log(JSON.stringify(this.layerConfig)); + + this.$gutter.style.marginTop = (-offset) + "px"; + this.content.style.marginTop = (-offset) + "px"; + this.content.style.width = longestLine + 2 * this.$padding + "px"; + this.content.style.height = minHeight + "px"; + + // Horizontal scrollbar visibility may have changed, which changes + // the client height of the scroller + if (horizScrollChanged) + this.onResize(true); + }; + + this.$updateLines = function() { + var firstRow = this.$changedLines.firstRow; + var lastRow = this.$changedLines.lastRow; + this.$changedLines = null; + + var layerConfig = this.layerConfig; + + // if the update changes the width of the document do a full redraw + if (layerConfig.width != this.$getLongestLine()) + return this.$textLayer.update(layerConfig); + + if (firstRow > layerConfig.lastRow + 1) { return; } + if (lastRow < layerConfig.firstRow) { return; } + + // if the last row is unknown -> redraw everything + if (lastRow === Infinity) { + if (this.showGutter) + this.$gutterLayer.update(layerConfig); + this.$textLayer.update(layerConfig); + return; + } + + // else update only the changed rows + this.$textLayer.updateLines(layerConfig, firstRow, lastRow); + return true; + }; + + this.$getLongestLine = function() { + var charCount = this.session.getScreenWidth(); + if (this.$textLayer.showInvisibles) + charCount += 1; + + return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); + }; + + /** + * VirtualRenderer.updateFrontMarkers() -> Void + * + * Schedules an update to all the front markers in the document. + **/ + this.updateFrontMarkers = function() { + this.$markerFront.setMarkers(this.session.getMarkers(true)); + this.$loop.schedule(this.CHANGE_MARKER_FRONT); + }; + + /** + * VirtualRenderer.updateBackMarkers() -> Void + * + * Schedules an update to all the back markers in the document. + **/ + this.updateBackMarkers = function() { + this.$markerBack.setMarkers(this.session.getMarkers()); + this.$loop.schedule(this.CHANGE_MARKER_BACK); + }; + + /** + * VirtualRenderer.addGutterDecoration(row, className) -> Void + * - row (Number): The row number + * - className (String): The class to add + * + * Adds `className` to the `row`, to be used for CSS stylings and whatnot. + **/ + this.addGutterDecoration = function(row, className){ + this.$gutterLayer.addGutterDecoration(row, className); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + + /** + * VirtualRenderer.removeGutterDecoration(row, className)-> Void + * - row (Number): The row number + * - className (String): The class to add + * + * Removes `className` from the `row`. + **/ + this.removeGutterDecoration = function(row, className){ + this.$gutterLayer.removeGutterDecoration(row, className); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + + /** + * VirtualRenderer.setBreakpoints(rows) -> Void + * - rows (Array): An array containg row numbers + * + * Sets a breakpoint for every row number indicated on `rows`. + **/ + this.setBreakpoints = function(rows) { + this.$gutterLayer.setBreakpoints(rows); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + + /** + * VirtualRenderer.setAnnotations(annotations) -> Void + * - annotations (Array): An array containing annotations + * + * Sets annotations for the gutter. + **/ + this.setAnnotations = function(annotations) { + this.$gutterLayer.setAnnotations(annotations); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + + /** + * VirtualRenderer.updateCursor() -> Void + * + * Updates the cursor icon. + **/ + this.updateCursor = function() { + this.$loop.schedule(this.CHANGE_CURSOR); + }; + + /** + * VirtualRenderer.hideCursor() -> Void + * + * Hides the cursor icon. + **/ + this.hideCursor = function() { + this.$cursorLayer.hideCursor(); + }; + + /** + * VirtualRenderer.showCursor() -> Void + * + * Shows the cursor icon. + **/ + this.showCursor = function() { + this.$cursorLayer.showCursor(); + }; + + this.scrollSelectionIntoView = function(anchor, lead, offset) { + // first scroll anchor into view then scroll lead into view + this.scrollCursorIntoView(anchor, offset); + this.scrollCursorIntoView(lead, offset); + }; + + /** + * VirtualRenderer.scrollCursorIntoView(cursor, offset) -> Void + * + * Scrolls the cursor into the first visibile area of the editor + **/ + this.scrollCursorIntoView = function(cursor, offset) { + // the editor is not visible + if (this.$size.scrollerHeight === 0) + return; + + var pos = this.$cursorLayer.getPixelPosition(cursor); + + var left = pos.left; + var top = pos.top; + + if (this.scrollTop > top) { + if (offset) + top -= offset * this.$size.scrollerHeight; + this.session.setScrollTop(top); + } else if (this.scrollTop + this.$size.scrollerHeight < top + this.lineHeight) { + if (offset) + top += offset * this.$size.scrollerHeight; + this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight); + } + + var scrollLeft = this.scrollLeft; + + if (scrollLeft > left) { + if (left < this.$padding + 2 * this.layerConfig.characterWidth) + left = 0; + this.session.setScrollLeft(left); + } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) { + this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth)); + } + }; + + /** related to: EditSession.getScrollTop + * VirtualRenderer.getScrollTop() -> Number + * + * {:EditSession.getScrollTop} + **/ + this.getScrollTop = function() { + return this.session.getScrollTop(); + }; + + /** related to: EditSession.getScrollLeft + * VirtualRenderer.getScrollLeft() -> Number + * + * {:EditSession.getScrollLeft} + **/ + this.getScrollLeft = function() { + return this.session.getScrollLeft(); + }; + + /** + * VirtualRenderer.getScrollTopRow() -> Number + * + * Returns the first visible row, regardless of whether it's fully visible or not. + **/ + this.getScrollTopRow = function() { + return this.scrollTop / this.lineHeight; + }; + + /** + * VirtualRenderer.getScrollBottomRow() -> Number + * + * Returns the last visible row, regardless of whether it's fully visible or not. + **/ + this.getScrollBottomRow = function() { + return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); + }; + + /** related to: EditSession.setScrollTop + * VirtualRenderer.scrollToRow(row) -> Void + * - row (Number): A row id + * + * Gracefully scrolls the top of the editor to the row indicated. + **/ + this.scrollToRow = function(row) { + this.session.setScrollTop(row * this.lineHeight); + }; + + this.STEPS = 8; + this.$calcSteps = function(fromValue, toValue){ + var i = 0; + var l = this.STEPS; + var steps = []; + + var func = function(t, x_min, dx) { + return dx * (Math.pow(t - 1, 3) + 1) + x_min; + }; + + for (i = 0; i < l; ++i) + steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); + + return steps; + }; + + /** + * VirtualRenderer.scrollToLine(line, center, animate, callback) -> Void + * - line (Number): A line number + * - center (Boolean): If `true`, centers the editor the to indicated line + * - animate (Boolean): If `true` animates scrolling + * - callback (Function): Function to be called after the animation has finished + * + * Gracefully scrolls the editor to the row indicated. + **/ + this.scrollToLine = function(line, center, animate, callback) { + var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0}); + var offset = pos.top; + if (center) + offset -= this.$size.scrollerHeight / 2; + + var initialScroll = this.scrollTop; + this.session.setScrollTop(offset); + if (animate !== false) + this.animateScrolling(initialScroll, callback); + }; + + this.animateScrolling = function(fromValue, callback) { + var toValue = this.scrollTop; + if (this.$animatedScroll && Math.abs(fromValue - toValue) < 100000) { + var _self = this; + var steps = _self.$calcSteps(fromValue, toValue); + this.$inScrollAnimation = true; + + clearInterval(this.$timer); + + _self.session.setScrollTop(steps.shift()); + this.$timer = setInterval(function() { + if (steps.length) { + _self.session.setScrollTop(steps.shift()); + // trick session to think it's already scrolled to not loose toValue + _self.session.$scrollTop = toValue; + } else { + this.$inScrollAnimation = false; + clearInterval(_self.$timer); + + _self.session.$scrollTop = -1; + _self.session.setScrollTop(toValue); + callback && callback(); + } + }, 10); + } + }; + + /** + * VirtualRenderer.scrollToY(scrollTop) -> Number + * - scrollTop (Number): The position to scroll to + * + * Scrolls the editor to the y pixel indicated. + * + **/ + this.scrollToY = function(scrollTop) { + // after calling scrollBar.setScrollTop + // scrollbar sends us event with same scrollTop. ignore it + if (this.scrollTop !== scrollTop) { + this.$loop.schedule(this.CHANGE_SCROLL); + this.scrollTop = scrollTop; + } + }; + + /** + * VirtualRenderer.scrollToX(scrollLeft) -> Number + * - scrollLeft (Number): The position to scroll to + * + * Scrolls the editor to the x pixel indicated. + * + **/ + this.scrollToX = function(scrollLeft) { + if (scrollLeft <= this.$padding) + scrollLeft = 0; + + if (this.scrollLeft !== scrollLeft) + this.scrollLeft = scrollLeft; + this.$loop.schedule(this.CHANGE_H_SCROLL); + }; + + /** + * VirtualRenderer.scrollBy(deltaX, deltaY) -> Void + * - deltaX (Number): The x value to scroll by + * - deltaY (Number): The y value to scroll by + * + * Scrolls the editor across both x- and y-axes. + **/ + this.scrollBy = function(deltaX, deltaY) { + deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); + deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); + }; + + /** + * VirtualRenderer.isScrollableBy(deltaX, deltaY) -> Boolean + * - deltaX (Number): The x value to scroll by + * - deltaY (Number): The y value to scroll by + * + * Returns `true` if you can still scroll by either parameter; in other words, you haven't reached the end of the file or line. + **/ + 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.pixelToScreenCoordinates = function(x, y) { + var canvasPos = this.scroller.getBoundingClientRect(); + + var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth; + var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); + var col = Math.round(offset); + + return {row: row, column: col, side: offset - col > 0 ? 1 : -1}; + }; + + this.screenToTextCoordinates = function(x, y) { + var canvasPos = this.scroller.getBoundingClientRect(); + + var col = Math.round( + (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth + ); + var row = Math.floor( + (y + this.scrollTop - canvasPos.top) / this.lineHeight + ); + + return this.session.screenToDocumentPosition(row, Math.max(col, 0)); + }; + + /** + * VirtualRenderer.textToScreenCoordinates(row, column) -> Object + * - row (Number): The document row position + * - column (Number): The document column position + * + * Returns an object containing the `pageX` and `pageY` coordinates of the document position. + * + * + **/ + this.textToScreenCoordinates = function(row, column) { + var canvasPos = this.scroller.getBoundingClientRect(); + var pos = this.session.documentToScreenPosition(row, column); + + var x = this.$padding + Math.round(pos.column * this.characterWidth); + var y = pos.row * this.lineHeight; + + return { + pageX: canvasPos.left + x - this.scrollLeft, + pageY: canvasPos.top + y - this.scrollTop + }; + }; + + /** + * VirtualRenderer.visualizeFocus() -> Void + * + * Focuses the current container. + **/ + this.visualizeFocus = function() { + dom.addCssClass(this.container, "ace_focus"); + }; + + /** + * VirtualRenderer.visualizeBlur() -> Void + * + * Blurs the current container. + **/ + this.visualizeBlur = function() { + dom.removeCssClass(this.container, "ace_focus"); + }; + + /** internal, hide + * VirtualRenderer.showComposition(position) -> Void + * - position (Number): + * + **/ + this.showComposition = function(position) { + if (!this.$composition) { + this.$composition = dom.createElement("div"); + this.$composition.className = "ace_composition"; + this.content.appendChild(this.$composition); + } + + this.$composition.innerHTML = " "; + + var pos = this.$cursorLayer.getPixelPosition(); + var style = this.$composition.style; + style.top = pos.top + "px"; + style.left = (pos.left + this.$padding) + "px"; + style.height = this.lineHeight + "px"; + + this.hideCursor(); + }; + + /** + * VirtualRenderer.setCompositionText(text) -> Void + * - text (String): A string of text to use + * + * Sets the inner text of the current composition to `text`. + **/ + this.setCompositionText = function(text) { + dom.setInnerText(this.$composition, text); + }; + + /** + * VirtualRenderer.hideComposition() -> Void + * + * Hides the current composition. + **/ + this.hideComposition = function() { + this.showCursor(); + + if (!this.$composition) + return; + + var style = this.$composition.style; + style.top = "-10000px"; + style.left = "-10000px"; + }; + + this._loadTheme = function(name, callback) { + if (!config.get("packaged")) + return callback(); + + var base = name.split("/").pop(); + var filename = config.get("themePath") + "/theme-" + base + config.get("suffix"); + net.loadScript(filename, callback); + }; + + /** + * VirtualRenderer.setTheme(theme) -> Void + * - theme (String): The path to a theme + * + * [Sets a new theme for the editor. `theme` should exist, and be a directory path, like `ace/theme/textmate`.]{: #VirtualRenderer.setTheme} + **/ + this.setTheme = function(theme) { + var _self = this; + + this.$themeValue = theme; + if (!theme || typeof theme == "string") { + var moduleName = theme || "ace/theme/textmate"; + + var module; + try { + module = require(moduleName); + } catch (e) {}; + if (module) + return afterLoad(module); + + _self._loadTheme(moduleName, function() { + require([moduleName], function(module) { + if (_self.$themeValue !== theme) + return; + + afterLoad(module); + }); + }); + } else { + afterLoad(theme); + } + + function afterLoad(theme) { + dom.importCssString( + theme.cssText, + theme.cssClass, + _self.container.ownerDocument + ); + + if (_self.$theme) + dom.removeCssClass(_self.container, _self.$theme); + + _self.$theme = theme ? theme.cssClass : null; + + 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; + _self.onResize(); + } + } + }; + + /** + * VirtualRenderer.getTheme() -> String + * + * [Returns the path of the current theme.]{: #VirtualRenderer.getTheme} + **/ + this.getTheme = function() { + return this.$themeValue; + }; + + // Methods allows to add / remove CSS classnames to the editor element. + // This feature can be used by plug-ins to provide a visual indication of + // a certain mode that editor is in. + + /** + * VirtualRenderer.setStyle(style) -> Void + * - style (String): A class name + * + * [Adds a new class, `style`, to the editor.]{: #VirtualRenderer.setStyle} + **/ + this.setStyle = function setStyle(style) { + dom.addCssClass(this.container, style); + }; + + /** + * VirtualRenderer.unsetStyle(style) -> Void + * - style (String): A class name + * + * [Removes the class `style` from the editor.]{: #VirtualRenderer.unsetStyle} + **/ + this.unsetStyle = function unsetStyle(style) { + dom.removeCssClass(this.container, style); + }; + + /** + * VirtualRenderer.destroy() + * + * Destroys the text and cursor layers for this renderer. + **/ + this.destroy = function() { + this.$textLayer.destroy(); + this.$cursorLayer.destroy(); + }; + +}).call(VirtualRenderer.prototype); + +exports.VirtualRenderer = VirtualRenderer; +}); +/* 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 + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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("../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 = []; + this.$decorations = []; +}; + +(function() { + + oop.implement(this, EventEmitter); + + this.setSession = function(session) { + this.session = session; + }; + + this.addGutterDecoration = function(row, className){ + if (!this.$decorations[row]) + this.$decorations[row] = ""; + this.$decorations[row] += " " + className; + }; + + this.removeGutterDecoration = function(row, className){ + this.$decorations[row] = this.$decorations[row].replace(" " + className, ""); + }; + + this.setBreakpoints = function(rows) { + this.$breakpoints = rows.concat(); + }; + + this.setAnnotations = function(annotations) { + // iterate over sparse array + this.$annotations = []; + for (var row in annotations) if (annotations.hasOwnProperty(row)) { + var rowAnnotations = annotations[row]; + if (!rowAnnotations) + continue; + + var rowInfo = this.$annotations[row] = { + text: [] + }; + for (var i=0; i foldStart) { + i = fold.end.row + 1; + fold = this.session.getNextFoldLine(i, fold); + foldStart = fold ?fold.start.row :Infinity; + } + if(i > lastRow) + break; + + var annotation = this.$annotations[i] || emptyAnno; + html.push("
      ", (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( + "" + ); + } + + var wrappedRowLength = this.session.getRowLength(i) - 1; + while (wrappedRowLength--) { + html.push("
      \xA6"); + } + + html.push("
      "); + + i++; + } + 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); + +exports.Gutter = Gutter; + +}); +/* 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 + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/layer/marker', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +var Range = require("../range").Range; +var dom = require("../lib/dom"); + +var Marker = function(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_marker-layer"; + parentEl.appendChild(this.element); +}; + +(function() { + + this.$padding = 0; + + this.setPadding = function(padding) { + this.$padding = padding; + }; + this.setSession = function(session) { + this.session = session; + }; + + this.setMarkers = function(markers) { + this.markers = markers; + }; + + this.update = function(config) { + var config = config || this.config; + if (!config) + return; + + this.config = config; + + + var html = []; + for ( var key in this.markers) { + var marker = this.markers[key]; + + var range = marker.range.clipRows(config.firstRow, config.lastRow); + if (range.isEmpty()) continue; + + range = range.toScreenRange(this.session); + if (marker.renderer) { + var top = this.$getTop(range.start.row, config); + var left = Math.round( + this.$padding + range.start.column * config.characterWidth + ); + marker.renderer(html, range, left, top, config); + } + else if (range.isMultiLine()) { + if (marker.type == "text") { + this.drawTextMarker(html, range, marker.clazz, config); + } else { + this.drawMultiLineMarker( + html, range, marker.clazz, config, + marker.type + ); + } + } + else { + this.drawSingleLineMarker( + html, range, marker.clazz + " start", config, + null, marker.type + ); + } + } + this.element = dom.setInnerHtml(this.element, html.join("")); + }; + + this.$getTop = function(row, layerConfig) { + return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; + }; + + // Draws a marker, which spans a range of text on multiple lines + this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig) { + // selection start + var row = range.start.row; + + var lineRange = new Range( + row, range.start.column, + row, this.session.getScreenLastRowColumn(row) + ); + this.drawSingleLineMarker(stringBuilder, lineRange, clazz + " start", layerConfig, 1, "text"); + + // selection end + row = range.end.row; + lineRange = new Range(row, 0, row, range.end.column); + this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 0, "text"); + + for (row = range.start.row + 1; row < range.end.row; row++) { + lineRange.start.row = row; + lineRange.end.row = row; + lineRange.end.column = this.session.getScreenLastRowColumn(row); + this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1, "text"); + } + }; + + // Draws a multi line marker, where lines span the full width + this.drawMultiLineMarker = function(stringBuilder, range, clazz, layerConfig, type) { + 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(layerWidth - (range.start.column * layerConfig.characterWidth)); + var top = this.$getTop(range.start.row, layerConfig); + var left = Math.round( + padding + range.start.column * layerConfig.characterWidth + ); + + stringBuilder.push( + "
      " + ); + + // from start of the last line to the selection end + top = this.$getTop(range.end.row, layerConfig); + width = Math.round(range.end.column * layerConfig.characterWidth); + + stringBuilder.push( + "
      " + ); + + // all the complete lines + height = (range.end.row - range.start.row - 1) * layerConfig.lineHeight; + if (height < 0) + return; + top = this.$getTop(range.start.row + 1, layerConfig); + + stringBuilder.push( + "
      " + ); + }; + + // Draws a marker which covers part or whole width of a single screen line + this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength, type) { + var padding = type === "background" ? 0 : this.$padding; + var height = layerConfig.lineHeight; + + if (type === "background") + var width = layerConfig.width; + else + width = Math.round((range.end.column + (extraLength || 0) - range.start.column) * layerConfig.characterWidth); + + var top = this.$getTop(range.start.row, layerConfig); + var left = Math.round( + padding + range.start.column * layerConfig.characterWidth + ); + + stringBuilder.push( + "
      " + ); + }; + +}).call(Marker.prototype); + +exports.Marker = Marker; + +}); +/* 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 + * Julian Viereck + * Mihai Sucan + * Irakli Gozalishvili (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 ***** */ + +ace.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("../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"; + parentEl.appendChild(this.element); + + this.$characterSize = this.$measureSizes() || {width: 0, height: 0}; + this.$pollSizeChanges(); +}; + +(function() { + + oop.implement(this, EventEmitter); + + this.EOF_CHAR = "\xB6"; //"¶"; + this.EOL_CHAR = "\xAC"; //"¬"; + this.TAB_CHAR = "\u2192"; //"→"; + this.SPACE_CHAR = "\xB7"; //"·"; + this.$padding = 0; + + this.setPadding = function(padding) { + this.$padding = padding; + this.element.style.padding = "0 " + padding + "px"; + }; + + this.getLineHeight = function() { + return this.$characterSize.height || 1; + }; + + this.getCharacterWidth = function() { + return this.$characterSize.width || 1; + }; + + this.checkForSizeChanges = function() { + var size = this.$measureSizes(); + if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { + this.$characterSize = size; + this._emit("changeCharacterSize", {data: size}); + } + }; + + this.$pollSizeChanges = function() { + var self = this; + this.$pollSizeChangesTimer = setInterval(function() { + self.checkForSizeChanges(); + }, 500); + }; + + this.$fontStyles = { + fontFamily : 1, + fontSize : 1, + fontWeight : 1, + fontStyle : 1, + lineHeight : 1 + }; + + this.$measureSizes = useragent.isIE || useragent.isOldGecko ? function() { + var n = 1000; + if (!this.$measureNode) { + var measureNode = this.$measureNode = dom.createElement("div"); + var style = measureNode.style; + + style.width = style.height = "auto"; + style.left = style.top = (-n * 40) + "px"; + + style.visibility = "hidden"; + style.position = "fixed"; + style.overflow = "visible"; + style.whiteSpace = "nowrap"; + + // in FF 3.6 monospace fonts can have a fixed sub pixel width. + // that's why we have to measure many characters + // Note: characterWidth can be a float! + measureNode.innerHTML = lang.stringRepeat("Xy", n); + + if (this.element.ownerDocument.body) { + this.element.ownerDocument.body.appendChild(measureNode); + } else { + var container = this.element.parentNode; + while (!dom.hasCssClass(container, "ace_editor")) + container = container.parentNode; + container.appendChild(measureNode); + } + } + + // Size and width can be null if the editor is not visible or + // detached from the document + if (!this.element.offsetWidth) + return null; + + var style = this.$measureNode.style; + var computedStyle = dom.computedStyle(this.element); + for (var prop in this.$fontStyles) + style[prop] = computedStyle[prop]; + + var size = { + height: this.$measureNode.offsetHeight, + width: this.$measureNode.offsetWidth / (n * 2) + }; + + // Size and width can be null if the editor is not visible or + // detached from the document + if (size.width == 0 || size.height == 0) + return null; + + return size; + } + : function() { + if (!this.$measureNode) { + var measureNode = this.$measureNode = dom.createElement("div"); + var style = measureNode.style; + + style.width = style.height = "auto"; + style.left = style.top = -100 + "px"; + + style.visibility = "hidden"; + style.position = "fixed"; + style.overflow = "visible"; + style.whiteSpace = "nowrap"; + + measureNode.innerHTML = "X"; + + var container = this.element.parentNode; + while (container && !dom.hasCssClass(container, "ace_editor")) + container = container.parentNode; + + if (!container) + return this.$measureNode = null; + + container.appendChild(measureNode); + } + + var rect = this.$measureNode.getBoundingClientRect(); + + var size = { + height: rect.height, + width: rect.width + }; + + // Size and width can be null if the editor is not visible or + // detached from the document + if (size.width == 0 || size.height == 0) + return null; + + return size; + }; + + this.setSession = function(session) { + this.session = session; + }; + + this.showInvisibles = false; + this.setShowInvisibles = function(showInvisibles) { + if (this.showInvisibles == showInvisibles) + return false; + + this.showInvisibles = showInvisibles; + return true; + }; + + this.$tabStrings = []; + this.$computeTabString = function() { + var tabSize = this.session.getTabSize(); + var tabStr = this.$tabStrings = [0]; + for (var i = 1; i < tabSize + 1; i++) { + if (this.showInvisibles) { + tabStr.push("" + + this.TAB_CHAR + + new Array(i).join(" ") + + ""); + } else { + tabStr.push(new Array(i+1).join(" ")); + } + } + + }; + + this.updateLines = function(config, firstRow, lastRow) { + this.$computeTabString(); + // Due to wrap line changes there can be new lines if e.g. + // the line to updated wrapped in the meantime. + if (this.config.lastRow != config.lastRow || + this.config.firstRow != config.firstRow) { + this.scrollLines(config); + } + this.config = config; + + var first = Math.max(firstRow, config.firstRow); + var last = Math.min(lastRow, config.lastRow); + + var lineElements = this.element.childNodes; + var lineElementsIdx = 0; + + for (var row = config.firstRow; row < first; row++) { + var foldLine = this.session.getFoldLine(row); + if (foldLine) { + if (foldLine.containsRow(first)) { + first = foldLine.start.row; + break; + } else { + row = foldLine.end.row; + } + } + lineElementsIdx ++; + } + + for (var i=first; i<=last; i++) { + var lineElement = lineElements[lineElementsIdx++]; + if (!lineElement) + continue; + + var html = []; + var tokens = this.session.getTokens(i, i); + this.$renderLine(html, i, tokens[0].tokens, !this.$useLineGroups()); + lineElement = dom.setInnerHtml(lineElement, html.join("")); + + i = this.session.getRowFoldEnd(i); + } + }; + + this.scrollLines = function(config) { + this.$computeTabString(); + var oldConfig = this.config; + this.config = config; + + if (!oldConfig || oldConfig.lastRow < config.firstRow) + return this.update(config); + + if (config.lastRow < oldConfig.firstRow) + return this.update(config); + + var el = this.element; + if (oldConfig.firstRow < config.firstRow) + for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--) + el.removeChild(el.firstChild); + + if (oldConfig.lastRow > config.lastRow) + for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--) + el.removeChild(el.lastChild); + + if (config.firstRow < oldConfig.firstRow) { + var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1); + if (el.firstChild) + el.insertBefore(fragment, el.firstChild); + else + el.appendChild(fragment); + } + + if (config.lastRow > oldConfig.lastRow) { + var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow); + el.appendChild(fragment); + } + }; + + this.$renderLinesFragment = function(config, firstRow, lastRow) { + var fragment = this.element.ownerDocument.createDocumentFragment(); + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (true) { + if (row > foldStart) { + row = foldLine.end.row+1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (row > lastRow) + break; + + var container = dom.createElement("div"); + + var html = []; + // 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 + // this call once for that big block of unfolded lines. + var tokens = this.session.getTokens(row, row); + if (tokens.length == 1) + this.$renderLine(html, row, tokens[0].tokens, false); + + // don't use setInnerHtml since we are working with an empty DIV + container.innerHTML = html.join(""); + if (this.$useLineGroups()) { + container.className = 'ace_line_group'; + fragment.appendChild(container); + } else { + var lines = container.childNodes + while(lines.length) + fragment.appendChild(lines[0]); + } + + row++; + } + return fragment; + }; + + this.update = function(config) { + this.$computeTabString(); + this.config = config; + + var html = []; + var firstRow = config.firstRow, lastRow = config.lastRow; + + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (true) { + if (row > foldStart) { + row = foldLine.end.row+1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row :Infinity; + } + if (row > lastRow) + break; + + if (this.$useLineGroups()) + html.push("
      ") + + // 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 + // this call once for that big block of unfolded lines. + var tokens = this.session.getTokens(row, row); + if (tokens.length == 1) + this.$renderLine(html, row, tokens[0].tokens, false); + + if (this.$useLineGroups()) + html.push("
      "); // end the line group + + row++; + } + this.element = dom.setInnerHtml(this.element, html.join("")); + }; + + this.$textToken = { + "text": true, + "rparen": true, + "lparen": true + }; + + this.$renderToken = function(stringBuilder, screenColumn, token, value) { + var self = this; + var replaceReg = /\t|&|<|( +)|([\u0000-\u0019\u00a0\u2000-\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; + var replaceFunc = function(c, a, b, tabIdx, idx4) { + if (a) { + return new Array(c.length+1).join(" "); + } else if (c == "&") { + return "&"; + } else if (c == "<") { + return "<"; + } else if (c == "\t") { + var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); + screenColumn += tabSize - 1; + return self.$tabStrings[tabSize]; + } 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 "" + space + ""; + } else if (b) { + return "" + self.SPACE_CHAR + ""; + } else { + screenColumn += 1; + return "" + c + ""; + } + }; + + var output = value.replace(replaceReg, replaceFunc); + + if (!this.$textToken[token.type]) { + var classes = "ace_" + token.type.replace(/\./g, " ace_"); + var style = ""; + if (token.type == "fold") + style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' "; + stringBuilder.push("", output, ""); + } + else { + stringBuilder.push(output); + } + return screenColumn + value.length; + }; + + this.$renderLineCore = function(stringBuilder, lastRow, tokens, splits, onlyContents) { + var chars = 0; + var split = 0; + var splitChars; + var screenColumn = 0; + var self = this; + + if (!splits || splits.length == 0) + splitChars = Number.MAX_VALUE; + else + splitChars = splits[0]; + + if (!onlyContents) { + stringBuilder.push("
      " + ); + } + + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + var value = token.value; + + if (chars + value.length < splitChars) { + screenColumn = self.$renderToken( + stringBuilder, screenColumn, token, value + ); + chars += value.length; + } + else { + while (chars + value.length >= splitChars) { + screenColumn = self.$renderToken( + stringBuilder, screenColumn, + token, value.substring(0, splitChars - chars) + ); + value = value.substring(splitChars - chars); + chars = splitChars; + + if (!onlyContents) { + stringBuilder.push("
      ", + "
      " + ); + } + + split ++; + screenColumn = 0; + splitChars = splits[split] || Number.MAX_VALUE; + } + if (value.length != 0) { + chars += value.length; + screenColumn = self.$renderToken( + stringBuilder, screenColumn, token, value + ); + } + } + } + + if (this.showInvisibles) { + if (lastRow !== this.session.getLength() - 1) + stringBuilder.push("" + this.EOL_CHAR + ""); + else + stringBuilder.push("" + this.EOF_CHAR + ""); + } + if (!onlyContents) + stringBuilder.push("
      "); + }; + + this.$renderLine = function(stringBuilder, row, tokens, onlyContents) { + // Check if the line to render is folded or not. If not, things are + // simple, otherwise, we need to fake some things... + if (!this.session.isRowFolded(row)) { + var splits = this.session.getRowSplitData(row); + this.$renderLineCore(stringBuilder, row, tokens, splits, onlyContents); + } else { + this.$renderFoldLine(stringBuilder, row, tokens, onlyContents); + } + }; + + this.$renderFoldLine = function(stringBuilder, row, tokens, onlyContents) { + var session = this.session, + foldLine = session.getFoldLine(row), + renderTokens = []; + + function addTokens(tokens, from, to) { + var idx = 0, col = 0; + while ((col + tokens[idx].value.length) < from) { + col += tokens[idx].value.length; + idx++; + + if (idx == tokens.length) { + return; + } + } + if (col != from) { + var value = tokens[idx].value.substring(from - col); + // Check if the token value is longer then the from...to spacing. + if (value.length > (to - from)) { + value = value.substring(0, to - from); + } + + renderTokens.push({ + type: tokens[idx].type, + value: value + }); + + col = from + value.length; + idx += 1; + } + + while (col < to) { + var value = tokens[idx].value; + if (value.length + col > to) { + value = value.substring(0, to - col); + } + renderTokens.push({ + type: tokens[idx].type, + value: value + }); + col += value.length; + idx += 1; + } + } + + foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) { + if (placeholder) { + renderTokens.push({ + type: "fold", + value: placeholder + }); + } else { + if (isNewRow) { + tokens = this.session.getTokens(row, row)[0].tokens; + } + if (tokens.length != 0) { + addTokens(tokens, lastColumn, column); + } + } + }.bind(this), foldLine.end.row, this.session.getLine(foldLine.end.row).length); + + // TODO: Build a fake splits array! + 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); + if (this.$measureNode) + this.$measureNode.parentNode.removeChild(this.$measureNode); + delete this.$measureNode; + }; + +}).call(Text.prototype); + +exports.Text = Text; + +}); +/* 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 + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/layer/cursor', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +var dom = require("../lib/dom"); + +var Cursor = function(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_cursor-layer"; + parentEl.appendChild(this.element); + + this.isVisible = false; + + this.cursors = []; + this.cursor = this.addCursor(); +}; + +(function() { + + this.$padding = 0; + this.setPadding = function(padding) { + this.$padding = padding; + }; + + this.setSession = function(session) { + this.session = session; + }; + + this.addCursor = function() { + var el = dom.createElement("div"); + var className = "ace_cursor"; + if (!this.isVisible) + className += " ace_hidden"; + if (this.overwrite) + className += " ace_overwrite"; + + el.className = className; + this.element.appendChild(el); + this.cursors.push(el); + return el; + }; + + this.removeCursor = function() { + if (this.cursors.length > 1) { + var el = this.cursors.pop(); + el.parentNode.removeChild(el); + return el; + } + }; + + this.hideCursor = function() { + this.isVisible = false; + for (var i = this.cursors.length; i--; ) + dom.addCssClass(this.cursors[i], "ace_hidden"); + clearInterval(this.blinkId); + }; + + this.showCursor = function() { + this.isVisible = true; + for (var i = this.cursors.length; i--; ) + dom.removeCssClass(this.cursors[i], "ace_hidden"); + + this.element.style.visibility = ""; + this.restartTimer(); + }; + + this.restartTimer = function() { + clearInterval(this.blinkId); + if (!this.isVisible) + return; + + var element = this.cursors.length == 1 ? this.cursor : this.element; + this.blinkId = setInterval(function() { + element.style.visibility = "hidden"; + setTimeout(function() { + element.style.visibility = ""; + }, 400); + }, 1000); + }; + + this.getPixelPosition = function(position, onScreen) { + if (!this.config || !this.session) { + return { + left : 0, + top : 0 + }; + } + + if (!position) + position = this.session.selection.getCursor(); + var pos = this.session.documentToScreenPosition(position); + var cursorLeft = Math.round(this.$padding + + pos.column * this.config.characterWidth); + var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * + this.config.lineHeight; + + return { + left : cursorLeft, + top : cursorTop + }; + }; + + this.update = function(config) { + this.config = config; + + if (this.session.selectionMarkerCount > 0) { + var selections = this.session.$selectionMarkers; + var i = 0, sel, cursorIndex = 0; + + for (var i = selections.length; i--; ) { + sel = selections[i]; + var pixelPos = this.getPixelPosition(sel.cursor, true); + + var style = (this.cursors[cursorIndex++] || this.addCursor()).style; + + style.left = pixelPos.left + "px"; + style.top = pixelPos.top + "px"; + style.width = config.characterWidth + "px"; + style.height = config.lineHeight + "px"; + } + if (cursorIndex > 1) + while (this.cursors.length > cursorIndex) + this.removeCursor(); + } else { + var pixelPos = this.getPixelPosition(null, true); + var style = this.cursor.style; + style.left = pixelPos.left + "px"; + style.top = pixelPos.top + "px"; + style.width = config.characterWidth + "px"; + style.height = config.lineHeight + "px"; + + while (this.cursors.length > 1) + this.removeCursor(); + } + + var overwrite = this.session.getOverwrite(); + if (overwrite != this.overwrite) + this.$setOverite(overwrite); + + // cache for textarea and gutter highlight + this.$pixelPos = pixelPos; + + this.restartTimer(); + }; + + this.$setOverite = function(overwrite) { + this.overwrite = overwrite; + for (var i = this.cursors.length; i--; ) { + if (overwrite) + dom.addCssClass(this.cursors[i], "ace_overwrite"); + else + dom.removeCssClass(this.cursors[i], "ace_overwrite"); + } + }; + + this.destroy = function() { + clearInterval(this.blinkId); + } + +}).call(Cursor.prototype); + +exports.Cursor = Cursor; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Irakli Gozalishvili (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 ***** */ + +ace.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("./lib/oop"); +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; + +/** + * class ScrollBar + * + * A set of methods for setting and retrieving the editor's scrollbar. + * + **/ + +/** + * new ScrollBar(parent) + * - parent (DOMElement): A DOM element + * + * Creates a new `ScrollBar`. `parent` is the owner of the scroll bar. + * + **/ +var ScrollBar = function(parent) { + this.element = dom.createElement("div"); + this.element.className = "ace_sb"; + + this.inner = dom.createElement("div"); + this.element.appendChild(this.inner); + + parent.appendChild(this.element); + + // 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 + // 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)); +}; + +(function() { + oop.implement(this, EventEmitter); + + /** + * ScrollBar@onScroll + * + * Emitted when the scroll bar, well, scrolls. + * + **/ + this.onScroll = function() { + this._emit("scroll", {data: this.element.scrollTop}); + }; + + /** + * ScrollBar.getWidth() -> Number + * + * Returns the width of the scroll bar. + * + **/ + this.getWidth = function() { + return this.width; + }; + + /** + * ScrollBar.setHeight(height) + * - height (Number): The new height + * + * Sets the height of the scroll bar, in pixels. + * + **/ + this.setHeight = function(height) { + this.element.style.height = height + "px"; + }; + + /** + * ScrollBar.setInnerHeight(height) + * - height (Number): The new inner height + * + * Sets the inner height of the scroll bar, in pixels. + * + **/ + this.setInnerHeight = function(height) { + this.inner.style.height = height + "px"; + }; + + /** + * ScrollBar.setScrollTop(scrollTop) + * - scrollTop (Number): The new scroll top + * + * Sets the scroll top of the scroll bar. + * + **/ + // TODO: on chrome 17+ after for small zoom levels after this function + // this.element.scrollTop != scrollTop which makes page to scroll up. + this.setScrollTop = function(scrollTop) { + this.element.scrollTop = scrollTop; + }; + +}).call(ScrollBar.prototype); + +exports.ScrollBar = ScrollBar; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Irakli Gozalishvili (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 ***** */ + +ace.define('ace/renderloop', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) { +"use strict"; + +var event = require("./lib/event"); + +/** internal, hide + * class RenderLoop + * + * Batches changes (that force something to be redrawn) in the background. + * + **/ + +/** internal, hide + * new RenderLoop(onRender, win) + * + * + * +**/ +var RenderLoop = function(onRender, win) { + this.onRender = onRender; + this.pending = false; + this.changes = 0; + this.window = win || window; +}; + +(function() { + + /** internal, hide + * RenderLoop.schedule(change) + * - change (Array): + * + * + **/ + this.schedule = function(change) { + //this.onRender(change); + //return; + this.changes = this.changes | change; + if (!this.pending) { + this.pending = true; + var _self = this; + event.nextTick(function() { + _self.pending = false; + var changes; + while (changes = _self.changes) { + _self.changes = 0; + _self.onRender(changes); + } + }, this.window); + } + }; + +}).call(RenderLoop.prototype); + +exports.RenderLoop = RenderLoop; +}); +ace.define("text!ace/css/editor.css", [], "\n" + + ".ace_editor {\n" + + " position: absolute;\n" + + " overflow: hidden;\n" + + " font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Consolas', 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" + + ".ace_composition {\n" + + " position: absolute;\n" + + " background: #555;\n" + + " color: #DDD;\n" + + " z-index: 4;\n" + + "}\n" + + "\n" + + ".ace_gutter {\n" + + " position: absolute;\n" + + " overflow : hidden;\n" + + " height: 100%;\n" + + " width: auto;\n" + + " cursor: default;\n" + + " z-index: 1000;\n" + + "}\n" + + "\n" + + ".ace_gutter_active_line {\n" + + " position: absolute;\n" + + " right: 0;\n" + + " width: 100%;\n" + + "}\n" + + "\n" + + ".ace_gutter.horscroll {\n" + + " box-shadow: 0px 0px 20px rgba(0,0,0,0.4);\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: 0.5em;\n" + + " height: 1em;\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" + + " /* setting pointer-events: auto; on node under the mouse, which changes\n" + + " during scroll, will break mouse wheel scrolling in Safari */\n" + + " pointer-events: none;\n" + + "}\n" + + "\n" + + ".ace_gutter .ace_layer {\n" + + " position: relative;\n" + + " min-width: 40px;\n" + + " text-align: right;\n" + + " pointer-events: auto;\n" + + "}\n" + + "\n" + + ".ace_text-layer {\n" + + " color: black;\n" + + " font: inherit !important;\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_editor.multiselect .ace_cursor {\n" + + " border-left-width: 1px;\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: 5;\n" + + "}\n" + + "\n" + + ".ace_marker-layer .ace_bracket {\n" + + " position: absolute;\n" + + " z-index: 6;\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: 4;\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" + + "\n" + + ".ace_fade-fold-widgets .ace_fold-widget {\n" + + " -moz-transition: 0.5s opacity;\n" + + " -webkit-transition: 0.5s opacity;\n" + + " -o-transition: 0.5s opacity;\n" + + " -ms-transition: 0.5s opacity;\n" + + " transition: 0.5s opacity;\n" + + " opacity: 0;\n" + + "}\n" + + ".ace_fade-fold-widgets:hover .ace_fold-widget {\n" + + " -moz-transition-duration: 0.05s;\n" + + " -webkit-transition-duration: 0.05s;\n" + + " -o-transition-duration: 0.05s;\n" + + " -ms-transition-duration: 0.05s;\n" + + " transition-duration: 0.05s;\n" + + " -moz-transition-delay: 0.2s;\n" + + " -webkit-transition-delay: 0.2s;\n" + + " -o-transition-delay: 0.2s;\n" + + " -ms-transition-delay: 0.2s;\n" + + " transition-delay: 0.2s; \n" + + " opacity:1;\n" + + "}\n" + + ""); + +/* 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): + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/multi_select', ['require', 'exports', 'module' , 'ace/range_list', 'ace/range', 'ace/selection', 'ace/mouse/multi_select_handler', 'ace/lib/event', 'ace/commands/multi_select_commands', 'ace/search', 'ace/edit_session', 'ace/editor'], function(require, exports, module) { + +var RangeList = require("./range_list").RangeList; +var Range = require("./range").Range; +var Selection = require("./selection").Selection; +var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; +var event = require("./lib/event"); +exports.commands = require("./commands/multi_select_commands"); + +// Todo: session.find or editor.findVolatile that returns range +var Search = require("./search").Search; +var search = new Search(); + +function find(session, needle, dir) { + search.$options.wrap = true; + search.$options.needle = needle; + search.$options.backwards = dir == -1; + return search.find(session); +} + +// extend EditSession +var EditSession = require("./edit_session").EditSession; +(function() { + this.getSelectionMarkers = function() { + return this.$selectionMarkers; + }; +}).call(EditSession.prototype); + +// extend Selection +(function() { + // list of ranges in reverse addition order + this.ranges = null; + + // automatically sorted list of ranges + this.rangeList = null; + + /** extension + * Selection.addRange(range, $blockChangeEvents) + * - range (Range): The new range to add + * - $blockChangeEvents (Boolean): Whether or not to block changing events + * + * Adds a range to a selection by entering multiselect mode, if necessary. + **/ + this.addRange = function(range, $blockChangeEvents) { + if (!range) + return; + + if (!this.inMultiSelectMode && this.rangeCount == 0) { + var oldRange = this.toOrientedRange(); + if (range.intersects(oldRange)) + return $blockChangeEvents || this.fromOrientedRange(range); + + this.rangeList.add(oldRange); + this.$onAddRange(oldRange); + } + + if (!range.cursor) + range.cursor = range.end; + + var removed = this.rangeList.add(range); + + this.$onAddRange(range); + + if (removed.length) + this.$onRemoveRange(removed); + + if (this.rangeCount > 1 && !this.inMultiSelectMode) { + this._emit("multiSelect"); + this.inMultiSelectMode = true; + this.session.$undoSelect = false; + this.rangeList.attach(this.session); + } + + return $blockChangeEvents || this.fromOrientedRange(range); + }; + + this.toSingleRange = function(range) { + range = range || this.ranges[0]; + var removed = this.rangeList.removeAll(); + if (removed.length) + this.$onRemoveRange(removed); + + range && this.fromOrientedRange(range); + }; + + /** extension + * Selection.substractPoint(pos) -> Range + * - pos (Range): The position to remove, as a `{row, column}` object + * + * Removes a Range containing pos (if it exists). + **/ + this.substractPoint = function(pos) { + var removed = this.rangeList.substractPoint(pos); + if (removed) { + this.$onRemoveRange(removed); + return removed[0]; + } + }; + + /** extension + * Selection.mergeOverlappingRanges() + * + * Merges overlapping ranges ensuring consistency after changes + **/ + this.mergeOverlappingRanges = function() { + var removed = this.rangeList.merge(); + if (removed.length) + this.$onRemoveRange(removed); + else if(this.ranges[0]) + this.fromOrientedRange(this.ranges[0]); + }; + + this.$onAddRange = function(range) { + this.rangeCount = this.rangeList.ranges.length; + this.ranges.unshift(range); + this._emit("addRange", {range: range}); + }; + + this.$onRemoveRange = function(removed) { + this.rangeCount = this.rangeList.ranges.length; + if (this.rangeCount == 1 && this.inMultiSelectMode) { + var lastRange = this.rangeList.ranges.pop(); + removed.push(lastRange); + this.rangeCount = 0; + } + + for (var i = removed.length; i--; ) { + var index = this.ranges.indexOf(removed[i]); + this.ranges.splice(index, 1); + } + + this._emit("removeRange", {ranges: removed}); + + if (this.rangeCount == 0 && this.inMultiSelectMode) { + this.inMultiSelectMode = false; + this._emit("singleSelect"); + this.session.$undoSelect = true; + this.rangeList.detach(this.session); + } + + lastRange = lastRange || this.ranges[0]; + if (lastRange && !lastRange.isEqual(this.getRange())) + this.fromOrientedRange(lastRange); + }; + + // adds multicursor support to selection + this.$initRangeList = function() { + if (this.rangeList) + return; + + this.rangeList = new RangeList(); + this.ranges = []; + this.rangeCount = 0; + }; + + this.getAllRanges = function() { + return this.rangeList.ranges.concat(); + }; + + this.splitIntoLines = function () { + if (this.rangeCount > 1) { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); + } else { + var range = this.getRange(); + var startRow = range.start.row; + var endRow = range.end.row; + if (startRow == endRow) + return; + + var rectSel = []; + var r = this.getLineRange(startRow, true); + r.start.column = range.start.column; + rectSel.push(r); + + for (var i = startRow + 1; i < endRow; i++) + rectSel.push(this.getLineRange(i, true)); + + r = this.getLineRange(endRow, true); + r.end.column = range.end.column; + rectSel.push(r); + + rectSel.forEach(this.addRange, this); + } + }; + + this.toggleBlockSelection = function () { + if (this.rangeCount > 1) { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); + } else { + var cursor = this.session.documentToScreenPosition(this.selectionLead); + var anchor = this.session.documentToScreenPosition(this.selectionAnchor); + + var rectSel = this.rectangularRangeBlock(cursor, anchor); + rectSel.forEach(this.addRange, this); + } + }; + + /** extension + * Selection.rectangularRangeBlock(screenCursor, screenAnchor, includeEmptyLines) -> Range + * - screenCursor (Cursor): The cursor to use + * - screenAnchor (Anchor): The anchor to use + * - includeEmptyLins (Boolean): If true, this includes ranges inside the block which are empty due to clipping + * + * Gets list of ranges composing rectangular block on the screen + * + */ + this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) { + var rectSel = []; + + var xBackwards = screenCursor.column < screenAnchor.column; + if (xBackwards) { + var startColumn = screenCursor.column; + var endColumn = screenAnchor.column; + } else { + var startColumn = screenAnchor.column; + var endColumn = screenCursor.column; + } + + var yBackwards = screenCursor.row < screenAnchor.row; + if (yBackwards) { + var startRow = screenCursor.row; + var endRow = screenAnchor.row; + } else { + var startRow = screenAnchor.row; + var endRow = screenCursor.row; + } + + if (startColumn < 0) + startColumn = 0; + if (startRow < 0) + startRow = 0; + + if (startRow == endRow) + includeEmptyLines = true; + + for (var row = startRow; row <= endRow; row++) { + var range = Range.fromPoints( + this.session.screenToDocumentPosition(row, startColumn), + this.session.screenToDocumentPosition(row, endColumn) + ); + if (range.isEmpty()) { + if (docEnd && isSamePoint(range.end, docEnd)) + break; + var docEnd = range.end; + } + range.cursor = xBackwards ? range.start : range.end; + rectSel.push(range); + } + + if (yBackwards) + rectSel.reverse(); + + if (!includeEmptyLines) { + var end = rectSel.length - 1; + while (rectSel[end].isEmpty() && end > 0) + end--; + if (end > 0) { + var start = 0; + while (rectSel[start].isEmpty()) + start++; + } + for (var i = end; i >= start; i--) { + if (rectSel[i].isEmpty()) + rectSel.splice(i, 1); + } + } + + return rectSel; + }; +}).call(Selection.prototype); + +// extend Editor +var Editor = require("./editor").Editor; +(function() { + + /** extension + * Editor.updateSelectionMarkers() + * + * Updates the cursor and marker layers. + **/ + this.updateSelectionMarkers = function() { + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + /** extension + * Editor.addSelectionMarker(orientedRange) -> Range + * - orientedRange (Range): A range containing a cursor + * + * Adds the selection and cursor. + **/ + this.addSelectionMarker = function(orientedRange) { + if (!orientedRange.cursor) + orientedRange.cursor = orientedRange.end; + + var style = this.getSelectionStyle(); + orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); + + this.session.$selectionMarkers.push(orientedRange); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + return orientedRange; + }; + + /** extension + * Editor.removeSelectionMarker(range) + * - range (Range): The selection range added with [[Editor.addSelectionMarker `addSelectionMarker()`]]. + * + * Removes the selection marker. + **/ + this.removeSelectionMarker = function(range) { + if (!range.marker) + return; + this.session.removeMarker(range.marker); + var index = this.session.$selectionMarkers.indexOf(range); + if (index != -1) + this.session.$selectionMarkers.splice(index, 1); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + }; + + this.removeSelectionMarkers = function(ranges) { + var markerList = this.session.$selectionMarkers; + for (var i = ranges.length; i--; ) { + var range = ranges[i]; + if (!range.marker) + continue; + this.session.removeMarker(range.marker); + var index = markerList.indexOf(range); + if (index != -1) + markerList.splice(index, 1); + } + this.session.selectionMarkerCount = markerList.length; + }; + + this.$onAddRange = function(e) { + this.addSelectionMarker(e.range); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onRemoveRange = function(e) { + this.removeSelectionMarkers(e.ranges); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onMultiSelect = function(e) { + if (this.inMultiSelectMode) + return; + this.inMultiSelectMode = true; + + this.setStyle("multiselect"); + this.keyBinding.addKeyboardHandler(exports.commands.keyboardHandler); + this.commands.on("exec", this.$onMultiSelectExec); + + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onSingleSelect = function(e) { + if (this.session.multiSelect.inVirtualMode) + return; + this.inMultiSelectMode = false; + + this.unsetStyle("multiselect"); + this.keyBinding.removeKeyboardHandler(exports.commands.keyboardHandler); + + this.commands.removeEventListener("exec", this.$onMultiSelectExec); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onMultiSelectExec = function(e) { + var command = e.command; + var editor = e.editor; + if (!command.multiSelectAction) { + command.exec(editor, e.args || {}); + editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); + editor.multiSelect.mergeOverlappingRanges(); + } else if (command.multiSelectAction == "forEach") { + editor.forEachSelection(command, e.args); + } else if (command.multiSelectAction == "single") { + editor.exitMultiSelectMode(); + command.exec(editor, e.args || {}); + } else { + command.multiSelectAction(editor, e.args || {}); + } + e.preventDefault(); + }; + + /** extension + * Editor.forEachSelection(cmd, args) + * - cmd (String): The command to execute + * - args (String): Any arguments for the command + * + * Executes a command for each selection range. + **/ + this.forEachSelection = function(cmd, args) { + if (this.inVirtualSelectionMode) + return; + + var session = this.session; + var selection = this.selection; + var rangeList = selection.rangeList; + + var reg = selection._eventRegistry; + selection._eventRegistry = {}; + + var tmpSel = new Selection(session); + this.inVirtualSelectionMode = true; + for (var i = rangeList.ranges.length; i--;) { + tmpSel.fromOrientedRange(rangeList.ranges[i]); + this.selection = session.selection = tmpSel; + cmd.exec(this, args || {}); + tmpSel.toOrientedRange(rangeList.ranges[i]); + } + tmpSel.detach(); + + this.selection = session.selection = selection; + this.inVirtualSelectionMode = false; + selection._eventRegistry = reg; + selection.mergeOverlappingRanges(); + + this.onCursorChange(); + this.onSelectionChange(); + }; + + /** extension + * Editor.exitMultiSelectMode() -> Void + * + * Removes all the selections except the last added one. + **/ + this.exitMultiSelectMode = function() { + if (this.inVirtualSelectionMode) + return; + this.multiSelect.toSingleRange(); + }; + + this.getCopyText = function() { + var text = ""; + if (this.inMultiSelectMode) { + var ranges = this.multiSelect.rangeList.ranges; + text = []; + for (var i = 0; i < ranges.length; i++) { + text.push(this.session.getTextRange(ranges[i])); + } + text = text.join(this.session.getDocument().getNewLineCharacter()); + } else if (!this.selection.isEmpty()) { + text = this.session.getTextRange(this.getSelectionRange()); + } + + return text; + }; + + this.onPaste = function(text) { + this._emit("paste", text); + if (!this.inMultiSelectMode) + return this.insert(text); + + var lines = text.split(this.session.getDocument().getNewLineCharacter()); + var ranges = this.selection.rangeList.ranges; + + if (lines.length > ranges.length) { + this.commands.exec("insertstring", this, text); + return; + } + + for (var i = ranges.length; i--; ) { + var range = ranges[i]; + if (!range.isEmpty()) + this.session.remove(range); + + this.session.insert(range.start, lines[i]); + } + }; + + /** extension + * Editor.findAll(dir, options) -> Number + * - needle: text to find + * - options: search options + * - additive: keeps + * + * Finds and selects all the occurences of `needle`. + **/ + this.findAll = function(needle, options, additive) { + options = options || {}; + options.needle = needle || options.needle; + this.$search.set(options); + + var ranges = this.$search.findAll(this.session); + if (!ranges.length) + return 0; + + this.$blockScrolling += 1; + var selection = this.multiSelect; + + if (!additive) + selection.toSingleRange(ranges[0]); + + for (var i = ranges.length; i--; ) + selection.addRange(ranges[i], true); + + this.$blockScrolling -= 1; + + return ranges.length; + }; + + // commands + /** extension + * Editor.selectMoreLines(dir, skip) + * - dir (Number): The direction of lines to select: -1 for up, 1 for down + * - skip (Boolean): If `true`, removes the active selection range + * + * Adds a cursor above or below the active cursor. + **/ + this.selectMoreLines = function(dir, skip) { + var range = this.selection.toOrientedRange(); + var isBackwards = range.cursor == range.end; + + var screenLead = this.session.documentToScreenPosition(range.cursor); + if (this.selection.$desiredColumn) + screenLead.column = this.selection.$desiredColumn; + + var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); + + if (!range.isEmpty()) { + var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); + var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); + } else { + var anchor = lead; + } + + if (isBackwards) { + var newRange = Range.fromPoints(lead, anchor); + newRange.cursor = newRange.start; + } else { + var newRange = Range.fromPoints(anchor, lead); + newRange.cursor = newRange.end; + } + + newRange.desiredColumn = screenLead.column; + if (!this.selection.inMultiSelectMode) { + this.selection.addRange(range); + } else { + if (skip) + var toRemove = range.cursor; + } + + this.selection.addRange(newRange); + if (toRemove) + this.selection.substractPoint(toRemove); + }; + + /** extension + * Editor.transposeSelections(dir) + * - dir (Number): The direction to rotate selections + * + * Transposes the selected ranges. + **/ + this.transposeSelections = function(dir) { + var session = this.session; + var sel = session.multiSelect; + var all = sel.ranges; + + for (var i = all.length; i--; ) { + var range = all[i]; + if (range.isEmpty()) { + var tmp = session.getWordRange(range.start.row, range.start.column); + range.start.row = tmp.start.row; + range.start.column = tmp.start.column; + range.end.row = tmp.end.row; + range.end.column = tmp.end.column; + } + } + sel.mergeOverlappingRanges(); + + var words = []; + for (var i = all.length; i--; ) { + var range = all[i]; + words.unshift(session.getTextRange(range)); + } + + if (dir < 0) + words.unshift(words.pop()); + else + words.push(words.shift()); + + for (var i = all.length; i--; ) { + var range = all[i]; + var tmp = range.clone(); + session.replace(range, words[i]); + range.start.row = tmp.start.row; + range.start.column = tmp.start.column; + } + } + + /** extension + * Editor.selectMore(dir, skip) + * - dir (Number): The direction of lines to select: -1 for up, 1 for down + * - skip (Boolean): If `true`, removes the active selection range + * + * Finds the next occurence of text in an active selection and adds it to the selections. + **/ + this.selectMore = function (dir, skip) { + var session = this.session; + var sel = session.multiSelect; + + var range = sel.toOrientedRange(); + if (range.isEmpty()) { + var range = session.getWordRange(range.start.row, range.start.column); + range.cursor = range.end; + this.multiSelect.addRange(range); + } + var needle = session.getTextRange(range); + + var newRange = find(session, needle, dir); + if (newRange) { + newRange.cursor = dir == -1 ? newRange.start : newRange.end; + this.multiSelect.addRange(newRange); + } + if (skip) + this.multiSelect.substractPoint(range.cursor); + }; +}).call(Editor.prototype); + + +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; +} + +// patch +// adds multicursor support to a session +exports.onSessionChange = function(e) { + var session = e.session; + if (!session.multiSelect) { + session.$selectionMarkers = []; + session.selection.$initRangeList(); + session.multiSelect = session.selection; + } + this.multiSelect = session.multiSelect; + + var oldSession = e.oldSession; + if (oldSession) { + // todo use events + if (oldSession.multiSelect && oldSession.multiSelect.editor == this) + oldSession.multiSelect.editor = null; + + session.multiSelect.removeEventListener("addRange", this.$onAddRange); + session.multiSelect.removeEventListener("removeRange", this.$onRemoveRange); + session.multiSelect.removeEventListener("multiSelect", this.$onMultiSelect); + session.multiSelect.removeEventListener("singleSelect", this.$onSingleSelect); + } + + session.multiSelect.on("addRange", this.$onAddRange); + session.multiSelect.on("removeRange", this.$onRemoveRange); + session.multiSelect.on("multiSelect", this.$onMultiSelect); + session.multiSelect.on("singleSelect", this.$onSingleSelect); + + // this.$onSelectionChange = this.onSelectionChange.bind(this); + + if (this.inMultiSelectMode != session.selection.inMultiSelectMode) { + if (session.selection.inMultiSelectMode) + this.$onMultiSelect(); + else + this.$onSingleSelect(); + } +}; + +// MultiSelect(editor) +// adds multiple selection support to the editor +// (note: should be called only once for each editor instance) +function MultiSelect(editor) { + editor.$onAddRange = editor.$onAddRange.bind(editor); + editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); + editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); + editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); + + exports.onSessionChange.call(editor, editor); + editor.on("changeSession", exports.onSessionChange.bind(editor)); + + editor.on("mousedown", onMouseDown); + editor.commands.addCommands(exports.commands.defaultCommands); + + addAltCursorListeners(editor); +} + +function addAltCursorListeners(editor){ + var el = editor.textInput.getElement(); + var altCursor = false; + var contentEl = editor.renderer.content; + event.addListener(el, "keydown", function(e) { + if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) { + if (!altCursor) { + contentEl.style.cursor = "crosshair"; + altCursor = true; + } + } else if (altCursor) { + contentEl.style.cursor = ""; + } + }); + + event.addListener(el, "keyup", reset); + event.addListener(el, "blur", reset); + function reset() { + if (altCursor) { + contentEl.style.cursor = ""; + altCursor = false; + } + } +} + +exports.MultiSelect = MultiSelect; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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): + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/range_list', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + + +var RangeList = function() { + this.ranges = []; +}; + +(function() { + this.comparePoints = function(p1, p2) { + return p1.row - p2.row || p1.column - p2.column; + }; + + this.pointIndex = function(pos, startIndex) { + var list = this.ranges; + + for (var i = startIndex || 0; i < list.length; i++) { + var range = list[i]; + var cmp = this.comparePoints(pos, range.end); + + if (cmp > 0) + continue; + if (cmp == 0) + return i; + cmp = this.comparePoints(pos, range.start); + if (cmp >= 0) + return i; + + return -i-1; + } + return -i - 1; + }; + + this.add = function(range) { + var startIndex = this.pointIndex(range.start); + if (startIndex < 0) + startIndex = -startIndex - 1; + + var endIndex = this.pointIndex(range.end, startIndex); + + if (endIndex < 0) + endIndex = -endIndex - 1; + else + endIndex++; + + return this.ranges.splice(startIndex, endIndex - startIndex, range); + }; + + this.addList = function(list) { + var removed = []; + for (var i = list.length; i--; ) { + removed.push.call(removed, this.add(list[i])); + } + return removed; + }; + + this.substractPoint = function(pos) { + var i = this.pointIndex(pos); + + if (i >= 0) + return this.ranges.splice(i, 1); + }; + + // merge overlapping ranges + this.merge = function() { + var removed = []; + var list = this.ranges; + var next = list[0], range; + for (var i = 1; i < list.length; i++) { + range = next; + next = list[i]; + var cmp = this.comparePoints(range.end, next.start); + if (cmp < 0) + continue; + + if (cmp == 0 && !(range.isEmpty() || next.isEmpty())) + continue; + + if (this.comparePoints(range.end, next.end) < 0) { + range.end.row = next.end.row; + range.end.column = next.end.column; + } + + list.splice(i, 1); + removed.push(next); + next = range; + i--; + } + + return removed; + }; + + this.contains = function(row, column) { + return this.pointIndex({row: row, column: column}) >= 0; + }; + + this.containsPoint = function(pos) { + return this.pointIndex(pos) >= 0; + }; + + this.rangeAtPoint = function(pos) { + var i = this.pointIndex(pos); + if (i >= 0) + return this.ranges[i]; + }; + + + this.clipRows = function(startRow, endRow) { + var list = this.ranges; + if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) + return []; + + var startIndex = this.pointIndex({row: startRow, column: 0}); + if (startIndex < 0) + startIndex = -startIndex - 1; + var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex); + if (endIndex < 0) + endIndex = -endIndex - 1; + + var clipped = []; + for (var i = startIndex; i < endIndex; i++) { + clipped.push(list[i]); + } + return clipped; + }; + + this.removeAll = function() { + return this.ranges.splice(0, this.ranges.length); + }; + + this.attach = function(session) { + if (this.session) + this.detach(); + + this.session = session; + this.onChange = this.$onChange.bind(this); + + this.session.on('change', this.onChange); + }; + + this.detach = function() { + if (!this.session) + return; + this.session.removeListener('change', this.onChange); + this.session = null; + }; + + this.$onChange = function(e) { + var changeRange = e.data.range; + if (e.data.action[0] == "i"){ + var start = changeRange.start; + var end = changeRange.end; + } else { + var end = changeRange.start; + var start = changeRange.end; + } + var startRow = start.row; + var endRow = end.row; + var lineDif = endRow - startRow; + + var colDiff = -start.column + end.column; + + var ranges = this.ranges; + + for (var i=0, n = ranges.length; i < n; i++) { + var r = ranges[i]; + if (r.end.row < startRow) + continue; + if (r.start.row > startRow) + break; + + if (r.start.row == startRow && r.start.column >= start.column ) { + r.start.column += colDiff; + r.start.row += lineDif; + } + if (r.end.row == startRow && r.end.column >= start.column) { + r.end.column += colDiff; + r.end.row += lineDif; + } + } + + if (lineDif != 0 && i < n) { + for (; i < n; i++) { + var r = ranges[i]; + r.start.row += lineDif; + r.end.row += lineDif; + } + } + }; + +}).call(RangeList.prototype); + +exports.RangeList = RangeList; +}); +/* 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): + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mouse/multi_select_handler', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) { + +var event = require("../lib/event"); + + +// mouse +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; +} + +function onMouseDown(e) { + var ev = e.domEvent; + var alt = ev.altKey; + var shift = ev.shiftKey; + var ctrl = e.getAccelKey(); + var button = e.getButton(); + + if (!ctrl && !alt) { + if (e.editor.inMultiSelectMode) { + if (button == 0) { + e.editor.exitMultiSelectMode(); + } else if (button == 2) { + var editor = e.editor; + var selectionEmpty = editor.selection.isEmpty(); + editor.textInput.onContextMenu({x: e.clientX, y: e.clientY}, selectionEmpty); + event.capture(editor.container, function(){}, editor.textInput.onContextMenuClose); + e.stop(); + } + } + return; + } + + var editor = e.editor; + var selection = editor.selection; + var isMultiSelect = editor.inMultiSelectMode; + var pos = e.getDocumentPosition(); + var cursor = selection.getCursor(); + var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); + + + var mouseX = e.x, mouseY = e.y; + var onMouseSelection = function(e) { + mouseX = e.clientX; + mouseY = e.clientY; + }; + + var blockSelect = function() { + var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column); + + if (isSamePoint(screenCursor, newCursor) + && isSamePoint(cursor, selection.selectionLead)) + return; + screenCursor = newCursor; + + editor.selection.moveCursorToPosition(cursor); + editor.selection.clearSelection(); + editor.renderer.scrollCursorIntoView(); + + editor.removeSelectionMarkers(rectSel); + rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); + rectSel.forEach(editor.addSelectionMarker, editor); + editor.updateSelectionMarkers(); + }; + + var session = editor.session; + var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var screenCursor = screenAnchor; + + + + if (ctrl && !shift && !alt && button == 0) { + if (!isMultiSelect && inSelection) + return; // dragging + + if (!isMultiSelect) { + var range = selection.toOrientedRange(); + editor.addSelectionMarker(range); + } + + var oldRange = selection.rangeList.rangeAtPoint(pos); + + event.capture(editor.container, function(){}, function() { + var tmpSel = selection.toOrientedRange(); + + if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) + selection.substractPoint(tmpSel.cursor); + else { + if (range) { + editor.removeSelectionMarker(range); + selection.addRange(range); + } + selection.addRange(tmpSel); + } + }); + + } else if (!shift && alt && button == 0) { + e.stop(); + + if (isMultiSelect && !ctrl) + selection.toSingleRange(); + else if (!isMultiSelect && ctrl) + selection.addRange(); + + selection.moveCursorToPosition(pos); + selection.clearSelection(); + + var rectSel = []; + + var onMouseSelectionEnd = function(e) { + clearInterval(timerId); + editor.removeSelectionMarkers(rectSel); + for (var i = 0; i < rectSel.length; i++) + selection.addRange(rectSel[i]); + }; + + var onSelectionInterval = blockSelect; + + event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); + var timerId = setInterval(function() {onSelectionInterval();}, 20); + + return e.preventDefault(); + } +} + + +exports.onMouseDown = onMouseDown; + +}); +/* 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): + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/commands/multi_select_commands', ['require', 'exports', 'module' , 'ace/keyboard/hash_handler'], function(require, exports, module) { + +// commands to enter multiselect mode +exports.defaultCommands = [{ + name: "addCursorAbove", + exec: function(editor) { editor.selectMoreLines(-1); }, + bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}, + readonly: true +}, { + name: "addCursorBelow", + exec: function(editor) { editor.selectMoreLines(1); }, + bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}, + readonly: true +}, { + name: "addCursorAboveSkipCurrent", + exec: function(editor) { editor.selectMoreLines(-1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"}, + readonly: true +}, { + name: "addCursorBelowSkipCurrent", + exec: function(editor) { editor.selectMoreLines(1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"}, + readonly: true +}, { + name: "selectMoreBefore", + exec: function(editor) { editor.selectMore(-1); }, + bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"}, + readonly: true +}, { + name: "selectMoreAfter", + exec: function(editor) { editor.selectMore(1); }, + bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"}, + readonly: true +}, { + name: "selectNextBefore", + exec: function(editor) { editor.selectMore(-1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"}, + readonly: true +}, { + name: "selectNextAfter", + exec: function(editor) { editor.selectMore(1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"}, + readonly: true +}, { + name: "splitIntoLines", + exec: function(editor) { editor.multiSelect.splitIntoLines(); }, + bindKey: {win: "Ctrl-Shift-L", mac: "Ctrl-Shift-L"}, + readonly: true +}, { + name: "singleSelection", + bindKey: "esc", + exec: function(editor) { editor.exitMultiSelectMode(); }, + readonly: true, + isAvailable: function(editor) {return editor.inMultiSelectMode} +}]; + +// commands active in multiselect mode +exports.multiEditCommands = {"singleSelection": "esc"}; + +var HashHandler = require("../keyboard/hash_handler").HashHandler; +exports.keyboardHandler = new HashHandler(exports.multiEditCommands); + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/worker/worker_client', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/config'], function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var config = require("../config"); + +var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) { + + this.changeListener = this.changeListener.bind(this); + + if (config.get("packaged")) { + this.$worker = new Worker(config.get("workerPath") + "/" + packagedJs); + } + else { + var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_")); + this.$worker = new Worker(workerUrl); + + var tlns = {}; + for (var i=0; i + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +ace.define('ace/placeholder', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/event_emitter', 'ace/lib/oop'], function(require, exports, module) { +"use strict"; + +var Range = require('./range').Range; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var oop = require("./lib/oop"); + +/** + * class PlaceHolder + * + * TODO + * + **/ + +/** + * new PlaceHolder(session, length, pos, others, mainClass, othersClass) + * - session (Document): The document to associate with the anchor + * - length (Number): The starting row position + * - pos (Number): The starting column position + * - others (String): + * - mainClass (String): + * - othersClass (String): + * + * TODO + * + **/ + +var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) { + var _self = this; + this.length = length; + this.session = session; + this.doc = session.getDocument(); + this.mainClass = mainClass; + this.othersClass = othersClass; + this.$onUpdate = this.onUpdate.bind(this); + this.doc.on("change", this.$onUpdate); + this.$others = others; + + this.$onCursorChange = function() { + setTimeout(function() { + _self.onCursorChange(); + }); + }; + + this.$pos = pos; + // Used for reset + var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1}; + this.$undoStackDepth = undoStack.length; + this.setup(); + + session.selection.on("changeCursor", this.$onCursorChange); +}; + +(function() { + + oop.implement(this, EventEmitter); + + /** + * PlaceHolder.setup() + * + * TODO + * + **/ + this.setup = function() { + var _self = this; + var doc = this.doc; + var session = this.session; + var pos = this.$pos; + + this.pos = doc.createAnchor(pos.row, pos.column); + this.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); + this.pos.on("change", function(event) { + session.removeMarker(_self.markerId); + _self.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.mainClass, null, false); + }); + this.others = []; + this.$others.forEach(function(other) { + var anchor = doc.createAnchor(other.row, other.column); + _self.others.push(anchor); + }); + session.setUndoSelect(false); + }; + + /** + * PlaceHolder.showOtherMarkers() + * + * TODO + * + **/ + this.showOtherMarkers = function() { + if(this.othersActive) return; + var session = this.session; + var _self = this; + this.othersActive = true; + this.others.forEach(function(anchor) { + anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false); + anchor.on("change", function(event) { + session.removeMarker(anchor.markerId); + anchor.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.othersClass, null, false); + }); + }); + }; + + /** + * PlaceHolder.hideOtherMarkers() + * + * Hides all over markers in the [[EditSession `EditSession`]] that are not the currently selected one. + * + **/ + this.hideOtherMarkers = function() { + if(!this.othersActive) return; + this.othersActive = false; + for (var i = 0; i < this.others.length; i++) { + this.session.removeMarker(this.others[i].markerId); + } + }; + + /** + * PlaceHolder@onUpdate(e) + * + * Emitted when the place holder updates. + * + **/ + this.onUpdate = function(event) { + var delta = event.data; + var range = delta.range; + if(range.start.row !== range.end.row) return; + if(range.start.row !== this.pos.row) return; + if (this.$updating) return; + this.$updating = true; + var lengthDiff = delta.action === "insertText" ? range.end.column - range.start.column : range.start.column - range.end.column; + + if(range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1) { + var distanceFromStart = range.start.column - this.pos.column; + this.length += lengthDiff; + if(!this.session.$fromUndo) { + if(delta.action === "insertText") { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; + if(otherPos.row === range.start.row && range.start.column < otherPos.column) + newPos.column += lengthDiff; + this.doc.insert(newPos, delta.text); + } + } else if(delta.action === "removeText") { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; + if(otherPos.row === range.start.row && range.start.column < otherPos.column) + newPos.column += lengthDiff; + this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); + } + } + // Special case: insert in beginning + if(range.start.column === this.pos.column && delta.action === "insertText") { + setTimeout(function() { + this.pos.setPosition(this.pos.row, this.pos.column - lengthDiff); + for (var i = 0; i < this.others.length; i++) { + var other = this.others[i]; + var newPos = {row: other.row, column: other.column - lengthDiff}; + if(other.row === range.start.row && range.start.column < other.column) + newPos.column += lengthDiff; + other.setPosition(newPos.row, newPos.column); + } + }.bind(this), 0); + } + else if(range.start.column === this.pos.column && delta.action === "removeText") { + setTimeout(function() { + for (var i = 0; i < this.others.length; i++) { + var other = this.others[i]; + if(other.row === range.start.row && range.start.column < other.column) { + other.setPosition(other.row, other.column - lengthDiff); + } + } + }.bind(this), 0); + } + } + this.pos._emit("change", {value: this.pos}); + for (var i = 0; i < this.others.length; i++) { + this.others[i]._emit("change", {value: this.others[i]}); + } + } + this.$updating = false; + }; + + /** + * PlaceHolder@onCursorChange(e) + * + * Emitted when the cursor changes. + * + **/ + + this.onCursorChange = function(event) { + if (this.$updating) return; + var pos = this.session.selection.getCursor(); + if(pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { + this.showOtherMarkers(); + this._emit("cursorEnter", event); + } else { + this.hideOtherMarkers(); + this._emit("cursorLeave", event); + } + }; + + /** + * PlaceHolder.detach() + * + * TODO + * + **/ + this.detach = function() { + this.session.removeMarker(this.markerId); + this.hideOtherMarkers(); + this.doc.removeEventListener("change", this.$onUpdate); + this.session.selection.removeEventListener("changeCursor", this.$onCursorChange); + this.pos.detach(); + for (var i = 0; i < this.others.length; i++) { + this.others[i].detach(); + } + this.session.setUndoSelect(true); + }; + + /** + * PlaceHolder.cancel() + * + * TODO + * + **/ + this.cancel = function() { + if(this.$undoStackDepth === -1) + throw Error("Canceling placeholders only supported with undo manager attached to session."); + var undoManager = this.session.getUndoManager(); + var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth; + for (var i = 0; i < undosRequired; i++) { + undoManager.undo(true); + } + }; +}).call(PlaceHolder.prototype); + + +exports.PlaceHolder = PlaceHolder; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/textmate', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +exports.isDark = false; +exports.cssClass = "ace-tm"; +exports.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: #6B72E6;\ +}\ +\ +.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_storage,\ +.ace-tm .ace_line .ace_keyword {\ + color: blue;\ +}\ +\ +.ace-tm .ace_line .ace_constant {\ + color: rgb(197, 6, 11);\ +}\ +\ +.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: rgba(255, 0, 0, 0.1);\ + color: red;\ +}\ +\ +.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.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px white;\ + border-radius: 2px;\ +}\ +.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_gutter_active_line{\ + background-color : #dcdcdc;\ +}\ +\ +.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 dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); +}); +; + (function() { + ace.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/public/ace_editor/ace-uncompressed.js b/public/ace_editor/ace-uncompressed.js new file mode 100644 index 0000000..23e6191 --- /dev/null +++ b/public/ace_editor/ace-uncompressed.js @@ -0,0 +1,19976 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/** + * Define a module along with a payload + * @param module a name for the payload + * @param payload a function to call with (require, exports, module) params + */ + +(function() { + +var ACE_NAMESPACE = ""; + +var global = (function() { + return this; +})(); + +var _define = function(module, deps, payload) { + if (typeof module !== 'string') { + if (_define.original) + _define.original.apply(window, arguments); + else { + console.error('dropping module because define wasn\'t a string.'); + console.trace(); + } + return; + } + + if (arguments.length == 2) + payload = deps; + + if (!_define.modules) + _define.modules = {}; + + _define.modules[module] = payload; +}; + +/** + * Get at functionality define()ed using the function above + */ +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(parentId, module[i]); + if (!dep && _require.original) + return _require.original.apply(window, arguments); + params.push(dep); + } + if (callback) { + callback.apply(null, params); + } + } + else if (typeof module === 'string') { + var payload = lookup(parentId, module); + if (!payload && _require.original) + return _require.original.apply(window, arguments); + + if (callback) { + callback(); + } + + return payload; + } + else { + if (_require.original) + return _require.original.apply(window, arguments); + } +}; + +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(/[^\/]+\/\.\.\//, ""); + } + } + + return moduleName; +}; + +/** + * Internal function to lookup moduleNames and resolve them by calling the + * definition function if needed. + */ +var lookup = function(parentId, moduleName) { + + moduleName = normalizeModule(parentId, moduleName); + + var module = _define.modules[moduleName]; + if (!module) { + return null; + } + + if (typeof module === 'function') { + var exports = {}; + 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; + return exports; + } + + return module; +}; + +function exportAce(ns) { + + if (typeof requirejs !== "undefined") { + + var define = global.define; + global.define = function(id, deps, callback) { + if (typeof callback !== "function") + return define.apply(this, arguments); + + return define(id, deps, function(require, exports, module) { + if (deps[2] == "module") + module.packaged = true; + return callback.apply(this, arguments); + }); + }; + global.define.packaged = true; + + return; + } + + 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 ***** */ + +/** + * class Ace + * + * The main class required to set up an Ace instance in the browser. + * + * + **/ + +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/multi_select', 'ace/worker/worker_client', 'ace/keyboard/hash_handler', 'ace/keyboard/state_handler', 'ace/placeholder', 'ace/config', '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; +var MultiSelect = require("./multi_select").MultiSelect; + +// The following require()s are for inclusion in the built ace file +require("./worker/worker_client"); +require("./keyboard/hash_handler"); +require("./keyboard/state_handler"); +require("./placeholder"); +require("./config").init(); + + /** + * Ace.edit(el) -> Editor + * - el (String | DOMElement): Either the id of an element, or the element itself + * + * This method embeds the Ace editor into the DOM, at the element provided by `el`. + * + **/ +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"))); + new MultiSelect(editor); + 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 +// -- 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 + * + * 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 ( typeof(str) == 'string' && 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 +// 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 + * Mihai Sucan + * Irakli Gozalishvili (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('ace/lib/dom', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +var XHTML_NS = "http://www.w3.org/1999/xhtml"; + +exports.createElement = function(tag, ns) { + return document.createElementNS ? + document.createElementNS(ns || XHTML_NS, tag) : + document.createElement(tag); +}; + +exports.setText = function(elem, text) { + if (elem.innerText !== undefined) { + elem.innerText = text; + } + if (elem.textContent !== undefined) { + elem.textContent = text; + } +}; + +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; + } +}; + +/* +* 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); + } + 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); + } + if(add) + classes.push(name); + + el.className = classes.join(" "); + return add; +}; + +/* + * Add or remove a CSS class from the list of classes on the given node + * depending on the value of include + */ +exports.setCssClass = function(node, className, include) { + if (include) { + exports.addCssClass(node, className); + } else { + exports.removeCssClass(node, className); + } +}; + +exports.hasCssString = function(id, doc) { + var index = 0, sheets; + doc = doc || document; + + if (doc.createStyleSheet && (sheets = doc.styleSheets)) { + while (index < sheets.length) + if (sheets[index++].owningElement.id === id) return true; + } else if ((sheets = doc.getElementsByTagName("style"))) { + while (index < sheets.length) + if (sheets[index++].id === id) return true; + } + + 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.owningElement.id = 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"), 10) + + parseInt(exports.computedStyle(element, "paddingRight"), 10) + + element.clientWidth + ); +}; + +exports.getInnerHeight = function(element) { + return ( + parseInt(exports.computedStyle(element, "paddingTop"), 10) + + parseInt(exports.computedStyle(element, "paddingBottom"), 10) + + element.clientHeight + ); +}; + +if (window.pageYOffset !== undefined) { + exports.getPageScrollTop = function() { + return window.pageYOffset; + }; + + exports.getPageScrollLeft = function() { + return window.pageXOffset; + }; +} +else { + exports.getPageScrollTop = function() { + return document.body.scrollTop; + }; + + exports.getPageScrollLeft = function() { + return document.body.scrollLeft; + }; +} + +if (window.getComputedStyle) + exports.computedStyle = function(element, style) { + if (style) + return (window.getComputedStyle(element, "") || {})[style] || ""; + return window.getComputedStyle(element, "") || {}; + }; +else + exports.computedStyle = function(element, style) { + if (style) + return element.currentStyle[style]; + return element.currentStyle; + }; + +exports.scrollbarWidth = function(document) { + + var inner = exports.createElement("p"); + inner.style.width = "100%"; + inner.style.minWidth = "0px"; + inner.style.height = "200px"; + + var outer = exports.createElement("div"); + var style = outer.style; + + style.position = "absolute"; + style.left = "-10000px"; + style.overflow = "hidden"; + style.width = "200px"; + style.minWidth = "0px"; + style.height = "150px"; + + outer.appendChild(inner); + + var body = document.body || document.documentElement; + body.appendChild(outer); + + var noScrollbar = inner.offsetWidth; + + style.overflow = "scroll"; + var withScrollbar = inner.offsetWidth; + + if (noScrollbar == withScrollbar) { + withScrollbar = outer.clientWidth; + } + + body.removeChild(outer); + + return noScrollbar-withScrollbar; +}; + +/* + * Optimized set innerHTML. This is faster than plain innerHTML if the element + * already contains a lot of child elements. + * + * See http://blog.stevenlevithan.com/archives/faster-than-innerhtml for details + */ +exports.setInnerHtml = function(el, innerHtml) { + var element = el.cloneNode(false);//document.createElement("div"); + element.innerHTML = innerHtml; + el.parentNode.replaceChild(element, el); + return element; +}; + +exports.setInnerText = function(el, innerText) { + var document = el.ownerDocument; + if (document.body && "textContent" in document.body) + el.textContent = innerText; + else + el.innerText = innerText; + +}; + +exports.getInnerText = function(el) { + var document = el.ownerDocument; + if (document.body && "textContent" in document.body) + return el.textContent; + else + return el.innerText || el.textContent || ""; +}; + +exports.getParentWindow = function(document) { + return document.defaultView || document.parentWindow; +}; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/useragent', 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +var keys = require("./keys"); +var useragent = require("./useragent"); +var dom = require("./dom"); + +exports.addListener = function(elem, type, callback) { + if (elem.addEventListener) { + return elem.addEventListener(type, callback, false); + } + if (elem.attachEvent) { + var wrapper = function() { + callback(window.event); + }; + callback._wrapper = wrapper; + elem.attachEvent("on" + type, wrapper); + } +}; + +exports.removeListener = function(elem, type, callback) { + if (elem.removeEventListener) { + return elem.removeEventListener(type, callback, false); + } + if (elem.detachEvent) { + elem.detachEvent("on" + type, callback._wrapper || callback); + } +}; + +/* +* Prevents propagation and clobbers the default action of the passed event +*/ +exports.stopEvent = function(e) { + exports.stopPropagation(e); + exports.preventDefault(e); + return false; +}; + +exports.stopPropagation = function(e) { + if (e.stopPropagation) + e.stopPropagation(); + else + e.cancelBubble = true; +}; + +exports.preventDefault = function(e) { + if (e.preventDefault) + e.preventDefault(); + else + e.returnValue = false; +}; + +/* + * @return {Number} 0 for left button, 1 for middle button, 2 for right button + */ +exports.getButton = function(e) { + if (e.type == "dblclick") + return 0; + else if (e.type == "contextmenu") + return 2; + + // DOM Event + if (e.preventDefault) { + return e.button; + } + // old IE + else { + return {1:0, 2:2, 4:1}[e.button]; + } +}; + +if (document.documentElement.setCapture) { + exports.capture = function(el, eventHandler, releaseCaptureHandler) { + function onMouseMove(e) { + eventHandler(e); + return exports.stopPropagation(e); + } + + var called = false; + function onReleaseCapture(e) { + eventHandler(e); + + if (!called) { + called = true; + releaseCaptureHandler(e); + } + + exports.removeListener(el, "mousemove", eventHandler); + exports.removeListener(el, "mouseup", onReleaseCapture); + exports.removeListener(el, "losecapture", onReleaseCapture); + + el.releaseCapture(); + } + + exports.addListener(el, "mousemove", eventHandler); + exports.addListener(el, "mouseup", onReleaseCapture); + exports.addListener(el, "losecapture", onReleaseCapture); + el.setCapture(); + }; +} +else { + exports.capture = function(el, eventHandler, releaseCaptureHandler) { + function onMouseMove(e) { + eventHandler(e); + e.stopPropagation(); + } + + function onMouseUp(e) { + eventHandler && eventHandler(e); + releaseCaptureHandler && releaseCaptureHandler(e); + + document.removeEventListener("mousemove", onMouseMove, true); + document.removeEventListener("mouseup", onMouseUp, true); + + e.stopPropagation(); + } + + document.addEventListener("mousemove", onMouseMove, true); + document.addEventListener("mouseup", onMouseUp, true); + }; +} + +exports.addMouseWheelListener = function(el, callback) { + var factor = 8; + var listener = function(e) { + if (e.wheelDelta !== undefined) { + if (e.wheelDeltaX !== undefined) { + e.wheelX = -e.wheelDeltaX / factor; + e.wheelY = -e.wheelDeltaY / factor; + } else { + e.wheelX = 0; + e.wheelY = -e.wheelDelta / factor; + } + } + else { + if (e.axis && e.axis == e.HORIZONTAL_AXIS) { + e.wheelX = (e.detail || 0) * 5; + e.wheelY = 0; + } else { + e.wheelX = 0; + e.wheelY = (e.detail || 0) * 5; + } + } + callback(e); + }; + exports.addListener(el, "DOMMouseScroll", listener); + exports.addListener(el, "mousewheel", listener); +}; + +exports.addMultiMouseDownListener = function(el, button, count, timeout, callback) { + var clicks = 0; + var startX, startY; + + var listener = function(e) { + clicks += 1; + if (clicks == 1) { + startX = e.clientX; + startY = e.clientY; + + setTimeout(function() { + clicks = 0; + }, timeout || 600); + } + + var isButton = exports.getButton(e) == button; + if (!isButton || Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5) + clicks = 0; + + if (clicks == count) { + clicks = 0; + callback(e); + } + + if (isButton) + return exports.preventDefault(e); + }; + + exports.addListener(el, "mousedown", listener); + useragent.isOldIE && exports.addListener(el, "dblclick", listener); +}; + +function normalizeCommandKeys(callback, e, keyCode) { + var hashId = 0; + if (useragent.isOpera && useragent.isMac) { + hashId = 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) + | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0); + } else { + hashId = 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) + | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); + } + + if (keyCode in keys.MODIFIER_KEYS) { + switch (keys.MODIFIER_KEYS[keyCode]) { + case "Alt": + hashId = 2; + break; + case "Shift": + hashId = 4; + break; + case "Ctrl": + hashId = 1; + break; + default: + hashId = 8; + break; + } + keyCode = 0; + } + + if (hashId & 8 && (keyCode == 91 || keyCode == 93)) { + keyCode = 0; + } + + // 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 && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { + return false; + } + return callback(e, hashId, keyCode); +} + +exports.addCommandKeyListener = function(el, callback) { + var addListener = exports.addListener; + if (useragent.isOldGecko || useragent.isOpera) { + // Old versions of Gecko aka. Firefox < 4.0 didn't repeat the keydown + // event if the user pressed the key for a longer time. Instead, the + // keydown event was fired once and later on only the keypress event. + // To emulate the 'right' keydown behavior, the keyCode of the initial + // keyDown event is stored and in the following keypress events the + // stores keyCode is used to emulate a keyDown event. + var lastKeyDownKeyCode = null; + addListener(el, "keydown", function(e) { + lastKeyDownKeyCode = e.keyCode; + }); + addListener(el, "keypress", function(e) { + return normalizeCommandKeys(callback, e, lastKeyDownKeyCode); + }); + } else { + var lastDown = null; + + addListener(el, "keydown", function(e) { + lastDown = e.keyIdentifier || e.keyCode; + return normalizeCommandKeys(callback, e, e.keyCode); + }); + } +}; + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/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; + +/** + * class Editor + * + * The main entry point into the Ace functionality. The `Editor` manages the `EditSession` (which manages `Document`s), as well as the `VirtualRenderer`, which draws everything to the screen. Event sessions dealing with the mouse and keyboard are bubbled up from `Document` to the `Editor`, which decides what to do with them. + * + **/ + +/** + * new Editor(renderer, session) + * - renderer (VirtualRenderer): Associated `VirtualRenderer` that draws everything + * - session (EditSession): The `EditSession` to refer to + * + * Creates a new `Editor` object. + * + **/ +var Editor = function(renderer, session) { + var container = renderer.getContainerElement(); + this.container = container; + this.renderer = renderer; + + this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); + this.textInput = new TextInput(renderer.getTextAreaContainer(), this); + this.renderer.textarea = this.textInput.getElement(); + this.keyBinding = new KeyBinding(this); + + // TODO detect touch event support + if (useragent.isIPad) { + //this.$mouseHandler = new TouchHandler(this); + } else { + this.$mouseHandler = new MouseHandler(this); + new FoldHandler(this); + } + + this.$blockScrolling = 0; + this.$search = new Search().set({ + wrap: true + }); + + this.setSession(session || new EditSession("")); +}; + +(function(){ + + oop.implement(this, EventEmitter); + + /** + * Editor.setKeyboardHandler(keyboardHandler) + * + * Sets a new keyboard handler. + **/ + this.setKeyboardHandler = function(keyboardHandler) { + this.keyBinding.setKeyboardHandler(keyboardHandler); + }; + + /** related to: KeyBinding + * Editor.getKeyboardHandler() -> String + * + * Returns the keyboard handler. + **/ + this.getKeyboardHandler = function() { + return this.keyBinding.getKeyboardHandler(); + }; + + /** + * Editor.setSession(session) + * - session (EditSession): The new session to use + * + * Sets a new editsession to use. This method also emits the `'changeSession'` event. + **/ + this.setSession = function(session) { + if (this.session == session) + return; + + if (this.session) { + var oldSession = 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 selection = this.session.getSelection(); + selection.removeEventListener("changeCursor", this.$onCursorChange); + selection.removeEventListener("changeSelection", this.$onSelectionChange); + } + + this.session = session; + + this.$onDocumentChange = this.onDocumentChange.bind(this); + session.addEventListener("change", this.$onDocumentChange); + this.renderer.setSession(session); + + this.$onChangeMode = this.onChangeMode.bind(this); + session.addEventListener("changeMode", this.$onChangeMode); + + this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); + session.addEventListener("tokenizerUpdate", this.$onTokenizerUpdate); + + this.$onChangeTabSize = this.renderer.updateText.bind(this.renderer); + session.addEventListener("changeTabSize", this.$onChangeTabSize); + + this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); + session.addEventListener("changeWrapLimit", this.$onChangeWrapLimit); + + this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); + session.addEventListener("changeWrapMode", this.$onChangeWrapMode); + + this.$onChangeFold = this.onChangeFold.bind(this); + session.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 = session.getSelection(); + this.selection.addEventListener("changeCursor", this.$onCursorChange); + + this.$onSelectionChange = this.onSelectionChange.bind(this); + this.selection.addEventListener("changeSelection", this.$onSelectionChange); + + this.onChangeMode(); + + this.$blockScrolling += 1; + this.onCursorChange(); + this.$blockScrolling -= 1; + + 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: session, + oldSession: oldSession + }); + }; + + /** + * Editor.getSession() -> EditSession + * + * Returns the current session being used. + **/ + this.getSession = function() { + return this.session; + }; + + /** + * Editor.getSelection() -> String + * + * Returns the currently highlighted selection. + **/ + this.getSelection = function() { + return this.selection; + }; + + /** related to: VirtualRenderer.onResize + * Editor.resize() + * + * {:VirtualRenderer.onResize} + **/ + this.resize = function() { + this.renderer.onResize(); + }; + + /** + * Editor.setTheme(theme) + * + * {:VirtualRenderer.setTheme} + **/ + this.setTheme = function(theme) { + this.renderer.setTheme(theme); + }; + + /** related to: VirtualRenderer.getTheme + * Editor.getTheme() -> String + * + * {:VirtualRenderer.getTheme} + **/ + this.getTheme = function() { + return this.renderer.getTheme(); + }; + + /** related to: VirtualRenderer.setStyle + * Editor.setStyle(style) + * + * {:VirtualRenderer.setStyle} + **/ + this.setStyle = function(style) { + this.renderer.setStyle(style); + }; + + /** related to: VirtualRenderer.unsetStyle + * Editor.unsetStyle(style) + * + * {:VirtualRenderer.unsetStyle} + **/ + this.unsetStyle = function(style) { + this.renderer.unsetStyle(style); + }; + + /** + * Editor.setFontSize(size) + * - size (Number): A font size + * + * Set a new font size (in pixels) for the editor text. + **/ + this.setFontSize = function(size) { + this.container.style.fontSize = size; + this.renderer.updateFontSize(); + }; + + /** internal, hide + * Editor.$highlightBrackets() + * + **/ + this.$highlightBrackets = function() { + if (this.session.$bracketHighlight) { + this.session.removeMarker(this.session.$bracketHighlight); + this.session.$bracketHighlight = null; + } + + if (this.$highlightPending) { + return; + } + + // perform highlight async to not block the browser during navigation + var self = this; + this.$highlightPending = true; + setTimeout(function() { + self.$highlightPending = false; + + var pos = self.session.findMatchingBracket(self.getCursorPosition()); + if (pos) { + var range = new Range(pos.row, pos.column, pos.row, pos.column+1); + self.session.$bracketHighlight = self.session.addMarker(range, "ace_bracket", "text"); + } + }, 10); + }; + + /** + * Editor.focus() + * + * Brings the current `textInput` into focus. + **/ + this.focus = function() { + // Safari needs the timeout + // iOS and Firefox need it called immediately + // to be on the save side we do both + var _self = this; + setTimeout(function() { + _self.textInput.focus(); + }); + this.textInput.focus(); + }; + + /** + * Editor.isFocused() -> Boolean + * + * Returns true if the current `textInput` is in focus. + **/ + this.isFocused = function() { + return this.textInput.isFocused(); + }; + + /** + * Editor.blur() + * + * Blurs the current `textInput`. + **/ + this.blur = function() { + this.textInput.blur(); + }; + + /** + * Editor@onFocus() + * + * Emitted once the editor comes into focus. + **/ + this.onFocus = function() { + this.renderer.showCursor(); + this.renderer.visualizeFocus(); + this._emit("focus"); + }; + + /** + * Editor@onBlur() + * + * Emitted once the editor has been blurred. + **/ + this.onBlur = function() { + this.renderer.hideCursor(); + this.renderer.visualizeBlur(); + this._emit("blur"); + }; + + this.$cursorChange = function() { + this.renderer.updateCursor(); + }; + + /** + * Editor@onDocumentChange(e) + * - e (Object): Contains a single property, `data`, which has the delta of changes + * + * Emitted whenever the document is changed. + * + **/ + 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") + 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.$cursorChange(); + }; + + /** + * Editor@onTokenizerUpdate(e) + * - e (Object): Contains a single property, `data`, which indicates the changed rows + * + * Emitted when the a tokenizer is updated. + **/ + this.onTokenizerUpdate = function(e) { + var rows = e.data; + this.renderer.updateLines(rows.first, rows.last); + }; + + /** + * Editor@onScrollTopChange() + * + * Emitted when the scroll top changes. + **/ + this.onScrollTopChange = function() { + this.renderer.scrollToY(this.session.getScrollTop()); + }; + + /** + * Editor@onScrollLeftChange() + * + * Emitted when the scroll left changes. + **/ + this.onScrollLeftChange = function() { + this.renderer.scrollToX(this.session.getScrollLeft()); + }; + + /** + * Editor@onCursorChange() + * + * Emitted when the cursor changes. + **/ + this.onCursorChange = function() { + this.$cursorChange(); + + if (!this.$blockScrolling) { + this.renderer.scrollCursorIntoView(); + } + + this.$highlightBrackets(); + this.$updateHighlightActiveLine(); + }; + + /** internal, hide + * Editor.$updateHighlightActiveLine() + * + * + **/ + this.$updateHighlightActiveLine = function() { + var session = this.getSession(); + + if (session.$highlightLineMarker) + session.removeMarker(session.$highlightLineMarker); + + session.$highlightLineMarker = null; + + if (this.$highlightActiveLine) { + var cursor = this.getCursorPosition(); + var foldLine = this.session.getFoldLine(cursor.row); + + if ((this.getSelectionStyle() != "line" || !this.selection.isMultiLine())) { + var range; + if (foldLine) { + range = new Range(foldLine.start.row, 0, foldLine.end.row + 1, 0); + } else { + range = new Range(cursor.row, 0, cursor.row+1, 0); + } + session.$highlightLineMarker = session.addMarker(range, "ace_active_line", "background"); + } + } + }; + + + /** + * Editor@onSelectionChange(e) + * - e (Object): Contains a single property, `data`, which has the delta of changes + * + * Emitted when a selection has changed. + **/ + this.onSelectionChange = function(e) { + var session = this.getSession(); + + if (session.$selectionMarker) { + session.removeMarker(session.$selectionMarker); + } + session.$selectionMarker = null; + + if (!this.selection.isEmpty()) { + var range = this.selection.getRange(); + var style = this.getSelectionStyle(); + session.$selectionMarker = session.addMarker(range, "ace_selection", style); + } else { + this.$updateHighlightActiveLine(); + } + + if (this.$highlightSelectedWord) + this.session.getMode().highlightSelection(this); + }; + + /** + * Editor@onChangeFrontMarker() + * + * Emitted when a front marker changes. + **/ + this.onChangeFrontMarker = function() { + this.renderer.updateFrontMarkers(); + }; + + /** + * Editor@onChangeBackMarker() + * + * Emitted when a back marker changes. + **/ + this.onChangeBackMarker = function() { + this.renderer.updateBackMarkers(); + }; + + /** + * Editor@onChangeBreakpoint() + * + * Emitted when a breakpoint changes. + **/ + this.onChangeBreakpoint = function() { + this.renderer.setBreakpoints(this.session.getBreakpoints()); + }; + + /** + * Editor@onChangeAnnotation() + * + * Emitted when an annotation changes. + **/ + this.onChangeAnnotation = function() { + this.renderer.setAnnotations(this.session.getAnnotations()); + }; + + /** + * Editor@onChangeMode() + * + * Emitted when the mode changes. + **/ + this.onChangeMode = function() { + this.renderer.updateText(); + }; + + /** + * Editor@onChangeWrapLimit() + * + * Emitted when the wrap limit changes. + **/ + this.onChangeWrapLimit = function() { + this.renderer.updateFull(); + }; + + /** + * Editor@onChangeWrapMode() + * + * Emitted when the wrap mode changes. + **/ + this.onChangeWrapMode = function() { + this.renderer.onResize(true); + }; + + /** + * Editor@onChangeFold() + * + * Emitted when the code folds change. + **/ + this.onChangeFold = function() { + // Update the active line marker as due to folding changes the current + // line range on the screen might have changed. + this.$updateHighlightActiveLine(); + // TODO: This might be too much updating. Okay for now. + this.renderer.updateFull(); + }; + + /** + * Editor.getCopyText() -> String + * + * Returns the string of text currently highlighted. + **/ + this.getCopyText = function() { + var text = ""; + if (!this.selection.isEmpty()) + text = this.session.getTextRange(this.getSelectionRange()); + + this._emit("copy", text); + return text; + }; + + /** + * Editor.onCopy() + * + * Called whenever a text "copy" happens. + **/ + this.onCopy = function() { + this.commands.exec("copy", this); + }; + + /** + * Editor.onCut() + * + * called whenever a text "cut" happens. + **/ + this.onCut = function() { + this.commands.exec("cut", this); + }; + + /** + * Editor.onPaste() + * + * called whenever a text "paste" happens. + **/ + this.onPaste = function(text) { + this._emit("paste", text); + this.insert(text); + }; + + /** + * Editor.insert(text) + * - text (String): The new text to add + * + * Inserts `text` into wherever the cursor is pointing. + **/ + this.insert = function(text) { + var session = this.session; + var mode = session.getMode(); + + var cursor = this.getCursorPosition(); + + if (this.getBehavioursEnabled()) { + // Get a transform if the current mode wants one. + var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); + if (transform) + text = transform.text; + } + + text = text.replace("\t", this.session.getTabString()); + + // remove selected text + if (!this.selection.isEmpty()) { + cursor = this.session.remove(this.getSelectionRange()); + this.clearSelection(); + } + else if (this.session.getOverwrite()) { + var range = new Range.fromPoints(cursor, cursor); + range.end.column += text.length; + this.session.remove(range); + } + + this.clearSelection(); + + var start = cursor.column; + var lineState = session.getState(cursor.row); + var shouldOutdent = mode.checkOutdent(lineState, session.getLine(cursor.row), text); + var line = session.getLine(cursor.row); + var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); + var end = session.insert(cursor, text); + + if (transform && transform.selection) { + if (transform.selection.length == 2) { // Transform relative to the current column + this.selection.setSelectionRange( + new Range(cursor.row, start + transform.selection[0], + cursor.row, start + transform.selection[1])); + } else { // Transform relative to the current row. + this.selection.setSelectionRange( + new Range(cursor.row + transform.selection[0], + transform.selection[1], + cursor.row + transform.selection[2], + transform.selection[3])); + } + } + + var lineState = session.getState(cursor.row); + + // TODO disabled multiline auto indent + // possibly doing the indent before inserting the text + // if (cursor.row !== end.row) { + if (session.getDocument().isNewLine(text)) { + this.moveCursorTo(cursor.row+1, 0); + + var size = session.getTabSize(); + var minIndent = Number.MAX_VALUE; + + for (var row = cursor.row + 1; row <= end.row; ++row) { + var indent = 0; + + line = session.getLine(row); + for (var i = 0; i < line.length; ++i) + if (line.charAt(i) == '\t') + indent += size; + else if (line.charAt(i) == ' ') + indent += 1; + else + break; + if (/[^\s]/.test(line)) + minIndent = Math.min(indent, minIndent); + } + + for (var row = cursor.row + 1; row <= end.row; ++row) { + var outdent = minIndent; + + line = session.getLine(row); + for (var i = 0; i < line.length && outdent > 0; ++i) + if (line.charAt(i) == '\t') + outdent -= size; + else if (line.charAt(i) == ' ') + outdent -= 1; + session.remove(new Range(row, 0, row, i)); + } + session.indentRows(cursor.row + 1, end.row, lineIndent); + } + if (shouldOutdent) + mode.autoOutdent(lineState, session, cursor.row); + }; + + /** + * Editor@onTextInput(text, pasted) + * - text (String): The text entered + * - pasted (Boolean): Identifies whether the text was pasted (`true`) or not + * + * Emitted when text is entered. + **/ + this.onTextInput = function(text) { + this.keyBinding.onTextInput(text); + }; + + /** + * Editor@onCommandKey(e, hashId, keyCode) + * + * Emitted when the command-key is pressed. + **/ + this.onCommandKey = function(e, hashId, keyCode) { + this.keyBinding.onCommandKey(e, hashId, keyCode); + }; + + /** related to: EditSession.setOverwrite + * Editor.setOverwrite(overwrite) + * - overwrite (Boolean): Defines wheter or not to set overwrites + * + * Pass in `true` to enable overwrites in your session, or `false` to disable. If overwrites is enabled, any text you enter will type over any text after it. If the value of `overwrite` changes, this function also emites the `changeOverwrite` event. + * + **/ + this.setOverwrite = function(overwrite) { + this.session.setOverwrite(overwrite); + }; + + /** related to: EditSession.getOverwrite + * Editor.getOverwrite() -> Boolean + * + * Returns `true` if overwrites are enabled; `false` otherwise. + **/ + this.getOverwrite = function() { + return this.session.getOverwrite(); + }; + + /** related to: EditSession.toggleOverwrite + * Editor.toggleOverwrite() + * + * Sets the value of overwrite to the opposite of whatever it currently is. + **/ + this.toggleOverwrite = function() { + this.session.toggleOverwrite(); + }; + + /** + * Editor.setScrollSpeed(speed) + * - speed (Number): A value indicating the new speed + * + * Sets how fast the mouse scrolling should do. + * + **/ + this.setScrollSpeed = function(speed) { + this.$mouseHandler.setScrollSpeed(speed); + }; + + /** + * Editor.getScrollSpeed() -> Number + * + * Returns the value indicating how fast the mouse scroll speed is. + **/ + this.getScrollSpeed = function() { + return this.$mouseHandler.getScrollSpeed(); + }; + + /** + * Editor.setDragDelay(dragDelay) + * - dragDelay (Number): A value indicating the new delay + * + * Sets the delay (in milliseconds) of the mouse drag. + * + **/ + this.setDragDelay = function(dragDelay) { + this.$mouseHandler.setDragDelay(dragDelay); + }; + + /** + * Editor.getDragDelay() -> Number + * + * Returns the current mouse drag delay. + **/ + this.getDragDelay = function() { + return this.$mouseHandler.getDragDelay(); + }; + + this.$selectionStyle = "line"; + /** + * Editor.setSelectionStyle(style) + * - style (String): The new selection style + * + * Indicates how selections should occur. By default, selections are set to "line". This function also emits the `'changeSelectionStyle'` event. + * + **/ + this.setSelectionStyle = function(style) { + if (this.$selectionStyle == style) return; + + this.$selectionStyle = style; + this.onSelectionChange(); + this._emit("changeSelectionStyle", {data: style}); + }; + + /** + * Editor.getSelectionStyle() -> String + * + * Returns the current selection style. + **/ + this.getSelectionStyle = function() { + return this.$selectionStyle; + }; + + this.$highlightActiveLine = true; + + /** + * Editor.setHighlightActiveLine(shouldHighlight) + * - shouldHighlight (Boolean): Set to `true` to highlight the current line + * + * Determines whether or not the current line should be highlighted. + * + **/ + this.setHighlightActiveLine = function(shouldHighlight) { + if (this.$highlightActiveLine == shouldHighlight) + return; + + this.$highlightActiveLine = shouldHighlight; + this.$updateHighlightActiveLine(); + }; + + /** + * Editor.getHighlightActiveLine() -> Boolean + * + * Returns `true` if current lines are always highlighted. + **/ + this.getHighlightActiveLine = function() { + return this.$highlightActiveLine; + }; + + this.$highlightGutterLine = true; + this.setHighlightGutterLine = function(shouldHighlight) { + if (this.$highlightGutterLine == shouldHighlight) + return; + + this.renderer.setHighlightGutterLine(shouldHighlight); + }; + + this.getHighlightGutterLine = function() { + return this.$highlightGutterLine; + }; + + this.$highlightSelectedWord = true; + /** + * Editor.setHighlightSelectedWord(shouldHighlight) + * - shouldHighlight (Boolean): Set to `true` to highlight the currently selected word + * + * Determines if the currently selected word should be highlighted. + **/ + this.setHighlightSelectedWord = function(shouldHighlight) { + if (this.$highlightSelectedWord == shouldHighlight) + return; + + this.$highlightSelectedWord = shouldHighlight; + if (shouldHighlight) + this.session.getMode().highlightSelection(this); + else + this.session.getMode().clearSelectionHighlight(this); + }; + + /** + * Editor.getHighlightSelectedWord() -> Boolean + * + * Returns `true` if currently highlighted words are to be highlighted. + **/ + this.getHighlightSelectedWord = function() { + return this.$highlightSelectedWord; + }; + + this.setAnimatedScroll = function(shouldAnimate){ + this.renderer.setAnimatedScroll(shouldAnimate); + }; + + this.getAnimatedScroll = function(){ + return this.renderer.getAnimatedScroll(); + }; + + /** + * Editor.setShowInvisibles(showInvisibles) + * - showInvisibles (Boolean): Specifies whether or not to show invisible characters + * + * If `showInvisibiles` is set to `true`, invisible characters—like spaces or new lines—are show in the editor. + **/ + this.setShowInvisibles = function(showInvisibles) { + if (this.getShowInvisibles() == showInvisibles) + return; + + this.renderer.setShowInvisibles(showInvisibles); + }; + + /** + * Editor.getShowInvisibles() -> Boolean + * + * Returns `true` if invisible characters are being shown. + **/ + this.getShowInvisibles = function() { + return this.renderer.getShowInvisibles(); + }; + + /** + * Editor.setShowPrintMargin(showPrintMargin) + * - showPrintMargin (Boolean): Specifies whether or not to show the print margin + * + * If `showPrintMargin` is set to `true`, the print margin is shown in the editor. + **/ + this.setShowPrintMargin = function(showPrintMargin) { + this.renderer.setShowPrintMargin(showPrintMargin); + }; + + /** + * Editor.getShowPrintMargin() -> Boolean + * + * Returns `true` if the print margin is being shown. + **/ + this.getShowPrintMargin = function() { + return this.renderer.getShowPrintMargin(); + }; + + /** + * Editor.setPrintMarginColumn(showPrintMargin) + * - showPrintMargin (Number): Specifies the new print margin + * + * Sets the column defining where the print margin should be. + * + **/ + this.setPrintMarginColumn = function(showPrintMargin) { + this.renderer.setPrintMarginColumn(showPrintMargin); + }; + + /** + * Editor.getPrintMarginColumn() -> Number + * + * Returns the column number of where the print margin is. + **/ + this.getPrintMarginColumn = function() { + return this.renderer.getPrintMarginColumn(); + }; + + this.$readOnly = false; + /** + * Editor.setReadOnly(readOnly) + * - readOnly (Boolean): Specifies whether the editor can be modified or not + * + * If `readOnly` is true, then the editor is set to read-only mode, and none of the content can change. + **/ + this.setReadOnly = function(readOnly) { + this.$readOnly = readOnly; + }; + + /** + * Editor.getReadOnly() -> Boolean + * + * Returns `true` if the editor is set to read-only mode. + **/ + this.getReadOnly = function() { + return this.$readOnly; + }; + + this.$modeBehaviours = true; + + /** + * Editor.setBehavioursEnabled() + * - enabled (Boolean): Enables or disables behaviors + * + * Specifies whether to use behaviors or not. ["Behaviors" in this case is the auto-pairing of special characters, like quotation marks, parenthesis, or brackets.]{: #BehaviorsDef} + **/ + this.setBehavioursEnabled = function (enabled) { + this.$modeBehaviours = enabled; + }; + + /** + * Editor.getBehavioursEnabled() -> Boolean + * + * Returns `true` if the behaviors are currently enabled. {:BehaviorsDef} + **/ + this.getBehavioursEnabled = function () { + return this.$modeBehaviours; + }; + + /** + * Editor.setShowFoldWidgets(show) + * - show (Boolean): Specifies whether the fold widgets are shown + * + * Indicates whether the fold widgets are shown or not. + **/ + this.setShowFoldWidgets = function(show) { + var gutter = this.renderer.$gutterLayer; + if (gutter.getShowFoldWidgets() == show) + return; + + this.renderer.$gutterLayer.setShowFoldWidgets(show); + this.$showFoldWidgets = show; + this.renderer.updateFull(); + }; + + /** + * Editor.getShowFoldWidgets() -> Boolean + * + * Returns `true` if the fold widgets are shown. + **/ + this.getShowFoldWidgets = function() { + return this.renderer.$gutterLayer.getShowFoldWidgets(); + }; + + this.setFadeFoldWidgets = function(show) { + this.renderer.setFadeFoldWidgets(show); + }; + + this.getFadeFoldWidgets = function() { + return this.renderer.getFadeFoldWidgets(); + }; + + /** + * Editor.remove(dir) + * - dir (String): The direction of the deletion to occur, either "left" or "right" + * + * Removes words of text from the editor. A "word" is defined as a string of characters bookended by whitespace. + * + **/ + 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) + range = new_range; + } + + this.session.remove(range); + this.clearSelection(); + }; + + /** + * Editor.removeWordRight() + * + * Removes the word directly to the right of the current selection. + **/ + this.removeWordRight = function() { + if (this.selection.isEmpty()) + this.selection.selectWordRight(); + + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + + /** + * Editor.removeWordLeft() + * + * Removes the word directly to the left of the current selection. + **/ + this.removeWordLeft = function() { + if (this.selection.isEmpty()) + this.selection.selectWordLeft(); + + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + + /** + * Editor.removeToLineStart() + * + * Removes all the words to the left of the current selection, until the start of the line. + **/ + this.removeToLineStart = function() { + if (this.selection.isEmpty()) + this.selection.selectLineStart(); + + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + + /** + * Editor.removeToLineEnd() + * + * Removes all the words to the right of the current selection, until the end of the line. + **/ + this.removeToLineEnd = function() { + if (this.selection.isEmpty()) + this.selection.selectLineEnd(); + + var range = this.getSelectionRange(); + if (range.start.column == range.end.column && range.start.row == range.end.row) { + range.end.column = 0; + range.end.row++; + } + + this.session.remove(range); + this.clearSelection(); + }; + + /** + * Editor.splitLine() + * + * Splits the line at the current selection (by inserting an `'\n'`). + **/ + this.splitLine = function() { + if (!this.selection.isEmpty()) { + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + } + + var cursor = this.getCursorPosition(); + this.insert("\n"); + this.moveCursorToPosition(cursor); + }; + + /** + * Editor.transposeLetters() + * + * Transposes current line. + **/ + this.transposeLetters = function() { + if (!this.selection.isEmpty()) { + return; + } + + var cursor = this.getCursorPosition(); + var column = cursor.column; + if (column === 0) + return; + + var line = this.session.getLine(cursor.row); + var swap, range; + if (column < line.length) { + swap = line.charAt(column) + line.charAt(column-1); + range = new Range(cursor.row, column-1, cursor.row, column+1); + } + else { + swap = line.charAt(column-1) + line.charAt(column-2); + range = new Range(cursor.row, column-2, cursor.row, column); + } + this.session.replace(range, swap); + }; + + /** + * Editor.toLowerCase() + * + * Converts the current selection entirely into lowercase. + **/ + 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); + }; + + /** + * Editor.toUpperCase() + * + * Converts the current selection entirely into uppercase. + **/ + 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); + }; + + /** related to: EditSession.indentRows + * Editor.indent() + * + * Indents the current line. + **/ + this.indent = function() { + var session = this.session; + var range = this.getSelectionRange(); + + if (range.start.row < range.end.row || range.start.column < range.end.column) { + var rows = this.$getSelectedRows(); + session.indentRows(rows.first, rows.last, "\t"); + } else { + var indentString; + + if (this.session.getUseSoftTabs()) { + var size = session.getTabSize(), + position = this.getCursorPosition(), + column = session.documentToScreenColumn(position.row, position.column), + count = (size - column % size); + + indentString = lang.stringRepeat(" ", count); + } else + indentString = "\t"; + return this.insert(indentString); + } + }; + + /** related to: EditSession.outdentRows + * Editor.blockOutdent() + * + * Outdents the current line. + **/ + this.blockOutdent = function() { + var selection = this.session.getSelection(); + this.session.outdentRows(selection.getRange()); + }; + + /** + * Editor.toggleCommentLines() + * + * Given the currently selected range, this function either comments all lines or uncomments all lines (depending on whether it's commented or not). + **/ + this.toggleCommentLines = function() { + var state = this.session.getState(this.getCursorPosition().row); + var rows = this.$getSelectedRows(); + this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); + }; + + /** related to: EditSession.remove + * Editor.removeLines() + * + * Removes all the lines in the current selection + **/ + this.removeLines = function() { + var rows = this.$getSelectedRows(); + var range; + if (rows.first === 0 || rows.last+1 < this.session.getLength()) + range = new Range(rows.first, 0, rows.last+1, 0); + else + 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); + this.clearSelection(); + }; + + /** related to: EditSession.moveLinesDown + * Editor.moveLinesDown() -> Number + * + (Number): On success, it returns -1. + * + * Shifts all the selected lines down one row. + * + * + * + **/ + this.moveLinesDown = function() { + this.$moveLines(function(firstRow, lastRow) { + return this.session.moveLinesDown(firstRow, lastRow); + }); + }; + + /** related to: EditSession.moveLinesUp + * Editor.moveLinesUp() -> Number + * + (Number): On success, it returns -1. + * + * Shifts all the selected lines up one row. + * + * + **/ + this.moveLinesUp = function() { + this.$moveLines(function(firstRow, lastRow) { + return this.session.moveLinesUp(firstRow, lastRow); + }); + }; + + /** related to: EditSession.moveText + * Editor.moveText(fromRange, toPosition) -> Range + * - fromRange (Range): The range of text you want moved within the document + * - toPosition (Object): The location (row and column) where you want to move the text to + * + (Range): The new range where the text was moved to. + * + * Moves a range of text from the given range to the given position. `toPosition` is an object that looks like this: + * + * { row: newRowLocation, column: newColumnLocation } + * + * + **/ + this.moveText = function(range, toPosition) { + if (this.$readOnly) + return null; + + return this.session.moveText(range, toPosition); + }; + + /** related to: EditSession.duplicateLines + * Editor.copyLinesUp() -> Number + * + (Number): On success, returns 0. + * + * Copies all the selected lines up one row. + * + * + **/ + this.copyLinesUp = function() { + this.$moveLines(function(firstRow, lastRow) { + this.session.duplicateLines(firstRow, lastRow); + return 0; + }); + }; + + /** related to: EditSession.duplicateLines + * Editor.copyLinesDown() -> Number + * + (Number): On success, returns the number of new rows added; in other words, `lastRow - firstRow + 1`. + * + * Copies all the selected lines down one row. + * + * + * + **/ + this.copyLinesDown = function() { + this.$moveLines(function(firstRow, lastRow) { + return this.session.duplicateLines(firstRow, lastRow); + }); + }; + + + /** + * Editor.$moveLines(mover) + * - mover (Function): A method to call on each selected row + * + * Executes a specific function, which can be anything that manipulates selected lines, such as copying them, duplicating them, or shifting them. + * + **/ + 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); + + 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); + }); + } + }; + + /** + * Editor.$getSelectedRows() -> Object + * + * Returns an object indicating the currently selected rows. The object looks like this: + * + * { first: range.start.row, last: range.end.row } + * + **/ + this.$getSelectedRows = function() { + var range = this.getSelectionRange().collapseRows(); + + return { + first: range.start.row, + last: range.end.row + }; + }; + + /** internal, hide + * Editor@onCompositionStart(text) + * - text (String): The text being written + * + * + **/ + this.onCompositionStart = function(text) { + this.renderer.showComposition(this.getCursorPosition()); + }; + + /** internal, hide + * Editor@onCompositionUpdate(text) + * - text (String): The text being written + * + * + **/ + this.onCompositionUpdate = function(text) { + this.renderer.setCompositionText(text); + }; + + /** internal, hide + * Editor@onCompositionEnd() + * + * + **/ + this.onCompositionEnd = function() { + this.renderer.hideComposition(); + }; + + /** related to: VirtualRenderer.getFirstVisibleRow + * Editor.getFirstVisibleRow() -> Number + * + * {:VirtualRenderer.getFirstVisibleRow} + **/ + this.getFirstVisibleRow = function() { + return this.renderer.getFirstVisibleRow(); + }; + + /** related to: VirtualRenderer.getLastVisibleRow + * Editor.getLastVisibleRow() -> Number + * + * {:VirtualRenderer.getLastVisibleRow} + **/ + this.getLastVisibleRow = function() { + return this.renderer.getLastVisibleRow(); + }; + + /** + * Editor.isRowVisible(row) -> Boolean + * - row (Number): The row to check + * + * Indicates if the row is currently visible on the screen. + **/ + this.isRowVisible = function(row) { + return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); + }; + + /** + * Editor.isRowFullyVisible(row) -> Boolean + * - row (Number): The row to check + * + * Indicates if the entire row is currently visible on the screen. + **/ + this.isRowFullyVisible = function(row) { + return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); + }; + + /** + * Editor.$getVisibleRowCount() -> Number + * + * Returns the number of currently visibile rows. + **/ + this.$getVisibleRowCount = function() { + return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; + }; + + this.$moveByPage = function(dir, select) { + var renderer = this.renderer; + var config = this.renderer.layerConfig; + var rows = dir * Math.floor(config.height / config.lineHeight); + + this.$blockScrolling++; + if (select == true) { + this.selection.$moveSelection(function(){ + this.moveCursorBy(rows, 0); + }); + } else if (select == false) { + this.selection.moveCursorBy(rows, 0); + this.selection.clearSelection(); + } + this.$blockScrolling--; + + var scrollTop = renderer.scrollTop; + + renderer.scrollBy(0, rows * config.lineHeight); + if (select != null) + renderer.scrollCursorIntoView(null, 0.5); + + renderer.animateScrolling(scrollTop); + }; + + /** + * Editor.selectPageDown() + * + * Selects the text from the current position of the document until where a "page down" finishes. + **/ + this.selectPageDown = function() { + this.$moveByPage(1, true); + }; + + /** + * Editor.selectPageUp() + * + * Selects the text from the current position of the document until where a "page up" finishes. + **/ + this.selectPageUp = function() { + this.$moveByPage(-1, true); + }; + + /** + * Editor.gotoPageDown() + * + * Shifts the document to wherever "page down" is, as well as moving the cursor position. + **/ + this.gotoPageDown = function() { + this.$moveByPage(1, false); + }; + + /** + * Editor.gotoPageUp() + * + * Shifts the document to wherever "page up" is, as well as moving the cursor position. + **/ + this.gotoPageUp = function() { + this.$moveByPage(-1, false); + }; + + /** + * Editor.scrollPageDown() + * + * Scrolls the document to wherever "page down" is, without changing the cursor position. + **/ + this.scrollPageDown = function() { + this.$moveByPage(1); + }; + + /** + * Editor.scrollPageUp() + * + * Scrolls the document to wherever "page up" is, without changing the cursor position. + **/ + this.scrollPageUp = function() { + this.$moveByPage(-1); + }; + + /** related to: VirtualRenderer.scrollToRow + * Editor.scrollToRow(row) + * - row (Number): The row to move to + * + * Moves the editor to the specified row. + * + **/ + this.scrollToRow = function(row) { + this.renderer.scrollToRow(row); + }; + + /** related to: VirtualRenderer.scrollToLine + * Editor.scrollToLine(line, center) + * - line (Number): The line to scroll to + * - center (Boolean): If `true` + * - animate (Boolean): If `true` animates scrolling + * - callback (Function): Function to be called when the animation has finished + * + * TODO scrolls a to line, if center == true, puts line in middle of screen or attempts to) + **/ + this.scrollToLine = function(line, center, animate, callback) { + this.renderer.scrollToLine(line, center, animate, callback); + }; + + /** + * Editor.centerSelection() + * + * Attempts to center the current selection on the screen. + **/ + this.centerSelection = function() { + var range = this.getSelectionRange(); + var line = Math.floor(range.start.row + (range.end.row - range.start.row) / 2); + this.renderer.scrollToLine(line, true); + }; + + /** related to: Selection.getCursor + * Editor.getCursorPosition() -> Object + * + (Object): This returns an object that looks something like this:
      + * ```{ row: currRow, column: currCol }``` + * + * Gets the current position of the cursor. + * + * + * + **/ + this.getCursorPosition = function() { + return this.selection.getCursor(); + }; + + /** related to: EditSession.documentToScreenPosition + * Editor.getCursorPositionScreen() -> Number + * + * Returns the screen position of the cursor. + **/ + this.getCursorPositionScreen = function() { + return this.session.documentToScreenPosition(this.getCursorPosition()); + }; + + /** related to: Selection.getRange + * Editor.getSelectionRange() -> Range + * + * {:Selection.getRange} + **/ + this.getSelectionRange = function() { + return this.selection.getRange(); + }; + + + /** related to: Selection.selectAll + * Editor.selectAll() + * + * Selects all the text in editor. + **/ + this.selectAll = function() { + this.$blockScrolling += 1; + this.selection.selectAll(); + this.$blockScrolling -= 1; + }; + + /** related to: Selection.clearSelection + * Editor.clearSelection() + * + * {:Selection.clearSelection} + **/ + this.clearSelection = function() { + this.selection.clearSelection(); + }; + + /** related to: Selection.moveCursorTo + * Editor.moveCursorTo(row, column) + * - row (Number): The new row number + * - column (Number): The new column number + * + * Moves the cursor to the specified row and column. Note that this does not de-select the current selection. + * + **/ + this.moveCursorTo = function(row, column) { + this.selection.moveCursorTo(row, column); + }; + + /** related to: Selection.moveCursorToPosition + * Editor.moveCursorToPosition(pos) + * - pos (Object): An object with two properties, row and column + * + * Moves the cursor to the position indicated by `pos.row` and `pos.column`. + * + **/ + this.moveCursorToPosition = function(pos) { + this.selection.moveCursorToPosition(pos); + }; + + /** + * Editor.jumpToMatching() + * + * Moves the cursor's row and column to the next matching bracket. + * + **/ + 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); + } + }; + + /** + * Editor.gotoLine(lineNumber, column) + * - lineNumber (Number): The line number to go to + * - column (Number): A column number to go to + * - animate (Boolean): If `true` animates scolling + * + * Moves the cursor to the specified line number, and also into the indiciated column. + * + **/ + this.gotoLine = function(lineNumber, column, animate) { + 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.isRowFullyVisible(lineNumber - 1)) + this.scrollToLine(lineNumber - 1, true, animate); + }; + + /** related to: Editor.moveCursorTo + * Editor.navigateTo(row, column) + * - row (Number): The new row number + * - column (Number): The new column number + * + * Moves the cursor to the specified row and column. Note that this does de-select the current selection. + * + **/ + this.navigateTo = function(row, column) { + this.clearSelection(); + this.moveCursorTo(row, column); + }; + + /** + * Editor.navigateUp(times) + * - times (Number): The number of times to change navigation + * + * Moves the cursor up in the document the specified number of times. Note that this does de-select the current selection. + **/ + this.navigateUp = function(times) { + this.selection.clearSelection(); + times = times || 1; + this.selection.moveCursorBy(-times, 0); + }; + + /** + * Editor.navigateDown(times) + * - times (Number): The number of times to change navigation + * + * Moves the cursor down in the document the specified number of times. Note that this does de-select the current selection. + **/ + this.navigateDown = function(times) { + this.selection.clearSelection(); + times = times || 1; + this.selection.moveCursorBy(times, 0); + }; + + /** + * Editor.navigateLeft(times) + * - times (Number): The number of times to change navigation + * + * Moves the cursor left in the document the specified number of times. Note that this does de-select the current selection. + **/ + this.navigateLeft = function(times) { + if (!this.selection.isEmpty()) { + var selectionStart = this.getSelectionRange().start; + this.moveCursorToPosition(selectionStart); + } + else { + times = times || 1; + while (times--) { + this.selection.moveCursorLeft(); + } + } + this.clearSelection(); + }; + + /** + * Editor.navigateRight(times) + * - times (Number): The number of times to change navigation + * + * Moves the cursor right in the document the specified number of times. Note that this does de-select the current selection. + **/ + this.navigateRight = function(times) { + if (!this.selection.isEmpty()) { + var selectionEnd = this.getSelectionRange().end; + this.moveCursorToPosition(selectionEnd); + } + else { + times = times || 1; + while (times--) { + this.selection.moveCursorRight(); + } + } + this.clearSelection(); + }; + + /** + * Editor.navigateLineStart() + * + * Moves the cursor to the start of the current line. Note that this does de-select the current selection. + **/ + this.navigateLineStart = function() { + this.selection.moveCursorLineStart(); + this.clearSelection(); + }; + + /** + * Editor.navigateLineEnd() + * + * Moves the cursor to the end of the current line. Note that this does de-select the current selection. + **/ + this.navigateLineEnd = function() { + this.selection.moveCursorLineEnd(); + this.clearSelection(); + }; + + /** + * Editor.navigateFileEnd() + * + * Moves the cursor to the end of the current file. Note that this does de-select the current selection. + **/ + this.navigateFileEnd = function() { + var scrollTop = this.renderer.scrollTop; + this.selection.moveCursorFileEnd(); + this.clearSelection(); + this.renderer.animateScrolling(scrollTop); + }; + + /** + * Editor.navigateFileStart() + * + * Moves the cursor to the start of the current file. Note that this does de-select the current selection. + **/ + this.navigateFileStart = function() { + var scrollTop = this.renderer.scrollTop; + this.selection.moveCursorFileStart(); + this.clearSelection(); + this.renderer.animateScrolling(scrollTop); + }; + + /** + * Editor.navigateWordRight() + * + * Moves the cursor to the word immediately to the right of the current position. Note that this does de-select the current selection. + **/ + this.navigateWordRight = function() { + this.selection.moveCursorWordRight(); + this.clearSelection(); + }; + + /** + * Editor.navigateWordLeft() + * + * Moves the cursor to the word immediately to the left of the current position. Note that this does de-select the current selection. + **/ + this.navigateWordLeft = function() { + this.selection.moveCursorWordLeft(); + this.clearSelection(); + }; + + /** + * Editor.replace(replacement, options) + * - replacement (String): The text to replace with + * - options (Object): The [[Search `Search`]] options to use + * + * Replaces the first occurance of `options.needle` with the value in `replacement`. + **/ + this.replace = function(replacement, options) { + if (options) + this.$search.set(options); + + var range = this.$search.find(this.session); + var replaced = 0; + if (!range) + return replaced; + + if (this.$tryReplace(range, replacement)) { + replaced = 1; + } + if (range !== null) { + this.selection.setSelectionRange(range); + this.renderer.scrollSelectionIntoView(range.start, range.end); + } + + return replaced; + }; + + /** + * Editor.replaceAll(replacement, options) + * - replacement (String): The text to replace with + * - options (Object): The [[Search `Search`]] options to use + * + * Replaces all occurances of `options.needle` with the value in `replacement`. + **/ + this.replaceAll = function(replacement, options) { + if (options) { + this.$search.set(options); + } + + var ranges = this.$search.findAll(this.session); + var replaced = 0; + if (!ranges.length) + return replaced; + + this.$blockScrolling += 1; + + var selection = this.getSelectionRange(); + this.clearSelection(); + this.selection.moveCursorTo(0, 0); + + for (var i = ranges.length - 1; i >= 0; --i) { + if(this.$tryReplace(ranges[i], replacement)) { + replaced++; + } + } + + this.selection.setSelectionRange(selection); + this.$blockScrolling -= 1; + + return replaced; + }; + + this.$tryReplace = function(range, replacement) { + var input = this.session.getTextRange(range); + replacement = this.$search.replace(input, replacement); + if (replacement !== null) { + range.end = this.session.replace(range, replacement); + return range; + } else { + return null; + } + }; + + /** related to: Search.getOptions + * Editor.getLastSearchOptions() -> Object + * + * {:Search.getOptions} For more information on `options`, see [[Search `Search`]]. + **/ + this.getLastSearchOptions = function() { + return this.$search.getOptions(); + }; + + /** related to: Search.find + * Editor.find(needle, options) + * - needle (String): The text to search for + * - options (Object): An object defining various search properties + * - animate (Boolean): If `true` animate scrolling + * + * Attempts to find `needle` within the document. For more information on `options`, see [[Search `Search`]]. + **/ + this.find = function(needle, options, animate) { + this.clearSelection(); + options = options || {}; + options.needle = needle; + this.$search.set(options); + this.$find(false, animate); + }; + + /** related to: Editor.find + * Editor.findNext(options) + * - options (Object): search options + * - animate (Boolean): If `true` animate scrolling + * + * Performs another search for `needle` in the document. For more information on `options`, see [[Search `Search`]]. + **/ + this.findNext = function(options, animate) { + options = options || {}; + this.$search.set(options); + this.$find(false, animate); + }; + + /** related to: Editor.find + * Editor.findPrevious(options) + * - options (Object): search options + * - animate (Boolean): If `true` animate scrolling + * + * Performs a search for `needle` backwards. For more information on `options`, see [[Search `Search`]]. + **/ + this.findPrevious = function(options, animate) { + options = options || {}; + this.$search.set(options); + this.$find(true, animate); + }; + + this.$find = function(backwards, animate) { + 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.$blockScrolling += 1; + this.session.unfold(range); + this.selection.setSelectionRange(range); + this.$blockScrolling -= 1; + + var scrollTop = this.renderer.scrollTop; + this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); + this.renderer.animateScrolling(scrollTop); + } + }; + + /** related to: UndoManager.undo + * Editor.undo() + * + * {:UndoManager.undo} + **/ + this.undo = function() { + this.$blockScrolling++; + this.session.getUndoManager().undo(); + this.$blockScrolling--; + this.renderer.scrollCursorIntoView(null, 0.5); + }; + + /** related to: UndoManager.redo + * Editor.redo() + * + * {:UndoManager.redo} + **/ + this.redo = function() { + this.$blockScrolling++; + this.session.getUndoManager().redo(); + this.$blockScrolling--; + this.renderer.scrollCursorIntoView(null, 0.5); + }; + + /** + * Editor.destroy() + * + * Cleans up the entire editor. + **/ + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/textinput', ['require', 'exports', 'module' , 'ace/lib/event', 'ace/lib/useragent', 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +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.setAttribute("wrap", "off"); + + text.style.left = "-10000px"; + text.style.position = "fixed"; + parentNode.insertBefore(text, parentNode.firstChild); + + var PLACEHOLDER = String.fromCharCode(0); + sendText(); + + var inCompostion = false; + var copied = false; + var pasted = false; + var tempStyle = ''; + + function select() { + try { + text.select(); + } catch (e) {} + } + + function sendText(valueToSend) { + if (!copied) { + var value = valueToSend || text.value; + if (value) { + if (value.length > 1) { + if (value.charAt(0) == PLACEHOLDER) + value = value.substr(1); + else if (value.charAt(value.length - 1) == PLACEHOLDER) + value = value.slice(0, -1); + } + + if (value && value != PLACEHOLDER) { + if (pasted) + host.onPaste(value); + else + host.onTextInput(value); + } + + // If editor is no longer focused we quit immediately, since + // it means that something else is in charge now. + if (!isFocused()) + return false; + } + } + + copied = false; + pasted = false; + + // Safari doesn't fire copy events if no text is selected + text.value = PLACEHOLDER; + select(); + } + + var onTextInput = function(e) { + setTimeout(function () { + if (!inCompostion) + sendText(e.data); + }, 0); + }; + + var onPropertyChange = function(e) { + if (useragent.isOldIE && text.value.charCodeAt(0) > 128) return; + setTimeout(function() { + if (!inCompostion) + sendText(); + }, 0); + }; + + var onCompositionStart = function(e) { + inCompostion = true; + host.onCompositionStart(); + if (!useragent.isGecko) setTimeout(onCompositionUpdate, 0); + }; + + var onCompositionUpdate = function() { + if (!inCompostion) return; + host.onCompositionUpdate(text.value); + }; + + var onCompositionEnd = function(e) { + inCompostion = false; + host.onCompositionEnd(); + }; + + var onCopy = function(e) { + copied = true; + var copyText = host.getCopyText(); + if(copyText) + text.value = copyText; + else + e.preventDefault(); + select(); + setTimeout(function () { + sendText(); + }, 0); + }; + + var onCut = function(e) { + copied = true; + var copyText = host.getCopyText(); + if(copyText) { + text.value = copyText; + host.onCut(); + } else + e.preventDefault(); + select(); + setTimeout(function () { + sendText(); + }, 0); + }; + + event.addCommandKeyListener(text, host.onCommandKey.bind(host)); + + 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 ("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. + pasted = true; + // Some browsers support the event.clipboardData API. Use this to get + // the pasted content which increases speed if pasting a lot of lines. + if (e.clipboardData && e.clipboardData.getData) { + sendText(e.clipboardData.getData("text/plain")); + e.preventDefault(); + } + else { + // If a browser doesn't support any of the things above, use the regular + // method to detect the pasted input. + onPropertyChange(); + } + }); + + if ("onbeforecopy" in text && typeof clipboardData !== "undefined") { + event.addListener(text, "beforecopy", function(e) { + var copyText = host.getCopyText(); + if (copyText) + clipboardData.setData("Text", copyText); + else + e.preventDefault(); + }); + event.addListener(parentNode, "keydown", function(e) { + if (e.ctrlKey && e.keyCode == 88) { + var copyText = host.getCopyText(); + if (copyText) { + clipboardData.setData("Text", copyText); + host.onCut(); + } + event.preventDefault(e); + } + }); + } + else { + event.addListener(text, "copy", onCopy); + event.addListener(text, "cut", onCut); + } + + 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() { + host.onBlur(); + }); + + event.addListener(text, "focus", function() { + host.onFocus(); + select(); + }); + + this.focus = function() { + host.onFocus(); + select(); + text.focus(); + }; + + this.blur = function() { + text.blur(); + }; + + function isFocused() { + return document.activeElement === text; + } + this.isFocused = isFocused; + + this.getElement = function() { + return text; + }; + + this.onContextMenu = function(mousePos, isEmpty){ + if (mousePos) { + if (!tempStyle) + tempStyle = text.style.cssText; + + 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 () { + if (tempStyle) { + text.style.cssText = tempStyle; + tempStyle = ''; + } + sendText(); + }, 0); + }; +}; + +exports.TextInput = TextInput; +}); +/* 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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_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 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; + + new DefaultHandlers(this); + new DefaultGutterHandler(this); + + event.addListener(editor.container, "mousedown", function(e) { + editor.focus(); + return event.preventDefault(e); + }); + event.addListener(editor.container, "selectstart", function(e) { + return event.preventDefault(e); + }); + + var mouseTarget = editor.renderer.getMouseEventTarget(); + 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() { + + this.$scrollSpeed = 1; + this.setScrollSpeed = function(speed) { + this.$scrollSpeed = speed; + }; + + this.getScrollSpeed = function() { + return this.$scrollSpeed; + }; + + 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.getDragDelay = function() { + return this.$dragDelay; + }; + + 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; + + this.editor._emit(name, mouseEvent); + }; + + this.setState = function(state) { + this.state = state; + }; + + this.captureMouse = function(ev, state) { + if (state) + this.setState(state); + + this.x = ev.x; + this.y = ev.y; + + // do not move textarea during selection + var kt = this.editor.renderer.$keepTextAreaAtCursor; + this.editor.renderer.$keepTextAreaAtCursor = false; + + var self = this; + var onMouseSelection = function(e) { + self.x = e.clientX; + self.y = e.clientY; + }; + + var onMouseSelectionEnd = function(e) { + clearInterval(timerId); + self[self.state + "End"] && self[self.state + "End"](e); + self.$clickSelection = null; + self.editor.renderer.$keepTextAreaAtCursor = kt; + self.editor.renderer.$moveTextAreaToCursor(); + }; + + var onSelectionInterval = function() { + self[self.state] && self[self.state](); + } + + event.capture(this.editor.container, onMouseSelection, onMouseSelectionEnd); + var timerId = setInterval(onSelectionInterval, 20); + + ev.preventDefault(); + }; +}).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 + * Mike de Boer + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/dom', 'ace/lib/browser_focus'], function(require, exports, module) { +"use strict"; + +var dom = require("../lib/dom"); +var BrowserFocus = require("../lib/browser_focus").BrowserFocus; + + +var DRAG_OFFSET = 5; // pixels + + + +function DefaultHandlers(mouseHandler) { + mouseHandler.$clickSelection = null; + mouseHandler.browserFocus = new BrowserFocus(); + + var editor = mouseHandler.editor; + editor.setDefaultHandler("mousedown", this.onMouseDown.bind(mouseHandler)); + editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(mouseHandler)); + editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler)); + editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler)); + editor.setDefaultHandler("mousewheel", this.onScroll.bind(mouseHandler)); + + var exports = ["select", "startSelect", "drag", "dragEnd", "dragWait", + "dragWaitEnd", "startDrag"]; + + exports.forEach(function(x) { + mouseHandler[x] = this[x]; + }, this); + + mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, "getLineRange"); + mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, "getWordRange"); +} + +(function() { + + this.onMouseDown = function(ev) { + this.mousedownEvent = ev; + var inSelection = ev.inSelection(); + var pos = ev.getDocumentPosition(); + var editor = this.editor; + var _self = this; + + this.ev = ev + var selectionRange = editor.getSelectionRange(); + var selectionEmpty = selectionRange.isEmpty(); + + var button = ev.getButton(); + if (button !== 0) { + if (selectionEmpty) { + editor.moveCursorToPosition(pos); + editor.selection.clearSelection(); + } + // 2: contextmenu, 1: linux paste + this.moveTextarea = function() { + editor.textInput.onContextMenu({x: _self.x, y: _self.y}); + }; + this.moveTextareaEnd = editor.textInput.onContextMenuClose; + + editor.textInput.onContextMenu({x: this.x, y: this.y}, selectionEmpty); + this.captureMouse(ev, "moveTextarea"); + + return; + } + + // if this click caused the editor to be focused should not clear the + // selection + if (inSelection && !editor.isFocused()) { + editor.focus(); + return; + } + + if (!inSelection || this.$clickSelection || ev.getShiftKey()) { + // Directly pick STATE_SELECT, since the user is not clicking inside + // a selection. + this.startSelect(pos); + } else if (inSelection) { + var e = ev.domEvent; + if ((e.ctrlKey || e.altKey)) { + this.startDrag(); + } else { + this.mousedownEvent.time = (new Date()).getTime(); + this.setState("dragWait"); + } + } + + this.captureMouse(ev) + }; + + this.startSelect = function(pos) { + pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); + if (this.mousedownEvent.getShiftKey()) { + this.editor.selection.selectToPosition(pos); + } + else if (!this.$clickSelection) { + this.editor.moveCursorToPosition(pos); + this.editor.selection.clearSelection(); + } + this.setState("select"); + } + + this.select = function() { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + + if (this.$clickSelection) { + var cmp = this.$clickSelection.comparePoint(cursor); + + if (cmp == -1) { + anchor = this.$clickSelection.end; + } else if (cmp == 1) { + anchor = this.$clickSelection.start; + } else { + cursor = this.$clickSelection.end; + anchor = this.$clickSelection.start; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + + editor.renderer.scrollCursorIntoView(); + }; + + this.extendSelectionBy = function(unitName) { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + var range = editor.selection[unitName](cursor.row, cursor.column); + + if (this.$clickSelection) { + var cmpStart = this.$clickSelection.comparePoint(range.start); + var cmpEnd = this.$clickSelection.comparePoint(range.end); + + if (cmpStart == -1 && cmpEnd <= 0) { + anchor = this.$clickSelection.end; + cursor = range.start; + } else if (cmpEnd == 1 && cmpStart >= 0) { + anchor = this.$clickSelection.start; + cursor = range.end; + } else if (cmpStart == -1 && cmpEnd == 1) { + cursor = range.end; + anchor = range.start; + } else { + cursor = this.$clickSelection.end; + anchor = this.$clickSelection.start; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + + editor.renderer.scrollCursorIntoView(); + }; + + this.startDrag = function() { + var editor = this.editor; + this.setState("drag"); + this.dragRange = editor.getSelectionRange(); + var style = editor.getSelectionStyle(); + this.dragSelectionMarker = editor.session.addMarker(this.dragRange, "ace_selection", style); + editor.clearSelection(); + dom.addCssClass(editor.container, "ace_dragging"); + if (!this.$dragKeybinding) { + this.$dragKeybinding = { + handleKeyboard: function(data, hashId, keyString, keyCode) { + if (keyString == "esc") + return {command: this.command}; + }, + command: { + exec: function(editor) { + var self = editor.$mouseHandler; + self.dragCursor = null + self.dragEnd(); + self.startSelect(); + } + } + } + } + + editor.keyBinding.addKeyboardHandler(this.$dragKeybinding); + }; + + this.dragWait = function() { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + var time = (new Date()).getTime(); + var editor = this.editor; + + if (distance > DRAG_OFFSET) { + this.startSelect(); + } else if ((time - this.mousedownEvent.time) > editor.getDragDelay()) { + this.startDrag() + } + }; + + this.dragWaitEnd = function(e) { + this.mousedownEvent.domEvent = e; + this.startSelect(); + }; + + this.drag = function() { + var editor = this.editor; + this.dragCursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + editor.moveCursorToPosition(this.dragCursor); + editor.renderer.scrollCursorIntoView(); + }; + + this.dragEnd = function(e) { + var editor = this.editor; + var dragCursor = this.dragCursor; + var dragRange = this.dragRange; + dom.removeCssClass(editor.container, "ace_dragging"); + editor.session.removeMarker(this.dragSelectionMarker); + editor.keyBinding.removeKeyboardHandler(this.$dragKeybinding); + + if (!dragCursor) + return; + + editor.clearSelection(); + if (e && (e.ctrlKey || e.altKey)) { + var session = editor.session; + var newRange = dragRange; + newRange.end = session.insert(dragCursor, session.getTextRange(dragRange)); + newRange.start = dragCursor; + } else if (dragRange.contains(dragCursor.row, dragCursor.column)) { + return; + } else { + var newRange = editor.moveText(dragRange, dragCursor); + } + + if (!newRange) + return; + + editor.selection.setSelectionRange(newRange); + }; + + this.onDoubleClick = function(ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + + this.setState("selectByWords"); + + editor.moveCursorToPosition(pos); + editor.selection.selectWord(); + this.$clickSelection = editor.getSelectionRange(); + }; + + this.onTripleClick = function(ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + + this.setState("selectByLines"); + + editor.moveCursorToPosition(pos); + editor.selection.selectLine(); + this.$clickSelection = editor.getSelectionRange(); + }; + + this.onQuadClick = function(ev) { + var editor = this.editor; + + editor.selectAll(); + this.$clickSelection = editor.getSelectionRange(); + this.setState("select"); + }; + + this.onScroll = function(ev) { + var editor = this.editor; + var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + if (isScrolable) { + this.$passScrollEvent = false; + } else { + if (this.$passScrollEvent) + return; + + if (!this.$scrollStopTimeout) { + var self = this; + this.$scrollStopTimeout = setTimeout(function() { + self.$passScrollEvent = true; + self.$scrollStopTimeout = null; + }, 200); + } + } + + editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + return ev.preventDefault(); + }; + +}).call(DefaultHandlers.prototype); + +exports.DefaultHandlers = DefaultHandlers; + +function calcDistance(ax, ay, bx, by) { + return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); +} + +}); +/* 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/browser_focus', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/event', 'ace/lib/event_emitter'], function(require, exports, module) { +"use strict"; + +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. + * Focus changes for example when the user switches a browser tab, + * goes to the location bar or switches to another application. + */ +var BrowserFocus = function(win) { + win = win || window; + + this.lastFocus = new Date().getTime(); + this._isFocused = true; + + var _self = this; + + // 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(){ + + oop.implement(this, EventEmitter); + + this.isFocused = function() { + return this._isFocused; + }; + + this._setFocused = function(isFocused) { + if (this._isFocused == isFocused) + return; + + if (isFocused) + this.lastFocus = new Date().getTime(); + + this._isFocused = isFocused; + this._emit("changeFocus"); + }; + +}).call(BrowserFocus.prototype); + + +exports.BrowserFocus = BrowserFocus; +}); +/* 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Mike de Boer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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(mouseHandler) { + var editor = mouseHandler.editor; + + mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) { + if (e.domEvent.target.className.indexOf("ace_gutter-cell") == -1) + return; + + if (!editor.isFocused()) + return; + + var row = e.getDocumentPosition().row; + var selection = editor.session.selection; + + selection.moveCursorTo(row, 0); + selection.selectLine(); + + mouseHandler.$clickSelection = selection.getRange(); + mouseHandler.captureMouse(e, "selectByLines"); + }); +} + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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.x = this.clientX = domEvent.clientX; + this.y = 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; + + this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 clicked 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 + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Julian Viereck + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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', ['require', 'exports', 'module' , 'ace/lib/keys', 'ace/lib/event', 'ace/commands/default_commands'], function(require, exports, module) { +"use strict"; + +var keyUtil = require("../lib/keys"); +var event = require("../lib/event"); +require("../commands/default_commands"); + +var KeyBinding = function(editor) { + this.$editor = editor; + this.$data = { }; + this.$handlers = []; + this.setDefaultHandler(editor.commands); +}; + +(function() { + this.setDefaultHandler = function(keyboardHandler) { + this.removeKeyboardHandler(this.$defaultHandler); + this.$defaultHandler = keyboardHandler; + if (keyboardHandler) + this.$handlers.unshift(keyboardHandler); + this.$data = { }; + }; + + this.setKeyboardHandler = function(keyboardHandler) { + if (this.$handlers[this.$handlers.length - 1] == keyboardHandler) + return; + this.$data = { }; + this.$handlers = []; + this.setDefaultHandler(this.$defaultHandler); + if (keyboardHandler) + this.$handlers.push(keyboardHandler); + }; + + this.addKeyboardHandler = function(keyboardHandler) { + this.removeKeyboardHandler(keyboardHandler); + this.$handlers.push(keyboardHandler); + }; + + this.removeKeyboardHandler = function(keyboardHandler) { + var i = this.$handlers.indexOf(keyboardHandler); + if (i == -1) + return false; + this.$handlers.splice(i, 1); + return true; + }; + + this.getKeyboardHandler = function() { + return this.$handlers[this.$handlers.length - 1]; + }; + + 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; + var commands = this.$editor.commands; + + // allow keyboardHandler to consume keys + if (toExecute.command != "null") + success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); + else + success = true; + + if (success && e) + event.stopEvent(e); + + return success; + }; + + this.onCommandKey = function(e, hashId, keyCode) { + var keyString = keyUtil.keyCodeToString(keyCode); + this.$callKeyboardHandlers(hashId, keyString, keyCode, e); + }; + + this.onTextInput = function(text) { + var success = false; + if (text.length == 1) + success = this.$callKeyboardHandlers(0, text); + if (!success) + this.$editor.commands.exec("insertstring", this.$editor, text); + }; + +}).call(KeyBinding.prototype); + +exports.KeyBinding = KeyBinding; +}); +/* 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 + * Julian Viereck + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/commands/default_commands', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) { +"use strict"; + +var lang = require("../lib/lang"); + +function bindKey(win, mac) { + return { + win: win, + mac: mac + }; +} + +exports.commands = [{ + name: "selectall", + bindKey: bindKey("Ctrl-A", "Command-A"), + 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(editor) { + var line = parseInt(prompt("Enter line number:"), 10); + if (!isNaN(line)) { + editor.gotoLine(line); + } + }, + 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(editor) { editor.findNext(); }, + readOnly: true +}, { + name: "findprevious", + bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), + exec: function(editor) { editor.findPrevious(); }, + readOnly: true +}, { + name: "find", + bindKey: bindKey("Ctrl-F", "Command-F"), + exec: function(editor) { + var needle = prompt("Find:", editor.getCopyText()); + editor.find(needle); + }, + readOnly: true +}, { + name: "overwrite", + bindKey: bindKey("Insert", "Insert"), + exec: function(editor) { editor.toggleOverwrite(); }, + readOnly: true +}, { + name: "selecttostart", + bindKey: bindKey("Ctrl-Shift-Home|Alt-Shift-Up", "Command-Shift-Up"), + exec: function(editor) { editor.getSelection().selectFileStart(); }, + readOnly: true +}, { + name: "gotostart", + bindKey: bindKey("Ctrl-Home|Ctrl-Up", "Command-Home|Command-Up"), + exec: function(editor) { editor.navigateFileStart(); }, + readOnly: true +}, { + name: "selectup", + bindKey: bindKey("Shift-Up", "Shift-Up"), + exec: function(editor) { editor.getSelection().selectUp(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "golineup", + bindKey: bindKey("Up", "Up|Ctrl-P"), + exec: function(editor, args) { editor.navigateUp(args.times); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selecttoend", + bindKey: bindKey("Ctrl-Shift-End|Alt-Shift-Down", "Command-Shift-Down"), + exec: function(editor) { editor.getSelection().selectFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotoend", + bindKey: bindKey("Ctrl-End|Ctrl-Down", "Command-End|Command-Down"), + exec: function(editor) { editor.navigateFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectdown", + bindKey: bindKey("Shift-Down", "Shift-Down"), + exec: function(editor) { editor.getSelection().selectDown(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "golinedown", + bindKey: bindKey("Down", "Down|Ctrl-N"), + exec: function(editor, args) { editor.navigateDown(args.times); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectwordleft", + bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), + exec: function(editor) { editor.getSelection().selectWordLeft(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotowordleft", + bindKey: bindKey("Ctrl-Left", "Option-Left"), + exec: function(editor) { editor.navigateWordLeft(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selecttolinestart", + bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"), + exec: function(editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotolinestart", + bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), + exec: function(editor) { editor.navigateLineStart(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectleft", + bindKey: bindKey("Shift-Left", "Shift-Left"), + exec: function(editor) { editor.getSelection().selectLeft(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotoleft", + bindKey: bindKey("Left", "Left|Ctrl-B"), + exec: function(editor, args) { editor.navigateLeft(args.times); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectwordright", + bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), + exec: function(editor) { editor.getSelection().selectWordRight(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotowordright", + bindKey: bindKey("Ctrl-Right", "Option-Right"), + exec: function(editor) { editor.navigateWordRight(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selecttolineend", + bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"), + exec: function(editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotolineend", + bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), + exec: function(editor) { editor.navigateLineEnd(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectright", + bindKey: bindKey("Shift-Right", "Shift-Right"), + exec: function(editor) { editor.getSelection().selectRight(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "gotoright", + bindKey: bindKey("Right", "Right|Ctrl-F"), + exec: function(editor, args) { editor.navigateRight(args.times); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectpagedown", + bindKey: bindKey("Shift-PageDown", "Shift-PageDown"), + exec: function(editor) { editor.selectPageDown(); }, + readOnly: true +}, { + name: "pagedown", + bindKey: bindKey(null, "PageDown"), + exec: function(editor) { editor.scrollPageDown(); }, + readOnly: true +}, { + name: "gotopagedown", + bindKey: bindKey("PageDown", "Option-PageDown|Ctrl-V"), + exec: function(editor) { editor.gotoPageDown(); }, + readOnly: true +}, { + name: "selectpageup", + bindKey: bindKey("Shift-PageUp", "Shift-PageUp"), + exec: function(editor) { editor.selectPageUp(); }, + readOnly: true +}, { + name: "pageup", + bindKey: bindKey(null, "PageUp"), + exec: function(editor) { editor.scrollPageUp(); }, + readOnly: true +}, { + name: "gotopageup", + bindKey: bindKey("PageUp", "Option-PageUp"), + exec: function(editor) { editor.gotoPageUp(); }, + readOnly: true +}, { + name: "selectlinestart", + bindKey: bindKey("Shift-Home", "Shift-Home"), + exec: function(editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "selectlineend", + bindKey: bindKey("Shift-End", "Shift-End"), + exec: function(editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + 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 +}, { + name: "jumptomatching", + bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"), + exec: function(editor) { editor.jumpToMatching(); }, + multiSelectAction: "forEach", + readOnly: true +}, + +// commands disabled in readOnly mode +{ + name: "cut", + exec: function(editor) { + var range = editor.getSelectionRange(); + editor._emit("cut", range); + + if (!editor.selection.isEmpty()) { + editor.session.remove(range); + editor.clearSelection(); + } + }, + multiSelectAction: "forEach" +}, { + name: "removeline", + bindKey: bindKey("Ctrl-D", "Command-D"), + exec: function(editor) { editor.removeLines(); }, + multiSelectAction: "forEach" +}, { + name: "togglecomment", + bindKey: bindKey("Ctrl-/", "Command-/"), + exec: function(editor) { editor.toggleCommentLines(); }, + multiSelectAction: "forEach" +}, { + 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(editor) { editor.remove("right"); }, + multiSelectAction: "forEach" +}, { + name: "backspace", + bindKey: bindKey( + "Command-Backspace|Option-Backspace|Shift-Backspace|Backspace", + "Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H" + ), + exec: function(editor) { editor.remove("left"); }, + multiSelectAction: "forEach" +}, { + name: "removetolinestart", + bindKey: bindKey("Alt-Backspace", "Command-Backspace"), + exec: function(editor) { editor.removeToLineStart(); }, + multiSelectAction: "forEach" +}, { + name: "removetolineend", + bindKey: bindKey("Alt-Delete", "Ctrl-K"), + exec: function(editor) { editor.removeToLineEnd(); }, + multiSelectAction: "forEach" +}, { + name: "removewordleft", + bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), + exec: function(editor) { editor.removeWordLeft(); }, + multiSelectAction: "forEach" +}, { + name: "removewordright", + bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), + exec: function(editor) { editor.removeWordRight(); }, + multiSelectAction: "forEach" +}, { + name: "outdent", + bindKey: bindKey("Shift-Tab", "Shift-Tab"), + exec: function(editor) { editor.blockOutdent(); }, + multiSelectAction: "forEach" +}, { + name: "indent", + bindKey: bindKey("Tab", "Tab"), + exec: function(editor) { editor.indent(); }, + multiSelectAction: "forEach" +}, { + name: "insertstring", + exec: function(editor, str) { editor.insert(str); }, + multiSelectAction: "forEach" +}, { + name: "inserttext", + exec: function(editor, args) { + editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); + }, + multiSelectAction: "forEach" +}, { + name: "splitline", + bindKey: bindKey(null, "Ctrl-O"), + exec: function(editor) { editor.splitLine(); }, + multiSelectAction: "forEach" +}, { + name: "transposeletters", + bindKey: bindKey("Ctrl-T", "Ctrl-T"), + exec: function(editor) { editor.transposeLetters(); }, + multiSelectAction: function(editor) {editor.transposeSelections(1); } +}, { + name: "touppercase", + bindKey: bindKey("Ctrl-U", "Ctrl-U"), + exec: function(editor) { editor.toUpperCase(); }, + multiSelectAction: "forEach" +}, { + name: "tolowercase", + bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), + exec: function(editor) { editor.toLowerCase(); }, + multiSelectAction: "forEach" +}]; + +}); +/* 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 + * Mihai Sucan + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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', ['require', 'exports', 'module' , 'ace/config', 'ace/lib/oop', 'ace/lib/lang', 'ace/lib/net', '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 config = require("./config"); +var oop = require("./lib/oop"); +var lang = require("./lib/lang"); +var net = require("./lib/net"); +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; + +/** + * class EditSession + * + * Stores various states related to a [[Document `Document`]]. A single `EditSession` can be in charge of several `Document`s. + * + **/ + +/** + * new EditSession(text, mode) + * - text (Document | String): If `text` is a `Document`, it associates the `EditSession` with it. Otherwise, a new `Document` is created, with the initial text + * - mode (TextMode): The inital language mode to use for the document + * + * Sets up a new `EditSession` and associates it with the given `Document` and `TextMode`. + * + **/ + +var EditSession = function(text, mode) { + this.$modified = true; + this.$breakpoints = []; + this.$frontMarkers = {}; + this.$backMarkers = {}; + this.$markerId = 1; + this.$rowCache = []; + this.$wrapData = []; + this.$foldData = []; + this.$undoSelect = true; + this.$foldData.toString = function() { + var str = ""; + this.forEach(function(foldLine) { + str += "\n" + foldLine.toString(); + }); + return str; + } + + if (text instanceof Document) { + this.setDocument(text); + } else { + this.setDocument(new Document(text)); + } + + this.selection = new Selection(this); + this.setMode(mode); +}; + + +(function() { + + oop.implement(this, EventEmitter); + + /** + * EditSession.setDocument(doc) + * - doc (Document): The new `Document` to use + * + * Sets the `EditSession` to point to a new `Document`. If a `BackgroundTokenizer` exists, it also points to `doc`. + * + **/ + this.setDocument = function(doc) { + if (this.doc) + throw new Error("Document is already set"); + + 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); + } + }; + + /** + * EditSession.getDocument() -> Document + * + * Returns the `Document` associated with this session. + * + **/ + this.getDocument = function() { + return this.doc; + }; + + /** internal, hide + * EditSession.$resetRowCache(row) + * - row (Number): The row to work with + * + * + * + **/ + this.$resetRowCache = function(row) { + if (row == 0) { + this.$rowCache = []; + return; + } + var rowCache = this.$rowCache; + for (var i = 0; i < rowCache.length; i++) { + if (rowCache[i].docRow >= row) { + rowCache.splice(i, rowCache.length); + return; + } + } + }; + + /** + * EditSession@onChangeFold(e) + * + * Emitted when a code fold changes its state. + * + **/ + this.onChangeFold = function(e) { + var fold = e.data; + this.$resetRowCache(fold.start.row); + }; + + /** + * EditSession@onChange(e) + * + * Emitted when the document changes. + **/ + this.onChange = function(e) { + var delta = e.data; + this.$modified = true; + + this.$resetRowCache(delta.range.start.row); + + var removedFolds = this.$updateInternalDataOnChange(e); + if (!this.$fromUndo && this.$undoManager && !delta.ignore) { + this.$deltasDoc.push(delta); + if (removedFolds && removedFolds.length != 0) { + this.$deltasFold.push({ + action: "removeFolds", + folds: removedFolds + }); + } + + this.$informUndoManager.schedule(); + } + + this.bgTokenizer.start(delta.range.start.row); + this._emit("change", e); + }; + + /** + * EditSession.setValue(text) + * - text (String): The new text to place + * + * Sets the session text. + * + **/ + this.setValue = function(text) { + this.doc.setValue(text); + this.selection.moveCursorTo(0, 0); + this.selection.clearSelection(); + + this.$resetRowCache(0); + this.$deltas = []; + this.$deltasDoc = []; + this.$deltasFold = []; + this.getUndoManager().reset(); + }; + + /** alias of: EditSession.toString + * EditSession.getValue() -> String + * + * Returns the current [[Document `Document`]] as a string. + * + **/ + /** alias of: EditSession.getValue + * EditSession.toString() -> String + * + * Returns the current [[Document `Document`]] as a string. + * + **/ + this.getValue = + this.toString = function() { + return this.doc.getValue(); + }; + + /** + * EditSession.getSelection() -> String + * + * Returns the string of the current selection. + **/ + this.getSelection = function() { + return this.selection; + }; + + /** related to: BackgroundTokenizer.getState + * EditSession.getState(row) -> Array + * - row (Number): The row to start at + * + * {:BackgroundTokenizer.getState} + * + **/ + this.getState = function(row) { + return this.bgTokenizer.getState(row); + }; + + /** related to: BackgroundTokenizer.getTokens + * EditSession.getTokens(firstRow, lastRow) -> Array + * - firstRow (Number): The row to start at + * - lastRow (Number): The row to finish at + * + * Starts tokenizing at the row indicated. Returns a list of objects of the tokenized rows. + * + **/ + this.getTokens = function(firstRow, lastRow) { + return this.bgTokenizer.getTokens(firstRow, lastRow); + }; + + /** + * EditSession.getTokenAt(row, column) -> Array + * - row (Number): The row number to retrieve from + * - column (Number): The column number to retrieve from + * + * Returns an array of tokens at the indicated row and column. + **/ + 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; + }; + + /** + * EditSession.setUndoManager(undoManager) + * - undoManager (UndoManager): The new undo manager + * + * Sets the undo manager. + **/ + this.setUndoManager = function(undoManager) { + this.$undoManager = undoManager; + this.$resetRowCache(0); + this.$deltas = []; + this.$deltasDoc = []; + this.$deltasFold = []; + + if (this.$informUndoManager) + this.$informUndoManager.cancel(); + + if (undoManager) { + var self = this; + /** internal, hide + * EditSession.$syncInformUndoManager() + * + * + **/ + this.$syncInformUndoManager = function() { + self.$informUndoManager.cancel(); + + if (self.$deltasFold.length) { + self.$deltas.push({ + group: "fold", + deltas: self.$deltasFold + }); + self.$deltasFold = []; + } + + if (self.$deltasDoc.length) { + self.$deltas.push({ + group: "doc", + deltas: self.$deltasDoc + }); + self.$deltasDoc = []; + } + + if (self.$deltas.length > 0) { + undoManager.execute({ + action: "aceupdate", + args: [self.$deltas, self] + }); + } + + self.$deltas = []; + } + this.$informUndoManager = + lang.deferredCall(this.$syncInformUndoManager); + } + }; + + this.$defaultUndoManager = { + undo: function() {}, + redo: function() {}, + reset: function() {} + }; + + /** + * EditSession.getUndoManager() -> UndoManager + * + * Returns the current undo manager. + **/ + this.getUndoManager = function() { + return this.$undoManager || this.$defaultUndoManager; + }, + + /** + * EditSession.getTabString() -> String + * + * Returns the current value for tabs. If the user is using soft tabs, this will be a series of spaces (defined by [[EditSession.getTabSize `getTabSize()`]]); otherwise it's simply `'\t'`. + **/ + this.getTabString = function() { + if (this.getUseSoftTabs()) { + return lang.stringRepeat(" ", this.getTabSize()); + } else { + return "\t"; + } + }; + + this.$useSoftTabs = true; + /** + * EditSession.setUseSoftTabs(useSoftTabs) + * - useSoftTabs (Boolean): Value indicating whether or not to use soft tabs + * + * Pass `true` to enable the use of soft tabs. Soft tabs means you're using spaces instead of the tab character (`'\t'`). + * + **/ + this.setUseSoftTabs = function(useSoftTabs) { + if (this.$useSoftTabs === useSoftTabs) return; + + this.$useSoftTabs = useSoftTabs; + }; + + /** + * EditSession.getUseSoftTabs() -> Boolean + * + * Returns `true` if soft tabs are being used, `false` otherwise. + * + **/ + this.getUseSoftTabs = function() { + return this.$useSoftTabs; + }; + + this.$tabSize = 4; + /** + * EditSession.setTabSize(tabSize) + * - tabSize (Number): The new tab size + * + * Set the number of spaces that define a soft tab; for example, passing in `4` transforms the soft tabs to be equivalent to four spaces. This function also emits the `changeTabSize` event. + **/ + this.setTabSize = function(tabSize) { + if (isNaN(tabSize) || this.$tabSize === tabSize) return; + + this.$modified = true; + this.$tabSize = tabSize; + this._emit("changeTabSize"); + }; + + /** + * EditSession.getTabSize() -> Number + * + * Returns the current tab size. + **/ + this.getTabSize = function() { + return this.$tabSize; + }; + + /** + * EditSession.isTabStop(position) -> Boolean + * - position (Object): The position to check + * + * Returns `true` if the character at the position is a soft tab. + **/ + this.isTabStop = function(position) { + return this.$useSoftTabs && (position.column % this.$tabSize == 0); + }; + + this.$overwrite = false; + /** + * EditSession.setOverwrite(overwrite) + * - overwrite (Boolean): Defines wheter or not to set overwrites + * + * Pass in `true` to enable overwrites in your session, or `false` to disable. If overwrites is enabled, any text you enter will type over any text after it. If the value of `overwrite` changes, this function also emites the `changeOverwrite` event. + * + **/ + this.setOverwrite = function(overwrite) { + if (this.$overwrite == overwrite) return; + + this.$overwrite = overwrite; + this._emit("changeOverwrite"); + }; + + /** + * EditSession.getOverwrite() -> Boolean + * + * Returns `true` if overwrites are enabled; `false` otherwise. + **/ + this.getOverwrite = function() { + return this.$overwrite; + }; + + /** + * EditSession.toggleOverwrite() + * + * Sets the value of overwrite to the opposite of whatever it currently is. + **/ + this.toggleOverwrite = function() { + this.setOverwrite(!this.$overwrite); + }; + + /** + * EditSession.getBreakpoints() -> Array + * + * Returns an array of numbers, indicating which rows have breakpoints. + **/ + this.getBreakpoints = function() { + return this.$breakpoints; + }; + + /** + * EditSession.setBreakpoints(rows) + * - rows (Array): An array of row indicies + * + * Sets a breakpoint on every row number given by `rows`. This function also emites the `'changeBreakpoint'` event. + * + **/ + this.setBreakpoints = function(rows) { + this.$breakpoints = []; + for (var i=0; i Number + * - range (Range): Define the range of the marker + * - clazz (String): Set the CSS class for the marker + * - type (Function | String): Identify the type of the marker + * - inFront (Boolean): Set to `true` to establish a front marker + * + * Adds a new marker to the given `Range`. If `inFront` is `true`, a front marker is defined, and the `'changeFrontMarker'` event fires; otherwise, the `'changeBackMarker'` event fires. + * + **/ + this.addMarker = function(range, clazz, type, inFront) { + var id = this.$markerId++; + + var marker = { + range : range, + type : type || "line", + renderer: typeof type == "function" ? type : null, + clazz : clazz, + inFront: !!inFront + } + + if (inFront) { + this.$frontMarkers[id] = marker; + this._emit("changeFrontMarker") + } else { + this.$backMarkers[id] = marker; + this._emit("changeBackMarker") + } + + return id; + }; + + /** + * EditSession.removeMarker(markerId) + * - markerId (Number): A number representing a marker + * + * Removes the marker with the specified ID. If this marker was in front, the `'changeFrontMarker'` event is emitted. If the marker was in the back, the `'changeBackMarker'` event is emitted. + * + **/ + this.removeMarker = function(markerId) { + var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId]; + if (!marker) + return; + + var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers; + if (marker) { + delete (markers[markerId]); + this._emit(marker.inFront ? "changeFrontMarker" : "changeBackMarker"); + } + }; + + /** + * EditSession.getMarkers(inFront) -> Array + * - inFront (Boolean): If `true`, indicates you only want front markers; `false` indicates only back markers + * + * Returns an array containing the IDs of all the markers, either front or back. + * + **/ + this.getMarkers = function(inFront) { + return inFront ? this.$frontMarkers : this.$backMarkers; + }; + + /* + * Error: + * { + * row: 12, + * column: 2, //can be undefined + * text: "Missing argument", + * type: "error" // or "warning" or "info" + * } + */ + /** + * EditSession.setAnnotations(annotations) + * - annotations (Array): A list of annotations + * + * Sets annotations for the `EditSession`. This functions emits the `'changeAnnotation'` event. + **/ + this.setAnnotations = function(annotations) { + this.$annotations = {}; + for (var i=0; i Object + * + * Returns the annotations for the `EditSession`. + **/ + this.getAnnotations = function() { + return this.$annotations || {}; + }; + + /** + * EditSession.clearAnnotations() + * + * Clears all the annotations for this session. This function also triggers the `'changeAnnotation'` event. + **/ + this.clearAnnotations = function() { + this.$annotations = {}; + this._emit("changeAnnotation", {}); + }; + + /** internal, hide + * EditSession.$detectNewLine(text) + * - text (String): A block of text + * + * If `text` contains either the newline (`\n`) or carriage-return ('\r') characters, `$autoNewLine` stores that value. + * + **/ + this.$detectNewLine = function(text) { + var match = text.match(/^.*?(\r?\n)/m); + if (match) { + this.$autoNewLine = match[1]; + } else { + this.$autoNewLine = "\n"; + } + }; + + /** + * EditSession.getWordRange(row, column) -> Range + * - row (Number): The row to start at + * - column (Number): The column to start at + * + * Given a starting row and column, this method returns the `Range` of the first word boundary it finds. + * + **/ + this.getWordRange = function(row, column) { + var line = this.getLine(row); + + var inToken = false; + if (column > 0) { + inToken = !!line.charAt(column - 1).match(this.tokenRe); + } + + if (!inToken) { + inToken = !!line.charAt(column).match(this.tokenRe); + } + + var re = inToken ? this.tokenRe : this.nonTokenRe; + + var start = column; + if (start > 0) { + do { + start--; + } + while (start >= 0 && line.charAt(start).match(re)); + start++; + } + + var end = column; + while (end < line.length && line.charAt(end).match(re)) { + end++; + } + + return new Range(row, start, row, end); + }; + + /** + * EditSession.getAWordRange(row, column) -> Range + * - row (Number): The row number to start from + * - column (Number): The column number to start from + * + * 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; + }; + + /** related to: Document.setNewLineMode + * EditSession.setNewLineMode(newLineMode) + * - newLineMode (String): {:Document.setNewLineMode.param} + * + * {:Document.setNewLineMode.desc} + **/ + this.setNewLineMode = function(newLineMode) { + this.doc.setNewLineMode(newLineMode); + }; + + /** related to: Document.getNewLineMode + * EditSession.getNewLineMode() -> String + * + * Returns the current new line mode. + **/ + this.getNewLineMode = function() { + return this.doc.getNewLineMode(); + }; + + this.$useWorker = true; + + /** + * EditSession.setUseWorker(useWorker) + * - useWorker (Boolean): Set to `true` to use a worker + * + * Identifies if you want to use a worker for the `EditSession`. + * + **/ + this.setUseWorker = function(useWorker) { + if (this.$useWorker == useWorker) + return; + + this.$useWorker = useWorker; + + this.$stopWorker(); + if (useWorker) + this.$startWorker(); + }; + + /** + * EditSession.getUseWorker() -> Boolean + * + * Returns `true` if workers are being used. + **/ + this.getUseWorker = function() { + return this.$useWorker; + }; + + /** + * EditSession@onReloadTokenizer(e) + * + * Reloads all the tokens on the current session. This function calls [[BackgroundTokenizer.start `BackgroundTokenizer.start ()`]] to all the rows; it also emits the `'tokenizerUpdate'` event. + **/ + this.onReloadTokenizer = function(e) { + var rows = e.data; + this.bgTokenizer.start(rows.first); + this._emit("tokenizerUpdate", e); + }; + + this.$modes = {}; + this._loadMode = function(mode, callback) { + if (this.$modes[mode]) + return callback(this.$modes[mode]); + + var _self = this; + var module; + try { + module = require(mode); + } catch (e) {}; + if (module) + return done(module); + + fetch(function() { + require([mode], done); + }); + + function done(module) { + if (_self.$modes[mode]) + return callback(_self.$modes[mode]); + + _self.$modes[mode] = new module.Mode(); + _self.$modes[mode].$id = mode; + _self._emit("loadmode", { + name: mode, + mode: _self.$modes[mode] + }); + callback(_self.$modes[mode]); + } + + function fetch(callback) { + if (!config.get("packaged")) + return callback(); + + var base = mode.split("/").pop(); + var filename = config.get("modePath") + "/mode-" + base + config.get("suffix"); + net.loadScript(filename, callback); + } + }; + + /** + * EditSession.setMode(mode) + * - mode (TextMode): Set a new text mode + * + * Sets a new text mode for the `EditSession`. This method also emits the `'changeMode'` event. If a [[BackgroundTokenizer `BackgroundTokenizer`]] is set, the `'tokenizerUpdate'` event is also emitted. + * + **/ + this.$mode = null; + this.$modeId = null; + this.setMode = function(mode) { + // load on demand + if (typeof mode === "string") { + if (this.$modeId == mode) + return; + + this.$modeId = mode; + var _self = this; + this._loadMode(mode, function(module) { + if (_self.$modeId !== mode) + return; + + _self.setMode(module); + }); + return; + } else if (mode == null) { + mode = "ace/mode/text" + this.$modeId = mode; + this.$modes[mode] = this.$modes[mode] || (new TextMode()); + this.setMode(this.$modes[mode]); + return; + } + + if (this.$mode === mode) return; + this.$mode = mode; + this.$modeId = mode.$id; + + this.$stopWorker(); + + if (this.$useWorker) + this.$startWorker(); + + var tokenizer = mode.getTokenizer(); + + if(tokenizer.addEventListener !== undefined) { + var onReloadTokenizer = this.onReloadTokenizer.bind(this); + tokenizer.addEventListener("update", onReloadTokenizer); + } + + if (!this.bgTokenizer) { + this.bgTokenizer = new BackgroundTokenizer(tokenizer); + var _self = this; + this.bgTokenizer.addEventListener("update", function(e) { + _self._emit("tokenizerUpdate", e); + }); + } else { + this.bgTokenizer.setTokenizer(tokenizer); + } + + this.bgTokenizer.setDocument(this.getDocument()); + this.bgTokenizer.start(0); + + this.tokenRe = mode.tokenRe; + this.nonTokenRe = mode.nonTokenRe; + + this.$setFolding(mode.foldingRules); + + this._emit("changeMode"); + }; + + /** internal, hide + * EditSession.stopWorker() + * + * + **/ + this.$stopWorker = function() { + if (this.$worker) + this.$worker.terminate(); + + this.$worker = null; + }; + + /** internal, hide + * EditSession.$startWorker() + * + * + **/ + this.$startWorker = function() { + if (typeof Worker !== "undefined" && !require.noWorker) { + try { + this.$worker = this.$mode.createWorker(this); + } catch (e) { + console.log("Could not load worker"); + console.log(e); + this.$worker = null; + } + } + else + this.$worker = null; + }; + + /** + * EditSession.getMode() -> TextMode + * + * Returns the current text mode. + **/ + this.getMode = function() { + return this.$mode; + }; + + this.$scrollTop = 0; + /** + * EditSession.setScrollTop(scrollTop) + * - scrollTop (Number): The new scroll top value + * + * This function sets the scroll top value. It also emits the `'changeScrollTop'` event. + **/ + this.setScrollTop = function(scrollTop) { + scrollTop = Math.round(Math.max(0, scrollTop)); + if (this.$scrollTop === scrollTop) + return; + + this.$scrollTop = scrollTop; + this._emit("changeScrollTop", scrollTop); + }; + + /** + * EditSession.getScrollTop() -> Number + * + * [Returns the value of the distance between the top of the editor and the topmost part of the visible content.]{: #EditSession.getScrollTop} + **/ + this.getScrollTop = function() { + return this.$scrollTop; + }; + + this.$scrollLeft = 0; + /** + * EditSession.setScrollLeft(scrollLeft) + * + * [Sets the value of the distance between the left of the editor and the leftmost part of the visible content.]{: #EditSession.setScrollLeft} + **/ + this.setScrollLeft = function(scrollLeft) { + scrollLeft = Math.round(Math.max(0, scrollLeft)); + if (this.$scrollLeft === scrollLeft) + return; + + this.$scrollLeft = scrollLeft; + this._emit("changeScrollLeft", scrollLeft); + }; + + /** + * EditSession.getScrollLeft() -> Number + * + * [Returns the value of the distance between the left of the editor and the leftmost part of the visible content.]{: #EditSession.getScrollLeft} + **/ + this.getScrollLeft = function() { + return this.$scrollLeft; + }; + + /** + * EditSession.getWidth() -> Number + * + * Returns the width of the document. + **/ + this.getWidth = function() { + this.$computeWidth(); + return this.width; + }; + + /** + * EditSession.getScreenWidth() -> Number + * + * Returns the width of the screen. + **/ + this.getScreenWidth = function() { + this.$computeWidth(); + return this.screenWidth; + }; + + this.$computeWidth = function(force) { + if (this.$modified || force) { + this.$modified = false; + + var lines = this.doc.getAllLines(); + var longestLine = 0; + var longestScreenLine = 0; + + for ( var i = 0; i < lines.length; i++) { + var foldLine = this.getFoldLine(i), + line, len; + + line = lines[i]; + if (foldLine) { + var end = foldLine.range.end; + line = this.getFoldDisplayLine(foldLine); + // Continue after the foldLine.end.row. All the lines in + // between are folded. + i = end.row; + } + len = line.length; + longestLine = Math.max(longestLine, len); + if (!this.$useWrapMode) { + longestScreenLine = Math.max( + longestScreenLine, + this.$getStringScreenWidth(line)[0] + ); + } + } + this.width = longestLine; + + if (this.$useWrapMode) { + this.screenWidth = this.$wrapLimit; + } else { + this.screenWidth = longestScreenLine; + } + } + }; + + /** related to: Document.getLine + * EditSession.getLine(row) -> String + * - row (Number): The row to retrieve from + * + * Returns a verbatim copy of the given line as it is in the document + * + **/ + this.getLine = function(row) { + return this.doc.getLine(row); + }; + + /** related to: Document.getLines + * EditSession.getLines(firstRow, lastRow) -> Array + * - firstRow (Number): The first row index to retrieve + * - lastRow (Number): The final row index to retrieve + * + * Returns an array of strings of the rows between `firstRow` and `lastRow`. This function is inclusive of `lastRow`. + * + **/ + this.getLines = function(firstRow, lastRow) { + return this.doc.getLines(firstRow, lastRow); + }; + + /** related to: Document.getLength + * EditSession.getLength()-> Number + * + * Returns the number of rows in the document. + **/ + this.getLength = function() { + return this.doc.getLength(); + }; + + /** related to: Document.getTextRange + * EditSession.getTextRange(range) -> Array + * - range (String): The range to work with + * + * {:Document.getTextRange.desc} + **/ + this.getTextRange = function(range) { + return this.doc.getTextRange(range); + }; + + /** related to: Document.insert + * EditSession.insert(position, text) -> Number + * - position (Number): The position to start inserting at + * - text (String): A chunk of text to insert + * + (Number): The position of the last line of `text`. If the length of `text` is 0, this function simply returns `position`. + * + * Inserts a block of `text` and the indicated `position`. + * + * + **/ + this.insert = function(position, text) { + return this.doc.insert(position, text); + }; + + /** related to: Document.remove + * EditSession.remove(range) -> Object + * - range (Range): A specified Range to remove + * + (Object): The new `start` property of the range, which contains `startRow` and `startColumn`. If `range` is empty, this function returns the unmodified value of `range.start`. + * + * Removes the `range` from the document. + * + * + **/ + this.remove = function(range) { + return this.doc.remove(range); + }; + + /** + * EditSession.undoChanges(deltas, dontSelect) -> Range + * - deltas (Array): An array of previous changes + * - dontSelect (Boolean): [If `true`, doesn't select the range of where the change occured]{: #dontSelect} + * + * Reverts previous changes to your document. + **/ + this.undoChanges = function(deltas, dontSelect) { + if (!deltas.length) + return; + + this.$fromUndo = true; + var lastUndoRange = null; + for (var i = deltas.length - 1; i != -1; i--) { + var delta = deltas[i]; + if (delta.group == "doc") { + this.doc.revertDeltas(delta.deltas); + lastUndoRange = + this.$getUndoSelection(delta.deltas, true, lastUndoRange); + } else { + delta.deltas.forEach(function(foldDelta) { + this.addFolds(foldDelta.folds); + }, this); + } + } + this.$fromUndo = false; + lastUndoRange && + this.$undoSelect && + !dontSelect && + this.selection.setSelectionRange(lastUndoRange); + return lastUndoRange; + }; + + /** + * EditSession.redoChanges(deltas, dontSelect) -> Range + * - deltas (Array): An array of previous changes + * - dontSelect (Boolean): {:dontSelect} + * + * Re-implements a previously undone change to your document. + **/ + this.redoChanges = function(deltas, dontSelect) { + if (!deltas.length) + return; + + this.$fromUndo = true; + var lastUndoRange = null; + for (var i = 0; i < deltas.length; i++) { + var delta = deltas[i]; + if (delta.group == "doc") { + this.doc.applyDeltas(delta.deltas); + lastUndoRange = + this.$getUndoSelection(delta.deltas, false, lastUndoRange); + } + } + this.$fromUndo = false; + lastUndoRange && + this.$undoSelect && + !dontSelect && + this.selection.setSelectionRange(lastUndoRange); + return lastUndoRange; + }; + + /** + * EditSession.setUndoSelect(enable) + * - enable (Boolean): If `true`, selects the range of the reinserted change + * + * ENables or disables highlighting of the range where an undo occured. + **/ + this.setUndoSelect = function(enable) { + this.$undoSelect = enable; + }; + + /** internal, hide + * EditSession.$getUndoSelection(deltas, isUndo, lastUndoRange) -> Range + * + * + **/ + this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { + function isInsert(delta) { + var insert = + delta.action == "insertText" || delta.action == "insertLines"; + return isUndo ? !insert : insert; + } + + var delta = deltas[0]; + var range, point; + var lastDeltaIsInsert = false; + if (isInsert(delta)) { + range = delta.range.clone(); + lastDeltaIsInsert = true; + } else { + range = Range.fromPoints(delta.range.start, delta.range.start); + lastDeltaIsInsert = false; + } + + for (var i = 1; i < deltas.length; i++) { + delta = deltas[i]; + if (isInsert(delta)) { + point = delta.range.start; + if (range.compare(point.row, point.column) == -1) { + range.setStart(delta.range.start); + } + point = delta.range.end; + if (range.compare(point.row, point.column) == 1) { + range.setEnd(delta.range.end); + } + lastDeltaIsInsert = true; + } else { + point = delta.range.start; + if (range.compare(point.row, point.column) == -1) { + range = + Range.fromPoints(delta.range.start, delta.range.start); + } + lastDeltaIsInsert = false; + } + } + + // Check if this range and the last undo range has something in common. + // If true, merge the ranges. + if (lastUndoRange != null) { + var cmp = lastUndoRange.compareRange(range); + if (cmp == 1) { + range.setStart(lastUndoRange.start); + } else if (cmp == -1) { + range.setEnd(lastUndoRange.end); + } + } + + return range; + }, + + /** related to: Document.replace + * EditSession.replace(range, text) -> Object + * - range (Range): A specified Range to replace + * - text (String): The new text to use as a replacement + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}```
      + * If the text and range are empty, this function returns an object containing the current `range.start` value.
      + * If the text is the exact same as what currently exists, this function returns an object containing the current `range.end` value. + * + * Replaces a range in the document with the new `text`. + * + * + * + **/ + this.replace = function(range, text) { + return this.doc.replace(range, text); + }; + + /** + * EditSession.moveText(fromRange, toPosition) -> Range + * - fromRange (Range): The range of text you want moved within the document + * - toPosition (Object): The location (row and column) where you want to move the text to + * + (Range): The new range where the text was moved to. + * Moves a range of text from the given range to the given position. `toPosition` is an object that looks like this: + * + * { row: newRowLocation, column: newColumnLocation } + * + * + * + **/ + this.moveText = function(fromRange, toPosition) { + var text = this.getTextRange(fromRange); + this.remove(fromRange); + + var toRow = toPosition.row; + var toColumn = toPosition.column; + + // Make sure to update the insert location, when text is removed in + // front of the chosen point of insertion. + if (!fromRange.isMultiLine() && fromRange.start.row == toRow && + fromRange.end.column < toColumn) + toColumn -= text.length; + + if (fromRange.isMultiLine() && fromRange.end.row < toRow) { + var lines = this.doc.$split(text); + toRow -= lines.length - 1; + } + + var endRow = toRow + fromRange.end.row - fromRange.start.row; + var endColumn = fromRange.isMultiLine() ? + fromRange.end.column : + toColumn + fromRange.end.column - fromRange.start.column; + + var toRange = new Range(toRow, toColumn, endRow, endColumn); + + this.insert(toRange.start, text); + + return toRange; + }; + + /** + * EditSession.indentRows(startRow, endRow, indentString) + * - startRow (Number): Starting row + * - endRow (Number): Ending row + * - indentString (String): The indent token + * + * Indents all the rows, from `startRow` to `endRow` (inclusive), by prefixing each row with the token in `indentString`. + * + * If `indentString` contains the `'\t'` character, it's replaced by whatever is defined by [[EditSession.getTabString `getTabString()`]]. + * + **/ + this.indentRows = function(startRow, endRow, indentString) { + indentString = indentString.replace(/\t/g, this.getTabString()); + for (var row=startRow; row<=endRow; row++) + this.insert({row: row, column:0}, indentString); + }; + + /** + * EditSession.outdentRows(range) + * - range (Range): A range of rows + * + * Outdents all the rows defined by the `start` and `end` properties of `range`. + * + **/ + this.outdentRows = function (range) { + var rowRange = range.collapseRows(); + var deleteRange = new Range(0, 0, 0, 0); + var size = this.getTabSize(); + + for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { + var line = this.getLine(i); + + deleteRange.start.row = i; + deleteRange.end.row = i; + for (var j = 0; j < size; ++j) + if (line.charAt(j) != ' ') + break; + if (j < size && line.charAt(j) == '\t') { + deleteRange.start.column = j; + deleteRange.end.column = j + 1; + } else { + deleteRange.start.column = 0; + deleteRange.end.column = j; + } + this.remove(deleteRange); + } + }; + + /** related to: Document.insertLines + * EditSession.moveLinesUp(firstRow, lastRow) -> Number + * - firstRow (Number): The starting row to move up + * - lastRow (Number): The final row to move up + * + (Number): If `firstRow` is less-than or equal to 0, this function returns 0. Otherwise, on success, it returns -1. + * + * Shifts all the lines in the document up one, starting from `firstRow` and ending at `lastRow`. + * + * + **/ + this.moveLinesUp = function(firstRow, lastRow) { + if (firstRow <= 0) return 0; + + var removed = this.doc.removeLines(firstRow, lastRow); + this.doc.insertLines(firstRow - 1, removed); + return -1; + }; + + /** related to: Document.insertLines + * EditSession.moveLinesDown(firstRow, lastRow) -> Number + * - firstRow (Number): The starting row to move down + * - lastRow (Number): The final row to move down + * + (Number): If `firstRow` is less-than or equal to 0, this function returns 0. Otherwise, on success, it returns -1. + * + * + * + **/ + this.moveLinesDown = function(firstRow, lastRow) { + if (lastRow >= this.doc.getLength()-1) return 0; + + var removed = this.doc.removeLines(firstRow, lastRow); + this.doc.insertLines(firstRow+1, removed); + return 1; + }; + + /** + * EditSession.duplicateLines(firstRow, lastRow) -> Number + * - firstRow (Number): The starting row to duplicate + * - lastRow (Number): The final row to duplicate + * + (Number): Returns the number of new rows added; in other words, `lastRow - firstRow + 1`. + * + * Duplicates all the text between `firstRow` and `lastRow`. + * + * + * + **/ + this.duplicateLines = function(firstRow, lastRow) { + var firstRow = this.$clipRowToDocument(firstRow); + var lastRow = this.$clipRowToDocument(lastRow); + + var lines = this.getLines(firstRow, lastRow); + this.doc.insertLines(firstRow, lines); + + var addedRows = lastRow - firstRow + 1; + return addedRows; + }; + + + 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); + + if (row < 0) { + row = 0; + column = 0; + } else { + var len = this.doc.getLength(); + if (row >= len) { + row = len - 1; + column = this.doc.getLine(len-1).length; + } else { + 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; + this.$wrapLimitRange = { + min : null, + max : null + }; + + /** + * EditSession.setUseWrapMode(useWrapMode) + * - useWrapMode (Boolean): Enable (or disable) wrap mode + * + * Sets whether or not line wrapping is enabled. If `useWrapMode` is different than the current value, the `'changeWrapMode'` event is emitted. + **/ + this.setUseWrapMode = function(useWrapMode) { + if (useWrapMode != this.$useWrapMode) { + this.$useWrapMode = useWrapMode; + this.$modified = true; + this.$resetRowCache(0); + + // If wrapMode is activaed, the wrapData array has to be initialized. + if (useWrapMode) { + var len = this.getLength(); + this.$wrapData = []; + for (var i = 0; i < len; i++) { + this.$wrapData.push([]); + } + this.$updateWrapData(0, len - 1); + } + + this._emit("changeWrapMode"); + } + }; + + /** + * EditSession.getUseWrapMode() -> Boolean + * + * Returns `true` if wrap mode is being used; `false` otherwise. + **/ + this.getUseWrapMode = function() { + return this.$useWrapMode; + }; + + // Allow the wrap limit to move freely between min and max. Either + // parameter can be null to allow the wrap limit to be unconstrained + // in that direction. Or set both parameters to the same number to pin + // the limit to that value. + /** + * EditSession.setWrapLimitRange(min, max) + * - min (Number): The minimum wrap value (the left side wrap) + * - max (Number): The maximum wrap value (the right side wrap) + * + * Sets the boundaries of wrap. Either value can be `null` to have an unconstrained wrap, or, they can be the same number to pin the limit. If the wrap limits for `min` or `max` are different, this method also emits the `'changeWrapMode'` event. + **/ + this.setWrapLimitRange = function(min, max) { + if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { + this.$wrapLimitRange.min = min; + this.$wrapLimitRange.max = max; + this.$modified = true; + // This will force a recalculation of the wrap limit + this._emit("changeWrapMode"); + } + }; + + /** internal, hide + * EditSession.adjustWrapLimit(desiredLimit) -> Boolean + * - desiredLimit (Number): The new wrap limit + * + * This should generally only be called by the renderer when a resize is detected. + **/ + this.adjustWrapLimit = function(desiredLimit) { + var wrapLimit = this.$constrainWrapLimit(desiredLimit); + if (wrapLimit != this.$wrapLimit && wrapLimit > 0) { + this.$wrapLimit = wrapLimit; + this.$modified = true; + if (this.$useWrapMode) { + this.$updateWrapData(0, this.getLength() - 1); + this.$resetRowCache(0) + this._emit("changeWrapLimit"); + } + return true; + } + return false; + }; + + /** internal, hide + * EditSession.$constrainWrapLimit(wrapLimit) + * + * + **/ + this.$constrainWrapLimit = function(wrapLimit) { + var min = this.$wrapLimitRange.min; + if (min) + wrapLimit = Math.max(min, wrapLimit); + + var max = this.$wrapLimitRange.max; + if (max) + wrapLimit = Math.min(max, wrapLimit); + + // What would a limit of 0 even mean? + return Math.max(1, wrapLimit); + }; + + /** + * EditSession.getWrapLimit() -> Number + * + * Returns the value of wrap limit. + **/ + this.getWrapLimit = function() { + return this.$wrapLimit; + }; + + /** + * EditSession.getWrapLimitRange() -> Object + * + * Returns an object that defines the minimum and maximum of the wrap limit; it looks something like this: + * + * { min: wrapLimitRange_min, max: wrapLimitRange_max } + * + **/ + this.getWrapLimitRange = function() { + // Avoid unexpected mutation by returning a copy + return { + min : this.$wrapLimitRange.min, + max : this.$wrapLimitRange.max + }; + }; + + /** internal, hide + * EditSession.$updateInternalDataOnChange() + * + * + **/ + this.$updateInternalDataOnChange = function(e) { + var useWrapMode = this.$useWrapMode; + var len; + var action = e.data.action; + 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) { + if (action == "insertLines") { + lastRow = firstRow + (e.data.lines.length); + } else { + lastRow = firstRow; + } + len = e.data.lines ? e.data.lines.length : lastRow - firstRow; + } else { + len = lastRow - firstRow; + } + + if (len != 0) { + if (action.indexOf("remove") != -1) { + useWrapMode && this.$wrapData.splice(firstRow, len); + + var foldLines = this.$foldData; + removedFolds = this.getFoldsInRange(e.data.range); + this.removeFolds(removedFolds); + + var foldLine = this.getFoldLine(end.row); + var idx = 0; + if (foldLine) { + foldLine.addRemoveChars(end.row, end.column, start.column - end.column); + foldLine.shiftRow(-len); + + var foldLineBefore = this.getFoldLine(firstRow); + if (foldLineBefore && foldLineBefore !== foldLine) { + foldLineBefore.merge(foldLine); + foldLine = foldLineBefore; + } + idx = foldLines.indexOf(foldLine) + 1; + } + + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= end.row) { + foldLine.shiftRow(-len); + } + } + + lastRow = firstRow; + } else { + var args; + if (useWrapMode) { + args = [firstRow, 0]; + for (var i = 0; i < len; i++) args.push([]); + this.$wrapData.splice.apply(this.$wrapData, args); + } + + // If some new line is added inside of a foldLine, then split + // the fold line up. + var foldLines = this.$foldData; + var foldLine = this.getFoldLine(firstRow); + var idx = 0; + if (foldLine) { + var cmp = foldLine.range.compareInside(start.row, start.column) + // Inside of the foldLine range. Need to split stuff up. + if (cmp == 0) { + foldLine = foldLine.split(start.row, start.column); + foldLine.shiftRow(len); + foldLine.addRemoveChars( + lastRow, 0, end.column - start.column); + } else + // Infront of the foldLine but same row. Need to shift column. + if (cmp == -1) { + foldLine.addRemoveChars(firstRow, 0, end.column - start.column); + foldLine.shiftRow(len); + } + // Nothing to do if the insert is after the foldLine. + idx = foldLines.indexOf(foldLine) + 1; + } + + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= firstRow) { + foldLine.shiftRow(len); + } + } + } + } else { + // Realign folds. E.g. if you add some new chars before a fold, the + // fold should "move" to the right. + 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. + removedFolds = this.getFoldsInRange(e.data.range); + this.removeFolds(removedFolds); + + len = -len; + } + var foldLine = this.getFoldLine(firstRow); + if (foldLine) { + foldLine.addRemoveChars(firstRow, start.column, len); + } + } + + if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { + console.error("doc.getLength() and $wrapData.length have to be the same!"); + } + + useWrapMode && this.$updateWrapData(firstRow, lastRow); + + return removedFolds; + }; + + /** internal, hide + * EditSession.$updateWrapData(firstRow, lastRow) + * + * + **/ + this.$updateWrapData = function(firstRow, lastRow) { + var lines = this.doc.getAllLines(); + var tabSize = this.getTabSize(); + var wrapData = this.$wrapData; + var wrapLimit = this.$wrapLimit; + var tokens; + var foldLine; + + var row = firstRow; + lastRow = Math.min(lastRow, lines.length - 1); + while (row <= lastRow) { + 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( + function(placeholder, row, column, lastColumn) { + var walkTokens; + if (placeholder) { + walkTokens = this.$getDisplayTokens( + placeholder, tokens.length); + walkTokens[0] = PLACEHOLDER_START; + for (var i = 1; i < walkTokens.length; i++) { + walkTokens[i] = PLACEHOLDER_BODY; + } + } else { + walkTokens = this.$getDisplayTokens( + lines[row].substring(lastColumn, column), + tokens.length); + } + tokens = tokens.concat(walkTokens); + }.bind(this), + foldLine.end.row, + 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) + tokens.pop(); + + wrapData[foldLine.start.row] + = this.$computeWrapSplits(tokens, wrapLimit, tabSize); + row = foldLine.end.row + 1; + } + } + }; + + // "Tokens" + var CHAR = 1, + CHAR_EXT = 2, + PLACEHOLDER_START = 3, + PLACEHOLDER_BODY = 4, + PUNCTUATION = 9, + SPACE = 10, + TAB = 11, + TAB_SPACE = 12; + + /** internal, hide + * EditSession.$computeWrapSplits(tokens, wrapLimit) -> Array + * + * + **/ + this.$computeWrapSplits = function(tokens, wrapLimit) { + if (tokens.length == 0) { + return []; + } + + var splits = []; + var displayLength = tokens.length; + var lastSplit = 0, lastDocSplit = 0; + + function addSplit(screenPos) { + var displayed = tokens.slice(lastSplit, screenPos); + + // The document size is the current size - the extra width for tabs + // and multipleWidth characters. + var len = displayed.length; + displayed.join(""). + // Get all the TAB_SPACEs. + replace(/12/g, function() { + len -= 1; + }). + // Get all the CHAR_EXT/multipleWidth characters. + replace(/2/g, function() { + len -= 1; + }); + + lastDocSplit += len; + splits.push(lastDocSplit); + lastSplit = screenPos; + } + + while (displayLength - lastSplit > wrapLimit) { + // This is, where the split should be. + var split = lastSplit + wrapLimit; + + // If there is a space or tab at this split position, then making + // a split is simple. + if (tokens[split] >= SPACE) { + // Include all following spaces + tabs in this split as well. + while (tokens[split] >= SPACE) { + split ++; + } + addSplit(split); + continue; + } + + // === ELSE === + // Check if split is inside of a placeholder. Placeholder are + // not splitable. Therefore, seek the beginning of the placeholder + // and try to place the split beofre the placeholder's start. + if (tokens[split] == PLACEHOLDER_START + || tokens[split] == PLACEHOLDER_BODY) + { + // Seek the start of the placeholder and do the split + // before the placeholder. By definition there always + // a PLACEHOLDER_START between split and lastSplit. + for (split; split != lastSplit - 1; split--) { + if (tokens[split] == PLACEHOLDER_START) { + // split++; << No incremental here as we want to + // have the position before the Placeholder. + break; + } + } + + // If the PLACEHOLDER_START is not the index of the + // last split, then we can do the split + if (split > lastSplit) { + addSplit(split); + continue; + } + + // If the PLACEHOLDER_START IS the index of the last + // split, then we have to place the split after the + // placeholder. So, let's seek for the end of the placeholder. + split = lastSplit + wrapLimit; + for (split; split < tokens.length; split++) { + if (tokens[split] != PLACEHOLDER_BODY) + { + break; + } + } + + // If spilt == tokens.length, then the placeholder is the last + // thing in the line and adding a new split doesn't make sense. + if (split == tokens.length) { + break; // Breaks the while-loop. + } + + // Finally, add the split... + addSplit(split); + continue; + } + + // === ELSE === + // 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 > minSplit) { + addSplit(++split); + continue; + } + + // === ELSE === + split = lastSplit + wrapLimit; + // The split is inside of a CHAR or CHAR_EXT token and no space + // around -> force a split. + addSplit(split); + } + return splits; + } + + /** internal, hide + * EditSession.$getDisplayTokens(str, offset) -> Array + * - str (String): The string to check + * - offset (Number): The value to start at + * + * Given a string, returns an array of the display characters, including tabs and spaces. + **/ + this.$getDisplayTokens = function(str, offset) { + var arr = []; + var tabSize; + offset = offset || 0; + + for (var i = 0; i < str.length; i++) { + var c = str.charCodeAt(i); + // Tab + if (c == 9) { + tabSize = this.getScreenTabSize(arr.length + offset); + arr.push(TAB); + for (var n = 1; n < tabSize; n++) { + arr.push(TAB_SPACE); + } + } + // Space + 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 (c >= 0x1100 && isFullWidth(c)) { + arr.push(CHAR, CHAR_EXT); + } else { + arr.push(CHAR); + } + } + return arr; + } + + /** internal, hide + * EditSession.$getStringScreenWidth(str, maxScreenColumn, screenColumn) -> [Number] + * - str (String): The string to calculate the screen width of + * - maxScreenColumn (Number): + * - screenColumn (Number): + * + ([Number]): Returns an `int[]` array with two elements:
      + * The first position indicates the number of columns for `str` on screen.
      + * The second value contains the position of the document column that this function read until. + * + * Calculates the width of the string `str` on the screen while assuming that the string starts at the first column on the screen. + * + * + **/ + this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { + if (maxScreenColumn == 0) { + return [0, 0]; + } + if (maxScreenColumn == null) { + maxScreenColumn = screenColumn + + str.length * Math.max(this.getTabSize(), 2); + } + screenColumn = screenColumn || 0; + + var c, column; + for (column = 0; column < str.length; column++) { + c = str.charCodeAt(column); + // tab + if (c == 9) { + screenColumn += this.getScreenTabSize(screenColumn); + } + // full width characters + else if (c >= 0x1100 && isFullWidth(c)) { + screenColumn += 2; + } else { + screenColumn += 1; + } + if (screenColumn > maxScreenColumn) { + break + } + } + + return [screenColumn, column]; + } + + /** + * EditSession.getRowLength(row) -> Number + * - row (Number): The row number to check + * + * + * Returns the length of the indicated row. + **/ + this.getRowLength = function(row) { + if (!this.$useWrapMode || !this.$wrapData[row]) { + return 1; + } else { + return this.$wrapData[row].length + 1; + } + } + + /** + * EditSession.getRowHeight(config, row) -> Number + * - config (Object): An object containing a parameter indicating the `lineHeight`. + * - row (Number): The row number to check + * + * Returns the height of the indicated row. This is mostly relevant for situations where wrapping occurs, and a single line spans across multiple rows. + * + **/ + this.getRowHeight = function(config, row) { + return this.getRowLength(row) * config.lineHeight; + } + + /** internal, hide, related to: EditSession.documentToScreenColumn + * EditSession.getScreenLastRowColumn(screenRow) -> Number + * - screenRow (Number): The screen row to check + * + * Returns the column position (on screen) for the last character in the provided row. + **/ + this.getScreenLastRowColumn = function(screenRow) { + var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE) + return this.documentToScreenColumn(pos.row, pos.column); + }; + + /** internal, hide + * EditSession.getDocumentLastRowColumn(docRow, docColumn) -> Number + * - docRow (Number): + * - docColumn (Number): + * + **/ + this.getDocumentLastRowColumn = function(docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.getScreenLastRowColumn(screenRow); + }; + + /** internal, hide + * EditSession.getDocumentLastRowColumnPosition(docRow, docColumn) -> Number + * + **/ + this.getDocumentLastRowColumnPosition = function(docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); + }; + + /** internal, hide + * EditSession.getRowSplitData(row) -> undefined | String + * + **/ + this.getRowSplitData = function(row) { + if (!this.$useWrapMode) { + return undefined; + } else { + return this.$wrapData[row]; + } + }; + + /** + * EditSession.getScreenTabSize(screenColumn) -> Number + * - screenColumn (Number): The screen column to check + * + * The distance to the next tab stop at the specified screen column. + **/ + this.getScreenTabSize = function(screenColumn) { + return this.$tabSize - screenColumn % this.$tabSize; + }; + + /** internal, hide + * EditSession.screenToDocumentRow(screenRow, screenColumn) -> Number + * + * + **/ + this.screenToDocumentRow = function(screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).row; + }; + + /** internal, hide + * EditSession.screenToDocumentColumn(screenRow, screenColumn) -> Number + * + * + **/ + this.screenToDocumentColumn = function(screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).column; + }; + + /** related to: EditSession.documentToScreenPosition + * EditSession.screenToDocumentPosition(screenRow, screenColumn) -> Object + * - screenRow (Number): The screen row to check + * - screenColumn (Number): The screen column to check + * + (Object): The object returned has two properties: `row` and `column`. + * + * Converts characters coordinates on the screen to characters coordinates within the document. [This takes into account code folding, word wrap, tab size, and any other visual modifications.]{: #conversionConsiderations} + * + * + **/ + this.screenToDocumentPosition = function(screenRow, screenColumn) { + if (screenRow < 0) { + return { + row: 0, + column: 0 + } + } + + var line; + var docRow = 0; + var docColumn = 0; + var column; + var row = 0; + var rowLength = 0; + + var rowCache = this.$rowCache; + for (var i = 0; i < rowCache.length; i++) { + if (rowCache[i].screenRow < screenRow) { + row = rowCache[i].screenRow; + docRow = rowCache[i].docRow; + } + else { + break; + } + } + var doCache = !rowCache.length || i == rowCache.length; + + var maxRow = this.getLength() - 1; + var foldLine = this.getNextFoldLine(docRow); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (row <= screenRow) { + rowLength = this.getRowLength(docRow); + if (row + rowLength - 1 >= screenRow || docRow >= maxRow) { + break; + } else { + row += rowLength; + docRow++; + if (docRow > foldStart) { + docRow = foldLine.end.row+1; + foldLine = this.getNextFoldLine(docRow, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + } + if (doCache) { + rowCache.push({ + docRow: docRow, + screenRow: row + }); + } + } + + if (foldLine && foldLine.start.row <= docRow) { + line = this.getFoldDisplayLine(foldLine); + 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; + } + + if (this.$useWrapMode) { + var splits = this.$wrapData[docRow]; + if (splits) { + column = splits[screenRow - row]; + if(screenRow > row && splits.length) { + docColumn = splits[screenRow - row - 1] || splits[splits.length - 1]; + line = line.substring(docColumn); + } + } + } + + docColumn += this.$getStringScreenWidth(line, screenColumn)[1]; + + // We remove one character at the end so that the docColumn + // position returned is not associated to the next row on the screen. + if (this.$useWrapMode && docColumn >= column) { + docColumn = column - 1; + } + + if (foldLine) { + return foldLine.idxToPosition(docColumn); + } + + return { + row: docRow, + column: docColumn + } + }; + + /** related to: EditSession.screenToDocumentPosition + * EditSession.documentToScreenPosition(docRow, docColumn) -> Object + * - docRow (Number): The document row to check + * - docColumn (Number): The document column to check + * + (Object): The object returned by this method has two properties: `row` and `column`. + * + * Converts document coordinates to screen coordinates. {:conversionConsiderations} + * + * + * + **/ + this.documentToScreenPosition = function(docRow, docColumn) { + // Normalize the passed in arguments. + if (typeof docColumn === "undefined") + var pos = this.$clipPositionToDocument(docRow.row, docRow.column); + else + pos = this.$clipPositionToDocument(docRow, docColumn); + + docRow = pos.row; + docColumn = pos.column; + + var wrapData; + // Special case in wrapMode if the doc is at the end of the document. + if (this.$useWrapMode) { + wrapData = this.$wrapData; + if (docRow > wrapData.length - 1) { + return { + row: this.getScreenLength(), + column: wrapData.length == 0 + ? 0 + : (wrapData[wrapData.length - 1].length - 1) + }; + } + } + + var screenRow = 0; + var foldStartRow = null; + var fold = null; + + // Clamp the docRow position in case it's inside of a folded block. + fold = this.getFoldAt(docRow, docColumn, 1); + if (fold) { + docRow = fold.start.row; + docColumn = fold.start.column; + } + + var rowEnd, row = 0; + var rowCache = this.$rowCache; + + for (var i = 0; i < rowCache.length; i++) { + if (rowCache[i].docRow < docRow) { + screenRow = rowCache[i].screenRow; + row = rowCache[i].docRow; + } else { + break; + } + } + var doCache = !rowCache.length || i == rowCache.length; + + var foldLine = this.getNextFoldLine(row); + var foldStart = foldLine ?foldLine.start.row :Infinity; + + while (row < docRow) { + if (row >= foldStart) { + rowEnd = foldLine.end.row + 1; + if (rowEnd > docRow) + break; + foldLine = this.getNextFoldLine(rowEnd, foldLine); + foldStart = foldLine ?foldLine.start.row :Infinity; + } + else { + rowEnd = row + 1; + } + + screenRow += this.getRowLength(row); + row = rowEnd; + + if (doCache) { + rowCache.push({ + docRow: row, + screenRow: screenRow + }); + } + } + + // Calculate the text line that is displayed in docRow on the screen. + var textLine = ""; + // Check if the final row we want to reach is inside of a fold. + if (foldLine && row >= foldStart) { + textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); + foldStartRow = foldLine.start.row; + } else { + textLine = this.getLine(docRow).substring(0, docColumn); + foldStartRow = docRow; + } + // Clamp textLine if in wrapMode. + if (this.$useWrapMode) { + var wrapRow = wrapData[foldStartRow]; + var screenRowOffset = 0; + while (textLine.length >= wrapRow[screenRowOffset]) { + screenRow ++; + screenRowOffset++; + } + textLine = textLine.substring( + wrapRow[screenRowOffset - 1] || 0, textLine.length + ); + } + + return { + row: screenRow, + column: this.$getStringScreenWidth(textLine)[0] + }; + }; + + /** internal, hide + * EditSession.documentToScreenColumn(row, docColumn) -> Number + * + * + **/ + this.documentToScreenColumn = function(row, docColumn) { + return this.documentToScreenPosition(row, docColumn).column; + }; + + /** internal, hide + * EditSession.documentToScreenRow(docRow, docColumn) -> Number + * + * + **/ + this.documentToScreenRow = function(docRow, docColumn) { + return this.documentToScreenPosition(docRow, docColumn).row; + }; + + /** + * EditSession.getScreenLength() -> Number + * + * Returns the length of the screen. + **/ + this.getScreenLength = function() { + var screenRows = 0; + 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++) { + fold = foldData[i]; + screenRows -= fold.end.row - fold.start.row; + } + } else { + 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; + } + } + } + + return screenRows; + } + + // For every keystroke this gets called once per char in the whole doc!! + // Wouldn't hurt to make it a bit faster for c >= 0x1100 + function isFullWidth(c) { + if (c < 0x1100) + return false; + return c >= 0x1100 && c <= 0x115F || + c >= 0x11A3 && c <= 0x11A7 || + c >= 0x11FA && c <= 0x11FF || + c >= 0x2329 && c <= 0x232A || + c >= 0x2E80 && c <= 0x2E99 || + c >= 0x2E9B && c <= 0x2EF3 || + c >= 0x2F00 && c <= 0x2FD5 || + c >= 0x2FF0 && c <= 0x2FFB || + c >= 0x3000 && c <= 0x303E || + c >= 0x3041 && c <= 0x3096 || + c >= 0x3099 && c <= 0x30FF || + c >= 0x3105 && c <= 0x312D || + c >= 0x3131 && c <= 0x318E || + c >= 0x3190 && c <= 0x31BA || + c >= 0x31C0 && c <= 0x31E3 || + c >= 0x31F0 && c <= 0x321E || + c >= 0x3220 && c <= 0x3247 || + c >= 0x3250 && c <= 0x32FE || + c >= 0x3300 && c <= 0x4DBF || + c >= 0x4E00 && c <= 0xA48C || + c >= 0xA490 && c <= 0xA4C6 || + c >= 0xA960 && c <= 0xA97C || + c >= 0xAC00 && c <= 0xD7A3 || + c >= 0xD7B0 && c <= 0xD7C6 || + c >= 0xD7CB && c <= 0xD7FB || + c >= 0xF900 && c <= 0xFAFF || + c >= 0xFE10 && c <= 0xFE19 || + c >= 0xFE30 && c <= 0xFE52 || + c >= 0xFE54 && c <= 0xFE66 || + c >= 0xFE68 && c <= 0xFE6B || + c >= 0xFF01 && c <= 0xFF60 || + c >= 0xFFE0 && c <= 0xFFE6; + }; + +}).call(EditSession.prototype); + +require("./edit_session/folding").Folding.call(EditSession.prototype); +require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); + +exports.EditSession = EditSession; +}); +/* 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/config', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) { +"no use strict"; + +var lang = require("./lib/lang"); + +var global = (function() { + return this; +})(); + +var options = { + packaged: false, + workerPath: "", + modePath: "", + themePath: "", + suffix: ".js" +}; + +exports.get = function(key) { + if (!options.hasOwnProperty(key)) + throw new Error("Unknown confik key: " + key); + + return options[key]; +}; + +exports.set = function(key, value) { + if (!options.hasOwnProperty(key)) + throw new Error("Unknown confik key: " + key); + + options[key] = value; +}; + +exports.all = function() { + return lang.copyObject(options); +}; + +exports.init = function() { + options.packaged = require.packaged || module.packaged || (global.define && define.packaged); + + if (!global.document) + return ""; + + var scriptOptions = {}; + var scriptUrl = ""; + var suffix; + + var scripts = document.getElementsByTagName("script"); + for (var i=0; i + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/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("./lib/oop"); +var lang = require("./lib/lang"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Range = require("./range").Range; + +/** + * class Selection + * + * Contains the 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. + **/ + +/** + * new Selection(session) + * - session (EditSession): The session to use + * + * Creates a new `Selection` object. + * +**/ +var Selection = function(session) { + this.session = session; + this.doc = session.getDocument(); + + this.clearSelection(); + this.lead = this.selectionLead = this.doc.createAnchor(0, 0); + this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0); + + var self = this; + this.lead.on("change", function(e) { + self._emit("changeCursor"); + if (!self.$isEmpty) + self._emit("changeSelection"); + if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) + self.$desiredColumn = null; + }); + + this.selectionAnchor.on("change", function() { + if (!self.$isEmpty) + self._emit("changeSelection"); + }); +}; + +(function() { + + oop.implement(this, EventEmitter); + + /** + * Selection.isEmpty() -> Boolean + * + * Returns `true` if the selection is empty. + **/ + this.isEmpty = function() { + return (this.$isEmpty || ( + this.anchor.row == this.lead.row && + this.anchor.column == this.lead.column + )); + }; + + /** + * Selection.isMultiLine() -> Boolean + * + * Returns `true` if the selection is a multi-line. + **/ + this.isMultiLine = function() { + if (this.isEmpty()) { + return false; + } + + return this.getRange().isMultiLine(); + }; + + /** + * Selection.getCursor() -> Number + * + * Gets the current position of the cursor. + **/ + this.getCursor = function() { + return this.lead.getPosition(); + }; + + /** + * Selection.setSelectionAnchor(row, column) + * - row (Number): The new row + * - column (Number): The new column + * + * Sets the row and column position of the anchor. This function also emits the `'changeSelection'` event. + **/ + this.setSelectionAnchor = function(row, column) { + this.anchor.setPosition(row, column); + + if (this.$isEmpty) { + this.$isEmpty = false; + this._emit("changeSelection"); + } + }; + + /** related to: Anchor.getPosition + * Selection.getSelectionAnchor() -> Object + * + * Returns an object containing the `row` and `column` of the calling selection anchor. + * + **/ + this.getSelectionAnchor = function() { + if (this.$isEmpty) + return this.getSelectionLead() + else + return this.anchor.getPosition(); + }; + + /** + * Selection.getSelectionLead() -> Object + * + * Returns an object containing the `row` and `column` of the calling selection lead. + **/ + this.getSelectionLead = function() { + return this.lead.getPosition(); + }; + + /** + * Selection.shiftSelection(columns) + * - columns (Number): The number of columns to shift by + * + * Shifts the selection up (or down, if [[Selection.isBackwards `isBackwards()`]] is true) the given number of columns. + * + **/ + this.shiftSelection = function(columns) { + if (this.$isEmpty) { + this.moveCursorTo(this.lead.row, this.lead.column + columns); + return; + }; + + var anchor = this.getSelectionAnchor(); + var lead = this.getSelectionLead(); + + var isBackwards = this.isBackwards(); + + if (!isBackwards || anchor.column !== 0) + this.setSelectionAnchor(anchor.row, anchor.column + columns); + + if (isBackwards || lead.column !== 0) { + this.$moveSelection(function() { + this.moveCursorTo(lead.row, lead.column + columns); + }); + } + }; + + /** + * Selection.isBackwards() -> Boolean + * + * Returns `true` if the selection is going backwards in the document. + **/ + this.isBackwards = function() { + var anchor = this.anchor; + var lead = this.lead; + return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); + }; + + /** + * Selection.getRange() -> Range + * + * [Returns the [[Range `Range`]] for the selected text.]{: #Selection.getRange} + **/ + this.getRange = function() { + var anchor = this.anchor; + var lead = this.lead; + + if (this.isEmpty()) + return Range.fromPoints(lead, lead); + + if (this.isBackwards()) { + return Range.fromPoints(lead, anchor); + } + else { + return Range.fromPoints(anchor, lead); + } + }; + + /** + * Selection.clearSelection() + * + * [Empties the selection (by de-selecting it). This function also emits the `'changeSelection'` event.]{: #Selection.clearSelection} + **/ + this.clearSelection = function() { + if (!this.$isEmpty) { + this.$isEmpty = true; + this._emit("changeSelection"); + } + }; + + /** + * Selection.selectAll() + * + * Selects all the text in the document. + **/ + this.selectAll = function() { + var lastRow = this.doc.getLength() - 1; + this.setSelectionAnchor(lastRow, this.doc.getLine(lastRow).length); + this.moveCursorTo(0, 0); + }; + + /** + * Selection.setSelectionRange(range, reverse) + * - range (Range): The range of text to select + * - reverse (Boolean): Indicates if the range should go backwards (`true`) or not + * + * Sets the selection to the provided range. + * + **/ + this.setSelectionRange = function(range, reverse) { + if (reverse) { + this.setSelectionAnchor(range.end.row, range.end.column); + this.selectTo(range.start.row, range.start.column); + } else { + this.setSelectionAnchor(range.start.row, range.start.column); + this.selectTo(range.end.row, range.end.column); + } + this.$desiredColumn = null; + }; + + this.$moveSelection = function(mover) { + var lead = this.lead; + if (this.$isEmpty) + this.setSelectionAnchor(lead.row, lead.column); + + mover.call(this); + }; + + /** + * Selection.selectTo(row, column) + * - row (Number): The row to select to + * - column (Number): The column to select to + * + * Moves the selection cursor to the indicated row and column. + * + **/ + this.selectTo = function(row, column) { + this.$moveSelection(function() { + this.moveCursorTo(row, column); + }); + }; + + /** + * Selection.selectToPosition(pos) + * - pos (Object): An object containing the row and column + * + * Moves the selection cursor to the row and column indicated by `pos`. + * + **/ + this.selectToPosition = function(pos) { + this.$moveSelection(function() { + this.moveCursorToPosition(pos); + }); + }; + + /** + * Selection.selectUp() + * + * Moves the selection up one row. + **/ + this.selectUp = function() { + this.$moveSelection(this.moveCursorUp); + }; + + /** + * Selection.selectDown() + * + * Moves the selection down one row. + **/ + this.selectDown = function() { + this.$moveSelection(this.moveCursorDown); + }; + + /** + * Selection.selectRight() + * + * Moves the selection right one column. + **/ + this.selectRight = function() { + this.$moveSelection(this.moveCursorRight); + }; + + /** + * Selection.selectLeft() + * + * Moves the selection left one column. + **/ + this.selectLeft = function() { + this.$moveSelection(this.moveCursorLeft); + }; + + /** + * Selection.selectLineStart() + * + * Moves the selection to the beginning of the current line. + **/ + this.selectLineStart = function() { + this.$moveSelection(this.moveCursorLineStart); + }; + + /** + * Selection.selectLineEnd() + * + * Moves the selection to the end of the current line. + **/ + this.selectLineEnd = function() { + this.$moveSelection(this.moveCursorLineEnd); + }; + + /** + * Selection.selectFileEnd() + * + * Moves the selection to the end of the file. + **/ + this.selectFileEnd = function() { + this.$moveSelection(this.moveCursorFileEnd); + }; + + /** + * Selection.selectFileStart() + * + * Moves the selection to the start of the file. + **/ + this.selectFileStart = function() { + this.$moveSelection(this.moveCursorFileStart); + }; + + /** + * Selection.selectWordRight() + * + * Moves the selection to the first word on the right. + **/ + this.selectWordRight = function() { + this.$moveSelection(this.moveCursorWordRight); + }; + + /** + * Selection.selectWordLeft() + * + * Moves the selection to the first word on the left. + **/ + this.selectWordLeft = function() { + this.$moveSelection(this.moveCursorWordLeft); + }; + + /** related to: EditSession.getWordRange + * Selection.selectWord() + * + * Moves the selection to highlight the entire word. + **/ + this.getWordRange = function(row, column) { + if (typeof column == "undefined") { + var cursor = row || this.lead; + row = cursor.row; + column = cursor.column; + } + return this.session.getWordRange(row, column); + }; + + this.selectWord = function() { + this.setSelectionRange(this.getWordRange()); + }; + + /** related to: EditSession.getAWordRange + * Selection.selectAWord() + * + * 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.getLineRange = function(row, excludeLastChar) { + var rowStart = typeof row == "number" ? row : this.lead.row; + var rowEnd; + + var foldLine = this.session.getFoldLine(rowStart); + if (foldLine) { + rowStart = foldLine.start.row; + rowEnd = foldLine.end.row; + } else { + rowEnd = rowStart; + } + if (excludeLastChar) + return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); + else + return new Range(rowStart, 0, rowEnd + 1, 0); + }; + + /** + * Selection.selectLine() + * + * Selects the entire line. + **/ + this.selectLine = function() { + this.setSelectionRange(this.getLineRange()); + }; + + /** + * Selection.moveCursorUp() + * + * Moves the cursor up one row. + **/ + this.moveCursorUp = function() { + this.moveCursorBy(-1, 0); + }; + + /** + * Selection.moveCursorDown() + * + * Moves the cursor down one row. + **/ + this.moveCursorDown = function() { + this.moveCursorBy(1, 0); + }; + + /** + * Selection.moveCursorLeft() + * + * Moves the cursor left one column. + **/ + this.moveCursorLeft = function() { + var cursor = this.lead.getPosition(), + fold; + + if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + } else if (cursor.column == 0) { + // cursor is a line (start + if (cursor.row > 0) { + this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); + } + } + else { + var tabSize = this.session.getTabSize(); + if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize) + this.moveCursorBy(0, -tabSize); + else + this.moveCursorBy(0, -1); + } + }; + + /** + * Selection.moveCursorRight() + * + * Moves the cursor right one column. + **/ + this.moveCursorRight = function() { + var cursor = this.lead.getPosition(), + fold; + if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { + this.moveCursorTo(fold.end.row, fold.end.column); + } + else if (this.lead.column == this.doc.getLine(this.lead.row).length) { + if (this.lead.row < this.doc.getLength() - 1) { + this.moveCursorTo(this.lead.row + 1, 0); + } + } + else { + var tabSize = this.session.getTabSize(); + var cursor = this.lead; + if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize) + this.moveCursorBy(0, tabSize); + else + this.moveCursorBy(0, 1); + } + }; + + /** + * Selection.moveCursorLineStart() + * + * Moves the cursor to the start of the line. + **/ + this.moveCursorLineStart = function() { + var row = this.lead.row; + var column = this.lead.column; + var screenRow = this.session.documentToScreenRow(row, column); + + // Determ the doc-position of the first character at the screen line. + var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); + + // Determ the line + var beforeCursor = this.session.getDisplayLine( + row, null, + firstColumnPosition.row, firstColumnPosition.column + ); + + var leadingSpace = beforeCursor.match(/^\s*/); + if (leadingSpace[0].length == column) { + this.moveCursorTo( + firstColumnPosition.row, firstColumnPosition.column + ); + } + else { + this.moveCursorTo( + firstColumnPosition.row, + firstColumnPosition.column + leadingSpace[0].length + ); + } + }; + + /** + * Selection.moveCursorLineEnd() + * + * Moves the cursor to the end of the line. + **/ + this.moveCursorLineEnd = function() { + var lead = this.lead; + var lastRowColumnPosition = + this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); + this.moveCursorTo( + lastRowColumnPosition.row, + lastRowColumnPosition.column + ); + }; + + /** + * Selection.moveCursorFileEnd() + * + * Moves the cursor to the end of the file. + **/ + this.moveCursorFileEnd = function() { + var row = this.doc.getLength() - 1; + var column = this.doc.getLine(row).length; + this.moveCursorTo(row, column); + }; + + /** + * Selection.moveCursorFileStart() + * + * Moves the cursor to the start of the file. + **/ + this.moveCursorFileStart = function() { + this.moveCursorTo(0, 0); + }; + + /** + * Selection.moveCursorLongWordRight() + * + * Moves the cursor to the word on the right. + **/ + this.moveCursorLongWordRight = function() { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + + var match; + this.session.nonTokenRe.lastIndex = 0; + this.session.tokenRe.lastIndex = 0; + + // skip folds + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + this.moveCursorTo(fold.end.row, fold.end.column); + return; + } + + // first skip space + if (match = this.session.nonTokenRe.exec(rightOfCursor)) { + column += this.session.nonTokenRe.lastIndex; + this.session.nonTokenRe.lastIndex = 0; + rightOfCursor = line.substring(column); + } + + // 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; + } + + this.moveCursorTo(row, column); + }; + + /** + * Selection.moveCursorLongWordLeft() + * + * Moves the cursor to the word on the left. + **/ + this.moveCursorLongWordLeft = function() { + var row = this.lead.row; + var column = this.lead.column; + + // skip folds + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + 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; + } + + // 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; + } + + this.moveCursorTo(row, column); + }; + + this.$shortWordEndIndex = function(rightOfCursor) { + var match, index = 0, ch; + var whitespaceRe = /\s/; + var tokenRe = this.session.tokenRe; + + tokenRe.lastIndex = 0; + if (match = this.session.tokenRe.exec(rightOfCursor)) { + index = this.session.tokenRe.lastIndex; + } else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index ++; + + if (index <= 1) { + tokenRe.lastIndex = 0; + while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { + tokenRe.lastIndex = 0; + index ++; + if (whitespaceRe.test(ch)) { + if (index > 2) { + index-- + break; + } else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index ++; + if (index > 2) + break + } + } + } + } + } + tokenRe.lastIndex = 0; + + return index; + }; + + this.moveCursorShortWordRight = function() { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + + var fold = this.session.getFoldAt(row, column, 1); + if (fold) + return this.moveCursorTo(fold.end.row, fold.end.column); + + if (column == line.length) + return this.moveCursorRight(); + + var index = this.$shortWordEndIndex(rightOfCursor); + + this.moveCursorTo(row, column + index); + }; + + this.moveCursorShortWordLeft = function() { + var row = this.lead.row; + var column = this.lead.column; + + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) + return this.moveCursorTo(fold.start.row, fold.start.column); + + if (column == 0) + return this.moveCursorLeft(); + + var str = this.session.getLine(row).substring(0, column); + var leftOfCursor = lang.stringReverse(str); + var index = this.$shortWordEndIndex(leftOfCursor); + + return this.moveCursorTo(row, column - index); + }; + + this.moveCursorWordRight = function() { + if (this.session.$selectLongWords) + this.moveCursorLongWordRight(); + else + this.moveCursorShortWordRight(); + }; + + this.moveCursorWordLeft = function() { + if (this.session.$selectLongWords) + this.moveCursorLongWordLeft(); + else + this.moveCursorShortWordLeft(); + }; + + /** related to: EditSession.documentToScreenPosition + * Selection.moveCursorBy(rows, chars) + * - rows (Number): The number of rows to move by + * - chars (Number): The number of characters to move by + * + * Moves the cursor to position indicated by the parameters. Negative numbers move the cursor backwards in the document. + **/ + this.moveCursorBy = function(rows, chars) { + var screenPos = this.session.documentToScreenPosition( + this.lead.row, + this.lead.column + ); + + if (chars === 0) { + if (this.$desiredColumn) + screenPos.column = this.$desiredColumn; + else + this.$desiredColumn = screenPos.column; + } + + var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column); + + // move the cursor and update the desired column + this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); + }; + + /** + * Selection.moveCursorToPosition(position) + * - position (Object): The position to move to + * + * Moves the selection to the position indicated by its `row` and `column`. + **/ + this.moveCursorToPosition = function(position) { + this.moveCursorTo(position.row, position.column); + }; + + /** + * Selection.moveCursorTo(row, column, keepDesiredColumn) + * - row (Number): The row to move to + * - column (Number): The column to move to + * - keepDesiredColumn (Boolean): [If `true`, the cursor move does not respect the previous column]{: #preventUpdateBool} + * + * Moves the cursor to the row and column provided. [If `preventUpdateDesiredColumn` is `true`, then the cursor stays in the same column position as its original point.]{: #preventUpdateBoolDesc} + **/ + this.moveCursorTo = function(row, column, keepDesiredColumn) { + // Ensure the row/column is not inside of a fold. + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + row = fold.start.row; + column = fold.start.column; + } + + this.$keepDesiredColumnOnChange = true; + this.lead.setPosition(row, column); + this.$keepDesiredColumnOnChange = false; + + if (!keepDesiredColumn) + this.$desiredColumn = null; + }; + + /** + * Selection.moveCursorToScreen(row, column, keepDesiredColumn) + * - row (Number): The row to move to + * - column (Number): The column to move to + * - keepDesiredColumn (Boolean): {:preventUpdateBool} + * + * Moves the cursor to the screen position indicated by row and column. {:preventUpdateBoolDesc} + **/ + this.moveCursorToScreen = function(row, column, keepDesiredColumn) { + var pos = this.session.screenToDocumentPosition(row, column); + this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); + }; + + // remove listeners from document + this.detach = function() { + this.lead.detach(); + this.anchor.detach(); + this.session = this.doc = null; + } + + this.fromOrientedRange = function(range) { + this.setSelectionRange(range, range.cursor == range.start); + this.$desiredColumn = range.desiredColumn || this.$desiredColumn; + } + + this.toOrientedRange = function(range) { + var r = this.getRange(); + if (range) { + range.start.column = r.start.column; + range.start.row = r.start.row; + range.end.column = r.end.column; + range.end.row = r.end.row; + } else { + range = r; + } + + range.cursor = this.isBackwards() ? range.start : range.end; + range.desiredColumn = this.$desiredColumn; + return range; + } + +}).call(Selection.prototype); + +exports.Selection = Selection; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + +/** + * class Range + * + * This object is used in various places to indicate a region within the editor. To better visualize how this works, imagine a rectangle. Each quadrant of the rectangle is analogus to a range, as ranges contain a starting row and starting column, and an ending row, and ending column. + * + **/ + +/** + * new Range(startRow, startColumn, endRow, endColumn) + * - startRow (Number): The starting row + * - startColumn (Number): The starting column + * - endRow (Number): The ending row + * - endColumn (Number): The ending column + * + * Creates a new `Range` object with the given starting and ending row and column points. + * + **/ +var Range = function(startRow, startColumn, endRow, endColumn) { + this.start = { + row: startRow, + column: startColumn + }; + + this.end = { + row: endRow, + column: endColumn + }; +}; + +(function() { + /** + * Range.isEqual(range) -> Boolean + * - range (Range): A range to check against + * + * Returns `true` if and only if the starting row and column, and ending tow and column, are equivalent to those given by `range`. + * + **/ + this.isEqual = 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 + }; + + /** + * Range.toString() -> String + * + * Returns a string containing the range's row and column information, given like this: + * + * [start.row/start.column] -> [end.row/end.column] + * + **/ + + this.toString = function() { + return ("Range: [" + this.start.row + "/" + this.start.column + + "] -> [" + this.end.row + "/" + this.end.column + "]"); + }; + + /** related to: Range.compare + * Range.contains(row, column) -> Boolean + * - row (Number): A row to check for + * - column (Number): A column to check for + * + * Returns `true` if the `row` and `column` provided are within the given range. This can better be expressed as returning `true` if: + * + * this.start.row <= row <= this.end.row && + * this.start.column <= column <= this.end.column + * + **/ + + this.contains = function(row, column) { + return this.compare(row, column) == 0; + }; + + /** related to: Range.compare + * Range.compareRange(range) -> Number + * - range (Range): A range to compare with + * + (Number): This method returns one of the following numbers:
      + *
      + * * `-2`: (B) is in front of (A), and doesn't intersect with (A)
      + * * `-1`: (B) begins before (A) but ends inside of (A)
      + * * `0`: (B) is completely inside of (A) OR (A) is completely 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) + * + * Compares `this` range (A) with another range (B). + * + **/ + 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; + } + } + } + + /** related to: Range.compare + * Range.comparePoint(p) -> Number + * - p (Range): A point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1
      + * + * Checks the row and column points of `p` with the row and column points of the calling range. + * + * + * + **/ + this.comparePoint = function(p) { + return this.compare(p.row, p.column); + } + + /** related to: Range.comparePoint + * Range.containsRange(range) -> Boolean + * - range (Range): A range to compare with + * + * Checks the start and end points of `range` and compares them to the calling range. Returns `true` if the `range` is contained within the caller's range. + * + **/ + this.containsRange = function(range) { + return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; + } + + /** + * Range.intersects(range) -> Boolean + * - range (Range): A range to compare with + * + * Returns `true` if passed in `range` intersects with the one calling this method. + * + **/ + this.intersects = function(range) { + var cmp = this.compareRange(range); + return (cmp == -1 || cmp == 0 || cmp == 1); + } + + /** + * Range.isEnd(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the caller's ending row point is the same as `row`, and if the caller's ending column is the same as `column`. + * + **/ + this.isEnd = function(row, column) { + return this.end.row == row && this.end.column == column; + } + + /** + * Range.isStart(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the caller's starting row point is the same as `row`, and if the caller's starting column is the same as `column`. + * + **/ + this.isStart = function(row, column) { + return this.start.row == row && this.start.column == column; + } + + /** + * Range.setStart(row, column) + * - row (Number): A row point to set + * - column (Number): A column point to set + * + * Sets the starting row and column for the range. + * + **/ + 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; + } + } + + /** + * Range.setEnd(row, column) + * - row (Number): A row point to set + * - column (Number): A column point to set + * + * Sets the starting row and column for the range. + * + **/ + 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; + } + } + + /** related to: Range.compare + * Range.inside(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range. + * + **/ + 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; + } + + /** related to: Range.compare + * Range.insideStart(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range's starting points. + * + **/ + this.insideStart = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column)) { + return false; + } else { + return true; + } + } + return false; + } + + /** related to: Range.compare + * Range.insideEnd(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range's ending points. + * + **/ + this.insideEnd = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isStart(row, column)) { + return false; + } else { + return true; + } + } + return false; + } + + /** + * Range.compare(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + **/ + 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; + }; + + /** + * Range.compareStart(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + *
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range, or if `isStart` is `true`.
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + * + **/ + this.compareStart = function(row, column) { + if (this.start.row == row && this.start.column == column) { + return -1; + } else { + return this.compare(row, column); + } + } + + /** + * Range.compareEnd(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range, or if `isEnd` is `true.
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + **/ + this.compareEnd = function(row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } else { + return this.compare(row, column); + } + } + + /** + * Range.compareInside(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `1` if the ending row of the calling range is equal to `row`, and the ending column of the calling range is equal to `column`
      + * * `-1` if the starting row of the calling range is equal to `row`, and the starting column of the calling range is equal to `column`
      + *
      + * Otherwise, it returns the value after calling [[Range.compare `compare()`]]. + * + * Checks the row and column points with the row and column points of the calling range. + * + * + * + **/ + 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); + } + } + + /** + * Range.clipRows(firstRow, lastRow) -> Range + * - firstRow (Number): The starting row + * - lastRow (Number): The ending row + * + * Returns the part of the current `Range` that occurs within the boundaries of `firstRow` and `lastRow` as a new `Range` object. + * + **/ + 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); + }; + + /** + * Range.extend(row, column) -> Range + * - row (Number): A new row to extend to + * - column (Number): A new column to extend to + * + * Changes the row and column points for the calling range for both the starting and ending points. This method returns that range with a new row. + * + **/ + 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); + }; + + /** + * Range.isMultiLine() -> Boolean + * + * Returns true if the range spans across multiple lines. + * + **/ + this.isMultiLine = function() { + return (this.start.row !== this.end.row); + }; + + /** + * Range.clone() -> Range + * + * Returns a duplicate of the calling range. + * + **/ + this.clone = function() { + return Range.fromPoints(this.start, this.end); + }; + + /** + * Range.collapseRows() -> Range + * + * Returns a range containing the starting and ending rows of the original range, but with a column value of `0`. + * + **/ + 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) + }; + + /** + * Range.toScreenRange(session) -> Range + * - session (EditSession): The `EditSession` to retrieve coordinates from + * + * Given the current `Range`, this function converts those starting and ending points into screen positions, and then returns a new `Range` object. + **/ + 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(start, end) -> Range + * - start (Range): A starting point to use + * - end (Range): An ending point to use + * + * Creates and returns a new `Range` based on the row and column of the given parameters. + * +**/ +Range.fromPoints = function(start, end) { + return new Range(start.row, start.column, end.row, end.column); +}; + +exports.Range = Range; +}); +/* 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 + * Mihai Sucan + * Chris Spencer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/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("../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()); + this.$behaviour = new Behaviour(); +}; + +(function() { + + this.tokenRe = new RegExp("^[" + + unicode.packages.L + + unicode.packages.Mn + unicode.packages.Mc + + unicode.packages.Nd + + unicode.packages.Pc + "\\$_]+", "g" + ); + + this.nonTokenRe = new RegExp("^(?:[^" + + unicode.packages.L + + unicode.packages.Mn + unicode.packages.Mc + + unicode.packages.Nd + + unicode.packages.Pc + "\\$_]|\s])+", "g" + ); + + this.getTokenizer = function() { + return this.$tokenizer; + }; + + this.toggleCommentLines = function(state, doc, startRow, endRow) { + }; + + this.getNextLineIndent = function(state, line, tab) { + return ""; + }; + + this.checkOutdent = function(state, line, input) { + return false; + }; + + this.autoOutdent = function(state, doc, row) { + }; + + this.$getIndent = function(line) { + var match = line.match(/^(\s+)/); + if (match) { + return match[1]; + } + + return ""; + }; + + this.createWorker = function(session) { + return null; + }; + + this.highlightSelection = function(editor) { + var session = editor.session; + if (!session.$selectionOccurrences) + session.$selectionOccurrences = []; + + if (session.$selectionOccurrences.length) + this.clearSelectionHighlight(editor); + + var selection = editor.getSelectionRange(); + if (selection.isEmpty() || selection.isMultiLine()) + return; + + var startOuter = selection.start.column - 1; + var endOuter = selection.end.column + 1; + var line = session.getLine(selection.start.row); + var lineCols = line.length; + var needle = line.substring(Math.max(startOuter, 0), + Math.min(endOuter, lineCols)); + + // Make sure the outer characters are not part of the word. + if ((startOuter >= 0 && /^[\w\d]/.test(needle)) || + (endOuter <= lineCols && /[\w\d]$/.test(needle))) + return; + + needle = line.substring(selection.start.column, selection.end.column); + if (!/^[\w\d]+$/.test(needle)) + return; + + var cursor = editor.getCursorPosition(); + + var newOptions = { + wrap: true, + wholeWord: true, + caseSensitive: true, + needle: needle + }; + + var currentOptions = editor.$search.getOptions(); + editor.$search.set(newOptions); + + var ranges = editor.$search.findAll(session); + ranges.forEach(function(range) { + if (!range.contains(cursor.row, cursor.column)) { + var marker = session.addMarker(range, "ace_selected_word", "text"); + session.$selectionOccurrences.push(marker); + } + }); + + editor.$search.set(currentOptions); + }; + + this.clearSelectionHighlight = function(editor) { + if (!editor.session.$selectionOccurrences) + return; + + editor.session.$selectionOccurrences.forEach(function(marker) { + editor.session.removeMarker(marker); + }); + + editor.session.$selectionOccurrences = []; + }; + + this.createModeDelegates = function (mapping) { + if (!this.$embeds) { + return; + } + this.$modes = {}; + for (var i = 0; i < this.$embeds.length; i++) { + if (mapping[this.$embeds[i]]) { + this.$modes[this.$embeds[i]] = new mapping[this.$embeds[i]](); + } + } + + var delegations = ['toggleCommentLines', 'getNextLineIndent', 'checkOutdent', 'autoOutdent', 'transformAction']; + + for (var i = 0; i < delegations.length; i++) { + (function(scope) { + var functionName = delegations[i]; + var defaultHandler = scope[functionName]; + scope[delegations[i]] = function() { + return this.$delegator(functionName, arguments, defaultHandler); + } + } (this)); + } + } + + this.$delegator = function(method, args, defaultHandler) { + var state = args[0]; + + for (var i = 0; i < this.$embeds.length; i++) { + if (!this.$modes[this.$embeds[i]]) continue; + + var split = state.split(this.$embeds[i]); + if (!split[0] && split[1]) { + args[0] = split[1]; + var mode = this.$modes[this.$embeds[i]]; + return mode[method].apply(mode, args); + } + } + var ret = defaultHandler.apply(this, args); + return defaultHandler ? ret : undefined; + }; + + this.transformAction = function(state, action, editor, session, param) { + if (this.$behaviour) { + var behaviours = this.$behaviour.getBehaviours(); + for (var key in behaviours) { + if (behaviours[key][action]) { + var ret = behaviours[key][action].apply(this, arguments); + if (ret) { + return ret; + } + } + } + } + } + +}).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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/tokenizer', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/** + * class Tokenizer + * + * This class takes a set of highlighting rules, and creates a tokenizer out of them. For more information, see [the wiki on extending highlighters](https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode#wiki-extendingTheHighlighter). + * + **/ + +/** + * new Tokenizer(rules, flag) + * - rules (Object): The highlighting rules + * - flag (String): Any additional regular expression flags to pass (like "i" for case insensitive) + * + * Constructs a new tokenizer based on the given rules and flags. + * + **/ +var Tokenizer = function(rules, flag) { + flag = flag ? "g" + flag : "g"; + this.rules = rules; + + this.regExps = {}; + this.matchMappings = {}; + for ( var key in this.rules) { + var rule = this.rules[key]; + var state = rule; + var ruleRegExps = []; + var matchTotal = 0; + var mapping = this.matchMappings[key] = {}; + + for ( var i = 0; i < state.length; i++) { + + if (state[i].regex instanceof RegExp) + state[i].regex = state[i].regex.toString().slice(1, -1); + + // Count number of matching groups. 2 extra groups from the full match + // And the catch-all on the end (used to force a match); + var matchcount = new RegExp("(?:(" + state[i].regex + ")|(.))").exec("a").length - 2; + + // Replace any backreferences and offset appropriately. + var adjustedregex = state[i].regex.replace(/\\([0-9]+)/g, function (match, digit) { + return "\\" + (parseInt(digit, 10) + matchTotal + 1); + }); + + if (matchcount > 1 && state[i].token.length !== matchcount-1) + throw new Error("Matching groups and length of the token array don't match in rule #" + i + " of state " + key); + + mapping[matchTotal] = { + rule: i, + len: matchcount + }; + matchTotal += matchcount; + + ruleRegExps.push(adjustedregex); + } + + this.regExps[key] = new RegExp("(?:(" + ruleRegExps.join(")|(") + ")|(.))", flag); + } +}; + +(function() { + + /** + * Tokenizer.getLineTokens() -> Object + * + * Returns an object containing two properties: `tokens`, which contains all the tokens; and `state`, the current state. + **/ + this.getLineTokens = function(line, startState) { + var currentState = startState; + var state = this.rules[currentState]; + var mapping = this.matchMappings[currentState]; + var re = this.regExps[currentState]; + re.lastIndex = 0; + + var match, tokens = []; + + var lastIndex = 0; + + var token = { + type: null, + value: "" + }; + + while (match = re.exec(line)) { + var type = "text"; + var rule = null; + var value = [match[0]]; + + for (var i = 0; i < match.length-2; i++) { + if (match[i + 1] === undefined) + continue; + + rule = state[mapping[i].rule]; + + if (mapping[i].len > 1) + value = match.slice(i+2, i+1+mapping[i].len); + + // compute token type + if (typeof rule.token == "function") + type = rule.token.apply(this, value); + else + type = rule.token; + + if (rule.next) { + currentState = rule.next; + state = this.rules[currentState]; + mapping = this.matchMappings[currentState]; + lastIndex = re.lastIndex; + + re = this.regExps[currentState]; + re.lastIndex = lastIndex; + } + break; + } + + if (value[0]) { + if (typeof type == "string") { + value = [value.join("")]; + type = [type]; + } + for (var i = 0; i < value.length; i++) { + if (!value[i]) + continue; + + if ((!rule || rule.merge || type[i] === "text") && token.type === type[i]) { + token.value += value[i]; + } else { + if (token.type) + tokens.push(token); + + token = { + type: type[i], + value: value[i] + }; + } + } + } + + if (lastIndex == line.length) + break; + + lastIndex = re.lastIndex; + } + + if (token.type) + tokens.push(token); + + return { + tokens : tokens, + state : currentState + }; + }; + +}).call(Tokenizer.prototype); + +exports.Tokenizer = Tokenizer; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/text_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) { +"use strict"; + +var lang = require("../lib/lang"); + +var TextHighlightRules = function() { + + // regexp must not have capturing parentheses + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [{ + token : "empty_line", + regex : '^$' + }, { + token : "text", + regex : ".+" + }] + }; +}; + +(function() { + + this.addRules = function(rules, prefix) { + for (var key in rules) { + var state = rules[key]; + for (var i=0; i + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +var Behaviour = function() { + this.$behaviours = {}; +}; + +(function () { + + this.add = function (name, action, callback) { + switch (undefined) { + case this.$behaviours: + this.$behaviours = {}; + case this.$behaviours[name]: + this.$behaviours[name] = {}; + } + this.$behaviours[name][action] = callback; + } + + this.addBehaviours = function (behaviours) { + for (var key in behaviours) { + for (var action in behaviours[key]) { + this.add(key, action, behaviours[key][action]); + } + } + } + + this.remove = function (name) { + if (this.$behaviours && this.$behaviours[name]) { + delete this.$behaviours[name]; + } + } + + this.inherit = function (mode, filter) { + if (typeof mode === "function") { + var behaviours = new mode().getBehaviours(filter); + } else { + var behaviours = mode.getBehaviours(filter); + } + this.addBehaviours(behaviours); + } + + this.getBehaviours = function (filter) { + if (!filter) { + return this.$behaviours; + } else { + var ret = {} + for (var i = 0; i < filter.length; i++) { + if (this.$behaviours[filter[i]]) { + ret[filter[i]] = this.$behaviours[filter[i]]; + } + } + return ret; + } + } + +}).call(Behaviour.prototype); + +exports.Behaviour = Behaviour; +}); +define('ace/unicode', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/* +XRegExp Unicode plugin pack: Categories 1.0 +(c) 2010 Steven Levithan +MIT License + +Uses the Unicode 5.2 character database + +This package for the XRegExp Unicode plugin enables the following Unicode categories (aka properties): + +L - Letter (the top-level Letter category is included in the Unicode plugin base script) + Ll - Lowercase letter + Lu - Uppercase letter + Lt - Titlecase letter + Lm - Modifier letter + Lo - Letter without case +M - Mark + Mn - Non-spacing mark + Mc - Spacing combining mark + Me - Enclosing mark +N - Number + Nd - Decimal digit + Nl - Letter number + No - Other number +P - Punctuation + Pd - Dash punctuation + Ps - Open punctuation + Pe - Close punctuation + Pi - Initial punctuation + Pf - Final punctuation + Pc - Connector punctuation + Po - Other punctuation +S - Symbol + Sm - Math symbol + Sc - Currency symbol + Sk - Modifier symbol + So - Other symbol +Z - Separator + Zs - Space separator + Zl - Line separator + Zp - Paragraph separator +C - Other + Cc - Control + Cf - Format + Co - Private use + Cs - Surrogate + Cn - Unassigned + +Example usage: + + \p{N} + \p{Cn} +*/ + + +// will be populated by addUnicodePackage +exports.packages = {}; + +addUnicodePackage({ + 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" +}); + +function addUnicodePackage (pack) { + var codePoint = /\w{4}/g; + for (var name in pack) + exports.packages[name] = pack[name].replace(codePoint, "\\u$&"); +}; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; + +/** + * class Document + * + * Contains the text of the document. Documents are controlled by a single [[EditSession `EditSession`]]. At its core, `Document`s are just an array of strings, with each row in the document matching up to the array index. + * + * + **/ + + /** + * new Document([text]) + * - text (String | Array): The starting text + * + * Creates a new `Document`. If `text` is included, the `Document` contains those strings; otherwise, it's empty. + * + **/ +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); + + /** + * Document.setValue(text) -> Void + * - text (String): The text to use + * + * Replaces all the lines in the current `Document` with the value of `text`. + **/ + 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); + }; + + /** + * Document.getValue() -> String + * + * Returns all the lines in the document as a single string, split by the new line character. + **/ + this.getValue = function() { + return this.getAllLines().join(this.getNewLineCharacter()); + }; + + /** + * Document.createAnchor(row, column) -> Anchor + * - row (Number): The row number to use + * - column (Number): The column number to use + * + * Creates a new `Anchor` to define a floating point in the document. + **/ + this.createAnchor = function(row, column) { + return new Anchor(this, row, column); + }; + + /** internal, hide + * Document.$split(text) -> [String] + * - text (String): The text to work with + * + ([String]): A String array, with each index containing a piece of the original `text` string. + * + * Splits a string of text on any newline (`\n`) or carriage-return ('\r') characters. + * + * + **/ + + // 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/); + }; + + + /** internal, hide + * Document.$detectNewLine(text) -> Void + * + * + **/ + this.$detectNewLine = function(text) { + var match = text.match(/^.*?(\r\n|\r|\n)/m); + if (match) { + this.$autoNewLine = match[1]; + } else { + this.$autoNewLine = "\n"; + } + }; + + /** + * Document.getNewLineCharacter() -> String + * + (String): If `newLineMode == windows`, `\r\n` is returned.
      + * If `newLineMode == unix`, `\n` is returned.
      + * If `newLineMode == auto`, the value of `autoNewLine` is returned. + * + * Returns the newline character that's being used, depending on the value of `newLineMode`. + * + * + * + **/ + 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"; + /** + * Document.setNewLineMode(newLineMode) -> Void + * - newLineMode(String): [The newline mode to use; can be either `windows`, `unix`, or `auto`]{: #Document.setNewLineMode.param} + * + * [Sets the new line mode.]{: #Document.setNewLineMode.desc} + **/ + this.setNewLineMode = function(newLineMode) { + if (this.$newLineMode === newLineMode) + return; + + this.$newLineMode = newLineMode; + }; + + /** + * Document.getNewLineMode() -> String + * + * [Returns the type of newlines being used; either `windows`, `unix`, or `auto`]{: #Document.getNewLineMode} + * + **/ + this.getNewLineMode = function() { + return this.$newLineMode; + }; + + /** + * Document.isNewLine(text) -> Boolean + * - text (String): The text to check + * + * Returns `true` if `text` is a newline character (either `\r\n`, `\r`, or `\n`). + * + **/ + this.isNewLine = function(text) { + return (text == "\r\n" || text == "\r" || text == "\n"); + }; + + /** + * Document.getLine(row) -> String + * - row (Number): The row index to retrieve + * + * Returns a verbatim copy of the given line as it is in the document + * + **/ + this.getLine = function(row) { + return this.$lines[row] || ""; + }; + + /** + * Document.getLines(firstRow, lastRow) -> [String] + * - firstRow (Number): The first row index to retrieve + * - lastRow (Number): The final row index to retrieve + * + * Returns an array of strings of the rows between `firstRow` and `lastRow`. This function is inclusive of `lastRow`. + * + **/ + this.getLines = function(firstRow, lastRow) { + return this.$lines.slice(firstRow, lastRow + 1); + }; + + /** + * Document.getAllLines() -> [String] + * + * 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()); + }; + + /** + * Document.getLength() -> Number + * + * Returns the number of rows in the document. + **/ + this.getLength = function() { + return this.$lines.length; + }; + + /** + * Document.getTextRange(range) -> String + * - range (Range): The range to work with + * + * [Given a range within the document, this function returns all the text within that range as a single string.]{: #Document.getTextRange.desc} + **/ + 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 = this.getLines(range.start.row+1, range.end.row-1); + lines.unshift((this.$lines[range.start.row] || "").substring(range.start.column)); + lines.push((this.$lines[range.end.row] || "").substring(0, range.end.column)); + return lines.join(this.getNewLineCharacter()); + } + }; + + /** internal, hide + * Document.$clipPosition(position) -> Number + * + * + **/ + 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; + }; + + /** + * Document.insert(position, text) -> Number + * - position (Number): The position to start inserting at + * - text (String): A chunk of text to insert + * + (Number): The position of the last line of `text`. If the length of `text` is 0, this function simply returns `position`. + * Inserts a block of `text` and the indicated `position`. + * + * + **/ + this.insert = function(position, text) { + if (!text || text.length === 0) + return position; + + position = this.$clipPosition(position); + + // only detect new lines if the document has no line break yet + 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; + }; + + /** + * Document.insertLines(row, lines) -> Object + * - row (Number): The index of the row to insert at + * - lines (Array): An array of strings + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}```
      + * If `lines` is empty, this function returns an object containing the current row, and column, like this:
      + * ```{row: row, column: 0}``` + * + * Inserts the elements in `lines` into the document, starting at the row index given by `row`. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.insertNewLine(position) -> Object + * - position (String): The position to insert at + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}``` + * + * Inserts a new line into the document at the current row's `position`. This method also triggers the `'change'` event. + * + * + * + **/ + 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; + }; + + /** + * Document.insertInLine(position, text) -> Object | Number + * - position (Number): The position to insert at + * - text (String): A chunk of text + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}``` + * + (Number): If `text` is empty, this function returns the value of `position` + * + * Inserts `text` into the `position` at the current row. This method also triggers the `'change'` event. + * + * + * + **/ + 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; + }; + + /** + * Document.remove(range) -> Object + * - range (Range): A specified Range to remove + * + (Object): Returns the new `start` property of the range, which contains `startRow` and `startColumn`. If `range` is empty, this function returns the unmodified value of `range.start`. + * + * Removes the `range` from the document. + * + * + **/ + 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; + }; + + /** + * Document.removeInLine(row, startColumn, endColumn) -> Object + * - row (Number): The row to remove from + * - startColumn (Number): The column to start removing at + * - endColumn (Number): The column to stop removing at + * + (Object): Returns an object containing `startRow` and `startColumn`, indicating the new row and column values.
      If `startColumn` is equal to `endColumn`, this function returns nothing. + * + * Removes the specified columns from the `row`. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.removeLines(firstRow, lastRow) -> [String] + * - firstRow (Number): The first row to be removed + * - lastRow (Number): The last row to be removed + * + ([String]): Returns all the removed lines. + * + * Removes a range of full lines. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.removeNewLine(row) -> Void + * - row (Number): The row to check + * + * Removes the new line between `row` and the row immediately following it. This method also triggers the `'change'` event. + * + **/ + 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 }); + }; + + /** + * Document.replace(range, text) -> Object + * - range (Range): A specified Range to replace + * - text (String): The new text to use as a replacement + * + (Object): Returns an object containing the final row and column, like this: + * {row: endRow, column: 0} + * If the text and range are empty, this function returns an object containing the current `range.start` value. + * If the text is the exact same as what currently exists, this function returns an object containing the current `range.end` value. + * + * Replaces a range in the document with the new `text`. + * + **/ + 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; + }; + + /** + * Document.applyDeltas(deltas) -> Void + * + * Applies all the changes previously accumulated. These can be either `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + **/ + this.applyDeltas = function(deltas) { + for (var i=0; i Void + * + * Reverts any changes previously applied. These can be either `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + **/ + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; + +/** + * class Anchor + * + * Defines the floating pointer in the document. Whenever text is inserted or deleted before the cursor, the position of the cursor is updated + * + **/ + +/** + * new Anchor(doc, row, column) + * - doc (Document): The document to associate with the anchor + * - row (Number): The starting row position + * - column (Number): The starting column position + * + * Creates a new `Anchor` and associates it with a document. + * + **/ + +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); + + /** + * Anchor.getPosition() -> Object + * + * Returns an object identifying the `row` and `column` position of the current anchor. + * + **/ + + this.getPosition = function() { + return this.$clipPositionToDocument(this.row, this.column); + }; + + /** + * Anchor.getDocument() -> Document + * + * Returns the current document. + * + **/ + + this.getDocument = function() { + return this.document; + }; + + /** + * Anchor@onChange(e) + * - e (Event): Contains data about the event + * + * Fires whenever the anchor position changes. Events that can trigger this function include `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + * + **/ + + 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); + }; + + /** + * Anchor.setPosition(row, column, noClip) + * - row (Number): The row index to move the anchor to + * - column (Number): The column index to move the anchor to + * - noClip (Boolean): Identifies if you want the position to be clipped + * + * Sets the anchor position to the specified row and column. If `noClip` is `true`, the position is not clipped. + * + **/ + + 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 + }); + }; + + /** + * Anchor.detach() + * + * When called, the `'change'` event listener is removed. + * + **/ + + this.detach = function() { + this.document.removeEventListener("change", this.$onChange); + }; + + /** internal, hide + * Anchor.clipPositionToDocument(row, column) + * - row (Number): The row index to clip the anchor to + * - column (Number): The column index to clip the anchor to + * + * Clips the anchor position to the specified row and column. + * + **/ + + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/background_tokenizer', ['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; + +/** + * class BackgroundTokenizer + * + * Tokenizes the current [[Document `Document`]] in the background, and caches the tokenized rows for future use. If a certain row is changed, everything below that row is re-tokenized. + * + **/ + +/** + * new BackgroundTokenizer(tokenizer, editor) + * - tokenizer (Tokenizer): The tokenizer to use + * - editor (Editor): The editor to associate with + * + * Creates a new `BackgroundTokenizer` object. + * + * + **/ + +var BackgroundTokenizer = function(tokenizer, editor) { + this.running = false; + this.lines = []; + this.currentLine = 0; + this.tokenizer = tokenizer; + + var self = this; + + this.$worker = function() { + if (!self.running) { return; } + + var workerStart = new Date(); + var startLine = self.currentLine; + var doc = self.doc; + + var processedLines = 0; + + var len = doc.getLength(); + while (self.currentLine < len) { + self.lines[self.currentLine] = self.$tokenizeRows(self.currentLine, self.currentLine)[0]; + self.currentLine++; + + // only check every 5 lines + processedLines += 1; + if ((processedLines % 5 == 0) && (new Date() - workerStart) > 20) { + self.fireUpdateEvent(startLine, self.currentLine-1); + self.running = setTimeout(self.$worker, 20); + return; + } + } + + self.running = false; + + self.fireUpdateEvent(startLine, len - 1); + }; +}; + +(function(){ + + oop.implement(this, EventEmitter); + + /** + * BackgroundTokenizer.setTokenizer(tokenizer) + * - tokenizer (Tokenizer): The new tokenizer to use + * + * Sets a new tokenizer for this object. + * + **/ + + this.setTokenizer = function(tokenizer) { + this.tokenizer = tokenizer; + this.lines = []; + + this.start(0); + }; + + /** + * BackgroundTokenizer.setDocument(doc) + * - doc (Document): The new document to associate with + * + * Sets a new document to associate with this object. + * + **/ + + this.setDocument = function(doc) { + this.doc = doc; + this.lines = []; + + this.stop(); + }; + + /** + * BackgroundTokenizer.fireUpdateEvent(firstRow, lastRow) + * - firstRow (Number): The starting row region + * - lastRow (Number): The final row region + * + * Emits the `'update'` event. `firstRow` and `lastRow` are used to define the boundaries of the region to be updated. + * + **/ + + this.fireUpdateEvent = function(firstRow, lastRow) { + var data = { + first: firstRow, + last: lastRow + }; + this._emit("update", {data: data}); + }; + + /** + * BackgroundTokenizer.start(startRow) + * - startRow (Number): The row to start at + * + * Starts tokenizing at the row indicated. + * + **/ + + this.start = function(startRow) { + this.currentLine = Math.min(startRow || 0, this.currentLine, + this.doc.getLength()); + + // remove all cached items below this line + this.lines.splice(this.currentLine, this.lines.length); + + this.stop(); + // pretty long delay to prevent the tokenizer from interfering with the user + this.running = setTimeout(this.$worker, 700); + }; + + /** + * BackgroundTokenizer.stop() + * + * Stops tokenizing. + * + **/ + + this.stop = function() { + if (this.running) + clearTimeout(this.running); + this.running = false; + }; + + /** related to: BackgroundTokenizer.$tokenizeRows + * BackgroundTokenizer.getTokens(firstRow, lastRow) -> [Object] + * - firstRow (Number): The row to start at + * - lastRow (Number): The row to finish at + * + * Starts tokenizing at the row indicated. Returns a list of objects of the tokenized rows. + * + **/ + + this.getTokens = function(firstRow, lastRow) { + return this.$tokenizeRows(firstRow, lastRow); + }; + + /** + * BackgroundTokenizer.getState(row) -> String + * - row (Number): The row to start at + * + * [Returns the state of tokenization for a row.]{: #BackgroundTokenizer.getState} + * + **/ + + this.getState = function(row) { + return this.$tokenizeRows(row, row)[0].state; + }; + + /** + * BackgroundTokenizer.$tokenizeRows(firstRow, lastRow) -> [Object] + * - startRow (Number): The row to start at + * - lastRow (Number): The row to finish at + * + ([Object]): A list of the tokenized rows. Each item in the list is an object with two properties, `state` and `start`. + * + * Tokenizes all the rows within the specified region. + * + * + **/ + this.$tokenizeRows = function(firstRow, lastRow) { + if (!this.doc || isNaN(firstRow) || isNaN(lastRow)) + return [{'state':'start','tokens':[]}]; + + var rows = []; + + // determine start state + var state = "start"; + var doCache = false; + if (firstRow > 0 && this.lines[firstRow - 1]) { + state = this.lines[firstRow - 1].state; + doCache = true; + } else if (firstRow == 0) { + state = "start"; + doCache = true; + } else if (this.lines.length > 0) { + // Guess that we haven't changed state. + state = this.lines[this.lines.length-1].state; + } + + var lines = this.doc.getLines(firstRow, lastRow); + for (var row=firstRow; row<=lastRow; row++) { + if (!this.lines[row]) { + var tokens = this.tokenizer.getLineTokens(lines[row-firstRow] || "", state); + var state = tokens.state; + rows.push(tokens); + + if (doCache) { + this.lines[row] = tokens; + } + } + else { + var tokens = this.lines[row]; + state = tokens.state; + rows.push(tokens); + } + } + return rows; + }; + +}).call(BackgroundTokenizer.prototype); + +exports.BackgroundTokenizer = BackgroundTokenizer; +}); +/* 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): + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/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("../range").Range; +var FoldLine = require("./fold_line").FoldLine; +var Fold = require("./fold").Fold; +var TokenIterator = require("../token_iterator").TokenIterator; + +function Folding() { + /* + * Looks up a fold at a given row/column. Possible values for side: + * -1: ignore a fold if fold.start = row/column + * +1: ignore a fold if fold.end = row/column + */ + this.getFoldAt = function(row, column, side) { + 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]; + if (fold.range.contains(row, column)) { + if (side == 1 && fold.range.isEnd(row, column)) { + continue; + } else if (side == -1 && fold.range.isStart(row, column)) { + continue; + } + return fold; + } + } + }; + + /* + * Returns all folds in the given range. Note, that this will return folds + * + */ + this.getFoldsInRange = function(range) { + range = range.clone(); + var start = range.start; + var end = range.end; + var foldLines = this.$foldData; + var foundFolds = []; + + start.column += 1; + end.column -= 1; + + for (var i = 0; i < foldLines.length; i++) { + var cmp = foldLines[i].range.compareRange(range); + if (cmp == 2) { + // Range is before foldLine. No intersection. This means, + // there might be other foldLines that intersect. + continue; + } + else if (cmp == -2) { + // Range is after foldLine. There can't be any other foldLines then, + // so let's give up. + break; + } + + var folds = foldLines[i].folds; + for (var j = 0; j < folds.length; j++) { + var fold = folds[j]; + cmp = fold.range.compareRange(range); + if (cmp == -2) { + break; + } else if (cmp == 2) { + continue; + } else + // WTF-state: Can happen due to -1/+1 to start/end column. + if (cmp == 42) { + break; + } + foundFolds.push(fold); + } + } + 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. + * E.g. + * foob|arwolrd -> "bar" + * foobarwol|rd -> "world" + * foobarwolrd -> + * + * where | means the position of row/column + * + * The trim option determs if the return string should be trimed according + * to the "side" passed with the trim value: + * + * E.g. + * foob|arwolrd -trim=-1> "b" + * foobarwol|rd -trim=+1> "rld" + * fo|obarwolrd -trim=00> "foo" + */ + this.getFoldStringAt = function(row, column, trim, foldLine) { + 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++) { + fold = foldLine.folds[i]; + var cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + str = this + .getLine(fold.start.row) + .substring(lastFold.end.column, fold.start.column); + break; + } + else if (cmp === 0) { + return null; + } + lastFold = fold; + } + if (!str) + str = this.getLine(fold.start.row).substring(lastFold.end.column); + + if (trim == -1) + return str.substring(0, column - lastFold.end.column); + else if (trim == 1) + return str.substring(column - lastFold.end.column); + else + return str; + }; + + this.getFoldLine = function(docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { + return foldLine; + } else if (foldLine.end.row > docRow) { + return null; + } + } + return null; + }; + + // returns the fold which starts after or contains docRow + this.getNextFoldLine = function(docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.end.row >= docRow) { + return foldLine; + } + } + return null; + }; + + this.getFoldedRowCount = function(first, last) { + var foldData = this.$foldData, rowCount = last-first+1; + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i], + end = foldLine.end.row, + start = foldLine.start.row; + if (end >= last) { + if(start < last) { + if(start >= first) + rowCount -= last-start; + else + rowCount = 0;//in one fold + } + break; + } else if(end >= first){ + if (start >= first) //fold inside range + rowCount -= end-start; + else + rowCount -= end-first+1; + } + } + return rowCount; + }; + + this.$addFoldLine = function(foldLine) { + this.$foldData.push(foldLine); + this.$foldData.sort(function(a, b) { + return a.start.row - b.start.row; + }); + return foldLine; + }; + + /* + * Adds a new fold. + * + * @returns + * The new created Fold object or an existing fold object in case the + * passed in range fits an existing fold exactly. + */ + this.addFold = function(placeholder, range) { + var foldData = this.$foldData; + var added = false; + var fold; + + if (placeholder instanceof Fold) + 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"; + + if (startRow == endRow && endColumn - startColumn < 2) + throw "The range has to be at least 2 characters width"; + + var startFold = this.getFoldAt(startRow, startColumn, 1); + var endFold = this.getFoldAt(endRow, endColumn, -1); + if (startFold && endFold == startFold) + return startFold.addSubFold(fold); + + if ( + (startFold && !startFold.range.isStart(startRow, startColumn)) + || (endFold && !endFold.range.isEnd(endRow, endColumn)) + ) { + throw "A fold can't intersect already existing fold" + fold.range + startFold.range; + } + + // Check if there are folds in the range we create the new fold for. + var folds = this.getFoldsInRange(fold.range); + if (folds.length > 0) { + // Remove the folds from fold data. + this.removeFolds(folds); + // Add the removed folds as subfolds on the new fold. + fold.subFolds = folds; + } + + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (endRow == foldLine.start.row) { + foldLine.addFold(fold); + added = true; + break; + } + else if (startRow == foldLine.end.row) { + foldLine.addFold(fold); + added = true; + if (!fold.sameRow) { + // Check if we might have to merge two FoldLines. + var foldLineNext = foldData[i + 1]; + if (foldLineNext && foldLineNext.start.row == endRow) { + // We need to merge! + foldLine.merge(foldLineNext); + break; + } + } + break; + } + else if (endRow <= foldLine.start.row) { + break; + } + } + + if (!added) + foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); + + if (this.$useWrapMode) + this.$updateWrapData(foldLine.start.row, foldLine.start.row); + + // Notify that fold data has changed. + this.$modified = true; + this._emit("changeFold", { data: fold }); + + return fold; + }; + + this.addFolds = function(folds) { + folds.forEach(function(fold) { + this.addFold(fold); + }, this); + }; + + this.removeFold = function(fold) { + var foldLine = fold.foldLine; + var startRow = foldLine.start.row; + var endRow = foldLine.end.row; + + 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) { + foldLines.splice(foldLines.indexOf(foldLine), 1); + } else + // If the fold is the last fold of the foldLine, just remove it. + if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { + folds.pop(); + foldLine.end.row = folds[folds.length - 1].end.row; + foldLine.end.column = folds[folds.length - 1].end.column; + } else + // If the fold is the first fold of the foldLine, just remove it. + if (foldLine.range.isStart(fold.start.row, fold.start.column)) { + folds.shift(); + foldLine.start.row = folds[0].start.row; + foldLine.start.column = folds[0].start.column; + } else + // We know there are more then 2 folds and the fold is not at the edge. + // This means, the fold is somewhere in between. + // + // If the fold is in one row, we just can remove it. + if (fold.sameRow) { + 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. newFoldLine is the second part + { + var newFoldLine = foldLine.split(fold.start.row, fold.start.column); + folds = newFoldLine.folds; + folds.shift(); + newFoldLine.start.row = folds[0].start.row; + newFoldLine.start.column = folds[0].start.column; + } + + if (this.$useWrapMode) { + this.$updateWrapData(startRow, endRow); + } + + // Notify that fold data has changed. + this.$modified = true; + this._emit("changeFold", { data: fold }); + }; + + this.removeFolds = function(folds) { + // We need to clone the folds array passed in as it might be the folds + // array of a fold line and as we call this.removeFold(fold), folds + // are removed from folds and changes the current index. + var cloneFolds = []; + for (var i = 0; i < folds.length; i++) { + cloneFolds.push(folds[i]); + } + + cloneFolds.forEach(function(fold) { + this.removeFold(fold); + }, this); + this.$modified = true; + }; + + this.expandFold = function(fold) { + this.removeFold(fold); + fold.subFolds.forEach(function(fold) { + 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 + * folded parts such that some parts of the line is still visible. + **/ + this.isRowFolded = function(docRow, startFoldRow) { + return !!this.getFoldLine(docRow, startFoldRow); + }; + + this.getRowFoldEnd = function(docRow, startFoldRow) { + var foldLine = this.getFoldLine(docRow, startFoldRow); + return (foldLine + ? foldLine.end.row + : docRow); + }; + + this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) { + if (startRow == null) { + startRow = foldLine.start.row; + startColumn = 0; + } + + if (endRow == null) { + endRow = foldLine.end.row; + endColumn = this.getLine(endRow).length; + } + + // Build the textline using the FoldLine walker. + var doc = this.doc; + var textLine = ""; + + foldLine.walk(function(placeholder, row, column, lastColumn) { + if (row < startRow) { + return; + } else if (row == startRow) { + if (column < startColumn) { + return; + } + lastColumn = Math.max(startColumn, lastColumn); + } + if (placeholder) { + textLine += placeholder; + } else { + textLine += doc.getLine(row).substring(lastColumn, column); + } + }.bind(this), endRow, endColumn); + return textLine; + }; + + this.getDisplayLine = function(row, endColumn, startRow, startColumn) { + var foldLine = this.getFoldLine(row); + + if (!foldLine) { + var line; + line = this.doc.getLine(row); + return line.substring(startColumn || 0, endColumn || line.length); + } else { + return this.getFoldDisplayLine( + foldLine, row, endColumn, startRow, startColumn); + } + }; + + this.$cloneFoldData = function() { + var fd = []; + fd = this.$foldData.map(function(foldLine) { + var folds = foldLine.folds.map(function(fold) { + return fold.clone(); + }); + return new FoldLine(fd, folds); + }); + + 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 || this.getLength(); + 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.isEqual(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: + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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): + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/fold_line', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) { +"use strict"; + +var Range = require("../range").Range; + +/* + * If an array is passed in, the folds are expected to be sorted already. + */ +function FoldLine(foldData, folds) { + this.foldData = foldData; + if (Array.isArray(folds)) { + this.folds = folds; + } else { + folds = this.folds = [ folds ]; + } + + var last = folds[folds.length - 1] + this.range = new Range(folds[0].start.row, folds[0].start.column, + last.end.row, last.end.column); + this.start = this.range.start; + this.end = this.range.end; + + this.folds.forEach(function(fold) { + fold.setFoldLine(this); + }, this); +} + +(function() { + /* + * Note: This doesn't update wrapData! + */ + this.shiftRow = function(shift) { + this.start.row += shift; + this.end.row += shift; + this.folds.forEach(function(fold) { + fold.start.row += shift; + fold.end.row += shift; + }); + } + + this.addFold = function(fold) { + if (fold.sameRow) { + if (fold.start.row < this.startRow || fold.endRow > this.endRow) { + throw "Can't add a fold to this FoldLine as it has no connection"; + } + this.folds.push(fold); + this.folds.sort(function(a, b) { + return -a.range.compareEnd(b.start.row, b.start.column); + }); + if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } + } else if (fold.start.row == this.end.row) { + this.folds.push(fold); + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } else if (fold.end.row == this.start.row) { + this.folds.unshift(fold); + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } else { + throw "Trying to add fold to FoldRow that doesn't have a matching row"; + } + fold.foldLine = this; + } + + this.containsRow = function(row) { + return row >= this.start.row && row <= this.end.row; + } + + this.walk = function(callback, endRow, endColumn) { + var lastEnd = 0, + folds = this.folds, + fold, + comp, stop, isNewRow = true; + + if (endRow == null) { + endRow = this.end.row; + endColumn = this.end.column; + } + + for (var i = 0; i < folds.length; i++) { + fold = folds[i]; + + comp = fold.range.compareStart(endRow, endColumn); + // This fold is after the endRow/Column. + if (comp == -1) { + callback(null, endRow, endColumn, lastEnd, isNewRow); + return; + } + + stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); + stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); + + // If the user requested to stop the walk or endRow/endColumn is + // inside of this fold (comp == 0), then end here. + if (stop || comp == 0) { + return; + } + + // Note the new lastEnd might not be on the same line. However, + // it's the callback's job to recognize this. + isNewRow = !fold.sameRow; + lastEnd = fold.end.column; + } + callback(null, endRow, endColumn, lastEnd, isNewRow); + } + + this.getNextFoldTo = function(row, column) { + var fold, cmp; + for (var i = 0; i < this.folds.length; i++) { + fold = this.folds[i]; + cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + return { + fold: fold, + kind: "after" + }; + } else if (cmp == 0) { + return { + fold: fold, + kind: "inside" + } + } + } + return null; + } + + this.addRemoveChars = function(row, column, len) { + var ret = this.getNextFoldTo(row, column), + fold, folds; + if (ret) { + fold = ret.fold; + if (ret.kind == "inside" + && fold.start.column != column + && fold.start.row != row) + { + //throwing here breaks whole editor + //@todo properly handle this + window.console && window.console.log(row, column, fold); + } else if (fold.start.row == row) { + folds = this.folds; + var i = folds.indexOf(fold); + if (i == 0) { + this.start.column += len; + } + for (i; i < folds.length; i++) { + fold = folds[i]; + fold.start.column += len; + if (!fold.sameRow) { + return; + } + fold.end.column += len; + } + this.end.column += len; + } + } + } + + this.split = function(row, column) { + var fold = this.getNextFoldTo(row, column).fold, + folds = this.folds; + var foldData = this.foldData; + + if (!fold) { + return null; + } + var i = folds.indexOf(fold); + var foldBefore = folds[i - 1]; + this.end.row = foldBefore.end.row; + this.end.column = foldBefore.end.column; + + // Remove the folds after row/column and create a new FoldLine + // containing these removed folds. + folds = folds.splice(i, folds.length - i); + + var newFoldLine = new FoldLine(foldData, folds); + foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); + return newFoldLine; + } + + this.merge = function(foldLineNext) { + var folds = foldLineNext.folds; + for (var i = 0; i < folds.length; i++) { + this.addFold(folds[i]); + } + // Remove the foldLineNext - no longer needed, as + // it's merged now with foldLineNext. + var foldData = this.foldData; + foldData.splice(foldData.indexOf(foldLineNext), 1); + } + + this.toString = function() { + var ret = [this.range.toString() + ": [" ]; + + this.folds.forEach(function(fold) { + ret.push(" " + fold.toString()); + }); + ret.push("]") + return ret.join("\n"); + } + + this.idxToPosition = function(idx) { + var lastFoldEndColumn = 0; + var fold; + + for (var i = 0; i < this.folds.length; i++) { + var fold = this.folds[i]; + + idx -= fold.start.column - lastFoldEndColumn; + if (idx < 0) { + return { + row: fold.start.row, + column: fold.start.column + idx + }; + } + + idx -= fold.placeholder.length; + if (idx < 0) { + return fold.start; + } + + lastFoldEndColumn = fold.end.column; + } + + return { + row: this.end.row, + column: this.end.column + idx + }; + } +}).call(FoldLine.prototype); + +exports.FoldLine = FoldLine; +}); +/* 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): + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/fold', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/* + * Simple fold-data struct. + **/ +var Fold = exports.Fold = function(range, placeholder) { + this.foldLine = null; + this.placeholder = placeholder; + this.range = range; + this.start = range.start; + this.end = range.end; + + this.sameRow = range.start.row == range.end.row; + this.subFolds = []; +}; + +(function() { + + this.toString = function() { + return '"' + this.placeholder + '" ' + this.range.toString(); + }; + + this.setFoldLine = function(foldLine) { + this.foldLine = foldLine; + this.subFolds.forEach(function(fold) { + fold.setFoldLine(foldLine); + }); + }; + + this.clone = function() { + var range = this.range.clone(); + var fold = new Fold(range, this.placeholder); + this.subFolds.forEach(function(subFold) { + fold.subFolds.push(subFold.clone()); + }); + return fold; + }; + + this.addSubFold = function(fold) { + if (this.range.isEqual(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: + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + +/** + * class TokenIterator + * + * This class provides an essay way to treat the document as a stream of tokens, and provides methods to iterate over these tokens. + * + **/ + +/** + * new TokenIterator(session, initialRow, initialColumn) + * - session (EditSession): The session to associate with + * - initialRow (Number): The row to start the tokenizing at + * - initialColumn (Number): The column to start the tokenizing at + * + * Creates a new token iterator object. The inital token index is set to the provided row and column coordinates. + * + **/ +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() { + + /** + * TokenIterator.stepBackward() -> [String] + * + (String): If the current point is not at the top of the file, this function returns `null`. Otherwise, it returns an array of the tokenized strings. + * + * Tokenizes all the items from the current point to the row prior in the document. + **/ + 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]; + }; + + /** + * TokenIterator.stepForward() -> String + * + * Tokenizes all the items from the current point until the next row in the document. If the current point is at the end of the file, this function returns `null`. Otherwise, it returns the tokenized string. + **/ + 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]; + }; + + /** + * TokenIterator.getCurrentToken() -> String + * + * Returns the current tokenized string. + * + **/ + this.getCurrentToken = function () { + return this.$rowTokens[this.$tokenIndex]; + }; + + /** + * TokenIterator.getCurrentTokenRow() -> Number + * + * Returns the current row. + * + **/ + this.getCurrentTokenRow = function () { + return this.$row; + }; + + /** + * TokenIterator.getCurrentTokenColumn() -> Number + * + * Returns the current column. + * + **/ + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; + +/** + * class BracketMatch + * + * + * + * + **/ + +/** + * new BracketMatch(position) + * - platform (String): Identifier for the platform; must be either `'mac'` or `'win'` + * - commands (Array): A list of commands + * + * TODO + * + * + **/ +function BracketMatch() { + + /** + * new findMatchingBracket(position) + * - position (Number): Identifier for the platform; must be either `'mac'` or `'win'` + * - commands (Array): A list of commands + * + * TODO + * + * + **/ + 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/search', ['require', 'exports', 'module' , 'ace/lib/lang', 'ace/lib/oop', 'ace/range'], function(require, exports, module) { +"use strict"; + +var lang = require("./lib/lang"); +var oop = require("./lib/oop"); +var Range = require("./range").Range; + +/** + * class Search + * + * A class designed to handle all sorts of text searches within a [[Document `Document`]]. + * + **/ + +/** + * new Search() + * + * Creates a new `Search` object. The search options contain the following defaults: + * + * * `needle`: `""` + * * `backwards`: `false` + * * `wrap`: `false` + * * `caseSensitive`: `false` + * * `wholeWord`: `false` + * * `scope`: `ALL` + * * `regExp`: `false` + * +**/ + +var Search = function() { + this.$options = { + needle: "", + backwards: false, + wrap: false, + caseSensitive: false, + wholeWord: false, + scope: Search.ALL, + regExp: false + }; +}; + +Search.ALL = 1; +Search.SELECTION = 2; + +(function() { + + /** + * Search.set(options) -> Search + * - options (Object): An object containing all the new search properties + * + * Sets the search options via the `options` parameter. + * + **/ + this.set = function(options) { + oop.mixin(this.$options, options); + return this; + }; + + /** + * Search.getOptions() -> Object + * + * [Returns an object containing all the search options.]{: #Search.getOptions} + * + **/ + this.getOptions = function() { + return lang.copyObject(this.$options); + }; + + /** + * Search.find(session) -> Range + * - session (EditSession): The session to search with + * + * Searches for `options.needle`. If found, this method returns the [[Range `Range`]] where the text first occurs. If `options.backwards` is `true`, the search goes backwards in the session. + * + **/ + this.find = function(session) { + if (!this.$options.needle) + return null; + + if (this.$options.backwards) { + var iterator = this.$backwardMatchIterator(session); + } else { + iterator = this.$forwardMatchIterator(session); + } + + var firstRange = null; + iterator.forEach(function(range) { + firstRange = range; + return true; + }); + + return firstRange; + }; + + /** + * Search.findAll(session) -> [Range] + * - session (EditSession): The session to search with + * + * Searches for all occurances `options.needle`. If found, this method returns an array of [[Range `Range`s]] where the text first occurs. If `options.backwards` is `true`, the search goes backwards in the session. + * + **/ + this.findAll = function(session) { + var options = this.$options; + if (!options.needle) + return []; + + 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; + }; + + /** + * Search.replace(input, replacement) -> String + * - input (String): The text to search in + * - replacement (String): The replacing text + * + (String): If `options.regExp` is `true`, this function returns `input` with the replacement already made. Otherwise, this function just returns `replacement`.
      + * If `options.needle` was not found, this function returns `null`. + * + * Searches for `options.needle` in `input`, and, if found, replaces it with `replacement`. + * + * + * + **/ + this.replace = function(input, replacement) { + var re = this.$assembleRegExp(); + var match = re.exec(input); + if (match && match[0].length == input.length) { + if (this.$options.regExp) { + return input.replace(re, replacement); + } else { + return replacement; + } + } else { + return null; + } + }; + + /** internal, hide + * Search.$forwardMatchIterator(session) -> String | Boolean + * - session (EditSession): The session to search with + * + * + * + **/ + this.$forwardMatchIterator = function(session) { + var re = this.$assembleRegExp(); + var self = this; + + return { + forEach: function(callback) { + self.$forwardLineIterator(session).forEach(function(line, startIndex, row) { + if (startIndex) { + line = line.substring(startIndex); + } + + var matches = []; + + line.replace(re, function(str) { + var offset = arguments[arguments.length-2]; + matches.push({ + str: str, + offset: startIndex + offset + }); + return str; + }); + + for (var i=0; i String + * - session (EditSession): The session to search with + * + * + * + **/ + this.$backwardMatchIterator = function(session) { + var re = this.$assembleRegExp(); + var self = this; + + return { + forEach: function(callback) { + self.$backwardLineIterator(session).forEach(function(line, startIndex, row) { + if (startIndex) { + line = line.substring(startIndex); + } + + var matches = []; + + line.replace(re, function(str, offset) { + matches.push({ + str: str, + offset: startIndex + offset + }); + return str; + }); + + for (var i=matches.length-1; i>= 0; i--) { + var match = matches[i]; + var range = self.$rangeFromMatch(row, match.offset, match.str.length); + if (callback(range)) + return true; + } + }); + } + }; + }; + + this.$rangeFromMatch = function(row, column, length) { + return new Range(row, column, row, column+length); + }; + + this.$assembleRegExp = function() { + if (this.$options.regExp) { + var needle = this.$options.needle; + } else { + needle = lang.escapeRegExp(this.$options.needle); + } + + if (this.$options.wholeWord) { + needle = "\\b" + needle + "\\b"; + } + + var modifier = "g"; + if (!this.$options.caseSensitive) { + modifier += "i"; + } + + var re = new RegExp(needle, modifier); + return re; + }; + + this.$forwardLineIterator = function(session) { + var searchSelection = this.$options.scope == Search.SELECTION; + + 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; + var lastRow = searchSelection ? range.end.row : session.getLength() - 1; + + var wrap = this.$options.wrap; + var inWrap = false; + + function getLine(row) { + var line = session.getLine(row); + if (searchSelection && row == range.end.row) { + line = line.substring(0, range.end.column); + } + if (inWrap && row == start.row) { + line = line.substring(0, start.column); + } + return line; + } + + return { + forEach: function(callback) { + var row = start.row; + + var line = getLine(row); + var startIndex = start.column; + + var stop = false; + inWrap = false; + + while (!callback(line, startIndex, row)) { + + if (stop) { + return; + } + + row++; + startIndex = 0; + + if (row > lastRow) { + if (wrap) { + row = firstRow; + startIndex = firstColumn; + inWrap = true; + } else { + return; + } + } + + if (row == start.row) + stop = true; + + line = getLine(row); + } + } + }; + }; + + this.$backwardLineIterator = function(session) { + var searchSelection = this.$options.scope == Search.SELECTION; + + 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; + var lastRow = searchSelection ? range.end.row : session.getLength() - 1; + + var wrap = this.$options.wrap; + + return { + forEach : function(callback) { + var row = start.row; + + var line = session.getLine(row).substring(0, start.column); + var startIndex = 0; + var stop = false; + var inWrap = false; + + while (!callback(line, startIndex, row)) { + + if (stop) + return; + + row--; + startIndex = 0; + + if (row < firstRow) { + if (wrap) { + row = lastRow; + inWrap = true; + } else { + return; + } + } + + if (row == start.row) + stop = true; + + line = session.getLine(row); + if (searchSelection) { + if (row == firstRow) + startIndex = firstColumn; + else if (row == lastRow) + line = line.substring(0, range.end.column); + } + + if (inWrap && row == start.row) + startIndex = start.column; + } + } + }; + }; + +}).call(Search.prototype); + +exports.Search = Search; +}); +define('ace/commands/command_manager', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/keyboard/hash_handler', 'ace/lib/event_emitter'], function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var HashHandler = require("../keyboard/hash_handler").HashHandler; +var EventEmitter = require("../lib/event_emitter").EventEmitter; + +/** + * class CommandManager + * + * + * + * + **/ + +/** + * new CommandManager(platform, commands) + * - platform (String): Identifier for the platform; must be either `'mac'` or `'win'` + * - commands (Array): A list of commands + * + * TODO + * + * + **/ + +var CommandManager = function(platform, commands) { + this.platform = platform; + this.commands = {}; + this.commmandKeyBinding = {}; + + this.addCommands(commands); + + this.setDefaultHandler("exec", function(e) { + return e.command.exec(e.editor, e.args || {}); + }); +}; + +oop.inherits(CommandManager, HashHandler); + +(function() { + + oop.implement(this, EventEmitter); + + 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; + + try { + var retvalue = this._emit("exec", { + editor: editor, + command: command, + args: args + }); + } catch (e) { + window.console && window.console.log(e); + return true; + } + + return retvalue === false ? false : true; + }; + + this.toggleRecording = function() { + if (this.$inReplay) + return; + if (this.recording) { + this.macro.pop(); + this.removeEventListener("exec", this.$addCommandToMacro); + + if (!this.macro.length) + this.macro = this.oldMacro; + + return this.recording = false; + } + if (!this.$addCommandToMacro) { + this.$addCommandToMacro = function(e) { + this.macro.push([e.command, e.args]); + }.bind(this); + } + + this.oldMacro = this.macro; + this.macro = []; + this.on("exec", this.$addCommandToMacro); + 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; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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): + * Fabian Jakobs + * 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/hash_handler', ['require', 'exports', 'module' , 'ace/lib/keys'], function(require, exports, module) { +"use strict"; + +var keyUtil = require("../lib/keys"); + +function HashHandler(config, platform) { + this.platform = platform; + this.commands = {}; + this.commmandKeyBinding = {}; + + this.addCommands(config); +}; + +(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]; + + // exhaustive 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.bindKey = function(key, command) { + if(!key) + return; + + var ckb = this.commmandKeyBinding; + key.split("|").forEach(function(keyPart) { + var binding = this.parseKeys(keyPart, command); + var hashId = binding.hashId; + (ckb[hashId] || (ckb[hashId] = {}))[binding.key] = command; + }, this); + }; + + this.addCommands = function(commands) { + 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.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); + }; + + this.parseKeys = function(keys, val) { + var key; + var hashId = 0; + var parts = keys.toLowerCase().trim().split(/\s*\-\s*/); + + 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 + }; + }; + + this.findKeyCommand = function findKeyCommand(hashId, keyString) { + var ckbr = this.commmandKeyBinding; + return ckbr[hashId] && ckbr[hashId][keyString.toLowerCase()]; + }; + + this.handleKeyboard = function(data, hashId, keyString, keyCode) { + return { + command: this.findKeyCommand(hashId, keyString) + }; + }; + +}).call(HashHandler.prototype) + +exports.HashHandler = HashHandler; +}); +/* 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/undomanager', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + +/** + * class UndoManager + * + * This object maintains the undo stack for an [[EditSession `EditSession`]]. + * + **/ + +/** + * new UndoManager() + * + * Resets the current undo state and creates a new `UndoManager`. + **/ +var UndoManager = function() { + this.reset(); +}; + +(function() { + + /** + * UndoManager.execute(options) -> Void + * - options (Object): Contains additional properties + * + * Provides a means for implementing your own undo manager. `options` has one property, `args`, an [[Array `Array`]], with two elements: + * * `args[0]` is an array of deltas + * * `args[1]` is the document to associate with + * + **/ + this.execute = function(options) { + var deltas = options.args[0]; + this.$doc = options.args[1]; + this.$undoStack.push(deltas); + this.$redoStack = []; + }; + + /** + * UndoManager.undo(dontSelect) -> Range + * - dontSelect (Boolean): {:dontSelect} + * + * [Perform an undo operation on the document, reverting the last change. Returns the range of the undo.]{: #UndoManager.undo} + **/ + this.undo = function(dontSelect) { + var deltas = this.$undoStack.pop(); + var undoSelectionRange = null; + if (deltas) { + undoSelectionRange = + this.$doc.undoChanges(deltas, dontSelect); + this.$redoStack.push(deltas); + } + return undoSelectionRange; + }; + + /** + * UndoManager.redo(dontSelect) -> Void + * - dontSelect (Boolean): {:dontSelect} + * + * [Perform a redo operation on the document, reimplementing the last change.]{: #UndoManager.redo} + **/ + this.redo = function(dontSelect) { + var deltas = this.$redoStack.pop(); + var redoSelectionRange = null; + if (deltas) { + redoSelectionRange = + this.$doc.redoChanges(deltas, dontSelect); + this.$undoStack.push(deltas); + } + return redoSelectionRange; + }; + + /** + * UndoManager.reset() -> Void + * + * Destroys the stack of undo and redo redo operations. + **/ + this.reset = function() { + this.$undoStack = []; + this.$redoStack = []; + }; + + /** + * UndoManager.hasUndo() -> Boolean + * + * Returns `true` if there are undo operations left to perform. + **/ + this.hasUndo = function() { + return this.$undoStack.length > 0; + }; + + /** + * UndoManager.hasRedo() -> Boolean + * + * Returns `true` if there are redo operations left to perform. + **/ + this.hasRedo = function() { + return this.$redoStack.length > 0; + }; + +}).call(UndoManager.prototype); + +exports.UndoManager = UndoManager; +}); +/* 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/virtual_renderer', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/dom', 'ace/lib/event', 'ace/lib/useragent', 'ace/config', 'ace/lib/net', '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("./lib/oop"); +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var useragent = require("./lib/useragent"); +var config = require("./config"); +var net = require("./lib/net"); +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"); + +dom.importCssString(editorCss, "ace_editor"); + +/** + * class VirtualRenderer + * + * The class that is responsible for drawing everything you see on the screen! + * + **/ + +/** + * new VirtualRenderer(container, theme) + * - container (DOMElement): The root element of the editor + * - theme (String): The starting theme + * + * Constructs a new `VirtualRenderer` within the `container` specified, applying the given `theme`. + * + **/ + +var VirtualRenderer = function(container, theme) { + var _self = this; + + this.container = container; + + // 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); + + // in IE <= 9 the native cursor always shines through + this.$keepTextAreaAtCursor = !useragent.isIE; + + dom.addCssClass(container, "ace_editor"); + + this.setTheme(theme); + + this.$gutter = dom.createElement("div"); + this.$gutter.className = "ace_gutter"; + this.container.appendChild(this.$gutter); + + this.scroller = dom.createElement("div"); + this.scroller.className = "ace_scroller"; + this.container.appendChild(this.scroller); + + this.content = dom.createElement("div"); + this.content.className = "ace_content"; + this.scroller.appendChild(this.content); + + this.setHighlightGutterLine(true); + this.$gutterLayer = new GutterLayer(this.$gutter); + this.$gutterLayer.on("changeGutterWidth", this.onResize.bind(this, true)); + this.setFadeFoldWidgets(true); + + this.$markerBack = new MarkerLayer(this.content); + + var textLayer = this.$textLayer = new TextLayer(this.content); + this.canvas = textLayer.element; + + this.$markerFront = new MarkerLayer(this.content); + + this.characterWidth = textLayer.getCharacterWidth(); + this.lineHeight = textLayer.getLineHeight(); + + this.$cursorLayer = new CursorLayer(this.content); + this.$cursorPadding = 8; + + // Indicates whether the horizontal scrollbar is visible + this.$horizScroll = false; + this.$horizScrollAlwaysVisible = false; + + this.$animatedScroll = false; + + this.scrollBar = new ScrollBar(container); + this.scrollBar.addEventListener("scroll", function(e) { + if (!_self.$inScrollAnimation) + _self.session.setScrollTop(e.data); + }); + + this.scrollTop = 0; + this.scrollLeft = 0; + + event.addListener(this.scroller, "scroll", function() { + var scrollLeft = _self.scroller.scrollLeft; + _self.scrollLeft = scrollLeft; + _self.session.setScrollLeft(scrollLeft); + + _self.scroller.className = scrollLeft == 0 + ? "ace_scroller" + : "ace_scroller horscroll"; + }); + + this.cursorPos = { + row : 0, + column : 0 + }; + + this.$textLayer.addEventListener("changeCharacterSize", function() { + _self.characterWidth = textLayer.getCharacterWidth(); + _self.lineHeight = textLayer.getLineHeight(); + _self.$updatePrintMargin(); + _self.onResize(true); + + _self.$loop.schedule(_self.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 RenderLoop( + this.$renderChanges.bind(this), + this.container.ownerDocument.defaultView + ); + this.$loop.schedule(this.CHANGE_FULL); + + this.setPadding(4); + this.$updatePrintMargin(); +}; + +(function() { + this.showGutter = true; + + 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; + this.CHANGE_H_SCROLL = 1024; + + oop.implement(this, EventEmitter); + + /** + * VirtualRenderer.setSession(session) -> Void + * + * Associates an [[EditSession `EditSession`]]. + **/ + this.setSession = function(session) { + this.session = session; + + this.scroller.className = "ace_scroller"; + + this.$cursorLayer.setSession(session); + this.$markerBack.setSession(session); + this.$markerFront.setSession(session); + this.$gutterLayer.setSession(session); + this.$textLayer.setSession(session); + this.$loop.schedule(this.CHANGE_FULL); + + }; + + /** + * VirtualRenderer.updateLines(firstRow, lastRow) -> Void + * - firstRow (Number): The first row to update + * - lastRow (Number): The last row to update + * + * Triggers a partial update of the text, from the range given by the two parameters. + **/ + this.updateLines = function(firstRow, lastRow) { + if (lastRow === undefined) + lastRow = Infinity; + + if (!this.$changedLines) { + this.$changedLines = { + firstRow: firstRow, + lastRow: lastRow + }; + } + else { + if (this.$changedLines.firstRow > firstRow) + this.$changedLines.firstRow = firstRow; + + if (this.$changedLines.lastRow < lastRow) + this.$changedLines.lastRow = lastRow; + } + + this.$loop.schedule(this.CHANGE_LINES); + }; + + /** + * VirtualRenderer.updateText() -> Void + * + * Triggers a full update of the text, for all the rows. + **/ + this.updateText = function() { + this.$loop.schedule(this.CHANGE_TEXT); + }; + + /** + * VirtualRenderer.updateFull() -> Void + * + * Triggers a full update of all the layers, for all the rows. + **/ + this.updateFull = function() { + this.$loop.schedule(this.CHANGE_FULL); + }; + + /** + * VirtualRenderer.updateFontSize() -> Void + * + * Updates the font size. + **/ + this.updateFontSize = function() { + this.$textLayer.checkForSizeChanges(); + }; + + /** + * VirtualRenderer.onResize(force) -> Void + * - force (Boolean): If `true`, recomputes the size, even if the height and width haven't changed + * + * [Triggers a resize of the editor.]{: #VirtualRenderer.onResize} + **/ + this.onResize = function(force) { + var changes = this.CHANGE_SIZE; + var size = this.$size; + + var height = dom.getInnerHeight(this.container); + if (force || size.height != height) { + size.height = height; + + this.scroller.style.height = height + "px"; + size.scrollerHeight = this.scroller.clientHeight; + this.scrollBar.setHeight(size.scrollerHeight); + + if (this.session) { + this.session.setScrollTop(this.getScrollTop()); + changes = changes | this.CHANGE_FULL; + } + } + + var width = dom.getInnerWidth(this.container); + if (force || size.width != width) { + size.width = width; + + var gutterWidth = this.showGutter ? this.$gutter.offsetWidth : 0; + this.scroller.style.left = gutterWidth + "px"; + size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBar.getWidth()); + this.scroller.style.width = size.scrollerWidth + "px"; + + if (this.session.getUseWrapMode() && this.adjustWrapLimit() || force) + changes = changes | this.CHANGE_FULL; + } + + this.$loop.schedule(changes); + }; + + /** + * VirtualRenderer.adjustWrapLimit() -> Void + * + * Adjusts the wrap limit, which is the number of characters that can fit within the width of the edit area on screen. + **/ + this.adjustWrapLimit = function() { + var availableWidth = this.$size.scrollerWidth - this.$padding * 2; + var limit = Math.floor(availableWidth / this.characterWidth); + return this.session.adjustWrapLimit(limit); + }; + + /** + * VirtualRenderer.setAnimatedScroll(shouldAnimate) -> Void + * - shouldAnimate (Boolean): Set to `true` to show animated scrolls + * + * Identifies whether you want to have an animated scroll or not. + * + **/ + this.setAnimatedScroll = function(shouldAnimate){ + this.$animatedScroll = shouldAnimate; + }; + + /** + * VirtualRenderer.getAnimatedScroll() -> Boolean + * + * Returns whether an animated scroll happens or not. + **/ + this.getAnimatedScroll = function() { + return this.$animatedScroll; + }; + + /** + * VirtualRenderer.setShowInvisibles(showInvisibles) -> Void + * - showInvisibles (Boolean): Set to `true` to show invisibles + * + * Identifies whether you want to show invisible characters or not. + * + **/ + this.setShowInvisibles = function(showInvisibles) { + if (this.$textLayer.setShowInvisibles(showInvisibles)) + this.$loop.schedule(this.CHANGE_TEXT); + }; + + /** + * VirtualRenderer.getShowInvisibles() -> Boolean + * + * Returns whether invisible characters are being shown or not. + **/ + this.getShowInvisibles = function() { + return this.$textLayer.showInvisibles; + }; + + this.$showPrintMargin = true; + + /** + * VirtualRenderer.setShowPrintMargin(showPrintMargin) + * - showPrintMargin (Boolean): Set to `true` to show the print margin + * + * Identifies whether you want to show the print margin or not. + * + **/ + this.setShowPrintMargin = function(showPrintMargin) { + this.$showPrintMargin = showPrintMargin; + this.$updatePrintMargin(); + }; + + /** + * VirtualRenderer.getShowPrintMargin() -> Boolean + * + * Returns whetherthe print margin is being shown or not. + **/ + this.getShowPrintMargin = function() { + return this.$showPrintMargin; + }; + + this.$printMarginColumn = 80; + + /** + * VirtualRenderer.setPrintMarginColumn(showPrintMargin) + * - showPrintMargin (Boolean): Set to `true` to show the print margin column + * + * Identifies whether you want to show the print margin column or not. + * + **/ + this.setPrintMarginColumn = function(showPrintMargin) { + this.$printMarginColumn = showPrintMargin; + this.$updatePrintMargin(); + }; + + /** + * VirtualRenderer.getPrintMarginColumn() -> Boolean + * + * Returns whether the print margin column is being shown or not. + **/ + this.getPrintMarginColumn = function() { + return this.$printMarginColumn; + }; + + /** + * VirtualRenderer.getShowGutter() -> Boolean + * + * Returns `true` if the gutter is being shown. + **/ + this.getShowGutter = function(){ + return this.showGutter; + }; + + /** + * VirtualRenderer.setShowGutter(show) -> Void + * - show (Boolean): Set to `true` to show the gutter + * + * Identifies whether you want to show the gutter or not. + **/ + this.setShowGutter = function(show){ + if(this.showGutter === show) + return; + this.$gutter.style.display = show ? "block" : "none"; + this.showGutter = show; + this.onResize(true); + }; + + this.getFadeFoldWidgets = function(){ + return dom.hasCssClass(this.$gutter, "ace_fade-fold-widgets"); + }; + + this.setFadeFoldWidgets = function(show) { + if (show) + dom.addCssClass(this.$gutter, "ace_fade-fold-widgets"); + else + dom.removeCssClass(this.$gutter, "ace_fade-fold-widgets"); + }; + + this.$highlightGutterLine = false; + this.setHighlightGutterLine = function(shouldHighlight) { + if (this.$highlightGutterLine == shouldHighlight) + return; + this.$highlightGutterLine = shouldHighlight; + + + if (!this.$gutterLineHighlight) { + this.$gutterLineHighlight = dom.createElement("div"); + this.$gutterLineHighlight.className = "ace_gutter_active_line"; + this.$gutter.appendChild(this.$gutterLineHighlight); + return; + } + + this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none"; + this.$updateGutterLineHighlight(); + }; + + this.getHighlightGutterLine = function() { + return this.$highlightGutterLine; + }; + + this.$updateGutterLineHighlight = function() { + this.$gutterLineHighlight.style.top = this.$cursorLayer.$pixelPos.top + "px"; + this.$gutterLineHighlight.style.height = this.layerConfig.lineHeight + "px"; + }; + + this.$updatePrintMargin = function() { + var containerEl; + + if (!this.$showPrintMargin && !this.$printMarginEl) + return; + + if (!this.$printMarginEl) { + containerEl = dom.createElement("div"); + containerEl.className = "ace_print_margin_layer"; + this.$printMarginEl = dom.createElement("div"); + this.$printMarginEl.className = "ace_print_margin"; + containerEl.appendChild(this.$printMarginEl); + this.content.insertBefore(containerEl, this.$textLayer.element); + } + + var style = this.$printMarginEl.style; + style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; + style.visibility = this.$showPrintMargin ? "visible" : "hidden"; + }; + + /** + * VirtualRenderer.getContainerElement() -> DOMElement + * + * Returns the root element containing this renderer. + **/ + this.getContainerElement = function() { + return this.container; + }; + + /** + * VirtualRenderer.getMouseEventTarget() -> DOMElement + * + * Returns the element that the mouse events are attached to + **/ + this.getMouseEventTarget = function() { + return this.content; + }; + + /** + * VirtualRenderer.getTextAreaContainer() -> DOMElement + * + * Returns the element to which the hidden text area is added. + **/ + this.getTextAreaContainer = function() { + return this.container; + }; + + // move text input over the cursor + // this is required for iOS and IME + this.$moveTextAreaToCursor = function() { + if (!this.$keepTextAreaAtCursor) + return; + + var posTop = this.$cursorLayer.$pixelPos.top; + var posLeft = this.$cursorLayer.$pixelPos.left; + posTop -= this.layerConfig.offset; + + if (posTop < 0 || posTop > this.layerConfig.height) + return; + + posLeft += (this.showGutter ? this.$gutterLayer.gutterWidth : 0) - this.scrollLeft; + var bounds = this.container.getBoundingClientRect(); + this.textarea.style.left = (bounds.left + posLeft) + "px"; + this.textarea.style.top = (bounds.top + posTop) + "px"; + }; + + /** + * VirtualRenderer.getFirstVisibleRow() -> Number + * + * [Returns the index of the first visible row.]{: #VirtualRenderer.getFirstVisibleRow} + **/ + this.getFirstVisibleRow = function() { + return this.layerConfig.firstRow; + }; + + /** + * VirtualRenderer.getFirstFullyVisibleRow() -> Number + * + * Returns the index of the first fully visible row. "Fully" here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen. + **/ + this.getFirstFullyVisibleRow = function() { + return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); + }; + + /** + * VirtualRenderer.getLastFullyVisibleRow() -> Number + * + * Returns the index of the last fully visible row. "Fully" here means that the characters in the row are not truncated; that the top and the bottom of the row are on the screen. + **/ + this.getLastFullyVisibleRow = function() { + var flint = Math.floor((this.layerConfig.height + this.layerConfig.offset) / this.layerConfig.lineHeight); + return this.layerConfig.firstRow - 1 + flint; + }; + + /** + * VirtualRenderer.getLastVisibleRow() -> Number + * + * [Returns the index of the last visible row.]{: #VirtualRenderer.getLastVisibleRow} + **/ + this.getLastVisibleRow = function() { + return this.layerConfig.lastRow; + }; + + this.$padding = null; + + /** + * VirtualRenderer.setPadding(padding) -> Void + * - padding (Number): A new padding value (in pixels) + * + * Sets the padding for all the layers. + * + **/ + this.setPadding = function(padding) { + this.$padding = padding; + this.$textLayer.setPadding(padding); + this.$cursorLayer.setPadding(padding); + this.$markerFront.setPadding(padding); + this.$markerBack.setPadding(padding); + this.$loop.schedule(this.CHANGE_FULL); + this.$updatePrintMargin(); + }; + + /** + * VirtualRenderer.getHScrollBarAlwaysVisible() -> Boolean + * + * Returns whether the horizontal scrollbar is set to be always visible. + **/ + this.getHScrollBarAlwaysVisible = function() { + return this.$horizScrollAlwaysVisible; + }; + + /** + * VirtualRenderer.setHScrollBarAlwaysVisible(alwaysVisible) -> Void + * - alwaysVisible (Boolean): Set to `true` to make the horizontal scroll bar visible + * + * Identifies whether you want to show the horizontal scrollbar or not. + **/ + this.setHScrollBarAlwaysVisible = function(alwaysVisible) { + if (this.$horizScrollAlwaysVisible != alwaysVisible) { + this.$horizScrollAlwaysVisible = alwaysVisible; + if (!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(changes) { + if (!changes || !this.session || !this.container.offsetWidth) + return; + + // text, scrolling and resize changes can cause the view port size to change + if (changes & this.CHANGE_FULL || + changes & this.CHANGE_SIZE || + changes & this.CHANGE_TEXT || + changes & this.CHANGE_LINES || + changes & this.CHANGE_SCROLL + ) + this.$computeLayerConfig(); + + // horizontal scrolling + if (changes & this.CHANGE_H_SCROLL) { + this.scroller.scrollLeft = this.scrollLeft; + + // read the value after writing it since the value might get clipped + var scrollLeft = this.scroller.scrollLeft; + this.scrollLeft = scrollLeft; + this.session.setScrollLeft(scrollLeft); + } + + // full + if (changes & this.CHANGE_FULL) { + this.$textLayer.checkForSizeChanges(); + // update scrollbar first to not lose scroll position when gutter calls resize + this.$updateScrollBar(); + this.$textLayer.update(this.layerConfig); + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + this.$markerBack.update(this.layerConfig); + this.$markerFront.update(this.layerConfig); + this.$cursorLayer.update(this.layerConfig); + this.$moveTextAreaToCursor(); + this.$highlightGutterLine && this.$updateGutterLineHighlight(); + return; + } + + // scrolling + if (changes & this.CHANGE_SCROLL) { + this.$updateScrollBar(); + if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) + this.$textLayer.update(this.layerConfig); + else + this.$textLayer.scrollLines(this.layerConfig); + + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + this.$markerBack.update(this.layerConfig); + this.$markerFront.update(this.layerConfig); + this.$cursorLayer.update(this.layerConfig); + this.$moveTextAreaToCursor(); + this.$highlightGutterLine && this.$updateGutterLineHighlight(); + return; + } + + if (changes & this.CHANGE_TEXT) { + this.$textLayer.update(this.layerConfig); + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + } + else if (changes & this.CHANGE_LINES) { + if (this.$updateLines()) { + this.$updateScrollBar(); + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + } + } else if (changes & this.CHANGE_GUTTER) { + if (this.showGutter) + this.$gutterLayer.update(this.layerConfig); + } + + if (changes & this.CHANGE_CURSOR) { + this.$cursorLayer.update(this.layerConfig); + this.$moveTextAreaToCursor(); + this.$highlightGutterLine && this.$updateGutterLineHighlight(); + } + + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { + this.$markerFront.update(this.layerConfig); + } + + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { + this.$markerBack.update(this.layerConfig); + } + + if (changes & this.CHANGE_SIZE) + this.$updateScrollBar(); + }; + + this.$computeLayerConfig = function() { + var session = this.session; + + var offset = this.scrollTop % this.lineHeight; + var minHeight = this.$size.scrollerHeight + this.lineHeight; + + var longestLine = this.$getLongestLine(); + + var horizScroll = this.$horizScrollAlwaysVisible || this.$size.scrollerWidth - longestLine < 0; + var horizScrollChanged = this.$horizScroll !== horizScroll; + this.$horizScroll = horizScroll; + if (horizScrollChanged) { + this.scroller.style.overflowX = horizScroll ? "scroll" : "hidden"; + // when we hide scrollbar scroll event isn't emited + // leaving session with wrong scrollLeft value + if (!horizScroll) + this.session.setScrollLeft(0); + } + var maxHeight = this.session.getScreenLength() * this.lineHeight; + 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)); + var lastRow = firstRow + lineCount; + + // Map lines on the screen to lines in the document. + var firstRowScreen, firstRowHeight; + var lineHeight = { lineHeight: this.lineHeight }; + firstRow = session.screenToDocumentRow(firstRow, 0); + + // Check if firstRow is inside of a foldLine. If true, then use the first + // row of the foldLine. + var foldLine = session.getFoldLine(firstRow); + if (foldLine) { + firstRow = foldLine.start.row; + } + + firstRowScreen = session.documentToScreenRow(firstRow, 0); + firstRowHeight = session.getRowHeight(lineHeight, firstRow); + + lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); + minHeight = this.$size.scrollerHeight + session.getRowHeight(lineHeight, lastRow)+ + firstRowHeight; + + offset = this.scrollTop - firstRowScreen * this.lineHeight; + + this.layerConfig = { + width : longestLine, + padding : this.$padding, + firstRow : firstRow, + firstRowScreen: firstRowScreen, + lastRow : lastRow, + lineHeight : this.lineHeight, + characterWidth : this.characterWidth, + minHeight : minHeight, + maxHeight : maxHeight, + offset : offset, + height : this.$size.scrollerHeight + }; + + // For debugging. + // console.log(JSON.stringify(this.layerConfig)); + + this.$gutter.style.marginTop = (-offset) + "px"; + this.content.style.marginTop = (-offset) + "px"; + this.content.style.width = longestLine + 2 * this.$padding + "px"; + this.content.style.height = minHeight + "px"; + + // Horizontal scrollbar visibility may have changed, which changes + // the client height of the scroller + if (horizScrollChanged) + this.onResize(true); + }; + + this.$updateLines = function() { + var firstRow = this.$changedLines.firstRow; + var lastRow = this.$changedLines.lastRow; + this.$changedLines = null; + + var layerConfig = this.layerConfig; + + // if the update changes the width of the document do a full redraw + if (layerConfig.width != this.$getLongestLine()) + return this.$textLayer.update(layerConfig); + + if (firstRow > layerConfig.lastRow + 1) { return; } + if (lastRow < layerConfig.firstRow) { return; } + + // if the last row is unknown -> redraw everything + if (lastRow === Infinity) { + if (this.showGutter) + this.$gutterLayer.update(layerConfig); + this.$textLayer.update(layerConfig); + return; + } + + // else update only the changed rows + this.$textLayer.updateLines(layerConfig, firstRow, lastRow); + return true; + }; + + this.$getLongestLine = function() { + var charCount = this.session.getScreenWidth(); + if (this.$textLayer.showInvisibles) + charCount += 1; + + return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); + }; + + /** + * VirtualRenderer.updateFrontMarkers() -> Void + * + * Schedules an update to all the front markers in the document. + **/ + this.updateFrontMarkers = function() { + this.$markerFront.setMarkers(this.session.getMarkers(true)); + this.$loop.schedule(this.CHANGE_MARKER_FRONT); + }; + + /** + * VirtualRenderer.updateBackMarkers() -> Void + * + * Schedules an update to all the back markers in the document. + **/ + this.updateBackMarkers = function() { + this.$markerBack.setMarkers(this.session.getMarkers()); + this.$loop.schedule(this.CHANGE_MARKER_BACK); + }; + + /** + * VirtualRenderer.addGutterDecoration(row, className) -> Void + * - row (Number): The row number + * - className (String): The class to add + * + * Adds `className` to the `row`, to be used for CSS stylings and whatnot. + **/ + this.addGutterDecoration = function(row, className){ + this.$gutterLayer.addGutterDecoration(row, className); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + + /** + * VirtualRenderer.removeGutterDecoration(row, className)-> Void + * - row (Number): The row number + * - className (String): The class to add + * + * Removes `className` from the `row`. + **/ + this.removeGutterDecoration = function(row, className){ + this.$gutterLayer.removeGutterDecoration(row, className); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + + /** + * VirtualRenderer.setBreakpoints(rows) -> Void + * - rows (Array): An array containg row numbers + * + * Sets a breakpoint for every row number indicated on `rows`. + **/ + this.setBreakpoints = function(rows) { + this.$gutterLayer.setBreakpoints(rows); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + + /** + * VirtualRenderer.setAnnotations(annotations) -> Void + * - annotations (Array): An array containing annotations + * + * Sets annotations for the gutter. + **/ + this.setAnnotations = function(annotations) { + this.$gutterLayer.setAnnotations(annotations); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + + /** + * VirtualRenderer.updateCursor() -> Void + * + * Updates the cursor icon. + **/ + this.updateCursor = function() { + this.$loop.schedule(this.CHANGE_CURSOR); + }; + + /** + * VirtualRenderer.hideCursor() -> Void + * + * Hides the cursor icon. + **/ + this.hideCursor = function() { + this.$cursorLayer.hideCursor(); + }; + + /** + * VirtualRenderer.showCursor() -> Void + * + * Shows the cursor icon. + **/ + this.showCursor = function() { + this.$cursorLayer.showCursor(); + }; + + this.scrollSelectionIntoView = function(anchor, lead, offset) { + // first scroll anchor into view then scroll lead into view + this.scrollCursorIntoView(anchor, offset); + this.scrollCursorIntoView(lead, offset); + }; + + /** + * VirtualRenderer.scrollCursorIntoView(cursor, offset) -> Void + * + * Scrolls the cursor into the first visibile area of the editor + **/ + this.scrollCursorIntoView = function(cursor, offset) { + // the editor is not visible + if (this.$size.scrollerHeight === 0) + return; + + var pos = this.$cursorLayer.getPixelPosition(cursor); + + var left = pos.left; + var top = pos.top; + + if (this.scrollTop > top) { + if (offset) + top -= offset * this.$size.scrollerHeight; + this.session.setScrollTop(top); + } else if (this.scrollTop + this.$size.scrollerHeight < top + this.lineHeight) { + if (offset) + top += offset * this.$size.scrollerHeight; + this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight); + } + + var scrollLeft = this.scrollLeft; + + if (scrollLeft > left) { + if (left < this.$padding + 2 * this.layerConfig.characterWidth) + left = 0; + this.session.setScrollLeft(left); + } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) { + this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth)); + } + }; + + /** related to: EditSession.getScrollTop + * VirtualRenderer.getScrollTop() -> Number + * + * {:EditSession.getScrollTop} + **/ + this.getScrollTop = function() { + return this.session.getScrollTop(); + }; + + /** related to: EditSession.getScrollLeft + * VirtualRenderer.getScrollLeft() -> Number + * + * {:EditSession.getScrollLeft} + **/ + this.getScrollLeft = function() { + return this.session.getScrollLeft(); + }; + + /** + * VirtualRenderer.getScrollTopRow() -> Number + * + * Returns the first visible row, regardless of whether it's fully visible or not. + **/ + this.getScrollTopRow = function() { + return this.scrollTop / this.lineHeight; + }; + + /** + * VirtualRenderer.getScrollBottomRow() -> Number + * + * Returns the last visible row, regardless of whether it's fully visible or not. + **/ + this.getScrollBottomRow = function() { + return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); + }; + + /** related to: EditSession.setScrollTop + * VirtualRenderer.scrollToRow(row) -> Void + * - row (Number): A row id + * + * Gracefully scrolls the top of the editor to the row indicated. + **/ + this.scrollToRow = function(row) { + this.session.setScrollTop(row * this.lineHeight); + }; + + this.STEPS = 8; + this.$calcSteps = function(fromValue, toValue){ + var i = 0; + var l = this.STEPS; + var steps = []; + + var func = function(t, x_min, dx) { + return dx * (Math.pow(t - 1, 3) + 1) + x_min; + }; + + for (i = 0; i < l; ++i) + steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); + + return steps; + }; + + /** + * VirtualRenderer.scrollToLine(line, center, animate, callback) -> Void + * - line (Number): A line number + * - center (Boolean): If `true`, centers the editor the to indicated line + * - animate (Boolean): If `true` animates scrolling + * - callback (Function): Function to be called after the animation has finished + * + * Gracefully scrolls the editor to the row indicated. + **/ + this.scrollToLine = function(line, center, animate, callback) { + var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0}); + var offset = pos.top; + if (center) + offset -= this.$size.scrollerHeight / 2; + + var initialScroll = this.scrollTop; + this.session.setScrollTop(offset); + if (animate !== false) + this.animateScrolling(initialScroll, callback); + }; + + this.animateScrolling = function(fromValue, callback) { + var toValue = this.scrollTop; + if (this.$animatedScroll && Math.abs(fromValue - toValue) < 100000) { + var _self = this; + var steps = _self.$calcSteps(fromValue, toValue); + this.$inScrollAnimation = true; + + clearInterval(this.$timer); + + _self.session.setScrollTop(steps.shift()); + this.$timer = setInterval(function() { + if (steps.length) { + _self.session.setScrollTop(steps.shift()); + // trick session to think it's already scrolled to not loose toValue + _self.session.$scrollTop = toValue; + } else { + this.$inScrollAnimation = false; + clearInterval(_self.$timer); + + _self.session.$scrollTop = -1; + _self.session.setScrollTop(toValue); + callback && callback(); + } + }, 10); + } + }; + + /** + * VirtualRenderer.scrollToY(scrollTop) -> Number + * - scrollTop (Number): The position to scroll to + * + * Scrolls the editor to the y pixel indicated. + * + **/ + this.scrollToY = function(scrollTop) { + // after calling scrollBar.setScrollTop + // scrollbar sends us event with same scrollTop. ignore it + if (this.scrollTop !== scrollTop) { + this.$loop.schedule(this.CHANGE_SCROLL); + this.scrollTop = scrollTop; + } + }; + + /** + * VirtualRenderer.scrollToX(scrollLeft) -> Number + * - scrollLeft (Number): The position to scroll to + * + * Scrolls the editor to the x pixel indicated. + * + **/ + this.scrollToX = function(scrollLeft) { + if (scrollLeft <= this.$padding) + scrollLeft = 0; + + if (this.scrollLeft !== scrollLeft) + this.scrollLeft = scrollLeft; + this.$loop.schedule(this.CHANGE_H_SCROLL); + }; + + /** + * VirtualRenderer.scrollBy(deltaX, deltaY) -> Void + * - deltaX (Number): The x value to scroll by + * - deltaY (Number): The y value to scroll by + * + * Scrolls the editor across both x- and y-axes. + **/ + this.scrollBy = function(deltaX, deltaY) { + deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); + deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); + }; + + /** + * VirtualRenderer.isScrollableBy(deltaX, deltaY) -> Boolean + * - deltaX (Number): The x value to scroll by + * - deltaY (Number): The y value to scroll by + * + * Returns `true` if you can still scroll by either parameter; in other words, you haven't reached the end of the file or line. + **/ + 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.pixelToScreenCoordinates = function(x, y) { + var canvasPos = this.scroller.getBoundingClientRect(); + + var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth; + var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); + var col = Math.round(offset); + + return {row: row, column: col, side: offset - col > 0 ? 1 : -1}; + }; + + this.screenToTextCoordinates = function(x, y) { + var canvasPos = this.scroller.getBoundingClientRect(); + + var col = Math.round( + (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth + ); + var row = Math.floor( + (y + this.scrollTop - canvasPos.top) / this.lineHeight + ); + + return this.session.screenToDocumentPosition(row, Math.max(col, 0)); + }; + + /** + * VirtualRenderer.textToScreenCoordinates(row, column) -> Object + * - row (Number): The document row position + * - column (Number): The document column position + * + * Returns an object containing the `pageX` and `pageY` coordinates of the document position. + * + * + **/ + this.textToScreenCoordinates = function(row, column) { + var canvasPos = this.scroller.getBoundingClientRect(); + var pos = this.session.documentToScreenPosition(row, column); + + var x = this.$padding + Math.round(pos.column * this.characterWidth); + var y = pos.row * this.lineHeight; + + return { + pageX: canvasPos.left + x - this.scrollLeft, + pageY: canvasPos.top + y - this.scrollTop + }; + }; + + /** + * VirtualRenderer.visualizeFocus() -> Void + * + * Focuses the current container. + **/ + this.visualizeFocus = function() { + dom.addCssClass(this.container, "ace_focus"); + }; + + /** + * VirtualRenderer.visualizeBlur() -> Void + * + * Blurs the current container. + **/ + this.visualizeBlur = function() { + dom.removeCssClass(this.container, "ace_focus"); + }; + + /** internal, hide + * VirtualRenderer.showComposition(position) -> Void + * - position (Number): + * + **/ + this.showComposition = function(position) { + if (!this.$composition) { + this.$composition = dom.createElement("div"); + this.$composition.className = "ace_composition"; + this.content.appendChild(this.$composition); + } + + this.$composition.innerHTML = " "; + + var pos = this.$cursorLayer.getPixelPosition(); + var style = this.$composition.style; + style.top = pos.top + "px"; + style.left = (pos.left + this.$padding) + "px"; + style.height = this.lineHeight + "px"; + + this.hideCursor(); + }; + + /** + * VirtualRenderer.setCompositionText(text) -> Void + * - text (String): A string of text to use + * + * Sets the inner text of the current composition to `text`. + **/ + this.setCompositionText = function(text) { + dom.setInnerText(this.$composition, text); + }; + + /** + * VirtualRenderer.hideComposition() -> Void + * + * Hides the current composition. + **/ + this.hideComposition = function() { + this.showCursor(); + + if (!this.$composition) + return; + + var style = this.$composition.style; + style.top = "-10000px"; + style.left = "-10000px"; + }; + + this._loadTheme = function(name, callback) { + if (!config.get("packaged")) + return callback(); + + var base = name.split("/").pop(); + var filename = config.get("themePath") + "/theme-" + base + config.get("suffix"); + net.loadScript(filename, callback); + }; + + /** + * VirtualRenderer.setTheme(theme) -> Void + * - theme (String): The path to a theme + * + * [Sets a new theme for the editor. `theme` should exist, and be a directory path, like `ace/theme/textmate`.]{: #VirtualRenderer.setTheme} + **/ + this.setTheme = function(theme) { + var _self = this; + + this.$themeValue = theme; + if (!theme || typeof theme == "string") { + var moduleName = theme || "ace/theme/textmate"; + + var module; + try { + module = require(moduleName); + } catch (e) {}; + if (module) + return afterLoad(module); + + _self._loadTheme(moduleName, function() { + require([moduleName], function(module) { + if (_self.$themeValue !== theme) + return; + + afterLoad(module); + }); + }); + } else { + afterLoad(theme); + } + + function afterLoad(theme) { + dom.importCssString( + theme.cssText, + theme.cssClass, + _self.container.ownerDocument + ); + + if (_self.$theme) + dom.removeCssClass(_self.container, _self.$theme); + + _self.$theme = theme ? theme.cssClass : null; + + 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; + _self.onResize(); + } + } + }; + + /** + * VirtualRenderer.getTheme() -> String + * + * [Returns the path of the current theme.]{: #VirtualRenderer.getTheme} + **/ + this.getTheme = function() { + return this.$themeValue; + }; + + // Methods allows to add / remove CSS classnames to the editor element. + // This feature can be used by plug-ins to provide a visual indication of + // a certain mode that editor is in. + + /** + * VirtualRenderer.setStyle(style) -> Void + * - style (String): A class name + * + * [Adds a new class, `style`, to the editor.]{: #VirtualRenderer.setStyle} + **/ + this.setStyle = function setStyle(style) { + dom.addCssClass(this.container, style); + }; + + /** + * VirtualRenderer.unsetStyle(style) -> Void + * - style (String): A class name + * + * [Removes the class `style` from the editor.]{: #VirtualRenderer.unsetStyle} + **/ + this.unsetStyle = function unsetStyle(style) { + dom.removeCssClass(this.container, style); + }; + + /** + * VirtualRenderer.destroy() + * + * Destroys the text and cursor layers for this renderer. + **/ + this.destroy = function() { + this.$textLayer.destroy(); + this.$cursorLayer.destroy(); + }; + +}).call(VirtualRenderer.prototype); + +exports.VirtualRenderer = VirtualRenderer; +}); +/* 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 + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/layer/gutter', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/lib/oop', 'ace/lib/event_emitter'], function(require, exports, module) { +"use strict"; + +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 = []; + this.$decorations = []; +}; + +(function() { + + oop.implement(this, EventEmitter); + + this.setSession = function(session) { + this.session = session; + }; + + this.addGutterDecoration = function(row, className){ + if (!this.$decorations[row]) + this.$decorations[row] = ""; + this.$decorations[row] += " " + className; + }; + + this.removeGutterDecoration = function(row, className){ + this.$decorations[row] = this.$decorations[row].replace(" " + className, ""); + }; + + this.setBreakpoints = function(rows) { + this.$breakpoints = rows.concat(); + }; + + this.setAnnotations = function(annotations) { + // iterate over sparse array + this.$annotations = []; + for (var row in annotations) if (annotations.hasOwnProperty(row)) { + var rowAnnotations = annotations[row]; + if (!rowAnnotations) + continue; + + var rowInfo = this.$annotations[row] = { + text: [] + }; + for (var i=0; i foldStart) { + i = fold.end.row + 1; + fold = this.session.getNextFoldLine(i, fold); + foldStart = fold ?fold.start.row :Infinity; + } + if(i > lastRow) + break; + + var annotation = this.$annotations[i] || emptyAnno; + html.push("
      ", (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( + "" + ); + } + + var wrappedRowLength = this.session.getRowLength(i) - 1; + while (wrappedRowLength--) { + html.push("
      \xA6"); + } + + html.push("
      "); + + i++; + } + 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); + +exports.Gutter = Gutter; + +}); +/* 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 + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/layer/marker', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +var Range = require("../range").Range; +var dom = require("../lib/dom"); + +var Marker = function(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_marker-layer"; + parentEl.appendChild(this.element); +}; + +(function() { + + this.$padding = 0; + + this.setPadding = function(padding) { + this.$padding = padding; + }; + this.setSession = function(session) { + this.session = session; + }; + + this.setMarkers = function(markers) { + this.markers = markers; + }; + + this.update = function(config) { + var config = config || this.config; + if (!config) + return; + + this.config = config; + + + var html = []; + for ( var key in this.markers) { + var marker = this.markers[key]; + + var range = marker.range.clipRows(config.firstRow, config.lastRow); + if (range.isEmpty()) continue; + + range = range.toScreenRange(this.session); + if (marker.renderer) { + var top = this.$getTop(range.start.row, config); + var left = Math.round( + this.$padding + range.start.column * config.characterWidth + ); + marker.renderer(html, range, left, top, config); + } + else if (range.isMultiLine()) { + if (marker.type == "text") { + this.drawTextMarker(html, range, marker.clazz, config); + } else { + this.drawMultiLineMarker( + html, range, marker.clazz, config, + marker.type + ); + } + } + else { + this.drawSingleLineMarker( + html, range, marker.clazz + " start", config, + null, marker.type + ); + } + } + this.element = dom.setInnerHtml(this.element, html.join("")); + }; + + this.$getTop = function(row, layerConfig) { + return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; + }; + + // Draws a marker, which spans a range of text on multiple lines + this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig) { + // selection start + var row = range.start.row; + + var lineRange = new Range( + row, range.start.column, + row, this.session.getScreenLastRowColumn(row) + ); + this.drawSingleLineMarker(stringBuilder, lineRange, clazz + " start", layerConfig, 1, "text"); + + // selection end + row = range.end.row; + lineRange = new Range(row, 0, row, range.end.column); + this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 0, "text"); + + for (row = range.start.row + 1; row < range.end.row; row++) { + lineRange.start.row = row; + lineRange.end.row = row; + lineRange.end.column = this.session.getScreenLastRowColumn(row); + this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1, "text"); + } + }; + + // Draws a multi line marker, where lines span the full width + this.drawMultiLineMarker = function(stringBuilder, range, clazz, layerConfig, type) { + 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(layerWidth - (range.start.column * layerConfig.characterWidth)); + var top = this.$getTop(range.start.row, layerConfig); + var left = Math.round( + padding + range.start.column * layerConfig.characterWidth + ); + + stringBuilder.push( + "
      " + ); + + // from start of the last line to the selection end + top = this.$getTop(range.end.row, layerConfig); + width = Math.round(range.end.column * layerConfig.characterWidth); + + stringBuilder.push( + "
      " + ); + + // all the complete lines + height = (range.end.row - range.start.row - 1) * layerConfig.lineHeight; + if (height < 0) + return; + top = this.$getTop(range.start.row + 1, layerConfig); + + stringBuilder.push( + "
      " + ); + }; + + // Draws a marker which covers part or whole width of a single screen line + this.drawSingleLineMarker = function(stringBuilder, range, clazz, layerConfig, extraLength, type) { + var padding = type === "background" ? 0 : this.$padding; + var height = layerConfig.lineHeight; + + if (type === "background") + var width = layerConfig.width; + else + width = Math.round((range.end.column + (extraLength || 0) - range.start.column) * layerConfig.characterWidth); + + var top = this.$getTop(range.start.row, layerConfig); + var left = Math.round( + padding + range.start.column * layerConfig.characterWidth + ); + + stringBuilder.push( + "
      " + ); + }; + +}).call(Marker.prototype); + +exports.Marker = Marker; + +}); +/* 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 + * Julian Viereck + * Mihai Sucan + * Irakli Gozalishvili (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('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("../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"; + parentEl.appendChild(this.element); + + this.$characterSize = this.$measureSizes() || {width: 0, height: 0}; + this.$pollSizeChanges(); +}; + +(function() { + + oop.implement(this, EventEmitter); + + this.EOF_CHAR = "\xB6"; //"¶"; + this.EOL_CHAR = "\xAC"; //"¬"; + this.TAB_CHAR = "\u2192"; //"→"; + this.SPACE_CHAR = "\xB7"; //"·"; + this.$padding = 0; + + this.setPadding = function(padding) { + this.$padding = padding; + this.element.style.padding = "0 " + padding + "px"; + }; + + this.getLineHeight = function() { + return this.$characterSize.height || 1; + }; + + this.getCharacterWidth = function() { + return this.$characterSize.width || 1; + }; + + this.checkForSizeChanges = function() { + var size = this.$measureSizes(); + if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { + this.$characterSize = size; + this._emit("changeCharacterSize", {data: size}); + } + }; + + this.$pollSizeChanges = function() { + var self = this; + this.$pollSizeChangesTimer = setInterval(function() { + self.checkForSizeChanges(); + }, 500); + }; + + this.$fontStyles = { + fontFamily : 1, + fontSize : 1, + fontWeight : 1, + fontStyle : 1, + lineHeight : 1 + }; + + this.$measureSizes = useragent.isIE || useragent.isOldGecko ? function() { + var n = 1000; + if (!this.$measureNode) { + var measureNode = this.$measureNode = dom.createElement("div"); + var style = measureNode.style; + + style.width = style.height = "auto"; + style.left = style.top = (-n * 40) + "px"; + + style.visibility = "hidden"; + style.position = "fixed"; + style.overflow = "visible"; + style.whiteSpace = "nowrap"; + + // in FF 3.6 monospace fonts can have a fixed sub pixel width. + // that's why we have to measure many characters + // Note: characterWidth can be a float! + measureNode.innerHTML = lang.stringRepeat("Xy", n); + + if (this.element.ownerDocument.body) { + this.element.ownerDocument.body.appendChild(measureNode); + } else { + var container = this.element.parentNode; + while (!dom.hasCssClass(container, "ace_editor")) + container = container.parentNode; + container.appendChild(measureNode); + } + } + + // Size and width can be null if the editor is not visible or + // detached from the document + if (!this.element.offsetWidth) + return null; + + var style = this.$measureNode.style; + var computedStyle = dom.computedStyle(this.element); + for (var prop in this.$fontStyles) + style[prop] = computedStyle[prop]; + + var size = { + height: this.$measureNode.offsetHeight, + width: this.$measureNode.offsetWidth / (n * 2) + }; + + // Size and width can be null if the editor is not visible or + // detached from the document + if (size.width == 0 || size.height == 0) + return null; + + return size; + } + : function() { + if (!this.$measureNode) { + var measureNode = this.$measureNode = dom.createElement("div"); + var style = measureNode.style; + + style.width = style.height = "auto"; + style.left = style.top = -100 + "px"; + + style.visibility = "hidden"; + style.position = "fixed"; + style.overflow = "visible"; + style.whiteSpace = "nowrap"; + + measureNode.innerHTML = "X"; + + var container = this.element.parentNode; + while (container && !dom.hasCssClass(container, "ace_editor")) + container = container.parentNode; + + if (!container) + return this.$measureNode = null; + + container.appendChild(measureNode); + } + + var rect = this.$measureNode.getBoundingClientRect(); + + var size = { + height: rect.height, + width: rect.width + }; + + // Size and width can be null if the editor is not visible or + // detached from the document + if (size.width == 0 || size.height == 0) + return null; + + return size; + }; + + this.setSession = function(session) { + this.session = session; + }; + + this.showInvisibles = false; + this.setShowInvisibles = function(showInvisibles) { + if (this.showInvisibles == showInvisibles) + return false; + + this.showInvisibles = showInvisibles; + return true; + }; + + this.$tabStrings = []; + this.$computeTabString = function() { + var tabSize = this.session.getTabSize(); + var tabStr = this.$tabStrings = [0]; + for (var i = 1; i < tabSize + 1; i++) { + if (this.showInvisibles) { + tabStr.push("" + + this.TAB_CHAR + + new Array(i).join(" ") + + ""); + } else { + tabStr.push(new Array(i+1).join(" ")); + } + } + + }; + + this.updateLines = function(config, firstRow, lastRow) { + this.$computeTabString(); + // Due to wrap line changes there can be new lines if e.g. + // the line to updated wrapped in the meantime. + if (this.config.lastRow != config.lastRow || + this.config.firstRow != config.firstRow) { + this.scrollLines(config); + } + this.config = config; + + var first = Math.max(firstRow, config.firstRow); + var last = Math.min(lastRow, config.lastRow); + + var lineElements = this.element.childNodes; + var lineElementsIdx = 0; + + for (var row = config.firstRow; row < first; row++) { + var foldLine = this.session.getFoldLine(row); + if (foldLine) { + if (foldLine.containsRow(first)) { + first = foldLine.start.row; + break; + } else { + row = foldLine.end.row; + } + } + lineElementsIdx ++; + } + + for (var i=first; i<=last; i++) { + var lineElement = lineElements[lineElementsIdx++]; + if (!lineElement) + continue; + + var html = []; + var tokens = this.session.getTokens(i, i); + this.$renderLine(html, i, tokens[0].tokens, !this.$useLineGroups()); + lineElement = dom.setInnerHtml(lineElement, html.join("")); + + i = this.session.getRowFoldEnd(i); + } + }; + + this.scrollLines = function(config) { + this.$computeTabString(); + var oldConfig = this.config; + this.config = config; + + if (!oldConfig || oldConfig.lastRow < config.firstRow) + return this.update(config); + + if (config.lastRow < oldConfig.firstRow) + return this.update(config); + + var el = this.element; + if (oldConfig.firstRow < config.firstRow) + for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--) + el.removeChild(el.firstChild); + + if (oldConfig.lastRow > config.lastRow) + for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--) + el.removeChild(el.lastChild); + + if (config.firstRow < oldConfig.firstRow) { + var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1); + if (el.firstChild) + el.insertBefore(fragment, el.firstChild); + else + el.appendChild(fragment); + } + + if (config.lastRow > oldConfig.lastRow) { + var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow); + el.appendChild(fragment); + } + }; + + this.$renderLinesFragment = function(config, firstRow, lastRow) { + var fragment = this.element.ownerDocument.createDocumentFragment(); + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (true) { + if (row > foldStart) { + row = foldLine.end.row+1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (row > lastRow) + break; + + var container = dom.createElement("div"); + + var html = []; + // 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 + // this call once for that big block of unfolded lines. + var tokens = this.session.getTokens(row, row); + if (tokens.length == 1) + this.$renderLine(html, row, tokens[0].tokens, false); + + // don't use setInnerHtml since we are working with an empty DIV + container.innerHTML = html.join(""); + if (this.$useLineGroups()) { + container.className = 'ace_line_group'; + fragment.appendChild(container); + } else { + var lines = container.childNodes + while(lines.length) + fragment.appendChild(lines[0]); + } + + row++; + } + return fragment; + }; + + this.update = function(config) { + this.$computeTabString(); + this.config = config; + + var html = []; + var firstRow = config.firstRow, lastRow = config.lastRow; + + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (true) { + if (row > foldStart) { + row = foldLine.end.row+1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row :Infinity; + } + if (row > lastRow) + break; + + if (this.$useLineGroups()) + html.push("
      ") + + // 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 + // this call once for that big block of unfolded lines. + var tokens = this.session.getTokens(row, row); + if (tokens.length == 1) + this.$renderLine(html, row, tokens[0].tokens, false); + + if (this.$useLineGroups()) + html.push("
      "); // end the line group + + row++; + } + this.element = dom.setInnerHtml(this.element, html.join("")); + }; + + this.$textToken = { + "text": true, + "rparen": true, + "lparen": true + }; + + this.$renderToken = function(stringBuilder, screenColumn, token, value) { + var self = this; + var replaceReg = /\t|&|<|( +)|([\u0000-\u0019\u00a0\u2000-\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; + var replaceFunc = function(c, a, b, tabIdx, idx4) { + if (a) { + return new Array(c.length+1).join(" "); + } else if (c == "&") { + return "&"; + } else if (c == "<") { + return "<"; + } else if (c == "\t") { + var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); + screenColumn += tabSize - 1; + return self.$tabStrings[tabSize]; + } 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 "" + space + ""; + } else if (b) { + return "" + self.SPACE_CHAR + ""; + } else { + screenColumn += 1; + return "" + c + ""; + } + }; + + var output = value.replace(replaceReg, replaceFunc); + + if (!this.$textToken[token.type]) { + var classes = "ace_" + token.type.replace(/\./g, " ace_"); + var style = ""; + if (token.type == "fold") + style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' "; + stringBuilder.push("", output, ""); + } + else { + stringBuilder.push(output); + } + return screenColumn + value.length; + }; + + this.$renderLineCore = function(stringBuilder, lastRow, tokens, splits, onlyContents) { + var chars = 0; + var split = 0; + var splitChars; + var screenColumn = 0; + var self = this; + + if (!splits || splits.length == 0) + splitChars = Number.MAX_VALUE; + else + splitChars = splits[0]; + + if (!onlyContents) { + stringBuilder.push("
      " + ); + } + + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + var value = token.value; + + if (chars + value.length < splitChars) { + screenColumn = self.$renderToken( + stringBuilder, screenColumn, token, value + ); + chars += value.length; + } + else { + while (chars + value.length >= splitChars) { + screenColumn = self.$renderToken( + stringBuilder, screenColumn, + token, value.substring(0, splitChars - chars) + ); + value = value.substring(splitChars - chars); + chars = splitChars; + + if (!onlyContents) { + stringBuilder.push("
      ", + "
      " + ); + } + + split ++; + screenColumn = 0; + splitChars = splits[split] || Number.MAX_VALUE; + } + if (value.length != 0) { + chars += value.length; + screenColumn = self.$renderToken( + stringBuilder, screenColumn, token, value + ); + } + } + } + + if (this.showInvisibles) { + if (lastRow !== this.session.getLength() - 1) + stringBuilder.push("" + this.EOL_CHAR + ""); + else + stringBuilder.push("" + this.EOF_CHAR + ""); + } + if (!onlyContents) + stringBuilder.push("
      "); + }; + + this.$renderLine = function(stringBuilder, row, tokens, onlyContents) { + // Check if the line to render is folded or not. If not, things are + // simple, otherwise, we need to fake some things... + if (!this.session.isRowFolded(row)) { + var splits = this.session.getRowSplitData(row); + this.$renderLineCore(stringBuilder, row, tokens, splits, onlyContents); + } else { + this.$renderFoldLine(stringBuilder, row, tokens, onlyContents); + } + }; + + this.$renderFoldLine = function(stringBuilder, row, tokens, onlyContents) { + var session = this.session, + foldLine = session.getFoldLine(row), + renderTokens = []; + + function addTokens(tokens, from, to) { + var idx = 0, col = 0; + while ((col + tokens[idx].value.length) < from) { + col += tokens[idx].value.length; + idx++; + + if (idx == tokens.length) { + return; + } + } + if (col != from) { + var value = tokens[idx].value.substring(from - col); + // Check if the token value is longer then the from...to spacing. + if (value.length > (to - from)) { + value = value.substring(0, to - from); + } + + renderTokens.push({ + type: tokens[idx].type, + value: value + }); + + col = from + value.length; + idx += 1; + } + + while (col < to) { + var value = tokens[idx].value; + if (value.length + col > to) { + value = value.substring(0, to - col); + } + renderTokens.push({ + type: tokens[idx].type, + value: value + }); + col += value.length; + idx += 1; + } + } + + foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) { + if (placeholder) { + renderTokens.push({ + type: "fold", + value: placeholder + }); + } else { + if (isNewRow) { + tokens = this.session.getTokens(row, row)[0].tokens; + } + if (tokens.length != 0) { + addTokens(tokens, lastColumn, column); + } + } + }.bind(this), foldLine.end.row, this.session.getLine(foldLine.end.row).length); + + // TODO: Build a fake splits array! + 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); + if (this.$measureNode) + this.$measureNode.parentNode.removeChild(this.$measureNode); + delete this.$measureNode; + }; + +}).call(Text.prototype); + +exports.Text = Text; + +}); +/* 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 + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/layer/cursor', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +var dom = require("../lib/dom"); + +var Cursor = function(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_cursor-layer"; + parentEl.appendChild(this.element); + + this.isVisible = false; + + this.cursors = []; + this.cursor = this.addCursor(); +}; + +(function() { + + this.$padding = 0; + this.setPadding = function(padding) { + this.$padding = padding; + }; + + this.setSession = function(session) { + this.session = session; + }; + + this.addCursor = function() { + var el = dom.createElement("div"); + var className = "ace_cursor"; + if (!this.isVisible) + className += " ace_hidden"; + if (this.overwrite) + className += " ace_overwrite"; + + el.className = className; + this.element.appendChild(el); + this.cursors.push(el); + return el; + }; + + this.removeCursor = function() { + if (this.cursors.length > 1) { + var el = this.cursors.pop(); + el.parentNode.removeChild(el); + return el; + } + }; + + this.hideCursor = function() { + this.isVisible = false; + for (var i = this.cursors.length; i--; ) + dom.addCssClass(this.cursors[i], "ace_hidden"); + clearInterval(this.blinkId); + }; + + this.showCursor = function() { + this.isVisible = true; + for (var i = this.cursors.length; i--; ) + dom.removeCssClass(this.cursors[i], "ace_hidden"); + + this.element.style.visibility = ""; + this.restartTimer(); + }; + + this.restartTimer = function() { + clearInterval(this.blinkId); + if (!this.isVisible) + return; + + var element = this.cursors.length == 1 ? this.cursor : this.element; + this.blinkId = setInterval(function() { + element.style.visibility = "hidden"; + setTimeout(function() { + element.style.visibility = ""; + }, 400); + }, 1000); + }; + + this.getPixelPosition = function(position, onScreen) { + if (!this.config || !this.session) { + return { + left : 0, + top : 0 + }; + } + + if (!position) + position = this.session.selection.getCursor(); + var pos = this.session.documentToScreenPosition(position); + var cursorLeft = Math.round(this.$padding + + pos.column * this.config.characterWidth); + var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * + this.config.lineHeight; + + return { + left : cursorLeft, + top : cursorTop + }; + }; + + this.update = function(config) { + this.config = config; + + if (this.session.selectionMarkerCount > 0) { + var selections = this.session.$selectionMarkers; + var i = 0, sel, cursorIndex = 0; + + for (var i = selections.length; i--; ) { + sel = selections[i]; + var pixelPos = this.getPixelPosition(sel.cursor, true); + + var style = (this.cursors[cursorIndex++] || this.addCursor()).style; + + style.left = pixelPos.left + "px"; + style.top = pixelPos.top + "px"; + style.width = config.characterWidth + "px"; + style.height = config.lineHeight + "px"; + } + if (cursorIndex > 1) + while (this.cursors.length > cursorIndex) + this.removeCursor(); + } else { + var pixelPos = this.getPixelPosition(null, true); + var style = this.cursor.style; + style.left = pixelPos.left + "px"; + style.top = pixelPos.top + "px"; + style.width = config.characterWidth + "px"; + style.height = config.lineHeight + "px"; + + while (this.cursors.length > 1) + this.removeCursor(); + } + + var overwrite = this.session.getOverwrite(); + if (overwrite != this.overwrite) + this.$setOverite(overwrite); + + // cache for textarea and gutter highlight + this.$pixelPos = pixelPos; + + this.restartTimer(); + }; + + this.$setOverite = function(overwrite) { + this.overwrite = overwrite; + for (var i = this.cursors.length; i--; ) { + if (overwrite) + dom.addCssClass(this.cursors[i], "ace_overwrite"); + else + dom.removeCssClass(this.cursors[i], "ace_overwrite"); + } + }; + + this.destroy = function() { + clearInterval(this.blinkId); + } + +}).call(Cursor.prototype); + +exports.Cursor = Cursor; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Irakli Gozalishvili (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('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("./lib/oop"); +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; + +/** + * class ScrollBar + * + * A set of methods for setting and retrieving the editor's scrollbar. + * + **/ + +/** + * new ScrollBar(parent) + * - parent (DOMElement): A DOM element + * + * Creates a new `ScrollBar`. `parent` is the owner of the scroll bar. + * + **/ +var ScrollBar = function(parent) { + this.element = dom.createElement("div"); + this.element.className = "ace_sb"; + + this.inner = dom.createElement("div"); + this.element.appendChild(this.inner); + + parent.appendChild(this.element); + + // 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 + // 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)); +}; + +(function() { + oop.implement(this, EventEmitter); + + /** + * ScrollBar@onScroll + * + * Emitted when the scroll bar, well, scrolls. + * + **/ + this.onScroll = function() { + this._emit("scroll", {data: this.element.scrollTop}); + }; + + /** + * ScrollBar.getWidth() -> Number + * + * Returns the width of the scroll bar. + * + **/ + this.getWidth = function() { + return this.width; + }; + + /** + * ScrollBar.setHeight(height) + * - height (Number): The new height + * + * Sets the height of the scroll bar, in pixels. + * + **/ + this.setHeight = function(height) { + this.element.style.height = height + "px"; + }; + + /** + * ScrollBar.setInnerHeight(height) + * - height (Number): The new inner height + * + * Sets the inner height of the scroll bar, in pixels. + * + **/ + this.setInnerHeight = function(height) { + this.inner.style.height = height + "px"; + }; + + /** + * ScrollBar.setScrollTop(scrollTop) + * - scrollTop (Number): The new scroll top + * + * Sets the scroll top of the scroll bar. + * + **/ + // TODO: on chrome 17+ after for small zoom levels after this function + // this.element.scrollTop != scrollTop which makes page to scroll up. + this.setScrollTop = function(scrollTop) { + this.element.scrollTop = scrollTop; + }; + +}).call(ScrollBar.prototype); + +exports.ScrollBar = ScrollBar; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Irakli Gozalishvili (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('ace/renderloop', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) { +"use strict"; + +var event = require("./lib/event"); + +/** internal, hide + * class RenderLoop + * + * Batches changes (that force something to be redrawn) in the background. + * + **/ + +/** internal, hide + * new RenderLoop(onRender, win) + * + * + * +**/ +var RenderLoop = function(onRender, win) { + this.onRender = onRender; + this.pending = false; + this.changes = 0; + this.window = win || window; +}; + +(function() { + + /** internal, hide + * RenderLoop.schedule(change) + * - change (Array): + * + * + **/ + this.schedule = function(change) { + //this.onRender(change); + //return; + this.changes = this.changes | change; + if (!this.pending) { + this.pending = true; + var _self = this; + event.nextTick(function() { + _self.pending = false; + var changes; + while (changes = _self.changes) { + _self.changes = 0; + _self.onRender(changes); + } + }, this.window); + } + }; + +}).call(RenderLoop.prototype); + +exports.RenderLoop = RenderLoop; +}); +define("text!ace/css/editor.css", [], "\n" + + ".ace_editor {\n" + + " position: absolute;\n" + + " overflow: hidden;\n" + + " font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Consolas', 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" + + ".ace_composition {\n" + + " position: absolute;\n" + + " background: #555;\n" + + " color: #DDD;\n" + + " z-index: 4;\n" + + "}\n" + + "\n" + + ".ace_gutter {\n" + + " position: absolute;\n" + + " overflow : hidden;\n" + + " height: 100%;\n" + + " width: auto;\n" + + " cursor: default;\n" + + " z-index: 1000;\n" + + "}\n" + + "\n" + + ".ace_gutter_active_line {\n" + + " position: absolute;\n" + + " right: 0;\n" + + " width: 100%;\n" + + "}\n" + + "\n" + + ".ace_gutter.horscroll {\n" + + " box-shadow: 0px 0px 20px rgba(0,0,0,0.4);\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: 0.5em;\n" + + " height: 1em;\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" + + " /* setting pointer-events: auto; on node under the mouse, which changes\n" + + " during scroll, will break mouse wheel scrolling in Safari */\n" + + " pointer-events: none;\n" + + "}\n" + + "\n" + + ".ace_gutter .ace_layer {\n" + + " position: relative;\n" + + " min-width: 40px;\n" + + " text-align: right;\n" + + " pointer-events: auto;\n" + + "}\n" + + "\n" + + ".ace_text-layer {\n" + + " color: black;\n" + + " font: inherit !important;\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_editor.multiselect .ace_cursor {\n" + + " border-left-width: 1px;\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: 5;\n" + + "}\n" + + "\n" + + ".ace_marker-layer .ace_bracket {\n" + + " position: absolute;\n" + + " z-index: 6;\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: 4;\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" + + "\n" + + ".ace_fade-fold-widgets .ace_fold-widget {\n" + + " -moz-transition: 0.5s opacity;\n" + + " -webkit-transition: 0.5s opacity;\n" + + " -o-transition: 0.5s opacity;\n" + + " -ms-transition: 0.5s opacity;\n" + + " transition: 0.5s opacity;\n" + + " opacity: 0;\n" + + "}\n" + + ".ace_fade-fold-widgets:hover .ace_fold-widget {\n" + + " -moz-transition-duration: 0.05s;\n" + + " -webkit-transition-duration: 0.05s;\n" + + " -o-transition-duration: 0.05s;\n" + + " -ms-transition-duration: 0.05s;\n" + + " transition-duration: 0.05s;\n" + + " -moz-transition-delay: 0.2s;\n" + + " -webkit-transition-delay: 0.2s;\n" + + " -o-transition-delay: 0.2s;\n" + + " -ms-transition-delay: 0.2s;\n" + + " transition-delay: 0.2s; \n" + + " opacity:1;\n" + + "}\n" + + ""); + +/* 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): + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/multi_select', ['require', 'exports', 'module' , 'ace/range_list', 'ace/range', 'ace/selection', 'ace/mouse/multi_select_handler', 'ace/lib/event', 'ace/commands/multi_select_commands', 'ace/search', 'ace/edit_session', 'ace/editor'], function(require, exports, module) { + +var RangeList = require("./range_list").RangeList; +var Range = require("./range").Range; +var Selection = require("./selection").Selection; +var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; +var event = require("./lib/event"); +exports.commands = require("./commands/multi_select_commands"); + +// Todo: session.find or editor.findVolatile that returns range +var Search = require("./search").Search; +var search = new Search(); + +function find(session, needle, dir) { + search.$options.wrap = true; + search.$options.needle = needle; + search.$options.backwards = dir == -1; + return search.find(session); +} + +// extend EditSession +var EditSession = require("./edit_session").EditSession; +(function() { + this.getSelectionMarkers = function() { + return this.$selectionMarkers; + }; +}).call(EditSession.prototype); + +// extend Selection +(function() { + // list of ranges in reverse addition order + this.ranges = null; + + // automatically sorted list of ranges + this.rangeList = null; + + /** extension + * Selection.addRange(range, $blockChangeEvents) + * - range (Range): The new range to add + * - $blockChangeEvents (Boolean): Whether or not to block changing events + * + * Adds a range to a selection by entering multiselect mode, if necessary. + **/ + this.addRange = function(range, $blockChangeEvents) { + if (!range) + return; + + if (!this.inMultiSelectMode && this.rangeCount == 0) { + var oldRange = this.toOrientedRange(); + if (range.intersects(oldRange)) + return $blockChangeEvents || this.fromOrientedRange(range); + + this.rangeList.add(oldRange); + this.$onAddRange(oldRange); + } + + if (!range.cursor) + range.cursor = range.end; + + var removed = this.rangeList.add(range); + + this.$onAddRange(range); + + if (removed.length) + this.$onRemoveRange(removed); + + if (this.rangeCount > 1 && !this.inMultiSelectMode) { + this._emit("multiSelect"); + this.inMultiSelectMode = true; + this.session.$undoSelect = false; + this.rangeList.attach(this.session); + } + + return $blockChangeEvents || this.fromOrientedRange(range); + }; + + this.toSingleRange = function(range) { + range = range || this.ranges[0]; + var removed = this.rangeList.removeAll(); + if (removed.length) + this.$onRemoveRange(removed); + + range && this.fromOrientedRange(range); + }; + + /** extension + * Selection.substractPoint(pos) -> Range + * - pos (Range): The position to remove, as a `{row, column}` object + * + * Removes a Range containing pos (if it exists). + **/ + this.substractPoint = function(pos) { + var removed = this.rangeList.substractPoint(pos); + if (removed) { + this.$onRemoveRange(removed); + return removed[0]; + } + }; + + /** extension + * Selection.mergeOverlappingRanges() + * + * Merges overlapping ranges ensuring consistency after changes + **/ + this.mergeOverlappingRanges = function() { + var removed = this.rangeList.merge(); + if (removed.length) + this.$onRemoveRange(removed); + else if(this.ranges[0]) + this.fromOrientedRange(this.ranges[0]); + }; + + this.$onAddRange = function(range) { + this.rangeCount = this.rangeList.ranges.length; + this.ranges.unshift(range); + this._emit("addRange", {range: range}); + }; + + this.$onRemoveRange = function(removed) { + this.rangeCount = this.rangeList.ranges.length; + if (this.rangeCount == 1 && this.inMultiSelectMode) { + var lastRange = this.rangeList.ranges.pop(); + removed.push(lastRange); + this.rangeCount = 0; + } + + for (var i = removed.length; i--; ) { + var index = this.ranges.indexOf(removed[i]); + this.ranges.splice(index, 1); + } + + this._emit("removeRange", {ranges: removed}); + + if (this.rangeCount == 0 && this.inMultiSelectMode) { + this.inMultiSelectMode = false; + this._emit("singleSelect"); + this.session.$undoSelect = true; + this.rangeList.detach(this.session); + } + + lastRange = lastRange || this.ranges[0]; + if (lastRange && !lastRange.isEqual(this.getRange())) + this.fromOrientedRange(lastRange); + }; + + // adds multicursor support to selection + this.$initRangeList = function() { + if (this.rangeList) + return; + + this.rangeList = new RangeList(); + this.ranges = []; + this.rangeCount = 0; + }; + + this.getAllRanges = function() { + return this.rangeList.ranges.concat(); + }; + + this.splitIntoLines = function () { + if (this.rangeCount > 1) { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); + } else { + var range = this.getRange(); + var startRow = range.start.row; + var endRow = range.end.row; + if (startRow == endRow) + return; + + var rectSel = []; + var r = this.getLineRange(startRow, true); + r.start.column = range.start.column; + rectSel.push(r); + + for (var i = startRow + 1; i < endRow; i++) + rectSel.push(this.getLineRange(i, true)); + + r = this.getLineRange(endRow, true); + r.end.column = range.end.column; + rectSel.push(r); + + rectSel.forEach(this.addRange, this); + } + }; + + this.toggleBlockSelection = function () { + if (this.rangeCount > 1) { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); + } else { + var cursor = this.session.documentToScreenPosition(this.selectionLead); + var anchor = this.session.documentToScreenPosition(this.selectionAnchor); + + var rectSel = this.rectangularRangeBlock(cursor, anchor); + rectSel.forEach(this.addRange, this); + } + }; + + /** extension + * Selection.rectangularRangeBlock(screenCursor, screenAnchor, includeEmptyLines) -> Range + * - screenCursor (Cursor): The cursor to use + * - screenAnchor (Anchor): The anchor to use + * - includeEmptyLins (Boolean): If true, this includes ranges inside the block which are empty due to clipping + * + * Gets list of ranges composing rectangular block on the screen + * + */ + this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) { + var rectSel = []; + + var xBackwards = screenCursor.column < screenAnchor.column; + if (xBackwards) { + var startColumn = screenCursor.column; + var endColumn = screenAnchor.column; + } else { + var startColumn = screenAnchor.column; + var endColumn = screenCursor.column; + } + + var yBackwards = screenCursor.row < screenAnchor.row; + if (yBackwards) { + var startRow = screenCursor.row; + var endRow = screenAnchor.row; + } else { + var startRow = screenAnchor.row; + var endRow = screenCursor.row; + } + + if (startColumn < 0) + startColumn = 0; + if (startRow < 0) + startRow = 0; + + if (startRow == endRow) + includeEmptyLines = true; + + for (var row = startRow; row <= endRow; row++) { + var range = Range.fromPoints( + this.session.screenToDocumentPosition(row, startColumn), + this.session.screenToDocumentPosition(row, endColumn) + ); + if (range.isEmpty()) { + if (docEnd && isSamePoint(range.end, docEnd)) + break; + var docEnd = range.end; + } + range.cursor = xBackwards ? range.start : range.end; + rectSel.push(range); + } + + if (yBackwards) + rectSel.reverse(); + + if (!includeEmptyLines) { + var end = rectSel.length - 1; + while (rectSel[end].isEmpty() && end > 0) + end--; + if (end > 0) { + var start = 0; + while (rectSel[start].isEmpty()) + start++; + } + for (var i = end; i >= start; i--) { + if (rectSel[i].isEmpty()) + rectSel.splice(i, 1); + } + } + + return rectSel; + }; +}).call(Selection.prototype); + +// extend Editor +var Editor = require("./editor").Editor; +(function() { + + /** extension + * Editor.updateSelectionMarkers() + * + * Updates the cursor and marker layers. + **/ + this.updateSelectionMarkers = function() { + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + /** extension + * Editor.addSelectionMarker(orientedRange) -> Range + * - orientedRange (Range): A range containing a cursor + * + * Adds the selection and cursor. + **/ + this.addSelectionMarker = function(orientedRange) { + if (!orientedRange.cursor) + orientedRange.cursor = orientedRange.end; + + var style = this.getSelectionStyle(); + orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); + + this.session.$selectionMarkers.push(orientedRange); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + return orientedRange; + }; + + /** extension + * Editor.removeSelectionMarker(range) + * - range (Range): The selection range added with [[Editor.addSelectionMarker `addSelectionMarker()`]]. + * + * Removes the selection marker. + **/ + this.removeSelectionMarker = function(range) { + if (!range.marker) + return; + this.session.removeMarker(range.marker); + var index = this.session.$selectionMarkers.indexOf(range); + if (index != -1) + this.session.$selectionMarkers.splice(index, 1); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + }; + + this.removeSelectionMarkers = function(ranges) { + var markerList = this.session.$selectionMarkers; + for (var i = ranges.length; i--; ) { + var range = ranges[i]; + if (!range.marker) + continue; + this.session.removeMarker(range.marker); + var index = markerList.indexOf(range); + if (index != -1) + markerList.splice(index, 1); + } + this.session.selectionMarkerCount = markerList.length; + }; + + this.$onAddRange = function(e) { + this.addSelectionMarker(e.range); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onRemoveRange = function(e) { + this.removeSelectionMarkers(e.ranges); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onMultiSelect = function(e) { + if (this.inMultiSelectMode) + return; + this.inMultiSelectMode = true; + + this.setStyle("multiselect"); + this.keyBinding.addKeyboardHandler(exports.commands.keyboardHandler); + this.commands.on("exec", this.$onMultiSelectExec); + + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onSingleSelect = function(e) { + if (this.session.multiSelect.inVirtualMode) + return; + this.inMultiSelectMode = false; + + this.unsetStyle("multiselect"); + this.keyBinding.removeKeyboardHandler(exports.commands.keyboardHandler); + + this.commands.removeEventListener("exec", this.$onMultiSelectExec); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onMultiSelectExec = function(e) { + var command = e.command; + var editor = e.editor; + if (!command.multiSelectAction) { + command.exec(editor, e.args || {}); + editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); + editor.multiSelect.mergeOverlappingRanges(); + } else if (command.multiSelectAction == "forEach") { + editor.forEachSelection(command, e.args); + } else if (command.multiSelectAction == "single") { + editor.exitMultiSelectMode(); + command.exec(editor, e.args || {}); + } else { + command.multiSelectAction(editor, e.args || {}); + } + e.preventDefault(); + }; + + /** extension + * Editor.forEachSelection(cmd, args) + * - cmd (String): The command to execute + * - args (String): Any arguments for the command + * + * Executes a command for each selection range. + **/ + this.forEachSelection = function(cmd, args) { + if (this.inVirtualSelectionMode) + return; + + var session = this.session; + var selection = this.selection; + var rangeList = selection.rangeList; + + var reg = selection._eventRegistry; + selection._eventRegistry = {}; + + var tmpSel = new Selection(session); + this.inVirtualSelectionMode = true; + for (var i = rangeList.ranges.length; i--;) { + tmpSel.fromOrientedRange(rangeList.ranges[i]); + this.selection = session.selection = tmpSel; + cmd.exec(this, args || {}); + tmpSel.toOrientedRange(rangeList.ranges[i]); + } + tmpSel.detach(); + + this.selection = session.selection = selection; + this.inVirtualSelectionMode = false; + selection._eventRegistry = reg; + selection.mergeOverlappingRanges(); + + this.onCursorChange(); + this.onSelectionChange(); + }; + + /** extension + * Editor.exitMultiSelectMode() -> Void + * + * Removes all the selections except the last added one. + **/ + this.exitMultiSelectMode = function() { + if (this.inVirtualSelectionMode) + return; + this.multiSelect.toSingleRange(); + }; + + this.getCopyText = function() { + var text = ""; + if (this.inMultiSelectMode) { + var ranges = this.multiSelect.rangeList.ranges; + text = []; + for (var i = 0; i < ranges.length; i++) { + text.push(this.session.getTextRange(ranges[i])); + } + text = text.join(this.session.getDocument().getNewLineCharacter()); + } else if (!this.selection.isEmpty()) { + text = this.session.getTextRange(this.getSelectionRange()); + } + + return text; + }; + + this.onPaste = function(text) { + this._emit("paste", text); + if (!this.inMultiSelectMode) + return this.insert(text); + + var lines = text.split(this.session.getDocument().getNewLineCharacter()); + var ranges = this.selection.rangeList.ranges; + + if (lines.length > ranges.length) { + this.commands.exec("insertstring", this, text); + return; + } + + for (var i = ranges.length; i--; ) { + var range = ranges[i]; + if (!range.isEmpty()) + this.session.remove(range); + + this.session.insert(range.start, lines[i]); + } + }; + + /** extension + * Editor.findAll(dir, options) -> Number + * - needle: text to find + * - options: search options + * - additive: keeps + * + * Finds and selects all the occurences of `needle`. + **/ + this.findAll = function(needle, options, additive) { + options = options || {}; + options.needle = needle || options.needle; + this.$search.set(options); + + var ranges = this.$search.findAll(this.session); + if (!ranges.length) + return 0; + + this.$blockScrolling += 1; + var selection = this.multiSelect; + + if (!additive) + selection.toSingleRange(ranges[0]); + + for (var i = ranges.length; i--; ) + selection.addRange(ranges[i], true); + + this.$blockScrolling -= 1; + + return ranges.length; + }; + + // commands + /** extension + * Editor.selectMoreLines(dir, skip) + * - dir (Number): The direction of lines to select: -1 for up, 1 for down + * - skip (Boolean): If `true`, removes the active selection range + * + * Adds a cursor above or below the active cursor. + **/ + this.selectMoreLines = function(dir, skip) { + var range = this.selection.toOrientedRange(); + var isBackwards = range.cursor == range.end; + + var screenLead = this.session.documentToScreenPosition(range.cursor); + if (this.selection.$desiredColumn) + screenLead.column = this.selection.$desiredColumn; + + var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); + + if (!range.isEmpty()) { + var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); + var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); + } else { + var anchor = lead; + } + + if (isBackwards) { + var newRange = Range.fromPoints(lead, anchor); + newRange.cursor = newRange.start; + } else { + var newRange = Range.fromPoints(anchor, lead); + newRange.cursor = newRange.end; + } + + newRange.desiredColumn = screenLead.column; + if (!this.selection.inMultiSelectMode) { + this.selection.addRange(range); + } else { + if (skip) + var toRemove = range.cursor; + } + + this.selection.addRange(newRange); + if (toRemove) + this.selection.substractPoint(toRemove); + }; + + /** extension + * Editor.transposeSelections(dir) + * - dir (Number): The direction to rotate selections + * + * Transposes the selected ranges. + **/ + this.transposeSelections = function(dir) { + var session = this.session; + var sel = session.multiSelect; + var all = sel.ranges; + + for (var i = all.length; i--; ) { + var range = all[i]; + if (range.isEmpty()) { + var tmp = session.getWordRange(range.start.row, range.start.column); + range.start.row = tmp.start.row; + range.start.column = tmp.start.column; + range.end.row = tmp.end.row; + range.end.column = tmp.end.column; + } + } + sel.mergeOverlappingRanges(); + + var words = []; + for (var i = all.length; i--; ) { + var range = all[i]; + words.unshift(session.getTextRange(range)); + } + + if (dir < 0) + words.unshift(words.pop()); + else + words.push(words.shift()); + + for (var i = all.length; i--; ) { + var range = all[i]; + var tmp = range.clone(); + session.replace(range, words[i]); + range.start.row = tmp.start.row; + range.start.column = tmp.start.column; + } + } + + /** extension + * Editor.selectMore(dir, skip) + * - dir (Number): The direction of lines to select: -1 for up, 1 for down + * - skip (Boolean): If `true`, removes the active selection range + * + * Finds the next occurence of text in an active selection and adds it to the selections. + **/ + this.selectMore = function (dir, skip) { + var session = this.session; + var sel = session.multiSelect; + + var range = sel.toOrientedRange(); + if (range.isEmpty()) { + var range = session.getWordRange(range.start.row, range.start.column); + range.cursor = range.end; + this.multiSelect.addRange(range); + } + var needle = session.getTextRange(range); + + var newRange = find(session, needle, dir); + if (newRange) { + newRange.cursor = dir == -1 ? newRange.start : newRange.end; + this.multiSelect.addRange(newRange); + } + if (skip) + this.multiSelect.substractPoint(range.cursor); + }; +}).call(Editor.prototype); + + +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; +} + +// patch +// adds multicursor support to a session +exports.onSessionChange = function(e) { + var session = e.session; + if (!session.multiSelect) { + session.$selectionMarkers = []; + session.selection.$initRangeList(); + session.multiSelect = session.selection; + } + this.multiSelect = session.multiSelect; + + var oldSession = e.oldSession; + if (oldSession) { + // todo use events + if (oldSession.multiSelect && oldSession.multiSelect.editor == this) + oldSession.multiSelect.editor = null; + + session.multiSelect.removeEventListener("addRange", this.$onAddRange); + session.multiSelect.removeEventListener("removeRange", this.$onRemoveRange); + session.multiSelect.removeEventListener("multiSelect", this.$onMultiSelect); + session.multiSelect.removeEventListener("singleSelect", this.$onSingleSelect); + } + + session.multiSelect.on("addRange", this.$onAddRange); + session.multiSelect.on("removeRange", this.$onRemoveRange); + session.multiSelect.on("multiSelect", this.$onMultiSelect); + session.multiSelect.on("singleSelect", this.$onSingleSelect); + + // this.$onSelectionChange = this.onSelectionChange.bind(this); + + if (this.inMultiSelectMode != session.selection.inMultiSelectMode) { + if (session.selection.inMultiSelectMode) + this.$onMultiSelect(); + else + this.$onSingleSelect(); + } +}; + +// MultiSelect(editor) +// adds multiple selection support to the editor +// (note: should be called only once for each editor instance) +function MultiSelect(editor) { + editor.$onAddRange = editor.$onAddRange.bind(editor); + editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); + editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); + editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); + + exports.onSessionChange.call(editor, editor); + editor.on("changeSession", exports.onSessionChange.bind(editor)); + + editor.on("mousedown", onMouseDown); + editor.commands.addCommands(exports.commands.defaultCommands); + + addAltCursorListeners(editor); +} + +function addAltCursorListeners(editor){ + var el = editor.textInput.getElement(); + var altCursor = false; + var contentEl = editor.renderer.content; + event.addListener(el, "keydown", function(e) { + if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) { + if (!altCursor) { + contentEl.style.cursor = "crosshair"; + altCursor = true; + } + } else if (altCursor) { + contentEl.style.cursor = ""; + } + }); + + event.addListener(el, "keyup", reset); + event.addListener(el, "blur", reset); + function reset() { + if (altCursor) { + contentEl.style.cursor = ""; + altCursor = false; + } + } +} + +exports.MultiSelect = MultiSelect; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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): + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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_list', ['require', 'exports', 'module' ], function(require, exports, module) { +"use strict"; + + +var RangeList = function() { + this.ranges = []; +}; + +(function() { + this.comparePoints = function(p1, p2) { + return p1.row - p2.row || p1.column - p2.column; + }; + + this.pointIndex = function(pos, startIndex) { + var list = this.ranges; + + for (var i = startIndex || 0; i < list.length; i++) { + var range = list[i]; + var cmp = this.comparePoints(pos, range.end); + + if (cmp > 0) + continue; + if (cmp == 0) + return i; + cmp = this.comparePoints(pos, range.start); + if (cmp >= 0) + return i; + + return -i-1; + } + return -i - 1; + }; + + this.add = function(range) { + var startIndex = this.pointIndex(range.start); + if (startIndex < 0) + startIndex = -startIndex - 1; + + var endIndex = this.pointIndex(range.end, startIndex); + + if (endIndex < 0) + endIndex = -endIndex - 1; + else + endIndex++; + + return this.ranges.splice(startIndex, endIndex - startIndex, range); + }; + + this.addList = function(list) { + var removed = []; + for (var i = list.length; i--; ) { + removed.push.call(removed, this.add(list[i])); + } + return removed; + }; + + this.substractPoint = function(pos) { + var i = this.pointIndex(pos); + + if (i >= 0) + return this.ranges.splice(i, 1); + }; + + // merge overlapping ranges + this.merge = function() { + var removed = []; + var list = this.ranges; + var next = list[0], range; + for (var i = 1; i < list.length; i++) { + range = next; + next = list[i]; + var cmp = this.comparePoints(range.end, next.start); + if (cmp < 0) + continue; + + if (cmp == 0 && !(range.isEmpty() || next.isEmpty())) + continue; + + if (this.comparePoints(range.end, next.end) < 0) { + range.end.row = next.end.row; + range.end.column = next.end.column; + } + + list.splice(i, 1); + removed.push(next); + next = range; + i--; + } + + return removed; + }; + + this.contains = function(row, column) { + return this.pointIndex({row: row, column: column}) >= 0; + }; + + this.containsPoint = function(pos) { + return this.pointIndex(pos) >= 0; + }; + + this.rangeAtPoint = function(pos) { + var i = this.pointIndex(pos); + if (i >= 0) + return this.ranges[i]; + }; + + + this.clipRows = function(startRow, endRow) { + var list = this.ranges; + if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) + return []; + + var startIndex = this.pointIndex({row: startRow, column: 0}); + if (startIndex < 0) + startIndex = -startIndex - 1; + var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex); + if (endIndex < 0) + endIndex = -endIndex - 1; + + var clipped = []; + for (var i = startIndex; i < endIndex; i++) { + clipped.push(list[i]); + } + return clipped; + }; + + this.removeAll = function() { + return this.ranges.splice(0, this.ranges.length); + }; + + this.attach = function(session) { + if (this.session) + this.detach(); + + this.session = session; + this.onChange = this.$onChange.bind(this); + + this.session.on('change', this.onChange); + }; + + this.detach = function() { + if (!this.session) + return; + this.session.removeListener('change', this.onChange); + this.session = null; + }; + + this.$onChange = function(e) { + var changeRange = e.data.range; + if (e.data.action[0] == "i"){ + var start = changeRange.start; + var end = changeRange.end; + } else { + var end = changeRange.start; + var start = changeRange.end; + } + var startRow = start.row; + var endRow = end.row; + var lineDif = endRow - startRow; + + var colDiff = -start.column + end.column; + + var ranges = this.ranges; + + for (var i=0, n = ranges.length; i < n; i++) { + var r = ranges[i]; + if (r.end.row < startRow) + continue; + if (r.start.row > startRow) + break; + + if (r.start.row == startRow && r.start.column >= start.column ) { + r.start.column += colDiff; + r.start.row += lineDif; + } + if (r.end.row == startRow && r.end.column >= start.column) { + r.end.column += colDiff; + r.end.row += lineDif; + } + } + + if (lineDif != 0 && i < n) { + for (; i < n; i++) { + var r = ranges[i]; + r.start.row += lineDif; + r.end.row += lineDif; + } + } + }; + +}).call(RangeList.prototype); + +exports.RangeList = RangeList; +}); +/* 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): + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/multi_select_handler', ['require', 'exports', 'module' , 'ace/lib/event'], function(require, exports, module) { + +var event = require("../lib/event"); + + +// mouse +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; +} + +function onMouseDown(e) { + var ev = e.domEvent; + var alt = ev.altKey; + var shift = ev.shiftKey; + var ctrl = e.getAccelKey(); + var button = e.getButton(); + + if (!ctrl && !alt) { + if (e.editor.inMultiSelectMode) { + if (button == 0) { + e.editor.exitMultiSelectMode(); + } else if (button == 2) { + var editor = e.editor; + var selectionEmpty = editor.selection.isEmpty(); + editor.textInput.onContextMenu({x: e.clientX, y: e.clientY}, selectionEmpty); + event.capture(editor.container, function(){}, editor.textInput.onContextMenuClose); + e.stop(); + } + } + return; + } + + var editor = e.editor; + var selection = editor.selection; + var isMultiSelect = editor.inMultiSelectMode; + var pos = e.getDocumentPosition(); + var cursor = selection.getCursor(); + var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); + + + var mouseX = e.x, mouseY = e.y; + var onMouseSelection = function(e) { + mouseX = e.clientX; + mouseY = e.clientY; + }; + + var blockSelect = function() { + var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column); + + if (isSamePoint(screenCursor, newCursor) + && isSamePoint(cursor, selection.selectionLead)) + return; + screenCursor = newCursor; + + editor.selection.moveCursorToPosition(cursor); + editor.selection.clearSelection(); + editor.renderer.scrollCursorIntoView(); + + editor.removeSelectionMarkers(rectSel); + rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); + rectSel.forEach(editor.addSelectionMarker, editor); + editor.updateSelectionMarkers(); + }; + + var session = editor.session; + var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var screenCursor = screenAnchor; + + + + if (ctrl && !shift && !alt && button == 0) { + if (!isMultiSelect && inSelection) + return; // dragging + + if (!isMultiSelect) { + var range = selection.toOrientedRange(); + editor.addSelectionMarker(range); + } + + var oldRange = selection.rangeList.rangeAtPoint(pos); + + event.capture(editor.container, function(){}, function() { + var tmpSel = selection.toOrientedRange(); + + if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) + selection.substractPoint(tmpSel.cursor); + else { + if (range) { + editor.removeSelectionMarker(range); + selection.addRange(range); + } + selection.addRange(tmpSel); + } + }); + + } else if (!shift && alt && button == 0) { + e.stop(); + + if (isMultiSelect && !ctrl) + selection.toSingleRange(); + else if (!isMultiSelect && ctrl) + selection.addRange(); + + selection.moveCursorToPosition(pos); + selection.clearSelection(); + + var rectSel = []; + + var onMouseSelectionEnd = function(e) { + clearInterval(timerId); + editor.removeSelectionMarkers(rectSel); + for (var i = 0; i < rectSel.length; i++) + selection.addRange(rectSel[i]); + }; + + var onSelectionInterval = blockSelect; + + event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); + var timerId = setInterval(function() {onSelectionInterval();}, 20); + + return e.preventDefault(); + } +} + + +exports.onMouseDown = onMouseDown; + +}); +/* 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): + * Harutyun Amirjanyan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/commands/multi_select_commands', ['require', 'exports', 'module' , 'ace/keyboard/hash_handler'], function(require, exports, module) { + +// commands to enter multiselect mode +exports.defaultCommands = [{ + name: "addCursorAbove", + exec: function(editor) { editor.selectMoreLines(-1); }, + bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}, + readonly: true +}, { + name: "addCursorBelow", + exec: function(editor) { editor.selectMoreLines(1); }, + bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}, + readonly: true +}, { + name: "addCursorAboveSkipCurrent", + exec: function(editor) { editor.selectMoreLines(-1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"}, + readonly: true +}, { + name: "addCursorBelowSkipCurrent", + exec: function(editor) { editor.selectMoreLines(1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"}, + readonly: true +}, { + name: "selectMoreBefore", + exec: function(editor) { editor.selectMore(-1); }, + bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"}, + readonly: true +}, { + name: "selectMoreAfter", + exec: function(editor) { editor.selectMore(1); }, + bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"}, + readonly: true +}, { + name: "selectNextBefore", + exec: function(editor) { editor.selectMore(-1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"}, + readonly: true +}, { + name: "selectNextAfter", + exec: function(editor) { editor.selectMore(1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"}, + readonly: true +}, { + name: "splitIntoLines", + exec: function(editor) { editor.multiSelect.splitIntoLines(); }, + bindKey: {win: "Ctrl-Shift-L", mac: "Ctrl-Shift-L"}, + readonly: true +}, { + name: "singleSelection", + bindKey: "esc", + exec: function(editor) { editor.exitMultiSelectMode(); }, + readonly: true, + isAvailable: function(editor) {return editor.inMultiSelectMode} +}]; + +// commands active in multiselect mode +exports.multiEditCommands = {"singleSelection": "esc"}; + +var HashHandler = require("../keyboard/hash_handler").HashHandler; +exports.keyboardHandler = new HashHandler(exports.multiEditCommands); + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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', 'ace/config'], function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var config = require("../config"); + +var WorkerClient = function(topLevelNamespaces, packagedJs, mod, classname) { + + this.changeListener = this.changeListener.bind(this); + + if (config.get("packaged")) { + this.$worker = new Worker(config.get("workerPath") + "/" + packagedJs); + } + else { + var workerUrl = this.$normalizePath(require.nameToUrl("ace/worker/worker", null, "_")); + this.$worker = new Worker(workerUrl); + + var tlns = {}; + for (var i=0; i + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/placeholder', ['require', 'exports', 'module' , 'ace/range', 'ace/lib/event_emitter', 'ace/lib/oop'], function(require, exports, module) { +"use strict"; + +var Range = require('./range').Range; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var oop = require("./lib/oop"); + +/** + * class PlaceHolder + * + * TODO + * + **/ + +/** + * new PlaceHolder(session, length, pos, others, mainClass, othersClass) + * - session (Document): The document to associate with the anchor + * - length (Number): The starting row position + * - pos (Number): The starting column position + * - others (String): + * - mainClass (String): + * - othersClass (String): + * + * TODO + * + **/ + +var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) { + var _self = this; + this.length = length; + this.session = session; + this.doc = session.getDocument(); + this.mainClass = mainClass; + this.othersClass = othersClass; + this.$onUpdate = this.onUpdate.bind(this); + this.doc.on("change", this.$onUpdate); + this.$others = others; + + this.$onCursorChange = function() { + setTimeout(function() { + _self.onCursorChange(); + }); + }; + + this.$pos = pos; + // Used for reset + var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1}; + this.$undoStackDepth = undoStack.length; + this.setup(); + + session.selection.on("changeCursor", this.$onCursorChange); +}; + +(function() { + + oop.implement(this, EventEmitter); + + /** + * PlaceHolder.setup() + * + * TODO + * + **/ + this.setup = function() { + var _self = this; + var doc = this.doc; + var session = this.session; + var pos = this.$pos; + + this.pos = doc.createAnchor(pos.row, pos.column); + this.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); + this.pos.on("change", function(event) { + session.removeMarker(_self.markerId); + _self.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.mainClass, null, false); + }); + this.others = []; + this.$others.forEach(function(other) { + var anchor = doc.createAnchor(other.row, other.column); + _self.others.push(anchor); + }); + session.setUndoSelect(false); + }; + + /** + * PlaceHolder.showOtherMarkers() + * + * TODO + * + **/ + this.showOtherMarkers = function() { + if(this.othersActive) return; + var session = this.session; + var _self = this; + this.othersActive = true; + this.others.forEach(function(anchor) { + anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false); + anchor.on("change", function(event) { + session.removeMarker(anchor.markerId); + anchor.markerId = session.addMarker(new Range(event.value.row, event.value.column, event.value.row, event.value.column+_self.length), _self.othersClass, null, false); + }); + }); + }; + + /** + * PlaceHolder.hideOtherMarkers() + * + * Hides all over markers in the [[EditSession `EditSession`]] that are not the currently selected one. + * + **/ + this.hideOtherMarkers = function() { + if(!this.othersActive) return; + this.othersActive = false; + for (var i = 0; i < this.others.length; i++) { + this.session.removeMarker(this.others[i].markerId); + } + }; + + /** + * PlaceHolder@onUpdate(e) + * + * Emitted when the place holder updates. + * + **/ + this.onUpdate = function(event) { + var delta = event.data; + var range = delta.range; + if(range.start.row !== range.end.row) return; + if(range.start.row !== this.pos.row) return; + if (this.$updating) return; + this.$updating = true; + var lengthDiff = delta.action === "insertText" ? range.end.column - range.start.column : range.start.column - range.end.column; + + if(range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1) { + var distanceFromStart = range.start.column - this.pos.column; + this.length += lengthDiff; + if(!this.session.$fromUndo) { + if(delta.action === "insertText") { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; + if(otherPos.row === range.start.row && range.start.column < otherPos.column) + newPos.column += lengthDiff; + this.doc.insert(newPos, delta.text); + } + } else if(delta.action === "removeText") { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; + if(otherPos.row === range.start.row && range.start.column < otherPos.column) + newPos.column += lengthDiff; + this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); + } + } + // Special case: insert in beginning + if(range.start.column === this.pos.column && delta.action === "insertText") { + setTimeout(function() { + this.pos.setPosition(this.pos.row, this.pos.column - lengthDiff); + for (var i = 0; i < this.others.length; i++) { + var other = this.others[i]; + var newPos = {row: other.row, column: other.column - lengthDiff}; + if(other.row === range.start.row && range.start.column < other.column) + newPos.column += lengthDiff; + other.setPosition(newPos.row, newPos.column); + } + }.bind(this), 0); + } + else if(range.start.column === this.pos.column && delta.action === "removeText") { + setTimeout(function() { + for (var i = 0; i < this.others.length; i++) { + var other = this.others[i]; + if(other.row === range.start.row && range.start.column < other.column) { + other.setPosition(other.row, other.column - lengthDiff); + } + } + }.bind(this), 0); + } + } + this.pos._emit("change", {value: this.pos}); + for (var i = 0; i < this.others.length; i++) { + this.others[i]._emit("change", {value: this.others[i]}); + } + } + this.$updating = false; + }; + + /** + * PlaceHolder@onCursorChange(e) + * + * Emitted when the cursor changes. + * + **/ + + this.onCursorChange = function(event) { + if (this.$updating) return; + var pos = this.session.selection.getCursor(); + if(pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { + this.showOtherMarkers(); + this._emit("cursorEnter", event); + } else { + this.hideOtherMarkers(); + this._emit("cursorLeave", event); + } + }; + + /** + * PlaceHolder.detach() + * + * TODO + * + **/ + this.detach = function() { + this.session.removeMarker(this.markerId); + this.hideOtherMarkers(); + this.doc.removeEventListener("change", this.$onUpdate); + this.session.selection.removeEventListener("changeCursor", this.$onCursorChange); + this.pos.detach(); + for (var i = 0; i < this.others.length; i++) { + this.others[i].detach(); + } + this.session.setUndoSelect(true); + }; + + /** + * PlaceHolder.cancel() + * + * TODO + * + **/ + this.cancel = function() { + if(this.$undoStackDepth === -1) + throw Error("Canceling placeholders only supported with undo manager attached to session."); + var undoManager = this.session.getUndoManager(); + var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth; + for (var i = 0; i < undosRequired; i++) { + undoManager.undo(true); + } + }; +}).call(PlaceHolder.prototype); + + +exports.PlaceHolder = PlaceHolder; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/textmate', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +exports.isDark = false; +exports.cssClass = "ace-tm"; +exports.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: #6B72E6;\ +}\ +\ +.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_storage,\ +.ace-tm .ace_line .ace_keyword {\ + color: blue;\ +}\ +\ +.ace-tm .ace_line .ace_constant {\ + color: rgb(197, 6, 11);\ +}\ +\ +.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: rgba(255, 0, 0, 0.1);\ + color: red;\ +}\ +\ +.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.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px white;\ + border-radius: 2px;\ +}\ +.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_gutter_active_line{\ + background-color : #dcdcdc;\ +}\ +\ +.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 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/public/ace_editor/ace.js b/public/ace_editor/ace.js new file mode 100644 index 0000000..b2aec36 --- /dev/null +++ b/public/ace_editor/ace.js @@ -0,0 +1,10 @@ +(function(){function g(a){if(typeof requirejs!="undefined"){var e=b.define;b.define=function(a,b,c){return typeof c!="function"?e.apply(this,arguments):e(a,b,function(a,d,e){return b[2]=="module"&&(e.packaged=!0),c.apply(this,arguments)})},b.define.packaged=!0;return}var f=function(a,b){return d("",a,b)};f.packaged=!0;var g=b;a&&(b[a]||(b[a]={}),g=b[a]),g.define&&(c.original=g.define),g.define=c,g.require&&(d.original=g.require),g.require=f}var a="",b=function(){return this}(),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;g1&&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;ab.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(b){var c=this;if(typeof c!="function")throw new TypeError;var d=g.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,h=c.apply(f,d.concat(g.call(arguments)));return h!==null&&Object(h)===h?h:f}return c.apply(b,d.concat(g.call(arguments)))};return e});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(b){return h(b)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(b){var c=G(this),d=arguments[1],e=0,f=c.length>>>0;if(h(b)!="[object Function]")throw new TypeError;while(e>>0,e=Array(d),f=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var g=0;g>>0,e=[],f=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var g=0;g>>0,e=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var f=0;f>>0,e=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var f=0;f>>0;if(h(b)!="[object Function]")throw new TypeError;if(!d&&arguments.length==1)throw new TypeError;var e=0,f;if(arguments.length>=2)f=arguments[1];else do{if(e in c){f=c[e++];break}if(++e>=d)throw new TypeError}while(!0);for(;e>>0;if(h(b)!="[object Function]")throw new TypeError;if(!d&&arguments.length==1)throw new TypeError;var e,f=d-1;if(arguments.length>=2)e=arguments[1];else do{if(f in c){e=c[f--];break}if(--f<0)throw new TypeError}while(!0);do f in this&&(e=b.call(void 0,e,c[f],f,c));while(f--);return e}),Array.prototype.indexOf||(Array.prototype.indexOf=function(b){var c=G(this),d=c.length>>>0;if(!d)return-1;var e=0;arguments.length>1&&(e=E(arguments[1])),e=e>=0?e:Math.max(0,d+e);for(;e>>0;if(!d)return-1;var e=d-1;arguments.length>1&&(e=Math.min(e,E(arguments[1]))),e=e>=0?e:d-Math.abs(e);for(;e>=0;e--)if(e in c&&b===c[e])return e;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(b){return b.__proto__||(b.constructor?b.constructor.prototype:f)});if(!Object.getOwnPropertyDescriptor){var o="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(b,c){if(typeof b!="object"&&typeof b!="function"||b===null)throw new TypeError(o+b);if(!i(b,c))return;var d,e,g;d={enumerable:!0,configurable:!0};if(n){var h=b.__proto__;b.__proto__=f;var e=l(b,c),g=m(b,c);b.__proto__=h;if(e||g)return e&&(d.get=e),g&&(d.set=g),d}return d.value=b[c],d}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(b){return Object.keys(b)}),Object.create||(Object.create=function(b,c){var d;if(b===null)d={__proto__:null};else{if(typeof b!="object")throw new TypeError("typeof prototype["+typeof b+"] != 'object'");var e=function(){};e.prototype=b,d=new e,d.__proto__=b}return c!==void 0&&Object.defineProperties(d,c),d});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(b,c,d){if(typeof b!="object"&&typeof b!="function"||b===null)throw new TypeError(u+b);if(typeof d!="object"&&typeof d!="function"||d===null)throw new TypeError(t+d);if(s)try{return s.call(Object,b,c,d)}catch(e){}if(i(d,"value"))if(n&&(l(b,c)||m(b,c))){var g=b.__proto__;b.__proto__=f,delete b[c],b[c]=d.value,b.__proto__=g}else b[c]=d.value;else{if(!n)throw new TypeError(v);i(d,"get")&&j(b,c,d.get),i(d,"set")&&k(b,c,d.set)}return b}}Object.defineProperties||(Object.defineProperties=function(b,c){for(var d in c)i(c,d)&&Object.defineProperty(b,d,c[d]);return b}),Object.seal||(Object.seal=function(b){return b}),Object.freeze||(Object.freeze=function(b){return b});try{Object.freeze(function(){})}catch(w){Object.freeze=function(b){return function(c){return typeof c=="function"?c:b(c)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(b){return b}),Object.isSealed||(Object.isSealed=function(b){return!1}),Object.isFrozen||(Object.isFrozen=function(b){return!1}),Object.isExtensible||(Object.isExtensible=function(b){if(Object(b)===b)throw new TypeError;var c="";while(i(b,c))c+="?";b[c]=!0;var d=i(b,c);return delete b[c],d});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 H(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var H=[];for(var b in a)i(a,b)&&H.push(b);if(x)for(var c=0,d=z;c9999?"+":"")+("00000"+Math.abs(e)).slice(0<=e&&e<=9999?-4:-6),c=b.length;while(c--)d=b[c],d<10&&(b[c]="0"+d);return e+"-"+b.slice(0,2).join("-")+"T"+b.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(b){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(d){var e=c.exec(d);if(e){e.shift();for(var f=1;f<7;f++)e[f]=+(e[f]||(f<3?1:0)),f==1&&e[f]--;var g=+e.pop(),h=+e.pop(),i=e.pop(),j=0;if(i){if(h>23||g>59)return NaN;j=(h*60+g)*6e4*(i=="+"?-1:1)}var k=+e[0];return 0<=k&&k<=99?(e[0]=k+400,a.UTC.apply(this,e)+j-126227808e5):a.UTC.apply(this,e)+j}return a.parse.apply(this,arguments)},b}(Date));var B=" \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(c5||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||e.isOpera){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)})}};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.commands=new o(f.isMac?"mac":"win",p),this.textInput=new g(a.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),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.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.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,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.renderer.updateFontSize()},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.$cursorChange=function(){this.renderer.updateCursor()},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.$cursorChange()},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.$cursorChange(),this.$blockScrolling||this.renderer.scrollCursorIntoView(),this.$highlightBrackets(),this.$updateHighlightActiveLine()},this.$updateHighlightActiveLine=function(){var a=this.getSession();a.$highlightLineMarker&&a.removeMarker(a.$highlightLineMarker),a.$highlightLineMarker=null;if(this.$highlightActiveLine){var b=this.getCursorPosition(),c=this.session.getFoldLine(b.row);if(this.getSelectionStyle()!="line"||!this.selection.isMultiLine()){var 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.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(a){this._emit("paste",a),this.insert(a)},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(" ",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;r0;++r)j.charAt(r)==" "?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){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.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.$highlightGutterLine=!0,this.setHighlightGutterLine=function(a){if(this.$highlightGutterLine==a)return;this.renderer.setHighlightGutterLine(a)},this.getHighlightGutterLine=function(){return this.$highlightGutterLine},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.setAnimatedScroll=function(a){this.renderer.setAnimatedScroll(a)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},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.setFadeFoldWidgets=function(a){this.renderer.setFadeFoldWidgets(a)},this.getFadeFoldWidgets=function(){return this.renderer.getFadeFoldWidgets()},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=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.$moveByPage=function(a,b){var c=this.renderer,d=this.renderer.layerConfig,e=a*Math.floor(d.height/d.lineHeight);this.$blockScrolling++,b==1?this.selection.$moveSelection(function(){this.moveCursorBy(e,0)}):b==0&&(this.selection.moveCursorBy(e,0),this.selection.clearSelection()),this.$blockScrolling--;var f=c.scrollTop;c.scrollBy(0,e*d.lineHeight),b!=null&&c.scrollCursorIntoView(null,.5),c.animateScrolling(f)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(a){this.renderer.scrollToRow(a)},this.scrollToLine=function(a,b,c,d){this.renderer.scrollToLine(a,b,c,d)},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,c){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(a-1)||this.scrollToLine(a-1,!0,c)},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(){var a=this.renderer.scrollTop;this.selection.moveCursorFileEnd(),this.clearSelection(),this.renderer.animateScrolling(a)},this.navigateFileStart=function(){var a=this.renderer.scrollTop;this.selection.moveCursorFileStart(),this.clearSelection(),this.renderer.animateScrolling(a)},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),d=0;return c?(this.$tryReplace(c,a)&&(d=1),c!==null&&(this.selection.setSelectionRange(c),this.renderer.scrollSelectionIntoView(c.start,c.end)),d):d},this.replaceAll=function(a,b){b&&this.$search.set(b);var c=this.$search.findAll(this.session),d=0;if(!c.length)return d;this.$blockScrolling+=1;var e=this.getSelectionRange();this.clearSelection(),this.selection.moveCursorTo(0,0);for(var f=c.length-1;f>=0;--f)this.$tryReplace(c[f],a)&&d++;return this.selection.setSelectionRange(e),this.$blockScrolling-=1,d},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,c){this.clearSelection(),b=b||{},b.needle=a,this.$search.set(b),this.$find(!1,c)},this.findNext=function(a,b){a=a||{},this.$search.set(a),this.$find(!1,b)},this.findPrevious=function(a,b){a=a||{},this.$search.set(a),this.$find(!0,b)},this.$find=function(a,b){this.selection.isEmpty()||this.$search.set({needle:this.session.getTextRange(this.getSelectionRange())}),typeof a!="undefined"&&this.$search.set({backwards:a});var c=this.$search.find(this.session);if(c){this.$blockScrolling+=1,this.session.unfold(c),this.selection.setSelectionRange(c),this.$blockScrolling-=1;var d=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(c.start,c.end,.5),this.renderer.animateScrolling(d)}},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},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;c1&&(d.charAt(0)==g?d=d.substr(1):d.charAt(d.length-1)==g&&(d=d.slice(0,-1))),d&&d!=g&&(j?b.onPaste(d):b.onTextInput(d));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.setAttribute("wrap","off"),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(this),new f(this),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)},this.setState=function(a){this.state=a},this.captureMouse=function(a,b){b&&this.setState(b),this.x=a.x,this.y=a.y;var c=this.editor.renderer.$keepTextAreaAtCursor;this.editor.renderer.$keepTextAreaAtCursor=!1;var e=this,f=function(a){e.x=a.clientX,e.y=a.clientY},g=function(a){clearInterval(i),e[e.state+"End"]&&e[e.state+"End"](a),e.$clickSelection=null,e.editor.renderer.$keepTextAreaAtCursor=c,e.editor.renderer.$moveTextAreaToCursor()},h=function(){e[e.state]&&e[e.state]()};d.capture(this.editor.container,f,g);var i=setInterval(h,20);a.preventDefault()}}).call(h.prototype),b.MouseHandler=h}),define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/browser_focus"],function(a,b,c){function g(a){a.$clickSelection=null,a.browserFocus=new e;var b=a.editor;b.setDefaultHandler("mousedown",this.onMouseDown.bind(a)),b.setDefaultHandler("dblclick",this.onDoubleClick.bind(a)),b.setDefaultHandler("tripleclick",this.onTripleClick.bind(a)),b.setDefaultHandler("quadclick",this.onQuadClick.bind(a)),b.setDefaultHandler("mousewheel",this.onScroll.bind(a));var c=["select","startSelect","drag","dragEnd","dragWait","dragWaitEnd","startDrag"];c.forEach(function(b){a[b]=this[b]},this),a.selectByLines=this.extendSelectionBy.bind(a,"getLineRange"),a.selectByWords=this.extendSelectionBy.bind(a,"getWordRange")}function h(a,b,c,d){return Math.sqrt(Math.pow(c-a,2)+Math.pow(d-b,2))}"use strict";var d=a("../lib/dom"),e=a("../lib/browser_focus").BrowserFocus,f=5;(function(){this.onMouseDown=function(a){this.mousedownEvent=a;var b=a.inSelection(),c=a.getDocumentPosition(),d=this.editor,e=this;this.ev=a;var f=d.getSelectionRange(),g=f.isEmpty(),h=a.getButton();if(h!==0){g&&(d.moveCursorToPosition(c),d.selection.clearSelection()),this.moveTextarea=function(){d.textInput.onContextMenu({x:e.x,y:e.y})},this.moveTextareaEnd=d.textInput.onContextMenuClose,d.textInput.onContextMenu({x:this.x,y:this.y},g),this.captureMouse(a,"moveTextarea");return}if(b&&!d.isFocused()){d.focus();return}if(!b||this.$clickSelection||a.getShiftKey())this.startSelect(c);else if(b){var i=a.domEvent;i.ctrlKey||i.altKey?this.startDrag():(this.mousedownEvent.time=(new Date).getTime(),this.setState("dragWait"))}this.captureMouse(a)},this.startSelect=function(a){a=a||this.editor.renderer.screenToTextCoordinates(this.x,this.y),this.mousedownEvent.getShiftKey()?this.editor.selection.selectToPosition(a):this.$clickSelection||(this.editor.moveCursorToPosition(a),this.editor.selection.clearSelection()),this.setState("select")},this.select=function(){var a,b=this.editor,c=b.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var d=this.$clickSelection.comparePoint(c);d==-1?a=this.$clickSelection.end:d==1?a=this.$clickSelection.start:(c=this.$clickSelection.end,a=this.$clickSelection.start),b.selection.setSelectionAnchor(a.row,a.column)}b.selection.selectToPosition(c),b.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(a){var b,c=this.editor,d=c.renderer.screenToTextCoordinates(this.x,this.y),e=c.selection[a](d.row,d.column);if(this.$clickSelection){var f=this.$clickSelection.comparePoint(e.start),g=this.$clickSelection.comparePoint(e.end);f==-1&&g<=0?(b=this.$clickSelection.end,d=e.start):g==1&&f>=0?(b=this.$clickSelection.start,d=e.end):f==-1&&g==1?(d=e.end,b=e.start):(d=this.$clickSelection.end,b=this.$clickSelection.start),c.selection.setSelectionAnchor(b.row,b.column)}c.selection.selectToPosition(d),c.renderer.scrollCursorIntoView()},this.startDrag=function(){var a=this.editor;this.setState("drag"),this.dragRange=a.getSelectionRange();var b=a.getSelectionStyle();this.dragSelectionMarker=a.session.addMarker(this.dragRange,"ace_selection",b),a.clearSelection(),d.addCssClass(a.container,"ace_dragging"),this.$dragKeybinding||(this.$dragKeybinding={handleKeyboard:function(a,b,c,d){if(c=="esc")return{command:this.command}},command:{exec:function(a){var b=a.$mouseHandler;b.dragCursor=null,b.dragEnd(),b.startSelect()}}}),a.keyBinding.addKeyboardHandler(this.$dragKeybinding)},this.dragWait=function(){var a=h(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),b=(new Date).getTime(),c=this.editor;a>f?this.startSelect():b-this.mousedownEvent.time>c.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(a){this.mousedownEvent.domEvent=a,this.startSelect()},this.drag=function(){var a=this.editor;this.dragCursor=a.renderer.screenToTextCoordinates(this.x,this.y),a.moveCursorToPosition(this.dragCursor),a.renderer.scrollCursorIntoView()},this.dragEnd=function(a){var b=this.editor,c=this.dragCursor,e=this.dragRange;d.removeCssClass(b.container,"ace_dragging"),b.session.removeMarker(this.dragSelectionMarker),b.keyBinding.removeKeyboardHandler(this.$dragKeybinding);if(!c)return;b.clearSelection();if(a&&(a.ctrlKey||a.altKey)){var f=b.session,g=e;g.end=f.insert(c,f.getTextRange(e)),g.start=c}else{if(e.contains(c.row,c.column))return;var g=b.moveText(e,c)}if(!g)return;b.selection.setSelectionRange(g)},this.onDoubleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;this.setState("selectByWords"),c.moveCursorToPosition(b),c.selection.selectWord(),this.$clickSelection=c.getSelectionRange()},this.onTripleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;this.setState("selectByLines"),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.setState("select")},this.onScroll=function(a){var b=this.editor,c=b.renderer.isScrollableBy(a.wheelX*a.speed,a.wheelY*a.speed);if(c)this.$passScrollEvent=!1;else{if(this.$passScrollEvent)return;if(!this.$scrollStopTimeout){var d=this;this.$scrollStopTimeout=setTimeout(function(){d.$passScrollEvent=!0,d.$scrollStopTimeout=null},200)}}return b.renderer.scrollBy(a.wheelX*a.speed,a.wheelY*a.speed),a.preventDefault()}}).call(g.prototype),b.DefaultHandlers=g}),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=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}e.implement(this,h),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=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=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=f.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()?f.stringRepeat(" ",this.getTabSize()):" "},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;b0&&(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=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;c0?(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=h.row&&k.shiftRow(-c)}f=e}else{var n;if(b){n=[e,0];for(var o=0;o=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(),e=this.$wrapData,g=this.$wrapLimit,h,j,k=a;b=Math.min(b,c.length-1);while(k<=b){j=this.getFoldLine(k,j);if(!j)h=this.$getDisplayTokens(f.stringTrimRight(c[k])),e[k]=this.$computeWrapSplits(h,g,d),k++;else{h=[],j.walk(function(a,b,d,e){var f;if(a){f=this.$getDisplayTokens(a,h.length),f[0]=i;for(var g=1;g=o)h.pop();e[j.start.row]=this.$computeWrapSplits(h,g,d),k=j.end.row+1}}};var b=1,c=2,i=3,l=4,n=9,o=10,p=11,q=12;this.$computeWrapSplits=function(a,b){function g(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 h=e+b;if(a[h]>=o){while(a[h]>=o)h++;g(h);continue}if(a[h]==i||a[h]==l){for(h;h!=e-1;h--)if(a[h]==i)break;if(h>e){g(h);continue}h=e+b;for(h;hj&&a[h]j&&a[h]==n)h--;if(h>j){g(++h);continue}h=e+b,g(h)}return c},this.$getDisplayTokens=function(a,d){var e=[],f;d=d||0;for(var g=0;g39&&h<48||h>57&&h<64?e.push(n):h>=4352&&r(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=4352&&r(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){var b=this.screenToDocumentPosition(a,Number.MAX_VALUE);return this.documentToScreenColumn(b.row,b.column)},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=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),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=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;dg&&(f=b.end.row+1,b=this.$foldData[d++],g=b?b.start.row:Infinity)}return a}}).call(n.prototype),a("./edit_session/folding").Folding.call(n.prototype),a("./edit_session/bracket_match").BracketMatch.call(n.prototype),b.EditSession=n}),define("ace/config",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}"no use strict";var d=a("./lib/lang"),e=function(){return this}(),f={packaged:!1,workerPath:"",modePath:"",themePath:"",suffix:".js"};b.get=function(a){if(!f.hasOwnProperty(a))throw new Error("Unknown confik key: "+a);return f[a]},b.set=function(a,b){if(!f.hasOwnProperty(a))throw new Error("Unknown confik key: "+a);f[a]=b},b.all=function(){return d.copyObject(f)},b.init=function(){f.packaged=a.packaged||c.packaged||e.define&&define.packaged;if(!e.document)return"";var d={},h="",i,j=document.getElementsByTagName("script");for(var k=0;kb.row||a.row==b.row&&a.column>b.column},this.getRange=function(){var a=this.anchor,b=this.lead;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.$desiredColumn=null},this.$moveSelection=function(a){var b=this.lead;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.getWordRange=function(a,b){if(typeof b=="undefined"){var c=a||this.lead;a=c.row,b=c.column}return this.session.getWordRange(a,b)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var a=this.getCursor(),b=this.session.getAWordRange(a.row,a.column);this.setSelectionRange(b)},this.getLineRange=function(a,b){var c=typeof a=="number"?a:this.lead.row,d,e=this.session.getFoldLine(c);return e?(c=e.start.row,d=e.end.row):d=c,b?new g(c,0,d,this.session.getLine(d).length):new g(c,0,d+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var a=this.lead.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.lead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,1))this.moveCursorTo(b.end.row,b.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row=c.length){this.moveCursorTo(a,c.length),this.moveCursorRight(),a0&&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.$shortWordEndIndex=function(a){var b,c=0,d,e=/\s/,f=this.session.tokenRe;f.lastIndex=0;if(b=this.session.tokenRe.exec(a))c=this.session.tokenRe.lastIndex;else{while((d=a[c])&&e.test(d))c++;if(c<=1){f.lastIndex=0;while((d=a[c])&&!f.test(d)){f.lastIndex=0,c++;if(e.test(d)){if(c>2){c--;break}while((d=a[c])&&e.test(d))c++;if(c>2)break}}}}return f.lastIndex=0,c},this.moveCursorShortWordRight=function(){var a=this.lead.row,b=this.lead.column,c=this.doc.getLine(a),d=c.substring(b),e=this.session.getFoldAt(a,b,1);if(e)return this.moveCursorTo(e.end.row,e.end.column);if(b==c.length)return this.moveCursorRight();var f=this.$shortWordEndIndex(d);this.moveCursorTo(a,b+f)},this.moveCursorShortWordLeft=function(){var a=this.lead.row,b=this.lead.column,c;if(c=this.session.getFoldAt(a,b,-1))return this.moveCursorTo(c.start.row,c.start.column);if(b==0)return this.moveCursorLeft();var d=this.session.getLine(a).substring(0,b),f=e.stringReverse(d),g=this.$shortWordEndIndex(f);return this.moveCursorTo(a,b-g)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(a,b){var c=this.session.documentToScreenPosition(this.lead.row,this.lead.column);b===0&&(this.$desiredColumn?c.column=this.$desiredColumn:this.$desiredColumn=c.column);var d=this.session.screenToDocumentPosition(c.row+a,c.column);this.moveCursorTo(d.row,d.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.$keepDesiredColumnOnChange=!0,this.lead.setPosition(a,b),this.$keepDesiredColumnOnChange=!1,c||(this.$desiredColumn=null)},this.moveCursorToScreen=function(a,b,c){var d=this.session.screenToDocumentPosition(a,b);this.moveCursorTo(d.row,d.column,c)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(a){this.setSelectionRange(a,a.cursor==a.start),this.$desiredColumn=a.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(a){var b=this.getRange();return a?(a.start.column=b.start.column,a.start.row=b.start.row,a.end.column=b.end.column,a.end.row=b.end.row):a=b,a.cursor=this.isBackwards()?a.start:a.end,a.desiredColumn=this.$desiredColumn,a}}).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.isEqual=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.intersects=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){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?bthis.end.column?1:0:athis.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=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;b1&&e[i].token.length!==j-1)throw new Error("Matching groups and length of the token array don't match in rule #"+i+" of state "+c);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;n1&&(m=g.slice(n+2,n+1+e[n].len)),typeof l.token=="function"?k=l.token.apply(this,m):k=l.token,l.next&&(c=l.next,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=b&&(a.row=Math.max(0,b-1),a.column=this.getLine(b-1).length),a},this.insert=function(a,b){if(!b||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=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=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=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.currentLine20){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=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=a)return e}return null},this.getFoldedRowCount=function(a,b){var c=this.$foldData,d=b-a+1;for(var e=0;e=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;othis.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)throw"Trying to add fold to FoldRow that doesn't have a matching row";this.folds.unshift(a),this.start.row=a.start.row,this.start.column=a.start.column}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=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=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)return;b=e,g=f,j=!0}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(j0},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/config","ace/lib/net","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("./config"),i=a("./lib/net"),j=a("./layer/gutter").Gutter,k=a("./layer/marker").Marker,l=a("./layer/text").Text,m=a("./layer/cursor").Cursor,n=a("./scrollbar").ScrollBar,o=a("./renderloop").RenderLoop,p=a("./lib/event_emitter").EventEmitter,q=a("text!./css/editor.css");e.importCssString(q,"ace_editor");var r=function(a,b){var c=this;this.container=a,this.$keepTextAreaAtCursor=!g.isIE,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.setHighlightGutterLine(!0),this.$gutterLayer=new j(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onResize.bind(this,!0)),this.setFadeFoldWidgets(!0),this.$markerBack=new k(this.content);var d=this.$textLayer=new l(this.content);this.canvas=d.element,this.$markerFront=new k(this.content),this.characterWidth=d.getCharacterWidth(),this.lineHeight=d.getLineHeight(),this.$cursorLayer=new m(this.content),this.$cursorPadding=8,this.$horizScroll=!1,this.$horizScrollAlwaysVisible=!1,this.$animatedScroll=!1,this.scrollBar=new n(a),this.scrollBar.addEventListener("scroll",function(a){c.$inScrollAnimation||c.session.setScrollTop(a.data)}),this.scrollTop=0,this.scrollLeft=0,f.addListener(this.scroller,"scroll",function(){var a=c.scroller.scrollLeft;c.scrollLeft=a,c.session.setScrollLeft(a),c.scroller.className=a==0?"ace_scroller":"ace_scroller horscroll"}),this.cursorPos={row:0,column:0},this.$textLayer.addEventListener("changeCharacterSize",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 o(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,this.CHANGE_H_SCROLL=1024,d.implement(this,p),this.setSession=function(a){this.session=a,this.scroller.className="ace_scroller",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.lastRowthis.layerConfig.height)return;b+=(this.showGutter?this.$gutterLayer.gutterWidth:0)-this.scrollLeft;var c=this.container.getBoundingClientRect();this.textarea.style.left=c.left+b+"px",this.textarea.style.top=c.top+a+"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||!this.container.offsetWidth)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_H_SCROLL){this.scroller.scrollLeft=this.scrollLeft;var b=this.scroller.scrollLeft;this.scrollLeft=b,this.session.setScrollLeft(b)}if(a&this.CHANGE_FULL){this.$textLayer.checkForSizeChanges(),this.$updateScrollBar(),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.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight();return}if(a&this.CHANGE_SCROLL){this.$updateScrollBar(),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.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight();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),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),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",e||this.session.setScrollLeft(0));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.$gutter.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",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(be?(b&&(e-=b*this.$size.scrollerHeight),this.session.setScrollTop(e)):this.scrollTop+this.$size.scrollerHeightd?(d0)return!0;if(b>0&&this.session.getScrollTop()+this.$size.scrollerHeight0?1:-1}},this.screenToTextCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=Math.round((a+this.scrollLeft-c.left-this.$padding)/this.characterWidth),e=Math.floor((b+this.scrollTop-c.top)/this.lineHeight);return this.session.screenToDocumentPosition(e,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=" ";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._loadTheme=function(a,b){if(!h.get("packaged"))return b();var c=a.split("/").pop(),d=h.get("themePath")+"/theme-"+c+h.get("suffix");i.loadScript(d,b)},this.setTheme=function(b){function h(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;if(!b||typeof b=="string"){var d=b||"ace/theme/textmate",f;try{f=a(d)}catch(g){}if(f)return h(f);c._loadTheme(d,function(){a([d],function(a){if(c.$themeValue!==b)return;h(a)})})}else h(b)},this.getTheme=function(){return this.$themeValue},this.setStyle=function(b){e.addCssClass(this.container,b)},this.unsetStyle=function(b){e.removeCssClass(this.container,b)},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(r.prototype),b.VirtualRenderer=r}),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]+=" "+b},this.removeGutterDecoration=function(a,b){this.$decorations[a]=this.$decorations[a].replace(" "+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;eh&&(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("
      ",e+1);if(i){var k=i[e];k==null&&(k=i[e]=this.session.getFoldWidget(e)),k&&c.push("")}var l=this.session.getRowLength(e)-1;while(l--)c.push("
      ¦");c.push("
      "),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+" start",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+" start",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"),j=this.$getTop(b.end.row,d),i=Math.round(b.end.column*d.characterWidth),a.push("
      "),h=(b.end.row-b.start.row-1)*d.lineHeight;if(h<0)return;j=this.$getTop(b.start.row+1,d),a.push("
      ")},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("
      ")}}).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("changeCharacterSize",{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=g.isIE||g.isOldGecko?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="fixed",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)}}if(!this.element.offsetWidth)return null;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}:function(){if(!this.$measureNode){var a=this.$measureNode=e.createElement("div"),b=a.style;b.width=b.height="auto",b.left=b.top="-100px",b.visibility="hidden",b.position="fixed",b.overflow="visible",b.whiteSpace="nowrap",a.innerHTML="X";var c=this.element.parentNode;while(c&&!e.hasCssClass(c,"ace_editor"))c=c.parentNode;if(!c)return this.$measureNode=null;c.appendChild(a)}var d=this.$measureNode.getBoundingClientRect(),f={height:d.height,width:d.width};return f.width==0||f.height==0?null:f},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"+this.TAB_CHAR+(new Array(c)).join(" ")+""):b.push((new Array(c+1)).join(" "))},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;i0;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.firstRowb.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("
      ");var i=this.session.getTokens(f,f);i.length==1&&this.$renderLine(b,f,i[0].tokens,!1),this.$useLineGroups()&&b.push("
      "),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|&|<|( +)|([\u0000-\u0019\u00a0\u2000-\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,g=function(a,c,d,f,g){if(c)return(new Array(a.length+1)).join(" ");if(a=="&")return"&";if(a=="<")return"<";if(a==" "){var h=e.session.getScreenTabSize(b+f);return b+=h-1,e.$tabStrings[h]}if(a==" "){var i=e.showInvisibles?"ace_cjk ace_invisible":"ace_cjk",j=e.showInvisibles?e.SPACE_CHAR:"";return b+=1,""+j+""}return d?""+e.SPACE_CHAR+"":(b+=1,""+a+"")},h=d.replace(f,g);if(!this.$textToken[c.type]){var i="ace_"+c.type.replace(/\./g," ace_"),j="";c.type=="fold"&&(j=" style='width:"+c.value.length*this.config.characterWidth+"px;' "),a.push("",h,"")}else a.push(h);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("
      ");for(var k=0;k=h)i=j.$renderToken(a,i,l,m.substring(0,h-f)),m=m.substring(h-f),f=h,e||a.push("
      ","
      "),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(""+this.EOL_CHAR+""):a.push(""+this.EOF_CHAR+"")),e||a.push("
      ")},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.lengthc-b&&(f=f.substring(0,c-b)),g.push({type:a[d].type,value:f}),e=b+f.length,d+=1}while(ec&&(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.isVisible=!1,this.cursors=[],this.cursor=this.addCursor()};(function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.addCursor=function(){var a=d.createElement("div"),b="ace_cursor";return this.isVisible||(b+=" ace_hidden"),this.overwrite&&(b+=" ace_overwrite"),a.className=b,this.element.appendChild(a),this.cursors.push(a),a},this.removeCursor=function(){if(this.cursors.length>1){var a=this.cursors.pop();return a.parentNode.removeChild(a),a}},this.hideCursor=function(){this.isVisible=!1;for(var a=this.cursors.length;a--;)d.addCssClass(this.cursors[a],"ace_hidden");clearInterval(this.blinkId)},this.showCursor=function(){this.isVisible=!0;for(var a=this.cursors.length;a--;)d.removeCssClass(this.cursors[a],"ace_hidden");this.element.style.visibility="",this.restartTimer()},this.restartTimer=function(){clearInterval(this.blinkId);if(!this.isVisible)return;var a=this.cursors.length==1?this.cursor:this.element;this.blinkId=setInterval(function(){a.style.visibility="hidden",setTimeout(function(){a.style.visibility=""},400)},1e3)},this.getPixelPosition=function(a,b){if(!this.config||!this.session)return{left:0,top:0};a||(a=this.session.selection.getCursor());var c=this.session.documentToScreenPosition(a),d=Math.round(this.$padding+c.column*this.config.characterWidth),e=(c.row-(b?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:d,top:e}},this.update=function(a){this.config=a;if(this.session.selectionMarkerCount>0){var b=this.session.$selectionMarkers,c=0,d,e=0;for(var c=b.length;c--;){d=b[c];var f=this.getPixelPosition(d.cursor,!0),g=(this.cursors[e++]||this.addCursor()).style;g.left=f.left+"px",g.top=f.top+"px",g.width=a.characterWidth+"px",g.height=a.lineHeight+"px"}if(e>1)while(this.cursors.length>e)this.removeCursor()}else{var f=this.getPixelPosition(null,!0),g=this.cursor.style;g.left=f.left+"px",g.top=f.top+"px",g.width=a.characterWidth+"px",g.height=a.lineHeight+"px";while(this.cursors.length>1)this.removeCursor()}var h=this.session.getOverwrite();h!=this.overwrite&&this.$setOverite(h),this.$pixelPos=f,this.restartTimer()},this.$setOverite=function(a){this.overwrite=a;for(var b=this.cursors.length;b--;)a?d.addCssClass(this.cursors[b],"ace_overwrite"):d.removeCssClass(this.cursors[b],"ace_overwrite")},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",[],"\n.ace_editor {\n position: absolute;\n overflow: hidden;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Consolas', 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.ace_composition {\n position: absolute;\n background: #555;\n color: #DDD;\n z-index: 4;\n}\n\n.ace_gutter {\n position: absolute;\n overflow : hidden;\n height: 100%;\n width: auto;\n cursor: default;\n z-index: 1000;\n}\n\n.ace_gutter_active_line {\n position: absolute;\n right: 0;\n width: 100%;\n}\n\n.ace_gutter.horscroll {\n box-shadow: 0px 0px 20px rgba(0,0,0,0.4);\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: 0.5em;\n height: 1em;\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 /* setting pointer-events: auto; on node under the mouse, which changes\n during scroll, will break mouse wheel scrolling in Safari */\n pointer-events: none;\n}\n\n.ace_gutter .ace_layer {\n position: relative;\n min-width: 40px;\n text-align: right;\n pointer-events: auto;\n}\n\n.ace_text-layer {\n color: black;\n font: inherit !important;\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_editor.multiselect .ace_cursor {\n border-left-width: 1px;\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: 5;\n}\n\n.ace_marker-layer .ace_bracket {\n position: absolute;\n z-index: 6;\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: 4;\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\n.ace_fade-fold-widgets .ace_fold-widget {\n -moz-transition: 0.5s opacity;\n -webkit-transition: 0.5s opacity;\n -o-transition: 0.5s opacity;\n -ms-transition: 0.5s opacity;\n transition: 0.5s opacity;\n opacity: 0;\n}\n.ace_fade-fold-widgets:hover .ace_fold-widget {\n -moz-transition-duration: 0.05s;\n -webkit-transition-duration: 0.05s;\n -o-transition-duration: 0.05s;\n -ms-transition-duration: 0.05s;\n transition-duration: 0.05s;\n -moz-transition-delay: 0.2s;\n -webkit-transition-delay: 0.2s;\n -o-transition-delay: 0.2s;\n -ms-transition-delay: 0.2s;\n transition-delay: 0.2s; \n opacity:1;\n}\n"),define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor"],function(a,b,c){function k(a,b,c){return j.$options.wrap=!0,j.$options.needle=b,j.$options.backwards=c==-1,j.find(a)}function n(a,b){return a.row==b.row&&a.column==b.column}function o(a){a.$onAddRange=a.$onAddRange.bind(a),a.$onRemoveRange=a.$onRemoveRange.bind(a),a.$onMultiSelect=a.$onMultiSelect.bind(a),a.$onSingleSelect=a.$onSingleSelect.bind(a),b.onSessionChange.call(a,a),a.on("changeSession",b.onSessionChange.bind(a)),a.on("mousedown",g),a.commands.addCommands(b.commands.defaultCommands),p(a)}function p(a){function e(){c&&(d.style.cursor="",c=!1)}var b=a.textInput.getElement(),c=!1,d=a.renderer.content;h.addListener(b,"keydown",function(a){a.keyCode==18&&!(a.ctrlKey||a.shiftKey||a.metaKey)?c||(d.style.cursor="crosshair",c=!0):c&&(d.style.cursor="")}),h.addListener(b,"keyup",e),h.addListener(b,"blur",e)}var d=a("./range_list").RangeList,e=a("./range").Range,f=a("./selection").Selection,g=a("./mouse/multi_select_handler").onMouseDown,h=a("./lib/event");b.commands=a("./commands/multi_select_commands");var i=a("./search").Search,j=new i,l=a("./edit_session").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(l.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(a,b){if(!a)return;if(!this.inMultiSelectMode&&this.rangeCount==0){var c=this.toOrientedRange();if(a.intersects(c))return b||this.fromOrientedRange(a);this.rangeList.add(c),this.$onAddRange(c)}a.cursor||(a.cursor=a.end);var d=this.rangeList.add(a);return this.$onAddRange(a),d.length&&this.$onRemoveRange(d),this.rangeCount>1&&!this.inMultiSelectMode&&(this._emit("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),b||this.fromOrientedRange(a)},this.toSingleRange=function(a){a=a||this.ranges[0];var b=this.rangeList.removeAll();b.length&&this.$onRemoveRange(b),a&&this.fromOrientedRange(a)},this.substractPoint=function(a){var b=this.rangeList.substractPoint(a);if(b)return this.$onRemoveRange(b),b[0]},this.mergeOverlappingRanges=function(){var a=this.rangeList.merge();a.length?this.$onRemoveRange(a):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(a){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(a),this._emit("addRange",{range:a})},this.$onRemoveRange=function(a){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var b=this.rangeList.ranges.pop();a.push(b),this.rangeCount=0}for(var c=a.length;c--;){var d=this.ranges.indexOf(a[c]);this.ranges.splice(d,1)}this._emit("removeRange",{ranges:a}),this.rangeCount==0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._emit("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),b=b||this.ranges[0],b&&!b.isEqual(this.getRange())&&this.fromOrientedRange(b)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new d,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeList.ranges.concat()},this.splitIntoLines=function(){if(this.rangeCount>1){var a=this.rangeList.ranges,b=a[a.length-1],c=e.fromPoints(a[0].start,b.end);this.toSingleRange(),this.setSelectionRange(c,b.cursor==b.start)}else{var c=this.getRange(),d=c.start.row,f=c.end.row;if(d==f)return;var g=[],h=this.getLineRange(d,!0);h.start.column=c.start.column,g.push(h);for(var i=d+1;i1){var a=this.rangeList.ranges,b=a[a.length-1],c=e.fromPoints(a[0].start,b.end);this.toSingleRange(),this.setSelectionRange(c,b.cursor==b.start)}else{var d=this.session.documentToScreenPosition(this.selectionLead),f=this.session.documentToScreenPosition(this.selectionAnchor),g=this.rectangularRangeBlock(d,f);g.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(a,b,c){var d=[],f=a.column0)p--;if(p>0){var q=0;while(d[q].isEmpty())q++}for(var r=p;r>=q;r--)d[r].isEmpty()&&d.splice(r,1)}return d}}.call(f.prototype);var m=a("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(a){a.cursor||(a.cursor=a.end);var b=this.getSelectionStyle();return a.marker=this.session.addMarker(a,"ace_selection",b),this.session.$selectionMarkers.push(a),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,a},this.removeSelectionMarker=function(a){if(!a.marker)return;this.session.removeMarker(a.marker);var b=this.session.$selectionMarkers.indexOf(a);b!=-1&&this.session.$selectionMarkers.splice(b,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(a){var b=this.session.$selectionMarkers;for(var c=a.length;c--;){var d=a[c];if(!d.marker)continue;this.session.removeMarker(d.marker);var e=b.indexOf(d);e!=-1&&b.splice(e,1)}this.session.selectionMarkerCount=b.length},this.$onAddRange=function(a){this.addSelectionMarker(a.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(a){this.removeSelectionMarkers(a.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(a){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("multiselect"),this.keyBinding.addKeyboardHandler(b.commands.keyboardHandler),this.commands.on("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(a){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("multiselect"),this.keyBinding.removeKeyboardHandler(b.commands.keyboardHandler),this.commands.removeEventListener("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelectExec=function(a){var b=a.command,c=a.editor;b.multiSelectAction?b.multiSelectAction=="forEach"?c.forEachSelection(b,a.args):b.multiSelectAction=="single"?(c.exitMultiSelectMode(),b.exec(c,a.args||{})):b.multiSelectAction(c,a.args||{}):(b.exec(c,a.args||{}),c.multiSelect.addRange(c.multiSelect.toOrientedRange()),c.multiSelect.mergeOverlappingRanges()),a.preventDefault()},this.forEachSelection=function(a,b){if(this.inVirtualSelectionMode)return;var c=this.session,d=this.selection,e=d.rangeList,g=d._eventRegistry;d._eventRegistry={};var h=new f(c);this.inVirtualSelectionMode=!0;for(var i=e.ranges.length;i--;)h.fromOrientedRange(e.ranges[i]),this.selection=c.selection=h,a.exec(this,b||{}),h.toOrientedRange(e.ranges[i]);h.detach(),this.selection=c.selection=d,this.inVirtualSelectionMode=!1,d._eventRegistry=g,d.mergeOverlappingRanges(),this.onCursorChange(),this.onSelectionChange()},this.exitMultiSelectMode=function(){if(this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getCopyText=function(){var a="";if(this.inMultiSelectMode){var b=this.multiSelect.rangeList.ranges;a=[];for(var c=0;cc.length){this.commands.exec("insertstring",this,a);return}for(var d=c.length;d--;){var e=c[d];e.isEmpty()||this.session.remove(e),this.session.insert(e.start,b[d])}},this.findAll=function(a,b,c){b=b||{},b.needle=a||b.needle,this.$search.set(b);var d=this.$search.findAll(this.session);if(!d.length)return 0;this.$blockScrolling+=1;var e=this.multiSelect;c||e.toSingleRange(d[0]);for(var f=d.length;f--;)e.addRange(d[f],!0);return this.$blockScrolling-=1,d.length},this.selectMoreLines=function(a,b){var c=this.selection.toOrientedRange(),d=c.cursor==c.end,f=this.session.documentToScreenPosition(c.cursor);this.selection.$desiredColumn&&(f.column=this.selection.$desiredColumn);var g=this.session.screenToDocumentPosition(f.row+a,f.column);if(!c.isEmpty())var h=this.session.documentToScreenPosition(d?c.end:c.start),i=this.session.screenToDocumentPosition(h.row+a,h.column);else var i=g;if(d){var j=e.fromPoints(g,i);j.cursor=j.start}else{var j=e.fromPoints(i,g);j.cursor=j.end}j.desiredColumn=f.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(c);else if(b)var k=c.cursor;this.selection.addRange(j),k&&this.selection.substractPoint(k)},this.transposeSelections=function(a){var b=this.session,c=b.multiSelect,d=c.ranges;for(var e=d.length;e--;){var f=d[e];if(f.isEmpty()){var g=b.getWordRange(f.start.row,f.start.column);f.start.row=g.start.row,f.start.column=g.start.column,f.end.row=g.end.row,f.end.column=g.end.column}}c.mergeOverlappingRanges();var h=[];for(var e=d.length;e--;){var f=d[e];h.unshift(b.getTextRange(f))}a<0?h.unshift(h.pop()):h.push(h.shift());for(var e=d.length;e--;){var f=d[e],g=f.clone();b.replace(f,h[e]),f.start.row=g.start.row,f.start.column=g.start.column}},this.selectMore=function(a,b){var c=this.session,d=c.multiSelect,e=d.toOrientedRange();if(e.isEmpty()){var e=c.getWordRange(e.start.row,e.start.column);e.cursor=e.end,this.multiSelect.addRange(e)}var f=c.getTextRange(e),g=k(c,f,a);g&&(g.cursor=a==-1?g.start:g.end,this.multiSelect.addRange(g)),b&&this.multiSelect.substractPoint(e.cursor)}}).call(m.prototype),b.onSessionChange=function(a){var b=a.session;b.multiSelect||(b.$selectionMarkers=[],b.selection.$initRangeList(),b.multiSelect=b.selection),this.multiSelect=b.multiSelect;var c=a.oldSession;c&&(c.multiSelect&&c.multiSelect.editor==this&&(c.multiSelect.editor=null),b.multiSelect.removeEventListener("addRange",this.$onAddRange),b.multiSelect.removeEventListener("removeRange",this.$onRemoveRange),b.multiSelect.removeEventListener("multiSelect",this.$onMultiSelect),b.multiSelect.removeEventListener("singleSelect",this.$onSingleSelect)),b.multiSelect.on("addRange",this.$onAddRange),b.multiSelect.on("removeRange",this.$onRemoveRange),b.multiSelect.on("multiSelect",this.$onMultiSelect),b.multiSelect.on("singleSelect",this.$onSingleSelect),this.inMultiSelectMode!=b.selection.inMultiSelectMode&&(b.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},b.MultiSelect=o}),define("ace/range_list",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.ranges=[]};(function(){this.comparePoints=function(a,b){return a.row-b.row||a.column-b.column},this.pointIndex=function(a,b){var c=this.ranges;for(var d=b||0;d0)continue;return f==0?d:(f=this.comparePoints(a,e.start),f>=0?d:-d-1)}return-d-1},this.add=function(a){var b=this.pointIndex(a.start);b<0&&(b=-b-1);var c=this.pointIndex(a.end,b);return c<0?c=-c-1:c++,this.ranges.splice(b,c-b,a)},this.addList=function(a){var b=[];for(var c=a.length;c--;)b.push.call(b,this.add(a[c]));return b},this.substractPoint=function(a){var b=this.pointIndex(a);if(b>=0)return this.ranges.splice(b,1)},this.merge=function(){var a=[],b=this.ranges,c=b[0],d;for(var e=1;e=0},this.containsPoint=function(a){return this.pointIndex(a)>=0},this.rangeAtPoint=function(a){var b=this.pointIndex(a);if(b>=0)return this.ranges[b]},this.clipRows=function(a,b){var c=this.ranges;if(c[0].start.row>b||c[c.length-1].start.rowe)break;l.start.row==e&&l.start.column>=c.column&&(l.start.column+=h,l.start.row+=g),l.end.row==e&&l.end.column>=c.column&&(l.end.column+=h,l.end.row+=g)}if(g!=0&&j=this.pos.column&&c.start.column<=this.pos.column+this.length+1){var f=c.start.column-this.pos.column;this.length+=e;if(!this.session.$fromUndo){if(b.action==="insertText")for(var g=this.others.length-1;g>=0;g--){var h=this.others[g],i={row:h.row,column:h.column+f};h.row===c.start.row&&c.start.column=0;g--){var h=this.others[g],i={row:h.row,column:h.column+f};h.row===c.start.row&&c.start.column=this.pos.column&&b.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",a)):(this.hideOtherMarkers(),this._emit("cursorLeave",a))},this.detach=function(){this.session.removeMarker(this.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.pos.detach();for(var a=0;a"},{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-",[f.getEndRule("start")])};d.inherits(h,g),b.c_cppHighlightRules=h}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-c_cpp-uncompressed-noconflict.js b/public/ace_editor/mode-c_cpp-uncompressed-noconflict.js new file mode 100644 index 0000000..6c8eb68 --- /dev/null +++ b/public/ace_editor/mode-c_cpp-uncompressed-noconflict.js @@ -0,0 +1,919 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Gastón Kleiman + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Gastón Kleiman + * + * 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 ***** */ + +ace.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 : "\\/\\/.*$" + }, + 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", // + 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-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-c_cpp-uncompressed.js b/public/ace_editor/mode-c_cpp-uncompressed.js new file mode 100644 index 0000000..a2bcc87 --- /dev/null +++ b/public/ace_editor/mode-c_cpp-uncompressed.js @@ -0,0 +1,919 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Gastón Kleiman + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Gastón Kleiman + * + * 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 : "\\/\\/.*$" + }, + 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", // + 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-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-c_cpp.js b/public/ace_editor/mode-c_cpp.js new file mode 100644 index 0000000..8c9aca5 --- /dev/null +++ b/public/ace_editor/mode-c_cpp.js @@ -0,0 +1 @@ +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:"\\/\\/.*$"},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-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-clojure-noconflict.js b/public/ace_editor/mode-clojure-noconflict.js new file mode 100644 index 0000000..75177a2 --- /dev/null +++ b/public/ace_editor/mode-clojure-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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* + - -> -> ->> ->> .. / < < <= <= = == > > >= >= 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}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-clojure-uncompressed-noconflict.js b/public/ace_editor/mode-clojure-uncompressed-noconflict.js new file mode 100644 index 0000000..70288d1 --- /dev/null +++ b/public/ace_editor/mode-clojure-uncompressed-noconflict.js @@ -0,0 +1,422 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Shlomo Zalman Heigh + * 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 ***** */ + +ace.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 + * Shlomo Zalman Heigh + * 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 ***** */ + +ace.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* + - -> -> ->> ->> .. / < < <= <= = ' + + '== > > >= >= 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; +}); diff --git a/public/ace_editor/mode-clojure-uncompressed.js b/public/ace_editor/mode-clojure-uncompressed.js new file mode 100644 index 0000000..cb00813 --- /dev/null +++ b/public/ace_editor/mode-clojure-uncompressed.js @@ -0,0 +1,422 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Shlomo Zalman Heigh + * 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 + * Shlomo Zalman Heigh + * 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* + - -> -> ->> ->> .. / < < <= <= = ' + + '== > > >= >= 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; +}); diff --git a/public/ace_editor/mode-clojure.js b/public/ace_editor/mode-clojure.js new file mode 100644 index 0000000..3afd767 --- /dev/null +++ b/public/ace_editor/mode-clojure.js @@ -0,0 +1 @@ +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* + - -> -> ->> ->> .. / < < <= <= = == > > >= >= 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}) \ No newline at end of file diff --git a/public/ace_editor/mode-coffee-noconflict.js b/public/ace_editor/mode-coffee-noconflict.js new file mode 100644 index 0000000..ec4963e --- /dev/null +++ b/public/ace_editor/mode-coffee-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-coffee-uncompressed-noconflict.js b/public/ace_editor/mode-coffee-uncompressed-noconflict.js new file mode 100644 index 0000000..fcb1d96 --- /dev/null +++ b/public/ace_editor/mode-coffee-uncompressed-noconflict.js @@ -0,0 +1,607 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-coffee-uncompressed.js b/public/ace_editor/mode-coffee-uncompressed.js new file mode 100644 index 0000000..1f925fd --- /dev/null +++ b/public/ace_editor/mode-coffee-uncompressed.js @@ -0,0 +1,607 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-coffee.js b/public/ace_editor/mode-coffee.js new file mode 100644 index 0000000..f8a9d63 --- /dev/null +++ b/public/ace_editor/mode-coffee.js @@ -0,0 +1 @@ +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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-coldfusion-noconflict.js b/public/ace_editor/mode-coldfusion-noconflict.js new file mode 100644 index 0000000..82b8c21 --- /dev/null +++ b/public/ace_editor/mode-coldfusion-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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}),ace.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))}}),ace.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=="g.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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?)/,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)}),ace.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(++bf){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)}),ace.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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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)}),ace.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}),ace.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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};d.inherits(g,f),b.CssHighlightRules=g}),ace.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:"style"},{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,"style","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}) \ No newline at end of file diff --git a/public/ace_editor/mode-coldfusion-uncompressed-noconflict.js b/public/ace_editor/mode-coldfusion-uncompressed-noconflict.js new file mode 100644 index 0000000..17c19ef --- /dev/null +++ b/public/ace_editor/mode-coldfusion-uncompressed-noconflict.js @@ -0,0 +1,2458 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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*)(?)/; + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 : "style" + }, { + 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, "style", "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; +}); diff --git a/public/ace_editor/mode-coldfusion-uncompressed.js b/public/ace_editor/mode-coldfusion-uncompressed.js new file mode 100644 index 0000000..29fb146 --- /dev/null +++ b/public/ace_editor/mode-coldfusion-uncompressed.js @@ -0,0 +1,2458 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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*)(?)/; + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "style" + }, { + 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, "style", "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; +}); diff --git a/public/ace_editor/mode-coldfusion.js b/public/ace_editor/mode-coldfusion.js new file mode 100644 index 0000000..bd52fd0 --- /dev/null +++ b/public/ace_editor/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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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=="g.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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?)/,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(++bf){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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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/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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};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:"style"},{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,"style","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}) \ No newline at end of file diff --git a/public/ace_editor/mode-csharp-noconflict.js b/public/ace_editor/mode-csharp-noconflict.js new file mode 100644 index 0000000..2f2ffc1 --- /dev/null +++ b/public/ace_editor/mode-csharp-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-csharp-uncompressed-noconflict.js b/public/ace_editor/mode-csharp-uncompressed-noconflict.js new file mode 100644 index 0000000..2e938f5 --- /dev/null +++ b/public/ace_editor/mode-csharp-uncompressed-noconflict.js @@ -0,0 +1,769 @@ +ace.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; +}); +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-csharp-uncompressed.js b/public/ace_editor/mode-csharp-uncompressed.js new file mode 100644 index 0000000..4bcdd07 --- /dev/null +++ b/public/ace_editor/mode-csharp-uncompressed.js @@ -0,0 +1,769 @@ +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-csharp.js b/public/ace_editor/mode-csharp.js new file mode 100644 index 0000000..8ab070f --- /dev/null +++ b/public/ace_editor/mode-csharp.js @@ -0,0 +1 @@ +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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-css-noconflict.js b/public/ace_editor/mode-css-noconflict.js new file mode 100644 index 0000000..8d496c5 --- /dev/null +++ b/public/ace_editor/mode-css-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};d.inherits(g,f),b.CssHighlightRules=g}),ace.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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-css-uncompressed-noconflict.js b/public/ace_editor/mode-css-uncompressed-noconflict.js new file mode 100644 index 0000000..6fd65df --- /dev/null +++ b/public/ace_editor/mode-css-uncompressed-noconflict.js @@ -0,0 +1,641 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-css-uncompressed.js b/public/ace_editor/mode-css-uncompressed.js new file mode 100644 index 0000000..edb013f --- /dev/null +++ b/public/ace_editor/mode-css-uncompressed.js @@ -0,0 +1,641 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-css.js b/public/ace_editor/mode-css.js new file mode 100644 index 0000000..16e4825 --- /dev/null +++ b/public/ace_editor/mode-css.js @@ -0,0 +1 @@ +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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};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/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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-golang-noconflict.js b/public/ace_editor/mode-golang-noconflict.js new file mode 100644 index 0000000..b52813e --- /dev/null +++ b/public/ace_editor/mode-golang-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/mode/golang",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/golang_highlight_rules","ace/mode/matching_brace_outdent"],function(a,b,c){var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./golang_highlight_rules").GolangHighlightRules,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.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 i=new Range(0,0,0,0);for(var h=c;h<=d;h++){var j=b.getLine(h),k=j.match(g);i.start.row=h,i.end.row=h,i.end.column=k[0].length,b.replace(i,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)}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}),ace.define("ace/mode/golang_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){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("true|else|false|break|case|return|goto|if|const|continue|struct|default|switch|for|func|import|package|chan|defer|fallthrough|go|interface|map|rangeselect|type|var".split("|")),b=e.arrayToMap("nit|true|false|iota".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},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:".+"}]}};d.inherits(h,g),b.GolangHighlightRules=h}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-golang-uncompressed-noconflict.js b/public/ace_editor/mode-golang-uncompressed-noconflict.js new file mode 100644 index 0000000..8cc2a62 --- /dev/null +++ b/public/ace_editor/mode-golang-uncompressed-noconflict.js @@ -0,0 +1,378 @@ +ace.define('ace/mode/golang', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/golang_highlight_rules', 'ace/mode/matching_brace_outdent'], function(require, exports, module) { + + var oop = require("../lib/oop"); + var TextMode = require("./text").Mode; + var Tokenizer = require("../tokenizer").Tokenizer; + var GolangHighlightRules = require("./golang_highlight_rules").GolangHighlightRules; + var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; + + var Mode = function() { + this.$tokenizer = new Tokenizer(new GolangHighlightRules().getRules()); + this.$outdent = new MatchingBraceOutdent(); + }; + 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, "//"); + } + }; + + 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; + } + } + + return indent; + };//end getNextLineIndent + + 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; +}); +ace.define('ace/mode/golang_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) { + 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 GolangHighlightRules = function() { + var keywords = lang.arrayToMap( + ("true|else|false|break|case|return|goto|if|const|" + + "continue|struct|default|switch|for|" + + "func|import|package|chan|defer|fallthrough|go|interface|map|range" + + "select|type|var").split("|") + ); + + var buildinConstants = lang.arrayToMap( + ("nit|true|false|iota").split("|") + ); + + this.$rules = { + "start" : [ + { + token : "comment", + regex : "\\/\\/.*$" + }, + 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", // + 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 : '.+' + } + ] + }; + } + oop.inherits(GolangHighlightRules, TextHighlightRules); + + exports.GolangHighlightRules = GolangHighlightRules; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; +}); diff --git a/public/ace_editor/mode-golang-uncompressed.js b/public/ace_editor/mode-golang-uncompressed.js new file mode 100644 index 0000000..ea70a39 --- /dev/null +++ b/public/ace_editor/mode-golang-uncompressed.js @@ -0,0 +1,378 @@ +define('ace/mode/golang', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/golang_highlight_rules', 'ace/mode/matching_brace_outdent'], function(require, exports, module) { + + var oop = require("../lib/oop"); + var TextMode = require("./text").Mode; + var Tokenizer = require("../tokenizer").Tokenizer; + var GolangHighlightRules = require("./golang_highlight_rules").GolangHighlightRules; + var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; + + var Mode = function() { + this.$tokenizer = new Tokenizer(new GolangHighlightRules().getRules()); + this.$outdent = new MatchingBraceOutdent(); + }; + 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, "//"); + } + }; + + 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; + } + } + + return indent; + };//end getNextLineIndent + + 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; +}); +define('ace/mode/golang_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) { + 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 GolangHighlightRules = function() { + var keywords = lang.arrayToMap( + ("true|else|false|break|case|return|goto|if|const|" + + "continue|struct|default|switch|for|" + + "func|import|package|chan|defer|fallthrough|go|interface|map|range" + + "select|type|var").split("|") + ); + + var buildinConstants = lang.arrayToMap( + ("nit|true|false|iota").split("|") + ); + + this.$rules = { + "start" : [ + { + token : "comment", + regex : "\\/\\/.*$" + }, + 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", // + 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 : '.+' + } + ] + }; + } + oop.inherits(GolangHighlightRules, TextHighlightRules); + + exports.GolangHighlightRules = GolangHighlightRules; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; +}); diff --git a/public/ace_editor/mode-golang.js b/public/ace_editor/mode-golang.js new file mode 100644 index 0000000..a2ead22 --- /dev/null +++ b/public/ace_editor/mode-golang.js @@ -0,0 +1 @@ +define("ace/mode/golang",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/golang_highlight_rules","ace/mode/matching_brace_outdent"],function(a,b,c){var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./golang_highlight_rules").GolangHighlightRules,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.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 i=new Range(0,0,0,0);for(var h=c;h<=d;h++){var j=b.getLine(h),k=j.match(g);i.start.row=h,i.end.row=h,i.end.column=k[0].length,b.replace(i,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)}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/golang_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){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("true|else|false|break|case|return|goto|if|const|continue|struct|default|switch|for|func|import|package|chan|defer|fallthrough|go|interface|map|rangeselect|type|var".split("|")),b=e.arrayToMap("nit|true|false|iota".split("|"));this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},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:".+"}]}};d.inherits(h,g),b.GolangHighlightRules=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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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}) \ No newline at end of file diff --git a/public/ace_editor/mode-groovy-noconflict.js b/public/ace_editor/mode-groovy-noconflict.js new file mode 100644 index 0000000..5439463 --- /dev/null +++ b/public/ace_editor/mode-groovy-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}),ace.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:"\\/\\/.*$"},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-",[f.getEndRule("start")])};d.inherits(h,g),b.GroovyHighlightRules=h}) \ No newline at end of file diff --git a/public/ace_editor/mode-groovy-uncompressed-noconflict.js b/public/ace_editor/mode-groovy-uncompressed-noconflict.js new file mode 100644 index 0000000..bb56d30 --- /dev/null +++ b/public/ace_editor/mode-groovy-uncompressed-noconflict.js @@ -0,0 +1,1393 @@ +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); +ace.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 : "\\/\\/.*$" + }, + 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-", + [ DocCommentHighlightRules.getEndRule("start") ]); +}; + +oop.inherits(GroovyHighlightRules, TextHighlightRules); + +exports.GroovyHighlightRules = GroovyHighlightRules; +}); diff --git a/public/ace_editor/mode-groovy-uncompressed.js b/public/ace_editor/mode-groovy-uncompressed.js new file mode 100644 index 0000000..09a5ee6 --- /dev/null +++ b/public/ace_editor/mode-groovy-uncompressed.js @@ -0,0 +1,1393 @@ +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "\\/\\/.*$" + }, + 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-", + [ DocCommentHighlightRules.getEndRule("start") ]); +}; + +oop.inherits(GroovyHighlightRules, TextHighlightRules); + +exports.GroovyHighlightRules = GroovyHighlightRules; +}); diff --git a/public/ace_editor/mode-groovy.js b/public/ace_editor/mode-groovy.js new file mode 100644 index 0000000..601da8b --- /dev/null +++ b/public/ace_editor/mode-groovy.js @@ -0,0 +1 @@ +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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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:"\\/\\/.*$"},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-",[f.getEndRule("start")])};d.inherits(h,g),b.GroovyHighlightRules=h}) \ No newline at end of file diff --git a/public/ace_editor/mode-haxe-noconflict.js b/public/ace_editor/mode-haxe-noconflict.js new file mode 100644 index 0000000..c764471 --- /dev/null +++ b/public/ace_editor/mode-haxe-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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:"\\/\\/.*$"},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-",[f.getEndRule("start")])};d.inherits(h,g),b.HaxeHighlightRules=h}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-haxe-uncompressed-noconflict.js b/public/ace_editor/mode-haxe-uncompressed-noconflict.js new file mode 100644 index 0000000..15a65d4 --- /dev/null +++ b/public/ace_editor/mode-haxe-uncompressed-noconflict.js @@ -0,0 +1,769 @@ +ace.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; +}); +ace.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 : "\\/\\/.*$" + }, + 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-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-haxe-uncompressed.js b/public/ace_editor/mode-haxe-uncompressed.js new file mode 100644 index 0000000..1763486 --- /dev/null +++ b/public/ace_editor/mode-haxe-uncompressed.js @@ -0,0 +1,769 @@ +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 : "\\/\\/.*$" + }, + 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-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-haxe.js b/public/ace_editor/mode-haxe.js new file mode 100644 index 0000000..327137d --- /dev/null +++ b/public/ace_editor/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:"\\/\\/.*$"},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-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-html-noconflict.js b/public/ace_editor/mode-html-noconflict.js new file mode 100644 index 0000000..445bbf1 --- /dev/null +++ b/public/ace_editor/mode-html-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}),ace.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}),ace.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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};d.inherits(g,f),b.CssHighlightRules=g}),ace.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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=s*script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=s*style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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,"style","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}),ace.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))}}),ace.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=="?)/,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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-html-uncompressed-noconflict.js b/public/ace_editor/mode-html-uncompressed-noconflict.js new file mode 100644 index 0000000..9e0ac85 --- /dev/null +++ b/public/ace_editor/mode-html-uncompressed-noconflict.js @@ -0,0 +1,2475 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", + regex : "<(?=\s*script\\b)", + next : "script" + }, { + token : "meta.tag", + regex : "<(?=\s*style\\b)", + next : "style" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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, "style", "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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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*)(?)/; + 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); + +}); diff --git a/public/ace_editor/mode-html-uncompressed.js b/public/ace_editor/mode-html-uncompressed.js new file mode 100644 index 0000000..a448a38 --- /dev/null +++ b/public/ace_editor/mode-html-uncompressed.js @@ -0,0 +1,2475 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", + regex : "<(?=\s*script\\b)", + next : "script" + }, { + token : "meta.tag", + regex : "<(?=\s*style\\b)", + next : "style" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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, "style", "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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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*)(?)/; + 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); + +}); diff --git a/public/ace_editor/mode-html.js b/public/ace_editor/mode-html.js new file mode 100644 index 0000000..835a95a --- /dev/null +++ b/public/ace_editor/mode-html.js @@ -0,0 +1 @@ +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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=s*script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=s*style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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,"style","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=="?)/,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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-java-noconflict.js b/public/ace_editor/mode-java-noconflict.js new file mode 100644 index 0000000..e43b76e --- /dev/null +++ b/public/ace_editor/mode-java-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}),ace.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:"\\/\\/.*$"},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-",[f.getEndRule("start")])};d.inherits(h,g),b.JavaHighlightRules=h}) \ No newline at end of file diff --git a/public/ace_editor/mode-java-uncompressed-noconflict.js b/public/ace_editor/mode-java-uncompressed-noconflict.js new file mode 100644 index 0000000..2359d78 --- /dev/null +++ b/public/ace_editor/mode-java-uncompressed-noconflict.js @@ -0,0 +1,1395 @@ +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); +ace.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 : "\\/\\/.*$" + }, + 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-", + [ DocCommentHighlightRules.getEndRule("start") ]); +}; + +oop.inherits(JavaHighlightRules, TextHighlightRules); + +exports.JavaHighlightRules = JavaHighlightRules; +}); diff --git a/public/ace_editor/mode-java-uncompressed.js b/public/ace_editor/mode-java-uncompressed.js new file mode 100644 index 0000000..30c27a9 --- /dev/null +++ b/public/ace_editor/mode-java-uncompressed.js @@ -0,0 +1,1395 @@ +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "\\/\\/.*$" + }, + 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-", + [ DocCommentHighlightRules.getEndRule("start") ]); +}; + +oop.inherits(JavaHighlightRules, TextHighlightRules); + +exports.JavaHighlightRules = JavaHighlightRules; +}); diff --git a/public/ace_editor/mode-java.js b/public/ace_editor/mode-java.js new file mode 100644 index 0000000..a47f678 --- /dev/null +++ b/public/ace_editor/mode-java.js @@ -0,0 +1 @@ +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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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:"\\/\\/.*$"},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-",[f.getEndRule("start")])};d.inherits(h,g),b.JavaHighlightRules=h}) \ No newline at end of file diff --git a/public/ace_editor/mode-javascript-noconflict.js b/public/ace_editor/mode-javascript-noconflict.js new file mode 100644 index 0000000..9040f78 --- /dev/null +++ b/public/ace_editor/mode-javascript-noconflict.js @@ -0,0 +1 @@ +ace.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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-javascript-uncompressed-noconflict.js b/public/ace_editor/mode-javascript-uncompressed-noconflict.js new file mode 100644 index 0000000..0645d3b --- /dev/null +++ b/public/ace_editor/mode-javascript-uncompressed-noconflict.js @@ -0,0 +1,1226 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-javascript-uncompressed.js b/public/ace_editor/mode-javascript-uncompressed.js new file mode 100644 index 0000000..9028abe --- /dev/null +++ b/public/ace_editor/mode-javascript-uncompressed.js @@ -0,0 +1,1226 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-javascript.js b/public/ace_editor/mode-javascript.js new file mode 100644 index 0000000..72adfdd --- /dev/null +++ b/public/ace_editor/mode-javascript.js @@ -0,0 +1 @@ +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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-json-noconflict.js b/public/ace_editor/mode-json-noconflict.js new file mode 100644 index 0000000..2a637a0 --- /dev/null +++ b/public/ace_editor/mode-json-noconflict.js @@ -0,0 +1 @@ +ace.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","ace/worker/worker_client"],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=a("../worker/worker_client").WorkerClient,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i,this.foldingRules=new j};d.inherits(l,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)},this.createWorker=function(a){var b=new k(["ace"],"worker-json.js","ace/mode/json_worker","JsonWorker");return b.attachToDocument(a.getDocument()),b.on("error",function(b){a.setAnnotations([b.data])}),b.on("ok",function(){a.clearAnnotations()}),b}}.call(l.prototype),b.Mode=l}),ace.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}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-json-uncompressed-noconflict.js b/public/ace_editor/mode-json-uncompressed-noconflict.js new file mode 100644 index 0000000..f4f7e71 --- /dev/null +++ b/public/ace_editor/mode-json-uncompressed-noconflict.js @@ -0,0 +1,701 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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', 'ace/worker/worker_client'], 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 WorkerClient = require("../worker/worker_client").WorkerClient; + +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); + }; + + this.createWorker = function(session) { + var worker = new WorkerClient(["ace"], "worker-json.js", "ace/mode/json_worker", "JsonWorker"); + worker.attachToDocument(session.getDocument()); + + worker.on("error", function(e) { + session.setAnnotations([e.data]); + }); + + worker.on("ok", 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-json-uncompressed.js b/public/ace_editor/mode-json-uncompressed.js new file mode 100644 index 0000000..829fa86 --- /dev/null +++ b/public/ace_editor/mode-json-uncompressed.js @@ -0,0 +1,701 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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', 'ace/worker/worker_client'], 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 WorkerClient = require("../worker/worker_client").WorkerClient; + +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); + }; + + this.createWorker = function(session) { + var worker = new WorkerClient(["ace"], "worker-json.js", "ace/mode/json_worker", "JsonWorker"); + worker.attachToDocument(session.getDocument()); + + worker.on("error", function(e) { + session.setAnnotations([e.data]); + }); + + worker.on("ok", 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-json.js b/public/ace_editor/mode-json.js new file mode 100644 index 0000000..05729db --- /dev/null +++ b/public/ace_editor/mode-json.js @@ -0,0 +1 @@ +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","ace/worker/worker_client"],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=a("../worker/worker_client").WorkerClient,l=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h,this.$behaviour=new i,this.foldingRules=new j};d.inherits(l,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)},this.createWorker=function(a){var b=new k(["ace"],"worker-json.js","ace/mode/json_worker","JsonWorker");return b.attachToDocument(a.getDocument()),b.on("error",function(b){a.setAnnotations([b.data])}),b.on("ok",function(){a.clearAnnotations()}),b}}.call(l.prototype),b.Mode=l}),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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-latex-noconflict.js b/public/ace_editor/mode-latex-noconflict.js new file mode 100644 index 0000000..748290a --- /dev/null +++ b/public/ace_editor/mode-latex-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-latex-uncompressed-noconflict.js b/public/ace_editor/mode-latex-uncompressed-noconflict.js new file mode 100644 index 0000000..105e1cd --- /dev/null +++ b/public/ace_editor/mode-latex-uncompressed-noconflict.js @@ -0,0 +1,95 @@ +ace.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; + +}); +ace.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; + +}); diff --git a/public/ace_editor/mode-latex-uncompressed.js b/public/ace_editor/mode-latex-uncompressed.js new file mode 100644 index 0000000..77c42ab --- /dev/null +++ b/public/ace_editor/mode-latex-uncompressed.js @@ -0,0 +1,95 @@ +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; + +}); diff --git a/public/ace_editor/mode-latex.js b/public/ace_editor/mode-latex.js new file mode 100644 index 0000000..e6cfb7c --- /dev/null +++ b/public/ace_editor/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}) \ No newline at end of file diff --git a/public/ace_editor/mode-less-noconflict.js b/public/ace_editor/mode-less-noconflict.js new file mode 100644 index 0000000..08d73b9 --- /dev/null +++ b/public/ace_editor/mode-less-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/mode/less",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/less_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("./less_highlight_rules").LessHighlightRules,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}),ace.define("ace/mode/less_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|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};d.inherits(g,f),b.LessHighlightRules=g}),ace.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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-less-uncompressed-noconflict.js b/public/ace_editor/mode-less-uncompressed-noconflict.js new file mode 100644 index 0000000..01baf0e --- /dev/null +++ b/public/ace_editor/mode-less-uncompressed-noconflict.js @@ -0,0 +1,655 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * John Roepke + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mode/less', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/less_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 LessHighlightRules = require("./less_highlight_rules").LessHighlightRules; +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; +var CStyleFoldMode = require("./folding/cstyle").FoldMode; + +var Mode = function() { + this.$tokenizer = new Tokenizer(new LessHighlightRules().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 + * John Roepke + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mode/less_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 LessHighlightRules = 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 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", // 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 : "constant.numeric", + regex : numRe + }, { + token : function(value) { + if (keywords.hasOwnProperty(value)) + return "keyword"; + else + return "variable"; + }, + regex : "@[a-z0-9_\\-@]*\\b" + }, { + token : function(value) { + if (properties.hasOwnProperty(value.toLowerCase())) + return "support.type"; + else 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.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 : ".+" + } + ] + }; +}; + +oop.inherits(LessHighlightRules, TextHighlightRules); + +exports.LessHighlightRules = LessHighlightRules; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-less-uncompressed.js b/public/ace_editor/mode-less-uncompressed.js new file mode 100644 index 0000000..dbec8c2 --- /dev/null +++ b/public/ace_editor/mode-less-uncompressed.js @@ -0,0 +1,655 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * John Roepke + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/less', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/less_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 LessHighlightRules = require("./less_highlight_rules").LessHighlightRules; +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; +var CStyleFoldMode = require("./folding/cstyle").FoldMode; + +var Mode = function() { + this.$tokenizer = new Tokenizer(new LessHighlightRules().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 + * John Roepke + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/less_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 LessHighlightRules = 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 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", // 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 : "constant.numeric", + regex : numRe + }, { + token : function(value) { + if (keywords.hasOwnProperty(value)) + return "keyword"; + else + return "variable"; + }, + regex : "@[a-z0-9_\\-@]*\\b" + }, { + token : function(value) { + if (properties.hasOwnProperty(value.toLowerCase())) + return "support.type"; + else 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.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 : ".+" + } + ] + }; +}; + +oop.inherits(LessHighlightRules, TextHighlightRules); + +exports.LessHighlightRules = LessHighlightRules; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-less.js b/public/ace_editor/mode-less.js new file mode 100644 index 0000000..8ecd9aa --- /dev/null +++ b/public/ace_editor/mode-less.js @@ -0,0 +1 @@ +define("ace/mode/less",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/less_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("./less_highlight_rules").LessHighlightRules,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/less_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|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}]}};d.inherits(g,f),b.LessHighlightRules=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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-liquid-noconflict.js b/public/ace_editor/mode-liquid-noconflict.js new file mode 100644 index 0000000..6dbdde0 --- /dev/null +++ b/public/ace_editor/mode-liquid-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/mode/liquid",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/liquid_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(a,b,c){var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./liquid_highlight_rules").LiquidHighlightRules,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=[],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}),ace.define("ace/mode/liquid_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/lib/lang","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("../lib/lang"),h=a("./xml_util"),i=a("./text_highlight_rules").TextHighlightRules,j=function(){var a=g.arrayToMap("date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split".split("|")),b=g.arrayToMap("capture|endcapture|case|endcase|when|comment|endcomment|cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow".split("|")),c=g.arrayToMap(["forloop"]),d=g.arrayToMap("assign".split("|"));this.$rules={start:[{token:"variable",regex:"{%",next:"liquid_start"},{token:"variable",regex:"{{",next:"liquid_start"},{token:"meta.tag",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:"style"},{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:".+"}],liquid_start:[{token:"variable",regex:"}}",next:"start"},{token:"variable",regex:"%}",next:"start"},{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 a.hasOwnProperty(e)?"support.function":b.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"variable.language":d.hasOwnProperty(e)?"keyword.definition":"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+"}]},h.tag(this.$rules,"tag","start"),h.tag(this.$rules,"style","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(j,i),b.LiquidHighlightRules=j}),ace.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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};d.inherits(g,f),b.CssHighlightRules=g}),ace.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",l="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},g.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\.)(prototype)(\\.)("+k+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator","text"],regex:"("+k+")(\\.)(prototype)(\\.)("+k+")(\\s*)(=)(\\s*)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\.)("+k+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+k+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"storage.type":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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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))}}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-liquid-uncompressed-noconflict.js b/public/ace_editor/mode-liquid-uncompressed-noconflict.js new file mode 100644 index 0000000..6b74f1f --- /dev/null +++ b/public/ace_editor/mode-liquid-uncompressed-noconflict.js @@ -0,0 +1,1353 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mode/liquid', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/liquid_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range'], function(require, exports, module) { + +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var Tokenizer = require("../tokenizer").Tokenizer; +var LiquidHighlightRules = require("./liquid_highlight_rules").LiquidHighlightRules; +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; +var Range = require("../range").Range; + +var Mode = function() { + this.$tokenizer = new Tokenizer(new LiquidHighlightRules().getRules()); + this.$outdent = new MatchingBraceOutdent(); +}; +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, "#"); + } + }; + + 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; + } + } + + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mode/liquid_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/css_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/lib/lang', '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 lang = require("../lib/lang"); +var xmlUtil = require("./xml_util"); +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; + +var LiquidHighlightRules = function() { + + // see: https://developer.mozilla.org/en/Liquid/Reference/Global_Objects + var functions = lang.arrayToMap( + // Standard Filters + ("date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|" + + "escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|" + + "truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split" + ).split("|") + ); + + var keywords = lang.arrayToMap( + // Standard Tags + ("capture|endcapture|case|endcase|when|comment|endcomment|" + + "cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|" + + // Commonly used tags + "style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow").split("|") + ); + + var builtinVariables = lang.arrayToMap( + ['forloop'] + // ("forloop\\.(length|index|index0|rindex|rindex0|first|last)|limit|offset|range" + + // "tablerowloop\\.(length|index|index0|rindex|rindex0|first|last|col|col0|"+ + // "col_first|col_last)").split("|") + ); + + var definitions = lang.arrayToMap(("assign").split("|")); + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + start : [{ + token : "variable", + regex : "{%", + next : "liquid_start" + }, { + token : "variable", + regex : "{{", + next : "liquid_start" + }, { + token : "meta.tag", + 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 : "style" + }, { + 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 : ".+" + } ] , + + liquid_start : [{ + token: "variable", + regex: "}}", + next: "start" + }, { + token: "variable", + regex: "%}", + next: "start" + }, { + 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 (functions.hasOwnProperty(value)) + return "support.function"; + else if (keywords.hasOwnProperty(value)) + return "keyword"; + else if (builtinVariables.hasOwnProperty(value)) + return "variable.language"; + else if (definitions.hasOwnProperty(value)) + return "keyword.definition"; + 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+" + }] + }; + + xmlUtil.tag(this.$rules, "tag", "start"); + xmlUtil.tag(this.$rules, "style", "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(LiquidHighlightRules, TextHighlightRules); + +exports.LiquidHighlightRules = LiquidHighlightRules; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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)); +}; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; +}); diff --git a/public/ace_editor/mode-liquid-uncompressed.js b/public/ace_editor/mode-liquid-uncompressed.js new file mode 100644 index 0000000..0f98b73 --- /dev/null +++ b/public/ace_editor/mode-liquid-uncompressed.js @@ -0,0 +1,1353 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/liquid', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/liquid_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/range'], function(require, exports, module) { + +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var Tokenizer = require("../tokenizer").Tokenizer; +var LiquidHighlightRules = require("./liquid_highlight_rules").LiquidHighlightRules; +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; +var Range = require("../range").Range; + +var Mode = function() { + this.$tokenizer = new Tokenizer(new LiquidHighlightRules().getRules()); + this.$outdent = new MatchingBraceOutdent(); +}; +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, "#"); + } + }; + + 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; + } + } + + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/liquid_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/css_highlight_rules', 'ace/mode/javascript_highlight_rules', 'ace/lib/lang', '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 lang = require("../lib/lang"); +var xmlUtil = require("./xml_util"); +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; + +var LiquidHighlightRules = function() { + + // see: https://developer.mozilla.org/en/Liquid/Reference/Global_Objects + var functions = lang.arrayToMap( + // Standard Filters + ("date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|" + + "escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|" + + "truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split" + ).split("|") + ); + + var keywords = lang.arrayToMap( + // Standard Tags + ("capture|endcapture|case|endcase|when|comment|endcomment|" + + "cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|" + + // Commonly used tags + "style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow").split("|") + ); + + var builtinVariables = lang.arrayToMap( + ['forloop'] + // ("forloop\\.(length|index|index0|rindex|rindex0|first|last)|limit|offset|range" + + // "tablerowloop\\.(length|index|index0|rindex|rindex0|first|last|col|col0|"+ + // "col_first|col_last)").split("|") + ); + + var definitions = lang.arrayToMap(("assign").split("|")); + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + start : [{ + token : "variable", + regex : "{%", + next : "liquid_start" + }, { + token : "variable", + regex : "{{", + next : "liquid_start" + }, { + token : "meta.tag", + 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 : "style" + }, { + 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 : ".+" + } ] , + + liquid_start : [{ + token: "variable", + regex: "}}", + next: "start" + }, { + token: "variable", + regex: "%}", + next: "start" + }, { + 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 (functions.hasOwnProperty(value)) + return "support.function"; + else if (keywords.hasOwnProperty(value)) + return "keyword"; + else if (builtinVariables.hasOwnProperty(value)) + return "variable.language"; + else if (definitions.hasOwnProperty(value)) + return "keyword.definition"; + 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+" + }] + }; + + xmlUtil.tag(this.$rules, "tag", "start"); + xmlUtil.tag(this.$rules, "style", "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(LiquidHighlightRules, TextHighlightRules); + +exports.LiquidHighlightRules = LiquidHighlightRules; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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)); +}; + +}); +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; +}); diff --git a/public/ace_editor/mode-liquid.js b/public/ace_editor/mode-liquid.js new file mode 100644 index 0000000..7615c77 --- /dev/null +++ b/public/ace_editor/mode-liquid.js @@ -0,0 +1 @@ +define("ace/mode/liquid",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/liquid_highlight_rules","ace/mode/matching_brace_outdent","ace/range"],function(a,b,c){var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./liquid_highlight_rules").LiquidHighlightRules,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=[],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/liquid_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/lib/lang","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("../lib/lang"),h=a("./xml_util"),i=a("./text_highlight_rules").TextHighlightRules,j=function(){var a=g.arrayToMap("date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split".split("|")),b=g.arrayToMap("capture|endcapture|case|endcase|when|comment|endcomment|cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow".split("|")),c=g.arrayToMap(["forloop"]),d=g.arrayToMap("assign".split("|"));this.$rules={start:[{token:"variable",regex:"{%",next:"liquid_start"},{token:"variable",regex:"{{",next:"liquid_start"},{token:"meta.tag",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:"style"},{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:".+"}],liquid_start:[{token:"variable",regex:"}}",next:"start"},{token:"variable",regex:"%}",next:"start"},{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 a.hasOwnProperty(e)?"support.function":b.hasOwnProperty(e)?"keyword":c.hasOwnProperty(e)?"variable.language":d.hasOwnProperty(e)?"keyword.definition":"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+"}]},h.tag(this.$rules,"tag","start"),h.tag(this.$rules,"style","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(j,i),b.LiquidHighlightRules=j}),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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};d.inherits(g,f),b.CssHighlightRules=g}),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",l="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)";this.$rules={start:[{token:"comment",regex:/\/\/.*$/},g.getStartRule("doc-start"),{token:"comment",merge:!0,regex:/\/\*/,next:"comment"},{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0[xX][0-9a-fA-F]+\b/},{token:"constant.numeric",regex:/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\.)(prototype)(\\.)("+k+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator","text"],regex:"("+k+")(\\.)(prototype)(\\.)("+k+")(\\s*)(=)(\\s*)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\.)("+k+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+k+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+k+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"constant.language.boolean",regex:/(?:true|false)\b/},{token:"keyword",regex:"(?:"+c+")\\b",next:"regex_allowed"},{token:["punctuation.operator","support.function"],regex:/(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:["punctuation.operator","support.function.dom"],regex:/(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:["punctuation.operator","support.constant"],regex:/(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/},{token:function(c){return a.hasOwnProperty(c)?"variable.language":d.hasOwnProperty(c)?"invalid.deprecated":h.hasOwnProperty(c)?"storage.type":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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),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/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}) \ No newline at end of file diff --git a/public/ace_editor/mode-lua-noconflict.js b/public/ace_editor/mode-lua-noconflict.js new file mode 100644 index 0000000..e3f29f8 --- /dev/null +++ b/public/ace_editor/mode-lua-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-lua-uncompressed-noconflict.js b/public/ace_editor/mode-lua-uncompressed-noconflict.js new file mode 100644 index 0000000..20af5b5 --- /dev/null +++ b/public/ace_editor/mode-lua-uncompressed-noconflict.js @@ -0,0 +1,523 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: MPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Mozilla Public License Version +* 1.1 (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* http://www.mozilla.org/MPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF 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 +* Colin Gourlay +* 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 ***** */ + +ace.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 +* Colin Gourlay +* 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 ***** */ + +ace.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; +}); diff --git a/public/ace_editor/mode-lua-uncompressed.js b/public/ace_editor/mode-lua-uncompressed.js new file mode 100644 index 0000000..9392524 --- /dev/null +++ b/public/ace_editor/mode-lua-uncompressed.js @@ -0,0 +1,523 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: MPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Mozilla Public License Version +* 1.1 (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* http://www.mozilla.org/MPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF 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 +* Colin Gourlay +* 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 +* Colin Gourlay +* 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; +}); diff --git a/public/ace_editor/mode-lua.js b/public/ace_editor/mode-lua.js new file mode 100644 index 0000000..8f7471e --- /dev/null +++ b/public/ace_editor/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}) \ No newline at end of file diff --git a/public/ace_editor/mode-markdown-noconflict.js b/public/ace_editor/mode-markdown-noconflict.js new file mode 100644 index 0000000..3b8ae4b --- /dev/null +++ b/public/ace_editor/mode-markdown-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}),ace.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}),ace.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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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}),ace.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))}}),ace.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=="?)/,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)}),ace.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}),ace.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}),ace.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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};d.inherits(g,f),b.CssHighlightRules=g}),ace.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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=s*script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=s*style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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,"style","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}),ace.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)}),ace.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)}),ace.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","support.function","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]*)(?)((?:[ ]*"(?:.*?)"[ \\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","string","string"],regex:"([*]{2}|[_]{2}(?=\\S))([^\\r]*?\\S[*_]*)(\\1)"},{token:["string","string","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}) \ No newline at end of file diff --git a/public/ace_editor/mode-markdown-uncompressed-noconflict.js b/public/ace_editor/mode-markdown-uncompressed-noconflict.js new file mode 100644 index 0000000..1f67281 --- /dev/null +++ b/public/ace_editor/mode-markdown-uncompressed-noconflict.js @@ -0,0 +1,2925 @@ +/* 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 + * Mihai Sucan + * Chris Spencer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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*)(?)/; + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", + regex : "<(?=\s*script\\b)", + next : "script" + }, { + token : "meta.tag", + regex : "<(?=\s*style\\b)", + next : "style" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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, "style", "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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Chris Spencer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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", "support.function", "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]*)"+ + "(?)"+ + "((?:[ \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", "string", "string"], + regex : "([*]{2}|[_]{2}(?=\\S))([^\\r]*?\\S[*_]*)(\\1)" + }, { // emphasis * _ + token : ["string", "string", "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; +}); diff --git a/public/ace_editor/mode-markdown-uncompressed.js b/public/ace_editor/mode-markdown-uncompressed.js new file mode 100644 index 0000000..e305f39 --- /dev/null +++ b/public/ace_editor/mode-markdown-uncompressed.js @@ -0,0 +1,2925 @@ +/* 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 + * Mihai Sucan + * Chris Spencer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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*)(?)/; + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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( + ("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index").split("|") + ); + + var functions = lang.arrayToMap( + ("rgb|rgba|url|attr|counter|counters").split("|") + ); + + var constants = lang.arrayToMap( + ("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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 fonts = lang.arrayToMap( + ("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|" + + "symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|" + + "serif|monospace").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 pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; + var pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; + + 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", "keyword"], + regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" + }, { + token : ["constant.numeric"], + regex : "([0-9]+)" + }, { + token : "constant.numeric", // hex6 color + regex : "#[a-f0-9]{6}" + }, { + token : "constant.numeric", // hex3 color + regex : "#[a-f0-9]{3}" + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], + regex : pseudoElements + }, { + token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], + regex : pseudoClasses + }, { + 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 if (fonts.hasOwnProperty(value.toLowerCase())) { + return "support.constant.fonts"; + } + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", + regex : "<(?=\s*script\\b)", + next : "script" + }, { + token : "meta.tag", + regex : "<(?=\s*style\\b)", + next : "style" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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, "style", "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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Chris Spencer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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", "support.function", "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]*)"+ + "(?)"+ + "((?:[ \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", "string", "string"], + regex : "([*]{2}|[_]{2}(?=\\S))([^\\r]*?\\S[*_]*)(\\1)" + }, { // emphasis * _ + token : ["string", "string", "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; +}); diff --git a/public/ace_editor/mode-markdown.js b/public/ace_editor/mode-markdown.js new file mode 100644 index 0000000..54475d2 --- /dev/null +++ b/public/ace_editor/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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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=="?)/,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("animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index".split("|")),b=e.arrayToMap("rgb|rgba|url|attr|counter|counters".split("|")),c=e.arrayToMap("absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|font-size|font|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|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("arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace".split("|")),g="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",i="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",j=[{token:"comment",merge:!0,regex:"\\/\\*",next:"ruleset_comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+g+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:["constant.numeric"],regex:"([0-9]+)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:i},{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":f.hasOwnProperty(e.toLowerCase())?"support.constant.fonts":"text"},regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"}],k=e.copyArray(j);k.unshift({token:"paren.rparen",regex:"\\}",next:"start"});var l=e.copyArray(j);l.unshift({token:"paren.rparen",regex:"\\}",next:"media"});var m=[{token:"comment",merge:!0,regex:".+"}],n=e.copyArray(m);n.unshift({token:"comment",regex:".*?\\*\\/",next:"start"});var o=e.copyArray(m);o.unshift({token:"comment",regex:".*?\\*\\/",next:"media"});var p=e.copyArray(m);p.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:n,ruleset:k,ruleset_comment:p,media_ruleset:l,media_comment:o}};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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<(?=s*script\\b)",next:"script"},{token:"meta.tag",regex:"<(?=s*style\\b)",next:"style"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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,"style","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","support.function","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]*)(?)((?:[ ]*"(?:.*?)"[ \\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","string","string"],regex:"([*]{2}|[_]{2}(?=\\S))([^\\r]*?\\S[*_]*)(\\1)"},{token:["string","string","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}) \ No newline at end of file diff --git a/public/ace_editor/mode-ocaml-noconflict.js b/public/ace_editor/mode-ocaml-noconflict.js new file mode 100644 index 0000000..ec2c04f --- /dev/null +++ b/public/ace_editor/mode-ocaml-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-ocaml-uncompressed-noconflict.js b/public/ace_editor/mode-ocaml-uncompressed-noconflict.js new file mode 100644 index 0000000..e0fcbab --- /dev/null +++ b/public/ace_editor/mode-ocaml-uncompressed-noconflict.js @@ -0,0 +1,539 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** + * + */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; +}); diff --git a/public/ace_editor/mode-ocaml-uncompressed.js b/public/ace_editor/mode-ocaml-uncompressed.js new file mode 100644 index 0000000..c268a4f --- /dev/null +++ b/public/ace_editor/mode-ocaml-uncompressed.js @@ -0,0 +1,539 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; +}); diff --git a/public/ace_editor/mode-ocaml.js b/public/ace_editor/mode-ocaml.js new file mode 100644 index 0000000..622f817 --- /dev/null +++ b/public/ace_editor/mode-ocaml.js @@ -0,0 +1 @@ +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}) \ No newline at end of file diff --git a/public/ace_editor/mode-perl-noconflict.js b/public/ace_editor/mode-perl-noconflict.js new file mode 100644 index 0000000..9a72881 --- /dev/null +++ b/public/ace_editor/mode-perl-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-perl-uncompressed-noconflict.js b/public/ace_editor/mode-perl-uncompressed-noconflict.js new file mode 100644 index 0000000..84266ab --- /dev/null +++ b/public/ace_editor/mode-perl-uncompressed-noconflict.js @@ -0,0 +1,574 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-perl-uncompressed.js b/public/ace_editor/mode-perl-uncompressed.js new file mode 100644 index 0000000..ff6f8dd --- /dev/null +++ b/public/ace_editor/mode-perl-uncompressed.js @@ -0,0 +1,574 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-perl.js b/public/ace_editor/mode-perl.js new file mode 100644 index 0000000..9097814 --- /dev/null +++ b/public/ace_editor/mode-perl.js @@ -0,0 +1 @@ +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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-pgsql-noconflict.js b/public/ace_editor/mode-pgsql-noconflict.js new file mode 100644 index 0000000..cd2e94a --- /dev/null +++ b/public/ace_editor/mode-pgsql-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/mode/pgsql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/pgsql_highlight_rules","ace/range"],function(a,b,c){var d=a("ace/lib/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/pgsql_highlight_rules").PgsqlHighlightRules,h=a("ace/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 a=="start"||a=="keyword.statementEnd"?"":this.$getIndent(b)}}.call(i.prototype),b.Mode=i}),ace.define("ace/mode/pgsql_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/perl_highlight_rules","ace/mode/python_highlight_rules"],function(a,b,c){var d=a("ace/lib/oop"),e=a("ace/lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=a("./perl_highlight_rules").PerlHighlightRules,i=a("./python_highlight_rules").PythonHighlightRules,j=function(){var a=e.arrayToMap("abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|array|as|asc|assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|create|cross|cstring|csv|current|current_catalog|current_date|current_role|current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|date|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|int4|int8|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|key|label|language|language_handler|large|last|lc_collate|lc_ctype|leading|least|left|level|like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|match|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|procedural|procedure|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|references|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|simple|smallint|smgr|some|stable|standalone|start|statement|statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsvector|txid_snapshot|type|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone".split("|")),b=e.arrayToMap("RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_send|array_smaller|array_to_string|array_upper|arraycontained|arraycontains|arrayoverlap|ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|btfloat84cmp|btfloat8cmp|btgetbitmap|btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint42cmp|btint48cmp|btint4cmp|btint82cmp|btint84cmp|btint8cmp|btmarkpos|btnamecmp|btoidcmp|btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|date_trunc|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|dsynonym_lexize|dtrunc|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|euc_tw_to_utf8|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|has_function_privilege|has_language_privilege|has_schema_privilege|has_sequence_privilege|has_server_privilege|has_table_privilege|has_tablespace_privilege|hash_aclitem|hash_array|hash_numeric|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4recv|int4send|int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isfinite|ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|justify_days|justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|lo_open|lo_tell|lo_truncate|lo_unlink|log|loread|lower|lowrite|lpad|lseg|lseg_center|lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|pg_available_extension_versions|pg_available_extensions|pg_backend_pid|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_is_visible|pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_indexes_size|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|pg_stat_get_buf_written_backend|pg_stat_get_db_blocks_fetched|pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|pg_stat_get_db_conflict_tablespace|pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|pg_stat_get_db_tuples_deleted|pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|pg_stat_get_function_calls|pg_stat_get_function_self_time|pg_stat_get_function_time|pg_stat_get_last_analyze_time|pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_time|pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|pg_tablespace_databases|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|pg_try_advisory_lock|pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|rank|record_eq|record_ge|record_gt|record_in|record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|rpad|rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|smgrout|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|time_smaller|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsvector_cmp|tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|upper|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|varbit_recv|varbit_send|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|varbitlt|varbitne|varbittypmodin|varbittypmodout|varcharin|varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists".split("|")),c=[{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"variable.language",regex:'".*?"'},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:function(c){return c=c.toLowerCase(),a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"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+"}];this.$rules={start:[{token:"comment",regex:"--.*$"},f.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"keyword.statementBegin",regex:"^[a-zA-Z]+",next:"statement"},{token:"support.buildin",regex:"^\\\\[\\S]+.*$"}],statement:[{token:"comment",regex:"--.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"commentStatement"},{token:"statementEnd",regex:";",next:"start"},{token:"string",regex:"\\$perl\\$",next:"perl-start"},{token:"string",regex:"\\$python\\$",next:"python-start"},{token:"string",regex:"\\$[\\w_0-9]*\\$$",next:"dollarSql"},{token:"string",regex:"\\$[\\w_0-9]*\\$",next:"dollarStatementString"}].concat(c),dollarSql:[{token:"comment",regex:"--.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"commentDollarSql"},{token:"string",regex:"^\\$[\\w_0-9]*\\$",next:"statement"},{token:"string",regex:"\\$[\\w_0-9]*\\$",next:"dollarSqlString"}].concat(c),comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],commentStatement:[{token:"comment",regex:".*?\\*\\/",next:"statement"},{token:"comment",merge:!0,regex:".+"}],commentDollarSql:[{token:"comment",regex:".*?\\*\\/",next:"dollarSql"},{token:"comment",merge:!0,regex:".+"}],dollarStatementString:[{token:"string",regex:".*?\\$[\\w_0-9]*\\$",next:"statement"},{token:"string",merge:!0,regex:".+"}],dollarSqlString:[{token:"string",regex:".*?\\$[\\w_0-9]*\\$",next:"dollarSql"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[f.getEndRule("start")]),this.embedRules(h,"perl-",[{token:"string",regex:"\\$perl\\$",next:"statement"}]),this.embedRules(i,"python-",[{token:"string",regex:"\\$python\\$",next:"statement"}])};d.inherits(j,g),b.PgsqlHighlightRules=j}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-pgsql-uncompressed-noconflict.js b/public/ace_editor/mode-pgsql-uncompressed-noconflict.js new file mode 100644 index 0000000..27950e6 --- /dev/null +++ b/public/ace_editor/mode-pgsql-uncompressed-noconflict.js @@ -0,0 +1,1104 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* The Original Code is Ajax.org Code Editor (ACE). +* +* Contributor(s): +* Jonathan Camile +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may use your version of this file under +* the terms of any one of the MPL, the GPL or the LGPL. +* +* ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mode/pgsql', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/pgsql_highlight_rules', 'ace/range'], function(require, exports, module) { + + var oop = require("ace/lib/oop"); + var TextMode = require("ace/mode/text").Mode; + var Tokenizer = require("ace/tokenizer").Tokenizer; + var PgsqlHighlightRules = require("ace/mode/pgsql_highlight_rules").PgsqlHighlightRules; + var Range = require("ace/range").Range; + // var EditSession = require("ace/edit_session").EditSession; + + var Mode = function() { + this.$tokenizer = new Tokenizer(new PgsqlHighlightRules().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, "--"); + } + }; + + + this.getNextLineIndent = function(state, line, tab) { + if (state == "start" || state == "keyword.statementEnd") { + return ""; + } else { + return this.$getIndent(line); // Keep whatever indent the previous line has + } + } + + }).call(Mode.prototype); + + exports.Mode = Mode; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * The Original Code is Ajax.org Code Editor (ACE). + * + * Contributor(s): + * John DeSoi, Ph.D. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** + * + */ + + +ace.define('ace/mode/pgsql_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules', 'ace/mode/perl_highlight_rules', 'ace/mode/python_highlight_rules'], function(require, exports, module) { + +var oop = require("ace/lib/oop"); +var lang = require("ace/lib/lang"); +var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; +// Supporting perl and python for now -- both in pg core and ace +var PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules; +var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules; + +var PgsqlHighlightRules = function() { + + // Keywords, functions, operators last updated for pg 9.1. + var keywords = lang.arrayToMap( + ("abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|" + + "analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|array|as|asc|assertion|" + + "assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|" + + "binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|" + + "catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|" + + "cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|" + + "configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|" + + "create|cross|cstring|csv|current|current_catalog|current_date|current_role|" + + "current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|" + + "date|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|" + + "delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|" + + "drop|each|else|enable|encoding|encrypted|end|enum|escape|except|exclude|excluding|exclusive|" + + "execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|" + + "float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|" + + "global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|" + + "ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|" + + "inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|" + + "int4|int8|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|key|label|" + + "language|language_handler|large|last|lc_collate|lc_ctype|leading|least|left|level|like|" + + "limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|" + + "match|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|" + + "none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|object|of|off|offset|oid|oids|" + + "oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|" + + "owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|" + + "pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|" + + "position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|" + + "procedural|procedure|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|" + + "references|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|" + + "regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|" + + "restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|" + + "search|second|security|select|sequence|sequences|serializable|server|session|session_user|" + + "set|setof|share|show|similar|simple|smallint|smgr|some|stable|standalone|start|statement|" + + "statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|" + + "tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|" + + "tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsvector|" + + "txid_snapshot|type|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|" + + "unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|" + + "varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|" + + "with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|" + + "xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone").split("|") + ); + + + var builtinFunctions = lang.arrayToMap( + ("RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|" + + "RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|" + + "RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|" + + "RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|" + + "abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|aclexplode|aclinsert|" + + "aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|" + + "anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|" + + "anynonarray_in|anynonarray_out|anytextcat|area|areajoinsel|areasel|array_agg|" + + "array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|" + + "array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|" + + "array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_send|" + + "array_smaller|array_to_string|array_upper|arraycontained|arraycontains|arrayoverlap|" + + "ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|" + + "big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|" + + "bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|" + + "bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|" + + "boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|" + + "box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|" + + "box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|" + + "box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|" + + "box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|" + + "bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|" + + "bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|" + + "bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|" + + "bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|" + + "bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|" + + "btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcharcmp|btcostestimate|" + + "btendscan|btfloat48cmp|btfloat4cmp|btfloat84cmp|btfloat8cmp|btgetbitmap|btgettuple|" + + "btinsert|btint24cmp|btint28cmp|btint2cmp|btint42cmp|btint48cmp|btint4cmp|btint82cmp|" + + "btint84cmp|btint8cmp|btmarkpos|btnamecmp|btoidcmp|btoidvectorcmp|btoptions|btrecordcmp|" + + "btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|" + + "bttintervalcmp|btvacuumcleanup|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|" + + "bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|" + + "cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|" + + "cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|" + + "cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|" + + "center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|" + + "charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|" + + "cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|" + + "circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|" + + "circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|" + + "circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|" + + "circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|" + + "clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|" + + "close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|" + + "convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|" + + "cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|" + + "current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|" + + "cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|" + + "database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|" + + "date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|" + + "date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|" + + "date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|" + + "date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|" + + "date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|" + + "date_trunc|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|" + + "diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|" + + "dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|" + + "dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|" + + "dsynonym_lexize|dtrunc|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|" + + "enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|" + + "enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|" + + "euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|" + + "euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|" + + "euc_tw_to_utf8|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|" + + "float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|" + + "float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|" + + "float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|" + + "float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|" + + "float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|" + + "float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|" + + "float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|" + + "float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|" + + "float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|" + + "float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|" + + "float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|" + + "flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|" + + "fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|" + + "generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|" + + "getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|" + + "gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|" + + "ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|" + + "gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|" + + "ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|" + + "gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|" + + "gist_circle_compress|gist_circle_consistent|gist_point_compress|" + + "gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|" + + "gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|" + + "gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|" + + "gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|" + + "gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|" + + "gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|" + + "gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|" + + "has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|" + + "has_function_privilege|has_language_privilege|has_schema_privilege|" + + "has_sequence_privilege|has_server_privilege|has_table_privilege|" + + "has_tablespace_privilege|hash_aclitem|hash_array|hash_numeric|hashbeginscan|" + + "hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|" + + "hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|" + + "hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|" + + "hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|" + + "hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|" + + "icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|" + + "inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|" + + "inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|" + + "int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|" + + "int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|" + + "int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|" + + "int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|" + + "int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|" + + "int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|" + + "int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|" + + "int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|" + + "int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|" + + "int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4recv|int4send|" + + "int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|" + + "int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|" + + "int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|" + + "int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|" + + "int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|" + + "int8or|int8out|int8pl|int8pl_inet|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|" + + "int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|" + + "interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|" + + "interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|" + + "interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|" + + "interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|" + + "interval_recv|interval_send|interval_smaller|interval_um|intervaltypmodin|" + + "intervaltypmodout|intinterval|isclosed|isfinite|ishorizontal|iso8859_1_to_utf8|" + + "iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|" + + "isperp|isvertical|johab_to_utf8|justify_days|justify_hours|justify_interval|" + + "koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|" + + "koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|" + + "latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|" + + "length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|" + + "line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|" + + "line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|" + + "lo_open|lo_tell|lo_truncate|lo_unlink|log|loread|lower|lowrite|lpad|lseg|lseg_center|" + + "lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|" + + "lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|" + + "lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|" + + "macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_out|macaddr_recv|macaddr_send|" + + "makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|" + + "mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|" + + "mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|" + + "min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|" + + "nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|" + + "namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|" + + "network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|" + + "network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|" + + "npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|" + + "numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|" + + "numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|" + + "numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|" + + "numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|" + + "numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_uminus|numeric_uplus|" + + "numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|" + + "obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|" + + "oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|" + + "oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|" + + "on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|" + + "path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|" + + "path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|" + + "path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|" + + "pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|" + + "pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|" + + "pg_available_extension_versions|pg_available_extensions|pg_backend_pid|" + + "pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_is_visible|" + + "pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|" + + "pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|" + + "pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|" + + "pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|" + + "pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|" + + "pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|" + + "pg_get_indexdef|pg_get_keywords|pg_get_ruledef|pg_get_serial_sequence|" + + "pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_indexes_size|" + + "pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|" + + "pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|" + + "pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|" + + "pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|" + + "pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|" + + "pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|" + + "pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|" + + "pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|" + + "pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|" + + "pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|" + + "pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|" + + "pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|" + + "pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|" + + "pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|" + + "pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|" + + "pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|" + + "pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|" + + "pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|" + + "pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|" + + "pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|" + + "pg_stat_get_buf_written_backend|pg_stat_get_db_blocks_fetched|" + + "pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|" + + "pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|" + + "pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|" + + "pg_stat_get_db_conflict_tablespace|pg_stat_get_db_numbackends|" + + "pg_stat_get_db_stat_reset_time|pg_stat_get_db_tuples_deleted|" + + "pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|" + + "pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|" + + "pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|" + + "pg_stat_get_function_calls|pg_stat_get_function_self_time|" + + "pg_stat_get_function_time|pg_stat_get_last_analyze_time|" + + "pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|" + + "pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|" + + "pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|" + + "pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|" + + "pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|" + + "pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|" + + "pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|" + + "pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_time|" + + "pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|" + + "pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|" + + "pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|" + + "pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|" + + "pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|" + + "pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|" + + "pg_tablespace_databases|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|" + + "pg_timezone_names|pg_total_relation_size|pg_try_advisory_lock|" + + "pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|" + + "pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|" + + "pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|" + + "pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|" + + "pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|" + + "point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|" + + "point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|" + + "point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|" + + "poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|" + + "poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|" + + "poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|" + + "postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|" + + "prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|" + + "query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|" + + "quote_nullable|radians|radius|random|rank|record_eq|record_ge|record_gt|record_in|" + + "record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|" + + "regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|" + + "regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|" + + "regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|" + + "regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|" + + "regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|" + + "regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|" + + "regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|" + + "regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|" + + "reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|" + + "reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|rpad|rtrim|" + + "scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|" + + "schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|" + + "set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|" + + "shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|" + + "similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|" + + "smgrout|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|" + + "string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|" + + "suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|" + + "table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|" + + "text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|" + + "texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|" + + "textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|" + + "thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|" + + "tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|" + + "time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|" + + "time_smaller|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|" + + "timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|" + + "timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|" + + "timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|" + + "timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|" + + "timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|" + + "timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|" + + "timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|" + + "timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|" + + "timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|" + + "timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|" + + "timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|" + + "timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|" + + "timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|" + + "timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|" + + "timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|" + + "timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|" + + "timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|" + + "timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|" + + "timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|" + + "timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|" + + "tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|" + + "tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|" + + "tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|" + + "tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|" + + "to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|" + + "trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|" + + "ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|" + + "ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|" + + "tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|" + + "tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsvector_cmp|" + + "tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|" + + "tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|" + + "tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|" + + "txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|" + + "txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|" + + "uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|" + + "upper|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|" + + "utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|" + + "utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|" + + "utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|" + + "uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|" + + "varbit_out|varbit_recv|varbit_send|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|" + + "varbitlt|varbitne|varbittypmodin|varbittypmodout|varcharin|varcharout|varcharrecv|" + + "varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|" + + "void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|" + + "win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|" + + "win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|" + + "xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|" + + "xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|" + + "xpath_exists").split("|") + ); + + var sqlRules = [ + { + token : "string", // single line string -- assume dollar strings if multi-line for now + regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" + }, { + token : "variable.language", // pg identifier + 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 (builtinFunctions.hasOwnProperty(value)) { + return "support.function"; + } else { + return "identifier"; + } + }, + regex : "[a-zA-Z_][a-zA-Z0-9_$]*\\b" // TODO - Unicode in identifiers + }, { + token : "keyword.operator", + regex : "!|!!|!~|!~\\*|!~~|!~~\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\&|\\&\\&|\\&<|\\&<\\||\\&>|\\*|\\+|" + + "\\-|/|<|<#>|<\\->|<<|<<=|<<\\||<=|<>|<\\?>|<@|<\\^|=|>|>=|>>|>>=|>\\^|\\?#|\\?\\-|\\?\\-\\||" + + "\\?\\||\\?\\|\\||@|@\\-@|@>|@@|@@@|\\^|\\||\\|\\&>|\\|/|\\|>>|\\|\\||\\|\\|/|~|~\\*|~<=~|~<~|" + + "~=|~>=~|~>~|~~|~~\\*" + }, { + token : "lparen.paren", + regex : "[\\(]" + }, { + token : "paren.rparen", + regex : "[\\)]" + }, { + token : "text", + regex : "\\s+" + } + ]; + + + this.$rules = { + "start" : [ + { + token : "comment", + regex : "--.*$" + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi-line comment + merge : true, + regex : "\\/\\*", + next : "comment" + },{ + token : "keyword.statementBegin", + regex : "^[a-zA-Z]+", // Could enumerate starting keywords but this allows things to work when new statements are added. + next : "statement" + },{ + token : "support.buildin", // psql directive + regex : "^\\\\[\\S]+.*$" + } + ], + + "statement" : [ + { + token : "comment", + regex : "--.*$" + }, { + token : "comment", // multi-line comment + merge : true, + regex : "\\/\\*", + next : "commentStatement" + }, { + token : "statementEnd", + regex : ";", + next : "start" + }, { + token : "string", // perl, python, tcl are in the pg default dist (no tcl highlighter) + regex : "\\$perl\\$", + next : "perl-start" + }, { + token : "string", + regex : "\\$python\\$", + next : "python-start" + },{ + token : "string", + regex : "\\$[\\w_0-9]*\\$$", // dollar quote at the end of a line + next : "dollarSql" + }, { + token : "string", + regex : "\\$[\\w_0-9]*\\$", + next : "dollarStatementString" + } + ].concat(sqlRules), + + "dollarSql" : [ + { + token : "comment", + regex : "--.*$" + }, { + token : "comment", // multi-line comment + merge : true, + regex : "\\/\\*", + next : "commentDollarSql" + }, { + token : "string", // end quoting with dollar at the start of a line + regex : "^\\$[\\w_0-9]*\\$", + next : "statement" + }, { + token : "string", + regex : "\\$[\\w_0-9]*\\$", + next : "dollarSqlString" + } + ].concat(sqlRules), + + "comment" : [ + { + token : "comment", // closing comment + regex : ".*?\\*\\/", + next : "start" + }, { + token : "comment", // comment spanning whole line + merge : true, + regex : ".+" + } + ], + + "commentStatement" : [ + { + token : "comment", // closing comment + regex : ".*?\\*\\/", + next : "statement" + }, { + token : "comment", // comment spanning whole line + merge : true, + regex : ".+" + } + ], + + "commentDollarSql" : [ + { + token : "comment", // closing comment + regex : ".*?\\*\\/", + next : "dollarSql" + }, { + token : "comment", // comment spanning whole line + merge : true, + regex : ".+" + } + ], + + "dollarStatementString" : [ + { + token : "string", // closing dollarstring + regex : ".*?\\$[\\w_0-9]*\\$", + next : "statement" + }, { + token : "string", // dollarstring spanning whole line + merge : true, + regex : ".+" + } + ], + + "dollarSqlString" : [ + { + token : "string", // closing dollarstring + regex : ".*?\\$[\\w_0-9]*\\$", + next : "dollarSql" + }, { + token : "string", // dollarstring spanning whole line + merge : true, + regex : ".+" + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); + this.embedRules(PerlHighlightRules, "perl-", [{token : "string", regex : "\\$perl\\$", next : "statement"}]); + this.embedRules(PythonHighlightRules, "python-", [{token : "string", regex : "\\$python\\$", next : "statement"}]); +}; + +oop.inherits(PgsqlHighlightRules, TextHighlightRules); + +exports.PgsqlHighlightRules = PgsqlHighlightRules; +}); + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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): + * Panagiotis Astithas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Colin Gourlay + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient 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 + */ + +ace.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; +}); diff --git a/public/ace_editor/mode-pgsql-uncompressed.js b/public/ace_editor/mode-pgsql-uncompressed.js new file mode 100644 index 0000000..78f8ff6 --- /dev/null +++ b/public/ace_editor/mode-pgsql-uncompressed.js @@ -0,0 +1,1104 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* The Original Code is Ajax.org Code Editor (ACE). +* +* Contributor(s): +* Jonathan Camile +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may 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/pgsql', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/pgsql_highlight_rules', 'ace/range'], function(require, exports, module) { + + var oop = require("ace/lib/oop"); + var TextMode = require("ace/mode/text").Mode; + var Tokenizer = require("ace/tokenizer").Tokenizer; + var PgsqlHighlightRules = require("ace/mode/pgsql_highlight_rules").PgsqlHighlightRules; + var Range = require("ace/range").Range; + // var EditSession = require("ace/edit_session").EditSession; + + var Mode = function() { + this.$tokenizer = new Tokenizer(new PgsqlHighlightRules().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, "--"); + } + }; + + + this.getNextLineIndent = function(state, line, tab) { + if (state == "start" || state == "keyword.statementEnd") { + return ""; + } else { + return this.$getIndent(line); // Keep whatever indent the previous line has + } + } + + }).call(Mode.prototype); + + exports.Mode = Mode; +}); +/* ***** BEGIN LICENSE BLOCK ***** + * The Original Code is Ajax.org Code Editor (ACE). + * + * Contributor(s): + * John DeSoi, Ph.D. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/pgsql_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/lib/lang', 'ace/mode/doc_comment_highlight_rules', 'ace/mode/text_highlight_rules', 'ace/mode/perl_highlight_rules', 'ace/mode/python_highlight_rules'], function(require, exports, module) { + +var oop = require("ace/lib/oop"); +var lang = require("ace/lib/lang"); +var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; +// Supporting perl and python for now -- both in pg core and ace +var PerlHighlightRules = require("./perl_highlight_rules").PerlHighlightRules; +var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules; + +var PgsqlHighlightRules = function() { + + // Keywords, functions, operators last updated for pg 9.1. + var keywords = lang.arrayToMap( + ("abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|" + + "analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|array|as|asc|assertion|" + + "assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|" + + "binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|" + + "catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|" + + "cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|" + + "configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|" + + "create|cross|cstring|csv|current|current_catalog|current_date|current_role|" + + "current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|" + + "date|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|" + + "delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|" + + "drop|each|else|enable|encoding|encrypted|end|enum|escape|except|exclude|excluding|exclusive|" + + "execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|" + + "float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|" + + "global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|" + + "ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|" + + "inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|" + + "int4|int8|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|key|label|" + + "language|language_handler|large|last|lc_collate|lc_ctype|leading|least|left|level|like|" + + "limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|" + + "match|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|" + + "none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|object|of|off|offset|oid|oids|" + + "oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|" + + "owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|" + + "pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|" + + "position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|" + + "procedural|procedure|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|" + + "references|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|" + + "regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|" + + "restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|" + + "search|second|security|select|sequence|sequences|serializable|server|session|session_user|" + + "set|setof|share|show|similar|simple|smallint|smgr|some|stable|standalone|start|statement|" + + "statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|" + + "tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|" + + "tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsvector|" + + "txid_snapshot|type|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|" + + "unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|" + + "varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|" + + "with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|" + + "xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone").split("|") + ); + + + var builtinFunctions = lang.arrayToMap( + ("RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|" + + "RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|" + + "RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|" + + "RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|" + + "abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|aclexplode|aclinsert|" + + "aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|" + + "anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|" + + "anynonarray_in|anynonarray_out|anytextcat|area|areajoinsel|areasel|array_agg|" + + "array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|" + + "array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|" + + "array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_send|" + + "array_smaller|array_to_string|array_upper|arraycontained|arraycontains|arrayoverlap|" + + "ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|" + + "big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|" + + "bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|" + + "bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|" + + "boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|" + + "box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|" + + "box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|" + + "box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|" + + "box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|" + + "bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|" + + "bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|" + + "bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|" + + "bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|" + + "bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|" + + "btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcharcmp|btcostestimate|" + + "btendscan|btfloat48cmp|btfloat4cmp|btfloat84cmp|btfloat8cmp|btgetbitmap|btgettuple|" + + "btinsert|btint24cmp|btint28cmp|btint2cmp|btint42cmp|btint48cmp|btint4cmp|btint82cmp|" + + "btint84cmp|btint8cmp|btmarkpos|btnamecmp|btoidcmp|btoidvectorcmp|btoptions|btrecordcmp|" + + "btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|" + + "bttintervalcmp|btvacuumcleanup|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|" + + "bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|" + + "cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|" + + "cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|" + + "cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|" + + "center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|" + + "charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|" + + "cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|" + + "circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|" + + "circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|" + + "circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|" + + "circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|" + + "clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|" + + "close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|" + + "convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|" + + "cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|" + + "current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|" + + "cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|" + + "database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|" + + "date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|" + + "date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|" + + "date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|" + + "date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|" + + "date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|" + + "date_trunc|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|" + + "diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|" + + "dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|" + + "dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|" + + "dsynonym_lexize|dtrunc|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|" + + "enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|" + + "enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|" + + "euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|" + + "euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|" + + "euc_tw_to_utf8|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|" + + "float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|" + + "float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|" + + "float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|" + + "float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|" + + "float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|" + + "float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|" + + "float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|" + + "float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|" + + "float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|" + + "float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|" + + "float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|" + + "flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|" + + "fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|" + + "generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|" + + "getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|" + + "gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|" + + "ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|" + + "gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|" + + "ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|" + + "gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|" + + "gist_circle_compress|gist_circle_consistent|gist_point_compress|" + + "gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|" + + "gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|" + + "gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|" + + "gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|" + + "gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|" + + "gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|" + + "gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|" + + "has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|" + + "has_function_privilege|has_language_privilege|has_schema_privilege|" + + "has_sequence_privilege|has_server_privilege|has_table_privilege|" + + "has_tablespace_privilege|hash_aclitem|hash_array|hash_numeric|hashbeginscan|" + + "hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|" + + "hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|" + + "hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|" + + "hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|" + + "hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|" + + "icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|" + + "inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|" + + "inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|" + + "int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|" + + "int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|" + + "int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|" + + "int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|" + + "int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|" + + "int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|" + + "int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|" + + "int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|" + + "int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|" + + "int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4recv|int4send|" + + "int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|" + + "int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|" + + "int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|" + + "int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|" + + "int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|" + + "int8or|int8out|int8pl|int8pl_inet|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|" + + "int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|" + + "interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|" + + "interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|" + + "interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|" + + "interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|" + + "interval_recv|interval_send|interval_smaller|interval_um|intervaltypmodin|" + + "intervaltypmodout|intinterval|isclosed|isfinite|ishorizontal|iso8859_1_to_utf8|" + + "iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|" + + "isperp|isvertical|johab_to_utf8|justify_days|justify_hours|justify_interval|" + + "koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|" + + "koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|" + + "latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|" + + "length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|" + + "line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|" + + "line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|" + + "lo_open|lo_tell|lo_truncate|lo_unlink|log|loread|lower|lowrite|lpad|lseg|lseg_center|" + + "lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|" + + "lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|" + + "lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|" + + "macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_out|macaddr_recv|macaddr_send|" + + "makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|" + + "mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|" + + "mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|" + + "min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|" + + "nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|" + + "namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|" + + "network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|" + + "network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|" + + "npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|" + + "numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|" + + "numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|" + + "numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|" + + "numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|" + + "numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_uminus|numeric_uplus|" + + "numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|" + + "obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|" + + "oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|" + + "oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|" + + "on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|" + + "path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|" + + "path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|" + + "path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|" + + "pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|" + + "pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|" + + "pg_available_extension_versions|pg_available_extensions|pg_backend_pid|" + + "pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_is_visible|" + + "pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|" + + "pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|" + + "pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|" + + "pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|" + + "pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|" + + "pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|" + + "pg_get_indexdef|pg_get_keywords|pg_get_ruledef|pg_get_serial_sequence|" + + "pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_indexes_size|" + + "pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|" + + "pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|" + + "pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|" + + "pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|" + + "pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|" + + "pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|" + + "pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|" + + "pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|" + + "pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|" + + "pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|" + + "pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|" + + "pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|" + + "pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|" + + "pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|" + + "pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|" + + "pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|" + + "pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|" + + "pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|" + + "pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|" + + "pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|" + + "pg_stat_get_buf_written_backend|pg_stat_get_db_blocks_fetched|" + + "pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|" + + "pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|" + + "pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|" + + "pg_stat_get_db_conflict_tablespace|pg_stat_get_db_numbackends|" + + "pg_stat_get_db_stat_reset_time|pg_stat_get_db_tuples_deleted|" + + "pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|" + + "pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|" + + "pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|" + + "pg_stat_get_function_calls|pg_stat_get_function_self_time|" + + "pg_stat_get_function_time|pg_stat_get_last_analyze_time|" + + "pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|" + + "pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|" + + "pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|" + + "pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|" + + "pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|" + + "pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|" + + "pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|" + + "pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_time|" + + "pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|" + + "pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|" + + "pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|" + + "pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|" + + "pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|" + + "pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|" + + "pg_tablespace_databases|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|" + + "pg_timezone_names|pg_total_relation_size|pg_try_advisory_lock|" + + "pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|" + + "pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|" + + "pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|" + + "pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|" + + "pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|" + + "point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|" + + "point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|" + + "point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|" + + "poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|" + + "poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|" + + "poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|" + + "postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|" + + "prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|" + + "query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|" + + "quote_nullable|radians|radius|random|rank|record_eq|record_ge|record_gt|record_in|" + + "record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|" + + "regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|" + + "regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|" + + "regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|" + + "regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|" + + "regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|" + + "regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|" + + "regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|" + + "regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|" + + "reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|" + + "reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|rpad|rtrim|" + + "scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|" + + "schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|" + + "set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|" + + "shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|" + + "similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|" + + "smgrout|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|" + + "string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|" + + "suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|" + + "table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|" + + "text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|" + + "texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|" + + "textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|" + + "thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|" + + "tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|" + + "time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|" + + "time_smaller|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|" + + "timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|" + + "timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|" + + "timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|" + + "timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|" + + "timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|" + + "timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|" + + "timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|" + + "timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|" + + "timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|" + + "timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|" + + "timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|" + + "timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|" + + "timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|" + + "timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|" + + "timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|" + + "timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|" + + "timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|" + + "timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|" + + "timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|" + + "timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|" + + "tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|" + + "tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|" + + "tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|" + + "tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|" + + "to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|" + + "trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|" + + "ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|" + + "ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|" + + "tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|" + + "tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsvector_cmp|" + + "tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|" + + "tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|" + + "tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|" + + "txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|" + + "txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|" + + "uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|" + + "upper|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|" + + "utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|" + + "utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|" + + "utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|" + + "uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|" + + "varbit_out|varbit_recv|varbit_send|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|" + + "varbitlt|varbitne|varbittypmodin|varbittypmodout|varcharin|varcharout|varcharrecv|" + + "varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|" + + "void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|" + + "win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|" + + "win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|" + + "xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|" + + "xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|" + + "xpath_exists").split("|") + ); + + var sqlRules = [ + { + token : "string", // single line string -- assume dollar strings if multi-line for now + regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" + }, { + token : "variable.language", // pg identifier + 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 (builtinFunctions.hasOwnProperty(value)) { + return "support.function"; + } else { + return "identifier"; + } + }, + regex : "[a-zA-Z_][a-zA-Z0-9_$]*\\b" // TODO - Unicode in identifiers + }, { + token : "keyword.operator", + regex : "!|!!|!~|!~\\*|!~~|!~~\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\&|\\&\\&|\\&<|\\&<\\||\\&>|\\*|\\+|" + + "\\-|/|<|<#>|<\\->|<<|<<=|<<\\||<=|<>|<\\?>|<@|<\\^|=|>|>=|>>|>>=|>\\^|\\?#|\\?\\-|\\?\\-\\||" + + "\\?\\||\\?\\|\\||@|@\\-@|@>|@@|@@@|\\^|\\||\\|\\&>|\\|/|\\|>>|\\|\\||\\|\\|/|~|~\\*|~<=~|~<~|" + + "~=|~>=~|~>~|~~|~~\\*" + }, { + token : "lparen.paren", + regex : "[\\(]" + }, { + token : "paren.rparen", + regex : "[\\)]" + }, { + token : "text", + regex : "\\s+" + } + ]; + + + this.$rules = { + "start" : [ + { + token : "comment", + regex : "--.*$" + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi-line comment + merge : true, + regex : "\\/\\*", + next : "comment" + },{ + token : "keyword.statementBegin", + regex : "^[a-zA-Z]+", // Could enumerate starting keywords but this allows things to work when new statements are added. + next : "statement" + },{ + token : "support.buildin", // psql directive + regex : "^\\\\[\\S]+.*$" + } + ], + + "statement" : [ + { + token : "comment", + regex : "--.*$" + }, { + token : "comment", // multi-line comment + merge : true, + regex : "\\/\\*", + next : "commentStatement" + }, { + token : "statementEnd", + regex : ";", + next : "start" + }, { + token : "string", // perl, python, tcl are in the pg default dist (no tcl highlighter) + regex : "\\$perl\\$", + next : "perl-start" + }, { + token : "string", + regex : "\\$python\\$", + next : "python-start" + },{ + token : "string", + regex : "\\$[\\w_0-9]*\\$$", // dollar quote at the end of a line + next : "dollarSql" + }, { + token : "string", + regex : "\\$[\\w_0-9]*\\$", + next : "dollarStatementString" + } + ].concat(sqlRules), + + "dollarSql" : [ + { + token : "comment", + regex : "--.*$" + }, { + token : "comment", // multi-line comment + merge : true, + regex : "\\/\\*", + next : "commentDollarSql" + }, { + token : "string", // end quoting with dollar at the start of a line + regex : "^\\$[\\w_0-9]*\\$", + next : "statement" + }, { + token : "string", + regex : "\\$[\\w_0-9]*\\$", + next : "dollarSqlString" + } + ].concat(sqlRules), + + "comment" : [ + { + token : "comment", // closing comment + regex : ".*?\\*\\/", + next : "start" + }, { + token : "comment", // comment spanning whole line + merge : true, + regex : ".+" + } + ], + + "commentStatement" : [ + { + token : "comment", // closing comment + regex : ".*?\\*\\/", + next : "statement" + }, { + token : "comment", // comment spanning whole line + merge : true, + regex : ".+" + } + ], + + "commentDollarSql" : [ + { + token : "comment", // closing comment + regex : ".*?\\*\\/", + next : "dollarSql" + }, { + token : "comment", // comment spanning whole line + merge : true, + regex : ".+" + } + ], + + "dollarStatementString" : [ + { + token : "string", // closing dollarstring + regex : ".*?\\$[\\w_0-9]*\\$", + next : "statement" + }, { + token : "string", // dollarstring spanning whole line + merge : true, + regex : ".+" + } + ], + + "dollarSqlString" : [ + { + token : "string", // closing dollarstring + regex : ".*?\\$[\\w_0-9]*\\$", + next : "dollarSql" + }, { + token : "string", // dollarstring spanning whole line + merge : true, + regex : ".+" + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); + this.embedRules(PerlHighlightRules, "perl-", [{token : "string", regex : "\\$perl\\$", next : "statement"}]); + this.embedRules(PythonHighlightRules, "python-", [{token : "string", regex : "\\$python\\$", next : "statement"}]); +}; + +oop.inherits(PgsqlHighlightRules, TextHighlightRules); + +exports.PgsqlHighlightRules = PgsqlHighlightRules; +}); + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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): + * Panagiotis Astithas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Colin Gourlay + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient 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; +}); diff --git a/public/ace_editor/mode-pgsql.js b/public/ace_editor/mode-pgsql.js new file mode 100644 index 0000000..30fd0ec --- /dev/null +++ b/public/ace_editor/mode-pgsql.js @@ -0,0 +1 @@ +define("ace/mode/pgsql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/pgsql_highlight_rules","ace/range"],function(a,b,c){var d=a("ace/lib/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/pgsql_highlight_rules").PgsqlHighlightRules,h=a("ace/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 a=="start"||a=="keyword.statementEnd"?"":this.$getIndent(b)}}.call(i.prototype),b.Mode=i}),define("ace/mode/pgsql_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/perl_highlight_rules","ace/mode/python_highlight_rules"],function(a,b,c){var d=a("ace/lib/oop"),e=a("ace/lib/lang"),f=a("./doc_comment_highlight_rules").DocCommentHighlightRules,g=a("./text_highlight_rules").TextHighlightRules,h=a("./perl_highlight_rules").PerlHighlightRules,i=a("./python_highlight_rules").PythonHighlightRules,j=function(){var a=e.arrayToMap("abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|array|as|asc|assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|create|cross|cstring|csv|current|current_catalog|current_date|current_role|current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|date|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|int4|int8|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|key|label|language|language_handler|large|last|lc_collate|lc_ctype|leading|least|left|level|like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|match|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|procedural|procedure|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|references|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|simple|smallint|smgr|some|stable|standalone|start|statement|statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsvector|txid_snapshot|type|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone".split("|")),b=e.arrayToMap("RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_send|array_smaller|array_to_string|array_upper|arraycontained|arraycontains|arrayoverlap|ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|btfloat84cmp|btfloat8cmp|btgetbitmap|btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint42cmp|btint48cmp|btint4cmp|btint82cmp|btint84cmp|btint8cmp|btmarkpos|btnamecmp|btoidcmp|btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|date_trunc|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|dsynonym_lexize|dtrunc|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|euc_tw_to_utf8|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|has_function_privilege|has_language_privilege|has_schema_privilege|has_sequence_privilege|has_server_privilege|has_table_privilege|has_tablespace_privilege|hash_aclitem|hash_array|hash_numeric|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4recv|int4send|int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isfinite|ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|justify_days|justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|lo_open|lo_tell|lo_truncate|lo_unlink|log|loread|lower|lowrite|lpad|lseg|lseg_center|lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|pg_available_extension_versions|pg_available_extensions|pg_backend_pid|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_is_visible|pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_indexes_size|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|pg_stat_get_buf_written_backend|pg_stat_get_db_blocks_fetched|pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|pg_stat_get_db_conflict_tablespace|pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|pg_stat_get_db_tuples_deleted|pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|pg_stat_get_function_calls|pg_stat_get_function_self_time|pg_stat_get_function_time|pg_stat_get_last_analyze_time|pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_time|pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|pg_tablespace_databases|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|pg_try_advisory_lock|pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|rank|record_eq|record_ge|record_gt|record_in|record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|rpad|rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|smgrout|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|time_smaller|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsvector_cmp|tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|upper|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|varbit_recv|varbit_send|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|varbitlt|varbitne|varbittypmodin|varbittypmodout|varcharin|varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists".split("|")),c=[{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"variable.language",regex:'".*?"'},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:function(c){return c=c.toLowerCase(),a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"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+"}];this.$rules={start:[{token:"comment",regex:"--.*$"},f.getStartRule("doc-start"),{token:"comment",merge:!0,regex:"\\/\\*",next:"comment"},{token:"keyword.statementBegin",regex:"^[a-zA-Z]+",next:"statement"},{token:"support.buildin",regex:"^\\\\[\\S]+.*$"}],statement:[{token:"comment",regex:"--.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"commentStatement"},{token:"statementEnd",regex:";",next:"start"},{token:"string",regex:"\\$perl\\$",next:"perl-start"},{token:"string",regex:"\\$python\\$",next:"python-start"},{token:"string",regex:"\\$[\\w_0-9]*\\$$",next:"dollarSql"},{token:"string",regex:"\\$[\\w_0-9]*\\$",next:"dollarStatementString"}].concat(c),dollarSql:[{token:"comment",regex:"--.*$"},{token:"comment",merge:!0,regex:"\\/\\*",next:"commentDollarSql"},{token:"string",regex:"^\\$[\\w_0-9]*\\$",next:"statement"},{token:"string",regex:"\\$[\\w_0-9]*\\$",next:"dollarSqlString"}].concat(c),comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",merge:!0,regex:".+"}],commentStatement:[{token:"comment",regex:".*?\\*\\/",next:"statement"},{token:"comment",merge:!0,regex:".+"}],commentDollarSql:[{token:"comment",regex:".*?\\*\\/",next:"dollarSql"},{token:"comment",merge:!0,regex:".+"}],dollarStatementString:[{token:"string",regex:".*?\\$[\\w_0-9]*\\$",next:"statement"},{token:"string",merge:!0,regex:".+"}],dollarSqlString:[{token:"string",regex:".*?\\$[\\w_0-9]*\\$",next:"dollarSql"},{token:"string",merge:!0,regex:".+"}]},this.embedRules(f,"doc-",[f.getEndRule("start")]),this.embedRules(h,"perl-",[{token:"string",regex:"\\$perl\\$",next:"statement"}]),this.embedRules(i,"python-",[{token:"string",regex:"\\$python\\$",next:"statement"}])};d.inherits(j,g),b.PgsqlHighlightRules=j}),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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),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/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}) \ No newline at end of file diff --git a/public/ace_editor/mode-php-noconflict.js b/public/ace_editor/mode-php-noconflict.js new file mode 100644 index 0000000..b8dfde3 --- /dev/null +++ b/public/ace_editor/mode-php-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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=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:""},{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:'["][\\s\\S]*',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['][\\s\\S]+",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:"",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-",[f.getEndRule("start")])};d.inherits(h,g),b.PhpHighlightRules=h}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-php-uncompressed-noconflict.js b/public/ace_editor/mode-php-uncompressed-noconflict.js new file mode 100644 index 0000000..a8a3ea3 --- /dev/null +++ b/public/ace_editor/mode-php-uncompressed-noconflict.js @@ -0,0 +1,1885 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: MPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Mozilla Public License Version +* 1.1 (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* http://www.mozilla.org/MPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF 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 +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may use your version of this file under +* the terms of any one of the MPL, the GPL or the LGPL. +* +* ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** + */ + +ace.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 = 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 : "' + }, + { + 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 : '["][\\s\\S]*', + next : "qqstring" + }, { + token : "string", // single line + regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" + }, { + token : "string", // multi line string start + regex : "['][\\s\\S]+", + 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-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-php-uncompressed.js b/public/ace_editor/mode-php-uncompressed.js new file mode 100644 index 0000000..eedc030 --- /dev/null +++ b/public/ace_editor/mode-php-uncompressed.js @@ -0,0 +1,1885 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: MPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Mozilla Public License Version +* 1.1 (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* http://www.mozilla.org/MPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF 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 +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 = 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 : "' + }, + { + 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 : '["][\\s\\S]*', + next : "qqstring" + }, { + token : "string", // single line + regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" + }, { + token : "string", // multi line string start + regex : "['][\\s\\S]+", + 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-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-php.js b/public/ace_editor/mode-php.js new file mode 100644 index 0000000..d2e4b4b --- /dev/null +++ b/public/ace_editor/mode-php.js @@ -0,0 +1 @@ +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=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:""},{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:'["][\\s\\S]*',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['][\\s\\S]+",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:"",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-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-powershell-noconflict.js b/public/ace_editor/mode-powershell-noconflict.js new file mode 100644 index 0000000..91d8eaf --- /dev/null +++ b/public/ace_editor/mode-powershell-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-powershell-uncompressed-noconflict.js b/public/ace_editor/mode-powershell-uncompressed-noconflict.js new file mode 100644 index 0000000..55c21fa --- /dev/null +++ b/public/ace_editor/mode-powershell-uncompressed-noconflict.js @@ -0,0 +1,710 @@ +ace.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; +}); +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-powershell-uncompressed.js b/public/ace_editor/mode-powershell-uncompressed.js new file mode 100644 index 0000000..930ce6a --- /dev/null +++ b/public/ace_editor/mode-powershell-uncompressed.js @@ -0,0 +1,710 @@ +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-powershell.js b/public/ace_editor/mode-powershell.js new file mode 100644 index 0000000..6ebaeae --- /dev/null +++ b/public/ace_editor/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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-python-noconflict.js b/public/ace_editor/mode-python-noconflict.js new file mode 100644 index 0000000..adfbfc1 --- /dev/null +++ b/public/ace_editor/mode-python-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-python-uncompressed-noconflict.js b/public/ace_editor/mode-python-uncompressed-noconflict.js new file mode 100644 index 0000000..1564ba0 --- /dev/null +++ b/public/ace_editor/mode-python-uncompressed-noconflict.js @@ -0,0 +1,507 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: MPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Mozilla Public License Version +* 1.1 (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* http://www.mozilla.org/MPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF 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 +* Colin Gourlay +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may use your version of this file under +* the terms of any one of the MPL, the GPL or the LGPL. +* +* ***** END LICENSE BLOCK ***** */ + +ace.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 + * Colin Gourlay + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient 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 + */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-python-uncompressed.js b/public/ace_editor/mode-python-uncompressed.js new file mode 100644 index 0000000..4783433 --- /dev/null +++ b/public/ace_editor/mode-python-uncompressed.js @@ -0,0 +1,507 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: MPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Mozilla Public License Version +* 1.1 (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* http://www.mozilla.org/MPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF 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 +* Colin Gourlay +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may 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 + * Colin Gourlay + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-python.js b/public/ace_editor/mode-python.js new file mode 100644 index 0000000..5401407 --- /dev/null +++ b/public/ace_editor/mode-python.js @@ -0,0 +1 @@ +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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-ruby-noconflict.js b/public/ace_editor/mode-ruby-noconflict.js new file mode 100644 index 0000000..9ea74b0 --- /dev/null +++ b/public/ace_editor/mode-ruby-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-ruby-uncompressed-noconflict.js b/public/ace_editor/mode-ruby-uncompressed-noconflict.js new file mode 100644 index 0000000..3233399 --- /dev/null +++ b/public/ace_editor/mode-ruby-uncompressed-noconflict.js @@ -0,0 +1,391 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Shlomo Zalman Heigh + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Shlomo Zalman Heigh + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; +}); diff --git a/public/ace_editor/mode-ruby-uncompressed.js b/public/ace_editor/mode-ruby-uncompressed.js new file mode 100644 index 0000000..fa2e06a --- /dev/null +++ b/public/ace_editor/mode-ruby-uncompressed.js @@ -0,0 +1,391 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Shlomo Zalman Heigh + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Shlomo Zalman Heigh + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; +}); diff --git a/public/ace_editor/mode-ruby.js b/public/ace_editor/mode-ruby.js new file mode 100644 index 0000000..7b9df32 --- /dev/null +++ b/public/ace_editor/mode-ruby.js @@ -0,0 +1 @@ +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}) \ No newline at end of file diff --git a/public/ace_editor/mode-scad-noconflict.js b/public/ace_editor/mode-scad-noconflict.js new file mode 100644 index 0000000..9f715b7 --- /dev/null +++ b/public/ace_editor/mode-scad-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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:"\\/\\/.*$"},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-",[f.getEndRule("start")])};d.inherits(h,g),b.scadHighlightRules=h}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-scad-uncompressed-noconflict.js b/public/ace_editor/mode-scad-uncompressed-noconflict.js new file mode 100644 index 0000000..836d5a4 --- /dev/null +++ b/public/ace_editor/mode-scad-uncompressed-noconflict.js @@ -0,0 +1,907 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Gastón Kleiman + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Gastón Kleiman + * + * 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 ***** */ + +ace.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 : "\\/\\/.*$" + }, + 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", // + 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-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-scad-uncompressed.js b/public/ace_editor/mode-scad-uncompressed.js new file mode 100644 index 0000000..f3cb57b --- /dev/null +++ b/public/ace_editor/mode-scad-uncompressed.js @@ -0,0 +1,907 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * Gastón Kleiman + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Gastón Kleiman + * + * 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 : "\\/\\/.*$" + }, + 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", // + 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-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-scad.js b/public/ace_editor/mode-scad.js new file mode 100644 index 0000000..271c078 --- /dev/null +++ b/public/ace_editor/mode-scad.js @@ -0,0 +1 @@ +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:"\\/\\/.*$"},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-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-scala-noconflict.js b/public/ace_editor/mode-scala-noconflict.js new file mode 100644 index 0000000..df06e85 --- /dev/null +++ b/public/ace_editor/mode-scala-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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)}),ace.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(++bf){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)}),ace.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:"\\/\\/.*$"},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-",[f.getEndRule("start")])};d.inherits(h,g),b.ScalaHighlightRules=h}) \ No newline at end of file diff --git a/public/ace_editor/mode-scala-uncompressed-noconflict.js b/public/ace_editor/mode-scala-uncompressed-noconflict.js new file mode 100644 index 0000000..139f6aa --- /dev/null +++ b/public/ace_editor/mode-scala-uncompressed-noconflict.js @@ -0,0 +1,1395 @@ +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); +ace.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 : "\\/\\/.*$" + }, + 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-", + [ DocCommentHighlightRules.getEndRule("start") ]); +}; + +oop.inherits(ScalaHighlightRules, TextHighlightRules); + +exports.ScalaHighlightRules = ScalaHighlightRules; +}); diff --git a/public/ace_editor/mode-scala-uncompressed.js b/public/ace_editor/mode-scala-uncompressed.js new file mode 100644 index 0000000..9ffbbb8 --- /dev/null +++ b/public/ace_editor/mode-scala-uncompressed.js @@ -0,0 +1,1395 @@ +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "\\/\\/.*$" + }, + 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-", + [ DocCommentHighlightRules.getEndRule("start") ]); +}; + +oop.inherits(ScalaHighlightRules, TextHighlightRules); + +exports.ScalaHighlightRules = ScalaHighlightRules; +}); diff --git a/public/ace_editor/mode-scala.js b/public/ace_editor/mode-scala.js new file mode 100644 index 0000000..096f14b --- /dev/null +++ b/public/ace_editor/mode-scala.js @@ -0,0 +1 @@ +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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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(++bf){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:"\\/\\/.*$"},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-",[f.getEndRule("start")])};d.inherits(h,g),b.ScalaHighlightRules=h}) \ No newline at end of file diff --git a/public/ace_editor/mode-scss-noconflict.js b/public/ace_editor/mode-scss-noconflict.js new file mode 100644 index 0000000..d46031d --- /dev/null +++ b/public/ace_editor/mode-scss-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{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}),ace.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}),ace.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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-scss-uncompressed-noconflict.js b/public/ace_editor/mode-scss-uncompressed-noconflict.js new file mode 100644 index 0000000..f49602a --- /dev/null +++ b/public/ace_editor/mode-scss-uncompressed-noconflict.js @@ -0,0 +1,679 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-scss-uncompressed.js b/public/ace_editor/mode-scss-uncompressed.js new file mode 100644 index 0000000..63ed568 --- /dev/null +++ b/public/ace_editor/mode-scss-uncompressed.js @@ -0,0 +1,679 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-scss.js b/public/ace_editor/mode-scss.js new file mode 100644 index 0000000..214bfe3 --- /dev/null +++ b/public/ace_editor/mode-scss.js @@ -0,0 +1 @@ +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|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-sh-noconflict.js b/public/ace_editor/mode-sh-noconflict.js new file mode 100644 index 0000000..9450b4e --- /dev/null +++ b/public/ace_editor/mode-sh-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/mode/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/sh_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("./sh_highlight_rules").ShHighlightRules,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){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 h(c,d.length-e.length,c,d.length))}}.call(i.prototype),b.Mode=i}),ace.define("ace/mode/sh_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("!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set".split("|")),b=e.arrayToMap("[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait".split("|")),c="(?:(?:[1-9]\\d*)|(?:0))",d="(?:\\.\\d+)",f="(?:\\d+)",g="(?:(?:"+f+"?"+d+")|(?:"+f+"\\.))",h="(?:(?:"+g+"|"+f+")"+")",i="(?:"+h+"|"+g+")",j="(?:&"+f+")",k="[a-zA-Z][a-zA-Z0-9_]*",l="(?:(?:\\$"+k+")|(?:"+k+"=))",m="(?:\\$(?:SHLVL|\\$|\\!|\\?))",n="(?:"+k+"\\s*\\(\\))";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:'"(?:[^\\\\]|\\\\.)*?"'},{token:"variable.language",regex:m},{token:"variable",regex:l},{token:"support.function",regex:n},{token:"support.function",regex:j},{token:"string",regex:"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:i},{token:"constant.numeric",regex:c+"\\b"},{token:function(c){return a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"constant.language":c=="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+"}]}};d.inherits(g,f),b.ShHighlightRules=g}) \ No newline at end of file diff --git a/public/ace_editor/mode-sh-uncompressed-noconflict.js b/public/ace_editor/mode-sh-uncompressed-noconflict.js new file mode 100644 index 0000000..015c871 --- /dev/null +++ b/public/ace_editor/mode-sh-uncompressed-noconflict.js @@ -0,0 +1,289 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: MPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Mozilla Public License Version +* 1.1 (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* http://www.mozilla.org/MPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF 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): +* Rich Healey +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may use your version of this file under +* the terms of any one of the MPL, the GPL or the LGPL. +* +* ***** END LICENSE BLOCK ***** */ + +ace.define('ace/mode/sh', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/sh_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 ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules; +var Range = require("../range").Range; + +var Mode = function() { + this.$tokenizer = new Tokenizer(new ShHighlightRules().getRules()); +}; +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 sh 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): + * Rich Healey + * Javier Perez-Griffo + * James Tan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** + */ +ace.define('ace/mode/sh_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 ShHighlightRules = function() { + + var reservedKeywords = lang.arrayToMap( + ('!|{|}|case|do|done|elif|else|'+ + 'esac|fi|for|if|in|then|until|while|'+ + '&|;|export|local|read|typeset|unset|'+ + 'elif|select|set' + ).split('|') + ); + + var languageConstructs = lang.arrayToMap( + ('[|]|alias|bg|bind|break|builtin|'+ + 'cd|command|compgen|complete|continue|'+ + 'dirs|disown|echo|enable|eval|exec|'+ + 'exit|fc|fg|getopts|hash|help|history|'+ + 'jobs|kill|let|logout|popd|printf|pushd|'+ + 'pwd|return|set|shift|shopt|source|'+ + 'suspend|test|times|trap|type|ulimit|'+ + 'umask|unalias|wait' + ).split('|') + ); + + var integer = "(?:(?:[1-9]\\d*)|(?:0))"; + // var integer = "(?:" + decimalInteger + ")"; + + var fraction = "(?:\\.\\d+)"; + var intPart = "(?:\\d+)"; + var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; + var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + ")"; + var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; + var fileDescriptor = "(?:&" + intPart + ")"; + + var variableName = "[a-zA-Z][a-zA-Z0-9_]*"; + var variable = "(?:(?:\\$" + variableName + ")|(?:" + variableName + "=))"; + + var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))"; + + var func = "(?:" + variableName + "\\s*\\(\\))"; + + this.$rules = { + "start" : [ { + token : "comment", + regex : "#.*$" + }, { + token : "string", // " string + regex : '"(?:[^\\\\]|\\\\.)*?"' + }, { + token : "variable.language", + regex : builtinVariable + }, { + token : "variable", + regex : variable + }, { + token : "support.function", + regex : func, + }, { + token : "support.function", + regex : fileDescriptor + }, { + token : "string", // ' string + regex : "'(?:[^\\\\]|\\\\.)*?'" + }, { + token : "constant.numeric", // float + regex : floatNumber + }, { + token : "constant.numeric", // integer + regex : integer + "\\b" + }, { + token : function(value) { + if (reservedKeywords.hasOwnProperty(value)) + return "keyword"; + else if (languageConstructs.hasOwnProperty(value)) + return "constant.language"; + 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+" + } ] + }; +}; + +oop.inherits(ShHighlightRules, TextHighlightRules); + +exports.ShHighlightRules = ShHighlightRules; +}); diff --git a/public/ace_editor/mode-sh-uncompressed.js b/public/ace_editor/mode-sh-uncompressed.js new file mode 100644 index 0000000..9820c73 --- /dev/null +++ b/public/ace_editor/mode-sh-uncompressed.js @@ -0,0 +1,289 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: MPL 1.1/GPL 2.0/LGPL 2.1 +* +* The contents of this file are subject to the Mozilla Public License Version +* 1.1 (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* http://www.mozilla.org/MPL/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF 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): +* Rich Healey +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may 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/sh', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/sh_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 ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules; +var Range = require("../range").Range; + +var Mode = function() { + this.$tokenizer = new Tokenizer(new ShHighlightRules().getRules()); +}; +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 sh 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): + * Rich Healey + * Javier Perez-Griffo + * James Tan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/sh_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 ShHighlightRules = function() { + + var reservedKeywords = lang.arrayToMap( + ('!|{|}|case|do|done|elif|else|'+ + 'esac|fi|for|if|in|then|until|while|'+ + '&|;|export|local|read|typeset|unset|'+ + 'elif|select|set' + ).split('|') + ); + + var languageConstructs = lang.arrayToMap( + ('[|]|alias|bg|bind|break|builtin|'+ + 'cd|command|compgen|complete|continue|'+ + 'dirs|disown|echo|enable|eval|exec|'+ + 'exit|fc|fg|getopts|hash|help|history|'+ + 'jobs|kill|let|logout|popd|printf|pushd|'+ + 'pwd|return|set|shift|shopt|source|'+ + 'suspend|test|times|trap|type|ulimit|'+ + 'umask|unalias|wait' + ).split('|') + ); + + var integer = "(?:(?:[1-9]\\d*)|(?:0))"; + // var integer = "(?:" + decimalInteger + ")"; + + var fraction = "(?:\\.\\d+)"; + var intPart = "(?:\\d+)"; + var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; + var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + ")"; + var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; + var fileDescriptor = "(?:&" + intPart + ")"; + + var variableName = "[a-zA-Z][a-zA-Z0-9_]*"; + var variable = "(?:(?:\\$" + variableName + ")|(?:" + variableName + "=))"; + + var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))"; + + var func = "(?:" + variableName + "\\s*\\(\\))"; + + this.$rules = { + "start" : [ { + token : "comment", + regex : "#.*$" + }, { + token : "string", // " string + regex : '"(?:[^\\\\]|\\\\.)*?"' + }, { + token : "variable.language", + regex : builtinVariable + }, { + token : "variable", + regex : variable + }, { + token : "support.function", + regex : func, + }, { + token : "support.function", + regex : fileDescriptor + }, { + token : "string", // ' string + regex : "'(?:[^\\\\]|\\\\.)*?'" + }, { + token : "constant.numeric", // float + regex : floatNumber + }, { + token : "constant.numeric", // integer + regex : integer + "\\b" + }, { + token : function(value) { + if (reservedKeywords.hasOwnProperty(value)) + return "keyword"; + else if (languageConstructs.hasOwnProperty(value)) + return "constant.language"; + 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+" + } ] + }; +}; + +oop.inherits(ShHighlightRules, TextHighlightRules); + +exports.ShHighlightRules = ShHighlightRules; +}); diff --git a/public/ace_editor/mode-sh.js b/public/ace_editor/mode-sh.js new file mode 100644 index 0000000..da21637 --- /dev/null +++ b/public/ace_editor/mode-sh.js @@ -0,0 +1 @@ +define("ace/mode/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/sh_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("./sh_highlight_rules").ShHighlightRules,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){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 h(c,d.length-e.length,c,d.length))}}.call(i.prototype),b.Mode=i}),define("ace/mode/sh_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("!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set".split("|")),b=e.arrayToMap("[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait".split("|")),c="(?:(?:[1-9]\\d*)|(?:0))",d="(?:\\.\\d+)",f="(?:\\d+)",g="(?:(?:"+f+"?"+d+")|(?:"+f+"\\.))",h="(?:(?:"+g+"|"+f+")"+")",i="(?:"+h+"|"+g+")",j="(?:&"+f+")",k="[a-zA-Z][a-zA-Z0-9_]*",l="(?:(?:\\$"+k+")|(?:"+k+"=))",m="(?:\\$(?:SHLVL|\\$|\\!|\\?))",n="(?:"+k+"\\s*\\(\\))";this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:'"(?:[^\\\\]|\\\\.)*?"'},{token:"variable.language",regex:m},{token:"variable",regex:l},{token:"support.function",regex:n},{token:"support.function",regex:j},{token:"string",regex:"'(?:[^\\\\]|\\\\.)*?'"},{token:"constant.numeric",regex:i},{token:"constant.numeric",regex:c+"\\b"},{token:function(c){return a.hasOwnProperty(c)?"keyword":b.hasOwnProperty(c)?"constant.language":c=="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+"}]}};d.inherits(g,f),b.ShHighlightRules=g}) \ No newline at end of file diff --git a/public/ace_editor/mode-sql-noconflict.js b/public/ace_editor/mode-sql-noconflict.js new file mode 100644 index 0000000..906b92e --- /dev/null +++ b/public/ace_editor/mode-sql-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-sql-uncompressed-noconflict.js b/public/ace_editor/mode-sql-uncompressed-noconflict.js new file mode 100644 index 0000000..67924f8 --- /dev/null +++ b/public/ace_editor/mode-sql-uncompressed-noconflict.js @@ -0,0 +1,159 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* The Original Code is Ajax.org Code Editor (ACE). +* +* Contributor(s): +* Jonathan Camile +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may use your version of this file under +* the terms of any one of the MPL, the GPL or the LGPL. +* +* ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; +}); + diff --git a/public/ace_editor/mode-sql-uncompressed.js b/public/ace_editor/mode-sql-uncompressed.js new file mode 100644 index 0000000..e56ac4c --- /dev/null +++ b/public/ace_editor/mode-sql-uncompressed.js @@ -0,0 +1,159 @@ +/* ***** BEGIN LICENSE BLOCK ***** +* The Original Code is Ajax.org Code Editor (ACE). +* +* Contributor(s): +* Jonathan Camile +* +* Alternatively, the contents of this file may be used under the terms of +* either the GNU General Public License Version 2 or later (the "GPL"), or +* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +* in which case the provisions of the GPL or the LGPL are applicable instead +* of those above. If you wish to allow use of your version of this file only +* under the terms of either the GPL or the LGPL, and not to allow others to +* use your version of this file under the terms of the MPL, indicate your +* decision by deleting the provisions above and replace them with the notice +* and other provisions required by the GPL or the LGPL. If you do not delete +* the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; +}); + diff --git a/public/ace_editor/mode-sql.js b/public/ace_editor/mode-sql.js new file mode 100644 index 0000000..e81fadf --- /dev/null +++ b/public/ace_editor/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}) \ No newline at end of file diff --git a/public/ace_editor/mode-svg-noconflict.js b/public/ace_editor/mode-svg-noconflict.js new file mode 100644 index 0000000..086c8ca --- /dev/null +++ b/public/ace_editor/mode-svg-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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}),ace.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))}}),ace.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=="g.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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?)/,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)}),ace.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(++bf){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)}),ace.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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[g.getEndRule("start")])};d.inherits(i,h),b.JavaScriptHighlightRules=i}),ace.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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},b.DocCommentHighlightRules=f}),ace.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}),ace.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)}),ace.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}),ace.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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-svg-uncompressed-noconflict.js b/public/ace_editor/mode-svg-uncompressed-noconflict.js new file mode 100644 index 0000000..5316242 --- /dev/null +++ b/public/ace_editor/mode-svg-uncompressed-noconflict.js @@ -0,0 +1,2137 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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*)(?)/; + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-svg-uncompressed.js b/public/ace_editor/mode-svg-uncompressed.js new file mode 100644 index 0000000..fef29a8 --- /dev/null +++ b/public/ace_editor/mode-svg-uncompressed.js @@ -0,0 +1,2137 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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*)(?)/; + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * Mihai Sucan + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-6][0-7]?|" + // oct + "37[0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { + "start" : [ + { + token : "comment", + regex : /\/\/.*$/ + }, + DocCommentHighlightRules.getStartRule("doc-start"), + { + token : "comment", // multi line comment + merge : true, + regex : /\/\*/, + next : "comment" + }, { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0[xX][0-9a-fA-F]+\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { // match stuff like: Sound.prototype.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: Sound.prototype.play = myfunc + token : [ + "storage.type", + "punctuation.operator", + "support.function", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)", + next: "function_arguments" + }, { // match stuff like: Sound.play = function() { } + token : [ + "storage.type", + "punctuation.operator", + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: play = function() { } + token : [ + "entity.name.function", + "text", + "keyword.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // match regular function like: function myFunc(arg) { } + token : [ + "storage.type", + "text", + "entity.name.function", + "text", + "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { // match stuff like: foobar: function() { } + token : [ + "entity.name.function", + "text", + "punctuation.operator", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { // Attempt to match : function() { } (this is for issues with 'foo': function() { }) + token : [ + "text", + "text", + "storage.type", + "text", + "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "constant.language.boolean", + regex : /(?:true|false)\b/ + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "regex_allowed" + }, { + token : ["punctuation.operator", "support.function"], + regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:opzzzz|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : ["punctuation.operator", "support.function.dom"], + regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : ["punctuation.operator", "support.constant"], + regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|timeEnd|assert)\b/ + }, { + token : function(value) { + if (globals.hasOwnProperty(value)) + return "variable.language"; + else if (deprecated.hasOwnProperty(value)) + return "invalid.deprecated"; + else if (definitions.hasOwnProperty(value)) + return "storage.type"; + 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": [ + DocCommentHighlightRules.getStartRule("doc-start"), + { + 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}|.)" + }, { + // flag + token: "string.regexp", + regex: "/\\w*", + next: "start", + merge: true + }, { + token: "string.regexp", + 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}|.)" + }, { + token: "string.regexp.charachterclass", + regex: "]", + next: "regex", + merge: true + }, { + token: "string.regexp.charachterclass", + regex: "[^\\\\\\]]+", + merge: true + }, { + token: "empty", + regex: "", + next: "start" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe, + }, { + token: "punctuation.operator", + regex: "[, ]+", + merge: true + }, { + token: "punctuation.operator", + regex: "$", + 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 : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : '[^"\\\\]+', + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qqstring", + merge : true + }, { + token : "string", + regex : '"|$', + next : "start", + merge : true + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "[^'\\\\]+", + merge : true + }, { + token : "string", + regex : "\\\\$", + next : "qstring", + merge : true + }, { + token : "string", + regex : "'|$", + next : "start", + merge : true + } + ] + }; + + this.embedRules(DocCommentHighlightRules, "doc-", + [ 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + merge : true, + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + merge : true, + regex : "\\*\\/", + next : start + }; +}; + + +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-svg.js b/public/ace_editor/mode-svg.js new file mode 100644 index 0000000..952384b --- /dev/null +++ b/public/ace_editor/mode-svg.js @@ -0,0 +1 @@ +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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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=="g.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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?)/,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(++bf){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(?: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:[g.getStartRule("doc-start"),{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}|.)"},{token:"string.regexp",regex:"/\\w*",next:"start",merge:!0},{token:"string.regexp",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}|.)"},{token:"string.regexp.charachterclass",regex:"]",next:"regex",merge:!0},{token:"string.regexp.charachterclass",regex:"[^\\\\\\]]+",merge:!0},{token:"empty",regex:"",next:"start"}],function_arguments:[{token:"variable.parameter",regex:k},{token:"punctuation.operator",regex:"[, ]+",merge:!0},{token:"punctuation.operator",regex:"$",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:"constant.language.escape",regex:l},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}],qstring:[{token:"constant.language.escape",regex:l},{token:"string",regex:"[^'\\\\]+",merge:!0},{token:"string",regex:"\\\\$",next:"qstring",merge:!0},{token:"string",regex:"'|$",next:"start",merge:!0}]},this.embedRules(g,"doc-",[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),f.getStartRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\/\\*(?=\\*)",next:a}},f.getEndRule=function(a){return{token:"comment.doc",merge:!0,regex:"\\*\\/",next:a}},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/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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-text-noconflict.js b/public/ace_editor/mode-text-noconflict.js new file mode 100644 index 0000000..e69de29 diff --git a/public/ace_editor/mode-text-uncompressed-noconflict.js b/public/ace_editor/mode-text-uncompressed-noconflict.js new file mode 100644 index 0000000..e69de29 diff --git a/public/ace_editor/mode-text-uncompressed.js b/public/ace_editor/mode-text-uncompressed.js new file mode 100644 index 0000000..e69de29 diff --git a/public/ace_editor/mode-text.js b/public/ace_editor/mode-text.js new file mode 100644 index 0000000..e69de29 diff --git a/public/ace_editor/mode-textile-noconflict.js b/public/ace_editor/mode-textile-noconflict.js new file mode 100644 index 0000000..b61d5ca --- /dev/null +++ b/public/ace_editor/mode-textile-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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}),ace.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}) \ No newline at end of file diff --git a/public/ace_editor/mode-textile-uncompressed-noconflict.js b/public/ace_editor/mode-textile-uncompressed-noconflict.js new file mode 100644 index 0000000..afdf952 --- /dev/null +++ b/public/ace_editor/mode-textile-uncompressed-noconflict.js @@ -0,0 +1,254 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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; +}); diff --git a/public/ace_editor/mode-textile-uncompressed.js b/public/ace_editor/mode-textile-uncompressed.js new file mode 100644 index 0000000..37a85c3 --- /dev/null +++ b/public/ace_editor/mode-textile-uncompressed.js @@ -0,0 +1,254 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; +}); diff --git a/public/ace_editor/mode-textile.js b/public/ace_editor/mode-textile.js new file mode 100644 index 0000000..3b36437 --- /dev/null +++ b/public/ace_editor/mode-textile.js @@ -0,0 +1 @@ +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}) \ No newline at end of file diff --git a/public/ace_editor/mode-xml-noconflict.js b/public/ace_editor/mode-xml-noconflict.js new file mode 100644 index 0000000..aacb51a --- /dev/null +++ b/public/ace_editor/mode-xml-noconflict.js @@ -0,0 +1 @@ +ace.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}),ace.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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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}),ace.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))}}),ace.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=="g.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}),ace.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?)/,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)}),ace.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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-xml-uncompressed-noconflict.js b/public/ace_editor/mode-xml-uncompressed-noconflict.js new file mode 100644 index 0000000..f1c96a4 --- /dev/null +++ b/public/ace_editor/mode-xml-uncompressed-noconflict.js @@ -0,0 +1,1012 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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*)(?)/; + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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); + +}); diff --git a/public/ace_editor/mode-xml-uncompressed.js b/public/ace_editor/mode-xml-uncompressed.js new file mode 100644 index 0000000..5cdd3bc --- /dev/null +++ b/public/ace_editor/mode-xml-uncompressed.js @@ -0,0 +1,1012 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 : "xml_pe", + regex : "<\\!.*?>" + }, { + token : "meta.tag", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "text", + regex : "\\s+" + }, { + token : "constant.character.entity", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }, { + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == ' + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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*)(?)/; + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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); + +}); diff --git a/public/ace_editor/mode-xml.js b/public/ace_editor/mode-xml.js new file mode 100644 index 0000000..27c038a --- /dev/null +++ b/public/ace_editor/mode-xml.js @@ -0,0 +1 @@ +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:"xml_pe",regex:"<\\!.*?>"},{token:"meta.tag",regex:"<\\/?",next:"tag"},{token:"text",regex:"\\s+"},{token:"constant.character.entity",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"},{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=="g.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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?)/,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(++bf){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)}) \ No newline at end of file diff --git a/public/ace_editor/mode-xquery-noconflict.js b/public/ace_editor/mode-xquery-noconflict.js new file mode 100644 index 0000000..bd1ca8a --- /dev/null +++ b/public/ace_editor/mode-xquery-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/mode/xquery",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xquery_highlight_rules","ace/mode/behaviour/xquery","ace/range"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./xquery_highlight_rules").XQueryHighlightRules,h=a("./behaviour/xquery").XQueryBehaviour,i=a("../range").Range,j=function(a){this.$tokenizer=new f((new g).getRules()),this.$behaviour=new h(a)};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=b.match(/\s*(?:then|else|return|[{\(]|<\w+>)\s*$/);return e&&(d+=c),d},this.checkOutdent=function(a,b,c){return/^\s+$/.test(b)?/^\s*[\}\)]/.test(c):!1},this.autoOutdent=function(a,b,c){var d=b.getLine(c),e=d.match(/^(\s*[\}\)])/);if(!e)return 0;var f=e[1].length,g=b.findMatchingBracket({row:c,column:f});if(!g||g.row==c)return 0;var h=this.$getIndent(b.getLine(g.row));b.replace(new i(c,0,c,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""},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+":)")}}.call(j.prototype),b.Mode=j}),ace.define("ace/mode/xquery_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("return|for|let|where|order|by|declare|function|variable|xquery|version|option|namespace|import|module|when|encoding|switch|default|try|catch|group|tumbling|sliding|window|start|end|at|only|using|stemming|while|external|if|then|else|as|and|or|typeswitch|case|ascending|descending|empty|in|count|updating|insert|delete|replace|value|node|attribute|text|element|into|of|with|contains".split("|"));this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",regex:"<\\!--",next:"comment"},{token:"comment",regex:"\\(:",next:"comment"},{token:"text",regex:"<\\/?",next:"tag"},{token:"constant",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"variable",regex:"\\$[a-zA-Z_][a-zA-Z0-9_\\-:]*\\b"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"text",regex:"\\s+"},{token:"support.function",regex:"\\w[\\w+_\\-:]+(?=\\()"},{token:function(b){return a[b]?"keyword":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\*|=|<|>|\\-|\\+|and|or|eq|ne|lt|gt"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"}],tag:[{token:"text",regex:">",next:"start"},{token:"meta.tag",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",regex:".*:\\)",next:"start"},{token:"comment",regex:".+"}]}};d.inherits(g,f),b.XQueryHighlightRules=g}),ace.define("ace/mode/behaviour/xquery",["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(a){this.inherit(f,["braces","parens","string_dquotes"]),this.parent=a,this.add("brackets","insertion",function(a,b,c,d,e){if(e=="\n"){var f=c.getCursorPosition(),g=d.doc.getLine(f.row),h=g.substring(f.column,f.column+2);if(h=="0&&h.charAt(g.column-1)=="<"){h=h.substring(0,g.column)+"/"+h.substring(g.column);var i=e.doc.getAllLines();i[g.row]=h,a.exec("closeTag",i.join(e.doc.getNewLineCharacter()),g.row)}}return!1})};d.inherits(g,e),b.XQueryBehaviour=g}),ace.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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}) \ No newline at end of file diff --git a/public/ace_editor/mode-xquery-uncompressed-noconflict.js b/public/ace_editor/mode-xquery-uncompressed-noconflict.js new file mode 100644 index 0000000..4596531 --- /dev/null +++ b/public/ace_editor/mode-xquery-uncompressed-noconflict.js @@ -0,0 +1,540 @@ +/* + * eXide - web-based XQuery IDE + * + * Copyright (C) 2011 Wolfgang Meier + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +ace.define('ace/mode/xquery', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xquery_highlight_rules', 'ace/mode/behaviour/xquery', 'ace/range'], function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var Tokenizer = require("../tokenizer").Tokenizer; +var XQueryHighlightRules = require("./xquery_highlight_rules").XQueryHighlightRules; +var XQueryBehaviour = require("./behaviour/xquery").XQueryBehaviour; +var Range = require("../range").Range; + +var Mode = function(parent) { + this.$tokenizer = new Tokenizer(new XQueryHighlightRules().getRules()); + this.$behaviour = new XQueryBehaviour(parent); +}; + +oop.inherits(Mode, TextMode); + +(function() { + + this.getNextLineIndent = function(state, line, tab) { + var indent = this.$getIndent(line); + var match = line.match(/\s*(?:then|else|return|[{\(]|<\w+>)\s*$/); + if (match) + indent += tab; + return indent; + }; + + this.checkOutdent = function(state, line, input) { + if (! /^\s+$/.test(line)) + return false; + + return /^\s*[\}\)]/.test(input); + }; + + this.autoOutdent = function(state, 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 ""; + }; + + 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 + ":)"); + } + }; +}).call(Mode.prototype); + +exports.Mode = Mode; +}); +/* + * eXide - web-based XQuery IDE + * + * Copyright (C) 2011 Wolfgang Meier + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +ace.define('ace/mode/xquery_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 XQueryHighlightRules = function() { + + var keywords = lang.arrayToMap( + ("return|for|let|where|order|by|declare|function|variable|xquery|version|option|namespace|import|module|when|encoding|" + + "switch|default|try|catch|group|tumbling|sliding|window|start|end|at|only|" + + "using|stemming|" + + "while|" + + "external|" + + "if|then|else|as|and|or|typeswitch|case|ascending|descending|empty|in|count|updating|insert|delete|replace|value|node|attribute|text|element|into|of|with|contains").split("|") + ); + + // 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", + regex : "<\\!--", + next : "comment" + }, { + token : "comment", + regex : "\\(:", + next : "comment" + }, { + token : "text", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "constant", // number + regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" + }, { + token : "variable", // variable + regex : "\\$[a-zA-Z_][a-zA-Z0-9_\\-:]*\\b" + }, { + token: "string", + regex : '".*?"' + }, { + token: "string", + regex : "'.*?'" + }, { + token : "text", + regex : "\\s+" + }, { + token: "support.function", + regex: "\\w[\\w+_\\-:]+(?=\\()" + }, { + token : function(value) { + if (keywords[value]) + return "keyword"; + else + return "identifier"; + }, + regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" + }, { + token: "keyword.operator", + regex: "\\*|=|<|>|\\-|\\+|and|or|eq|ne|lt|gt" + }, { + token: "lparen", + regex: "[[({]" + }, { + token: "rparen", + regex: "[\\])}]" + } ], + + tag : [ { + token : "text", + regex : ">", + next : "start" + }, { + token : "meta.tag", + regex : "[-_a-zA-Z0-9:]+" + }, { + token : "text", + regex : "\\s+" + }, { + token : "string", + regex : '".*?"' + }, { + token : "string", + regex : "'.*?'" + } ], + + cdata : [ { + token : "text", + regex : "\\]\\]>", + next : "start" + }, { + token : "text", + regex : "\\s+" + }, { + token : "text", + regex : "(?:[^\\]]|\\](?!\\]>))+" + } ], + + comment : [ { + token : "comment", + regex : ".*?-->", + next : "start" + }, { + token: "comment", + regex : ".*:\\)", + next : "start" + }, { + token : "comment", + regex : ".+" + } ] + }; +}; + +oop.inherits(XQueryHighlightRules, TextHighlightRules); + +exports.XQueryHighlightRules = XQueryHighlightRules; +}); +/* +* eXide - web-based XQuery IDE +* +* Copyright (C) 2011 Wolfgang Meier +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ +ace.define('ace/mode/behaviour/xquery', ['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 XQueryBehaviour = function (parent) { + + this.inherit(CstyleBehaviour, ["braces", "parens", "string_dquotes"]); // Get string behaviour + this.parent = parent; + + this.add("brackets", "insertion", function (state, action, editor, session, text) { + 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 == ' 0 && line.charAt(cursor.column - 1) == "<") { + line = line.substring(0, cursor.column) + "/" + line.substring(cursor.column); + var lines = session.doc.getAllLines(); + lines[cursor.row] = line; + // call mode helper to close the tag if possible + parent.exec("closeTag", lines.join(session.doc.getNewLineCharacter()), cursor.row); + } + } + return false; + }); + } + oop.inherits(XQueryBehaviour, Behaviour); + + exports.XQueryBehaviour = XQueryBehaviour; +}); +/* 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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; +}); diff --git a/public/ace_editor/mode-xquery-uncompressed.js b/public/ace_editor/mode-xquery-uncompressed.js new file mode 100644 index 0000000..1f35638 --- /dev/null +++ b/public/ace_editor/mode-xquery-uncompressed.js @@ -0,0 +1,540 @@ +/* + * eXide - web-based XQuery IDE + * + * Copyright (C) 2011 Wolfgang Meier + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +define('ace/mode/xquery', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/xquery_highlight_rules', 'ace/mode/behaviour/xquery', 'ace/range'], function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var Tokenizer = require("../tokenizer").Tokenizer; +var XQueryHighlightRules = require("./xquery_highlight_rules").XQueryHighlightRules; +var XQueryBehaviour = require("./behaviour/xquery").XQueryBehaviour; +var Range = require("../range").Range; + +var Mode = function(parent) { + this.$tokenizer = new Tokenizer(new XQueryHighlightRules().getRules()); + this.$behaviour = new XQueryBehaviour(parent); +}; + +oop.inherits(Mode, TextMode); + +(function() { + + this.getNextLineIndent = function(state, line, tab) { + var indent = this.$getIndent(line); + var match = line.match(/\s*(?:then|else|return|[{\(]|<\w+>)\s*$/); + if (match) + indent += tab; + return indent; + }; + + this.checkOutdent = function(state, line, input) { + if (! /^\s+$/.test(line)) + return false; + + return /^\s*[\}\)]/.test(input); + }; + + this.autoOutdent = function(state, 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 ""; + }; + + 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 + ":)"); + } + }; +}).call(Mode.prototype); + +exports.Mode = Mode; +}); +/* + * eXide - web-based XQuery IDE + * + * Copyright (C) 2011 Wolfgang Meier + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +define('ace/mode/xquery_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 XQueryHighlightRules = function() { + + var keywords = lang.arrayToMap( + ("return|for|let|where|order|by|declare|function|variable|xquery|version|option|namespace|import|module|when|encoding|" + + "switch|default|try|catch|group|tumbling|sliding|window|start|end|at|only|" + + "using|stemming|" + + "while|" + + "external|" + + "if|then|else|as|and|or|typeswitch|case|ascending|descending|empty|in|count|updating|insert|delete|replace|value|node|attribute|text|element|into|of|with|contains").split("|") + ); + + // 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", + regex : "<\\!--", + next : "comment" + }, { + token : "comment", + regex : "\\(:", + next : "comment" + }, { + token : "text", // opening tag + regex : "<\\/?", + next : "tag" + }, { + token : "constant", // number + regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" + }, { + token : "variable", // variable + regex : "\\$[a-zA-Z_][a-zA-Z0-9_\\-:]*\\b" + }, { + token: "string", + regex : '".*?"' + }, { + token: "string", + regex : "'.*?'" + }, { + token : "text", + regex : "\\s+" + }, { + token: "support.function", + regex: "\\w[\\w+_\\-:]+(?=\\()" + }, { + token : function(value) { + if (keywords[value]) + return "keyword"; + else + return "identifier"; + }, + regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" + }, { + token: "keyword.operator", + regex: "\\*|=|<|>|\\-|\\+|and|or|eq|ne|lt|gt" + }, { + token: "lparen", + regex: "[[({]" + }, { + token: "rparen", + regex: "[\\])}]" + } ], + + tag : [ { + token : "text", + regex : ">", + next : "start" + }, { + token : "meta.tag", + regex : "[-_a-zA-Z0-9:]+" + }, { + token : "text", + regex : "\\s+" + }, { + token : "string", + regex : '".*?"' + }, { + token : "string", + regex : "'.*?'" + } ], + + cdata : [ { + token : "text", + regex : "\\]\\]>", + next : "start" + }, { + token : "text", + regex : "\\s+" + }, { + token : "text", + regex : "(?:[^\\]]|\\](?!\\]>))+" + } ], + + comment : [ { + token : "comment", + regex : ".*?-->", + next : "start" + }, { + token: "comment", + regex : ".*:\\)", + next : "start" + }, { + token : "comment", + regex : ".+" + } ] + }; +}; + +oop.inherits(XQueryHighlightRules, TextHighlightRules); + +exports.XQueryHighlightRules = XQueryHighlightRules; +}); +/* +* eXide - web-based XQuery IDE +* +* Copyright (C) 2011 Wolfgang Meier +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ +define('ace/mode/behaviour/xquery', ['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 XQueryBehaviour = function (parent) { + + this.inherit(CstyleBehaviour, ["braces", "parens", "string_dquotes"]); // Get string behaviour + this.parent = parent; + + this.add("brackets", "insertion", function (state, action, editor, session, text) { + 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 == ' 0 && line.charAt(cursor.column - 1) == "<") { + line = line.substring(0, cursor.column) + "/" + line.substring(cursor.column); + var lines = session.doc.getAllLines(); + lines[cursor.row] = line; + // call mode helper to close the tag if possible + parent.exec("closeTag", lines.join(session.doc.getNewLineCharacter()), cursor.row); + } + } + return false; + }); + } + oop.inherits(XQueryBehaviour, Behaviour); + + exports.XQueryBehaviour = XQueryBehaviour; +}); +/* 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 == '"' || text == "'") { + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "") { + return { + text: quote + selected + quote, + 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(quote); + } + 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(quote) === token.value.length-1)))) { + return { + text: quote + quote, + 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 == quote) { + 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 == '"' || 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; +}); diff --git a/public/ace_editor/mode-xquery.js b/public/ace_editor/mode-xquery.js new file mode 100644 index 0000000..cb6fb87 --- /dev/null +++ b/public/ace_editor/mode-xquery.js @@ -0,0 +1 @@ +define("ace/mode/xquery",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/xquery_highlight_rules","ace/mode/behaviour/xquery","ace/range"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("./text").Mode,f=a("../tokenizer").Tokenizer,g=a("./xquery_highlight_rules").XQueryHighlightRules,h=a("./behaviour/xquery").XQueryBehaviour,i=a("../range").Range,j=function(a){this.$tokenizer=new f((new g).getRules()),this.$behaviour=new h(a)};d.inherits(j,e),function(){this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=b.match(/\s*(?:then|else|return|[{\(]|<\w+>)\s*$/);return e&&(d+=c),d},this.checkOutdent=function(a,b,c){return/^\s+$/.test(b)?/^\s*[\}\)]/.test(c):!1},this.autoOutdent=function(a,b,c){var d=b.getLine(c),e=d.match(/^(\s*[\}\)])/);if(!e)return 0;var f=e[1].length,g=b.findMatchingBracket({row:c,column:f});if(!g||g.row==c)return 0;var h=this.$getIndent(b.getLine(g.row));b.replace(new i(c,0,c,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""},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+":)")}}.call(j.prototype),b.Mode=j}),define("ace/mode/xquery_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("return|for|let|where|order|by|declare|function|variable|xquery|version|option|namespace|import|module|when|encoding|switch|default|try|catch|group|tumbling|sliding|window|start|end|at|only|using|stemming|while|external|if|then|else|as|and|or|typeswitch|case|ascending|descending|empty|in|count|updating|insert|delete|replace|value|node|attribute|text|element|into|of|with|contains".split("|"));this.$rules={start:[{token:"text",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:"xml_pe",regex:"<\\?.*?\\?>"},{token:"comment",regex:"<\\!--",next:"comment"},{token:"comment",regex:"\\(:",next:"comment"},{token:"text",regex:"<\\/?",next:"tag"},{token:"constant",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"variable",regex:"\\$[a-zA-Z_][a-zA-Z0-9_\\-:]*\\b"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"text",regex:"\\s+"},{token:"support.function",regex:"\\w[\\w+_\\-:]+(?=\\()"},{token:function(b){return a[b]?"keyword":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator",regex:"\\*|=|<|>|\\-|\\+|and|or|eq|ne|lt|gt"},{token:"lparen",regex:"[[({]"},{token:"rparen",regex:"[\\])}]"}],tag:[{token:"text",regex:">",next:"start"},{token:"meta.tag",regex:"[-_a-zA-Z0-9:]+"},{token:"text",regex:"\\s+"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"}],cdata:[{token:"text",regex:"\\]\\]>",next:"start"},{token:"text",regex:"\\s+"},{token:"text",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment",regex:".*?-->",next:"start"},{token:"comment",regex:".*:\\)",next:"start"},{token:"comment",regex:".+"}]}};d.inherits(g,f),b.XQueryHighlightRules=g}),define("ace/mode/behaviour/xquery",["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(a){this.inherit(f,["braces","parens","string_dquotes"]),this.parent=a,this.add("brackets","insertion",function(a,b,c,d,e){if(e=="\n"){var f=c.getCursorPosition(),g=d.doc.getLine(f.row),h=g.substring(f.column,f.column+2);if(h=="0&&h.charAt(g.column-1)=="<"){h=h.substring(0,g.column)+"/"+h.substring(g.column);var i=e.doc.getAllLines();i[g.row]=h,a.exec("closeTag",i.join(e.doc.getNewLineCharacter()),g.row)}}return!1})};d.inherits(g,e),b.XQueryBehaviour=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=='"'||e=="'"){var f=e,g=c.getSelectionRange(),h=d.doc.getTextRange(g);if(h!=="")return{text:f+h+f,selection:!1};var i=c.getCursorPosition(),j=d.doc.getLine(i.row),k=j.substring(i.column-1,i.column);if(k=="\\")return null;var l=d.getTokens(g.start.row,g.start.row)[0].tokens,m=0,n,o=-1;for(var p=0;pg.start.column)break;m+=l[p].value.length}if(!n||o<0&&n.type!=="comment"&&(n.type!=="string"||g.start.column!==n.value.length+m-1&&n.value.lastIndexOf(f)===n.value.length-1))return{text:f+f,selection:[1,1]};if(n&&n.type==="string"){var q=j.substring(i.column,i.column+1);if(q==f)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=='"'||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}) \ No newline at end of file diff --git a/public/ace_editor/theme-chrome-noconflict.js b/public/ace_editor/theme-chrome-noconflict.js new file mode 100644 index 0000000..6fa4e39 --- /dev/null +++ b/public/ace_editor/theme-chrome-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/chrome",["require","exports","module","ace/lib/dom"],function(a,b,c){b.cssClass="ace-chrome",b.cssText=".ace-chrome .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-chrome .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-chrome .ace_gutter { background: #e8e8e8; color: #333; overflow : hidden;}.ace-chrome .ace_gutter-layer { width: 100%; text-align: right;}.ace-chrome .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-chrome .ace_text-layer { cursor: text;}.ace-chrome .ace_cursor { border-left: 2px solid black;}.ace-chrome .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid black;}.ace-chrome .ace_line .ace_invisible { color: rgb(191, 191, 191);}.ace-chrome .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-chrome .ace_line .ace_constant.ace_language { color: rgb(88, 92, 246);}.ace-chrome .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-chrome .ace_line .ace_invalid { background-color: rgb(153, 0, 0); color: white;}.ace-chrome .ace_line .ace_fold {}.ace-chrome .ace_line .ace_support.ace_function { color: rgb(60, 76, 114);}.ace-chrome .ace_line .ace_support.ace_constant { color: rgb(6, 150, 14);}.ace-chrome .ace_line .ace_support.ace_type,.ace-chrome .ace_line .ace_support.ace_class { color: rgb(109, 121, 222);}.ace-chrome .ace_variable.ace_parameter { font-style:italic;color:#FD971F;}.ace-chrome .ace_line .ace_keyword.ace_operator { color: rgb(104, 118, 135);}.ace-chrome .ace_line .ace_comment { color: #236e24;}.ace-chrome .ace_line .ace_comment.ace_doc { color: #236e24;}.ace-chrome .ace_line .ace_comment.ace_doc.ace_tag { color: #236e24;}.ace-chrome .ace_line .ace_constant.ace_numeric { color: rgb(0, 0, 205);}.ace-chrome .ace_line .ace_variable { color: rgb(49, 132, 149);}.ace-chrome .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-chrome .ace_entity.ace_name.ace_function { color: #0000A2;}.ace-chrome .ace_markup.ace_markupine { text-decoration:underline;}.ace-chrome .ace_markup.ace_heading { color: rgb(12, 7, 255);}.ace-chrome .ace_markup.ace_list { color:rgb(185, 6, 144);}.ace-chrome .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-chrome .ace_marker-layer .ace_step { background: rgb(252, 255, 0);}.ace-chrome .ace_marker-layer .ace_stack { background: rgb(164, 229, 101);}.ace-chrome .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-chrome .ace_marker-layer .ace_active_line { background: rgba(0, 0, 0, 0.07);}.ace-chrome .ace_marker-layer .ace_selected_word { background: rgb(250, 250, 255); border: 1px solid rgb(200, 200, 250);}.ace-chrome .ace_storage,.ace-chrome .ace_line .ace_keyword,.ace-chrome .ace_meta.ace_tag { color: rgb(147, 15, 128);}.ace-chrome .ace_string.ace_regex { color: rgb(255, 0, 0)}.ace-chrome .ace_line .ace_string,.ace-chrome .ace_entity.ace_other.ace_attribute-name{ color: #994409;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-chrome-uncompressed-noconflict.js b/public/ace_editor/theme-chrome-uncompressed-noconflict.js new file mode 100644 index 0000000..f986390 --- /dev/null +++ b/public/ace_editor/theme-chrome-uncompressed-noconflict.js @@ -0,0 +1,207 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/chrome', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.cssClass = "ace-chrome"; +exports.cssText = ".ace-chrome .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-chrome .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-chrome .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ + overflow : hidden;\ +}\ +\ +.ace-chrome .ace_gutter-layer {\ + width: 100%;\ + text-align: right;\ +}\ +\ +.ace-chrome .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-chrome .ace_text-layer {\ + cursor: text;\ +}\ +\ +.ace-chrome .ace_cursor {\ + border-left: 2px solid black;\ +}\ +\ +.ace-chrome .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid black;\ +}\ +\ +.ace-chrome .ace_line .ace_invisible {\ + color: rgb(191, 191, 191);\ +}\ +\ +.ace-chrome .ace_line .ace_constant.ace_buildin {\ + color: rgb(88, 72, 246);\ +}\ +\ +.ace-chrome .ace_line .ace_constant.ace_language {\ + color: rgb(88, 92, 246);\ +}\ +\ +.ace-chrome .ace_line .ace_constant.ace_library {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-chrome .ace_line .ace_invalid {\ + background-color: rgb(153, 0, 0);\ + color: white;\ +}\ +\ +.ace-chrome .ace_line .ace_fold {\ +}\ +\ +.ace-chrome .ace_line .ace_support.ace_function {\ + color: rgb(60, 76, 114);\ +}\ +\ +.ace-chrome .ace_line .ace_support.ace_constant {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-chrome .ace_line .ace_support.ace_type,\ +.ace-chrome .ace_line .ace_support.ace_class {\ + color: rgb(109, 121, 222);\ +}\ +\ +.ace-chrome .ace_variable.ace_parameter {\ + font-style:italic;\ +color:#FD971F;\ +}\ +.ace-chrome .ace_line .ace_keyword.ace_operator {\ + color: rgb(104, 118, 135);\ +}\ +\ +.ace-chrome .ace_line .ace_comment {\ + color: #236e24;\ +}\ +\ +.ace-chrome .ace_line .ace_comment.ace_doc {\ + color: #236e24;\ +}\ +\ +.ace-chrome .ace_line .ace_comment.ace_doc.ace_tag {\ + color: #236e24;\ +}\ +\ +.ace-chrome .ace_line .ace_constant.ace_numeric {\ + color: rgb(0, 0, 205);\ +}\ +\ +.ace-chrome .ace_line .ace_variable {\ + color: rgb(49, 132, 149);\ +}\ +\ +.ace-chrome .ace_line .ace_xml_pe {\ + color: rgb(104, 104, 91);\ +}\ +\ +.ace-chrome .ace_entity.ace_name.ace_function {\ + color: #0000A2;\ +}\ +\ +.ace-chrome .ace_markup.ace_markupine {\ + text-decoration:underline;\ +}\ +\ +.ace-chrome .ace_markup.ace_heading {\ + color: rgb(12, 7, 255);\ +}\ +\ +.ace-chrome .ace_markup.ace_list {\ + color:rgb(185, 6, 144);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_selection {\ + background: rgb(181, 213, 255);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_step {\ + background: rgb(252, 255, 0);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_stack {\ + background: rgb(164, 229, 101);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgb(192, 192, 192);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_active_line {\ + background: rgba(0, 0, 0, 0.07);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_selected_word {\ + background: rgb(250, 250, 255);\ + border: 1px solid rgb(200, 200, 250);\ +}\ +\ +.ace-chrome .ace_storage,\ +.ace-chrome .ace_line .ace_keyword,\ +.ace-chrome .ace_meta.ace_tag {\ + color: rgb(147, 15, 128);\ +}\ +\ +.ace-chrome .ace_string.ace_regex {\ + color: rgb(255, 0, 0)\ +}\ +\ +.ace-chrome .ace_line .ace_string,\ +.ace-chrome .ace_entity.ace_other.ace_attribute-name{\ + color: #994409;\ +}"; + +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); + +}); diff --git a/public/ace_editor/theme-chrome-uncompressed.js b/public/ace_editor/theme-chrome-uncompressed.js new file mode 100644 index 0000000..57700c4 --- /dev/null +++ b/public/ace_editor/theme-chrome-uncompressed.js @@ -0,0 +1,207 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/chrome', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.cssClass = "ace-chrome"; +exports.cssText = ".ace-chrome .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-chrome .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-chrome .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ + overflow : hidden;\ +}\ +\ +.ace-chrome .ace_gutter-layer {\ + width: 100%;\ + text-align: right;\ +}\ +\ +.ace-chrome .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-chrome .ace_text-layer {\ + cursor: text;\ +}\ +\ +.ace-chrome .ace_cursor {\ + border-left: 2px solid black;\ +}\ +\ +.ace-chrome .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid black;\ +}\ +\ +.ace-chrome .ace_line .ace_invisible {\ + color: rgb(191, 191, 191);\ +}\ +\ +.ace-chrome .ace_line .ace_constant.ace_buildin {\ + color: rgb(88, 72, 246);\ +}\ +\ +.ace-chrome .ace_line .ace_constant.ace_language {\ + color: rgb(88, 92, 246);\ +}\ +\ +.ace-chrome .ace_line .ace_constant.ace_library {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-chrome .ace_line .ace_invalid {\ + background-color: rgb(153, 0, 0);\ + color: white;\ +}\ +\ +.ace-chrome .ace_line .ace_fold {\ +}\ +\ +.ace-chrome .ace_line .ace_support.ace_function {\ + color: rgb(60, 76, 114);\ +}\ +\ +.ace-chrome .ace_line .ace_support.ace_constant {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-chrome .ace_line .ace_support.ace_type,\ +.ace-chrome .ace_line .ace_support.ace_class {\ + color: rgb(109, 121, 222);\ +}\ +\ +.ace-chrome .ace_variable.ace_parameter {\ + font-style:italic;\ +color:#FD971F;\ +}\ +.ace-chrome .ace_line .ace_keyword.ace_operator {\ + color: rgb(104, 118, 135);\ +}\ +\ +.ace-chrome .ace_line .ace_comment {\ + color: #236e24;\ +}\ +\ +.ace-chrome .ace_line .ace_comment.ace_doc {\ + color: #236e24;\ +}\ +\ +.ace-chrome .ace_line .ace_comment.ace_doc.ace_tag {\ + color: #236e24;\ +}\ +\ +.ace-chrome .ace_line .ace_constant.ace_numeric {\ + color: rgb(0, 0, 205);\ +}\ +\ +.ace-chrome .ace_line .ace_variable {\ + color: rgb(49, 132, 149);\ +}\ +\ +.ace-chrome .ace_line .ace_xml_pe {\ + color: rgb(104, 104, 91);\ +}\ +\ +.ace-chrome .ace_entity.ace_name.ace_function {\ + color: #0000A2;\ +}\ +\ +.ace-chrome .ace_markup.ace_markupine {\ + text-decoration:underline;\ +}\ +\ +.ace-chrome .ace_markup.ace_heading {\ + color: rgb(12, 7, 255);\ +}\ +\ +.ace-chrome .ace_markup.ace_list {\ + color:rgb(185, 6, 144);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_selection {\ + background: rgb(181, 213, 255);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_step {\ + background: rgb(252, 255, 0);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_stack {\ + background: rgb(164, 229, 101);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgb(192, 192, 192);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_active_line {\ + background: rgba(0, 0, 0, 0.07);\ +}\ +\ +.ace-chrome .ace_marker-layer .ace_selected_word {\ + background: rgb(250, 250, 255);\ + border: 1px solid rgb(200, 200, 250);\ +}\ +\ +.ace-chrome .ace_storage,\ +.ace-chrome .ace_line .ace_keyword,\ +.ace-chrome .ace_meta.ace_tag {\ + color: rgb(147, 15, 128);\ +}\ +\ +.ace-chrome .ace_string.ace_regex {\ + color: rgb(255, 0, 0)\ +}\ +\ +.ace-chrome .ace_line .ace_string,\ +.ace-chrome .ace_entity.ace_other.ace_attribute-name{\ + color: #994409;\ +}"; + +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); + +}); diff --git a/public/ace_editor/theme-chrome.js b/public/ace_editor/theme-chrome.js new file mode 100644 index 0000000..dc0af00 --- /dev/null +++ b/public/ace_editor/theme-chrome.js @@ -0,0 +1 @@ +define("ace/theme/chrome",["require","exports","module","ace/lib/dom"],function(a,b,c){b.cssClass="ace-chrome",b.cssText=".ace-chrome .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-chrome .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-chrome .ace_gutter { background: #e8e8e8; color: #333; overflow : hidden;}.ace-chrome .ace_gutter-layer { width: 100%; text-align: right;}.ace-chrome .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-chrome .ace_text-layer { cursor: text;}.ace-chrome .ace_cursor { border-left: 2px solid black;}.ace-chrome .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid black;}.ace-chrome .ace_line .ace_invisible { color: rgb(191, 191, 191);}.ace-chrome .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-chrome .ace_line .ace_constant.ace_language { color: rgb(88, 92, 246);}.ace-chrome .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-chrome .ace_line .ace_invalid { background-color: rgb(153, 0, 0); color: white;}.ace-chrome .ace_line .ace_fold {}.ace-chrome .ace_line .ace_support.ace_function { color: rgb(60, 76, 114);}.ace-chrome .ace_line .ace_support.ace_constant { color: rgb(6, 150, 14);}.ace-chrome .ace_line .ace_support.ace_type,.ace-chrome .ace_line .ace_support.ace_class { color: rgb(109, 121, 222);}.ace-chrome .ace_variable.ace_parameter { font-style:italic;color:#FD971F;}.ace-chrome .ace_line .ace_keyword.ace_operator { color: rgb(104, 118, 135);}.ace-chrome .ace_line .ace_comment { color: #236e24;}.ace-chrome .ace_line .ace_comment.ace_doc { color: #236e24;}.ace-chrome .ace_line .ace_comment.ace_doc.ace_tag { color: #236e24;}.ace-chrome .ace_line .ace_constant.ace_numeric { color: rgb(0, 0, 205);}.ace-chrome .ace_line .ace_variable { color: rgb(49, 132, 149);}.ace-chrome .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-chrome .ace_entity.ace_name.ace_function { color: #0000A2;}.ace-chrome .ace_markup.ace_markupine { text-decoration:underline;}.ace-chrome .ace_markup.ace_heading { color: rgb(12, 7, 255);}.ace-chrome .ace_markup.ace_list { color:rgb(185, 6, 144);}.ace-chrome .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-chrome .ace_marker-layer .ace_step { background: rgb(252, 255, 0);}.ace-chrome .ace_marker-layer .ace_stack { background: rgb(164, 229, 101);}.ace-chrome .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-chrome .ace_marker-layer .ace_active_line { background: rgba(0, 0, 0, 0.07);}.ace-chrome .ace_marker-layer .ace_selected_word { background: rgb(250, 250, 255); border: 1px solid rgb(200, 200, 250);}.ace-chrome .ace_storage,.ace-chrome .ace_line .ace_keyword,.ace-chrome .ace_meta.ace_tag { color: rgb(147, 15, 128);}.ace-chrome .ace_string.ace_regex { color: rgb(255, 0, 0)}.ace-chrome .ace_line .ace_string,.ace-chrome .ace_entity.ace_other.ace_attribute-name{ color: #994409;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-clouds-noconflict.js b/public/ace_editor/theme-clouds-noconflict.js new file mode 100644 index 0000000..cfff36a --- /dev/null +++ b/public/ace_editor/theme-clouds-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/clouds",["require","exports","module","ace/lib/dom"],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.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #FFFFFF; border-radius: 2px;}.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, .ace-clouds .ace_meta { 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_storage { 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)}) \ No newline at end of file diff --git a/public/ace_editor/theme-clouds-uncompressed-noconflict.js b/public/ace_editor/theme-clouds-uncompressed-noconflict.js new file mode 100644 index 0000000..f332633 --- /dev/null +++ b/public/ace_editor/theme-clouds-uncompressed-noconflict.js @@ -0,0 +1,160 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/clouds', ['require', 'exports', 'module' , 'ace/lib/dom'], 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.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #FFFFFF;\ + border-radius: 2px;\ +}\ +\ +.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, .ace-clouds .ace_meta {\ + 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_storage {\ + 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); +}); diff --git a/public/ace_editor/theme-clouds-uncompressed.js b/public/ace_editor/theme-clouds-uncompressed.js new file mode 100644 index 0000000..df3585c --- /dev/null +++ b/public/ace_editor/theme-clouds-uncompressed.js @@ -0,0 +1,160 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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' , 'ace/lib/dom'], 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.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #FFFFFF;\ + border-radius: 2px;\ +}\ +\ +.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, .ace-clouds .ace_meta {\ + 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_storage {\ + 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); +}); diff --git a/public/ace_editor/theme-clouds.js b/public/ace_editor/theme-clouds.js new file mode 100644 index 0000000..efc9705 --- /dev/null +++ b/public/ace_editor/theme-clouds.js @@ -0,0 +1 @@ +define("ace/theme/clouds",["require","exports","module","ace/lib/dom"],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.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #FFFFFF; border-radius: 2px;}.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, .ace-clouds .ace_meta { 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_storage { 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)}) \ No newline at end of file diff --git a/public/ace_editor/theme-clouds_midnight-noconflict.js b/public/ace_editor/theme-clouds_midnight-noconflict.js new file mode 100644 index 0000000..ec1e0b6 --- /dev/null +++ b/public/ace_editor/theme-clouds_midnight-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/clouds_midnight",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-clouds-midnight",b.cssText=".ace-clouds-midnight .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-clouds-midnight .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-clouds-midnight .ace_gutter { background: #e8e8e8; color: #333;}.ace-clouds-midnight .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-clouds-midnight .ace_scroller { background-color: #191919;}.ace-clouds-midnight .ace_text-layer { cursor: text; color: #929292;}.ace-clouds-midnight .ace_cursor { border-left: 2px solid #7DA5DC;}.ace-clouds-midnight .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #7DA5DC;}.ace-clouds-midnight .ace_marker-layer .ace_selection { background: #000000;}.ace-clouds-midnight.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #191919; border-radius: 2px;}.ace-clouds-midnight .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-clouds-midnight .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #BFBFBF;}.ace-clouds-midnight .ace_marker-layer .ace_active_line { background: rgba(215, 215, 215, 0.031);}.ace-clouds-midnight .ace_marker-layer .ace_selected_word { border: 1px solid #000000;}.ace-clouds-midnight .ace_invisible { color: #BFBFBF;}.ace-clouds-midnight .ace_keyword, .ace-clouds-midnight .ace_meta { color:#927C5D;}.ace-clouds-midnight .ace_keyword.ace_operator { color:#4B4B4B;}.ace-clouds-midnight .ace_constant.ace_language { color:#39946A;}.ace-clouds-midnight .ace_constant.ace_numeric { color:#46A609;}.ace-clouds-midnight .ace_invalid { color:#FFFFFF;background-color:#E92E2E;}.ace-clouds-midnight .ace_fold { background-color: #927C5D; border-color: #929292;}.ace-clouds-midnight .ace_support.ace_function { color:#E92E2E;}.ace-clouds-midnight .ace_storage { color:#E92E2E;}.ace-clouds-midnight .ace_string { color:#5D90CD;}.ace-clouds-midnight .ace_comment { color:#3C403B;}.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name { color:#606060;}.ace-clouds-midnight .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-clouds_midnight-uncompressed-noconflict.js b/public/ace_editor/theme-clouds_midnight-uncompressed-noconflict.js new file mode 100644 index 0000000..944da51 --- /dev/null +++ b/public/ace_editor/theme-clouds_midnight-uncompressed-noconflict.js @@ -0,0 +1,161 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/clouds_midnight', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-clouds-midnight"; +exports.cssText = "\ +.ace-clouds-midnight .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-clouds-midnight .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-clouds-midnight .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-clouds-midnight .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-clouds-midnight .ace_scroller {\ + background-color: #191919;\ +}\ +\ +.ace-clouds-midnight .ace_text-layer {\ + cursor: text;\ + color: #929292;\ +}\ +\ +.ace-clouds-midnight .ace_cursor {\ + border-left: 2px solid #7DA5DC;\ +}\ +\ +.ace-clouds-midnight .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #7DA5DC;\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_selection {\ + background: #000000;\ +}\ +\ +.ace-clouds-midnight.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #191919;\ + border-radius: 2px;\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #BFBFBF;\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_active_line {\ + background: rgba(215, 215, 215, 0.031);\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_selected_word {\ + border: 1px solid #000000;\ +}\ +\ +.ace-clouds-midnight .ace_invisible {\ + color: #BFBFBF;\ +}\ +\ +.ace-clouds-midnight .ace_keyword, .ace-clouds-midnight .ace_meta {\ + color:#927C5D;\ +}\ +\ +.ace-clouds-midnight .ace_keyword.ace_operator {\ + color:#4B4B4B;\ +}\ +\ +.ace-clouds-midnight .ace_constant.ace_language {\ + color:#39946A;\ +}\ +\ +.ace-clouds-midnight .ace_constant.ace_numeric {\ + color:#46A609;\ +}\ +\ +.ace-clouds-midnight .ace_invalid {\ + color:#FFFFFF;\ +background-color:#E92E2E;\ +}\ +\ +.ace-clouds-midnight .ace_fold {\ + background-color: #927C5D;\ + border-color: #929292;\ +}\ +\ +.ace-clouds-midnight .ace_support.ace_function {\ + color:#E92E2E;\ +}\ +\ +.ace-clouds-midnight .ace_storage {\ + color:#E92E2E;\ +}\ +\ +.ace-clouds-midnight .ace_string {\ + color:#5D90CD;\ +}\ +\ +.ace-clouds-midnight .ace_comment {\ + color:#3C403B;\ +}\ +\ +.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\ + color:#606060;\ +}\ +\ +.ace-clouds-midnight .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-clouds_midnight-uncompressed.js b/public/ace_editor/theme-clouds_midnight-uncompressed.js new file mode 100644 index 0000000..343a683 --- /dev/null +++ b/public/ace_editor/theme-clouds_midnight-uncompressed.js @@ -0,0 +1,161 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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_midnight', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-clouds-midnight"; +exports.cssText = "\ +.ace-clouds-midnight .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-clouds-midnight .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-clouds-midnight .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-clouds-midnight .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-clouds-midnight .ace_scroller {\ + background-color: #191919;\ +}\ +\ +.ace-clouds-midnight .ace_text-layer {\ + cursor: text;\ + color: #929292;\ +}\ +\ +.ace-clouds-midnight .ace_cursor {\ + border-left: 2px solid #7DA5DC;\ +}\ +\ +.ace-clouds-midnight .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #7DA5DC;\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_selection {\ + background: #000000;\ +}\ +\ +.ace-clouds-midnight.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #191919;\ + border-radius: 2px;\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #BFBFBF;\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_active_line {\ + background: rgba(215, 215, 215, 0.031);\ +}\ +\ +.ace-clouds-midnight .ace_marker-layer .ace_selected_word {\ + border: 1px solid #000000;\ +}\ +\ +.ace-clouds-midnight .ace_invisible {\ + color: #BFBFBF;\ +}\ +\ +.ace-clouds-midnight .ace_keyword, .ace-clouds-midnight .ace_meta {\ + color:#927C5D;\ +}\ +\ +.ace-clouds-midnight .ace_keyword.ace_operator {\ + color:#4B4B4B;\ +}\ +\ +.ace-clouds-midnight .ace_constant.ace_language {\ + color:#39946A;\ +}\ +\ +.ace-clouds-midnight .ace_constant.ace_numeric {\ + color:#46A609;\ +}\ +\ +.ace-clouds-midnight .ace_invalid {\ + color:#FFFFFF;\ +background-color:#E92E2E;\ +}\ +\ +.ace-clouds-midnight .ace_fold {\ + background-color: #927C5D;\ + border-color: #929292;\ +}\ +\ +.ace-clouds-midnight .ace_support.ace_function {\ + color:#E92E2E;\ +}\ +\ +.ace-clouds-midnight .ace_storage {\ + color:#E92E2E;\ +}\ +\ +.ace-clouds-midnight .ace_string {\ + color:#5D90CD;\ +}\ +\ +.ace-clouds-midnight .ace_comment {\ + color:#3C403B;\ +}\ +\ +.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\ + color:#606060;\ +}\ +\ +.ace-clouds-midnight .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-clouds_midnight.js b/public/ace_editor/theme-clouds_midnight.js new file mode 100644 index 0000000..3a9eb7e --- /dev/null +++ b/public/ace_editor/theme-clouds_midnight.js @@ -0,0 +1 @@ +define("ace/theme/clouds_midnight",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-clouds-midnight",b.cssText=".ace-clouds-midnight .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-clouds-midnight .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-clouds-midnight .ace_gutter { background: #e8e8e8; color: #333;}.ace-clouds-midnight .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-clouds-midnight .ace_scroller { background-color: #191919;}.ace-clouds-midnight .ace_text-layer { cursor: text; color: #929292;}.ace-clouds-midnight .ace_cursor { border-left: 2px solid #7DA5DC;}.ace-clouds-midnight .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #7DA5DC;}.ace-clouds-midnight .ace_marker-layer .ace_selection { background: #000000;}.ace-clouds-midnight.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #191919; border-radius: 2px;}.ace-clouds-midnight .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-clouds-midnight .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #BFBFBF;}.ace-clouds-midnight .ace_marker-layer .ace_active_line { background: rgba(215, 215, 215, 0.031);}.ace-clouds-midnight .ace_marker-layer .ace_selected_word { border: 1px solid #000000;}.ace-clouds-midnight .ace_invisible { color: #BFBFBF;}.ace-clouds-midnight .ace_keyword, .ace-clouds-midnight .ace_meta { color:#927C5D;}.ace-clouds-midnight .ace_keyword.ace_operator { color:#4B4B4B;}.ace-clouds-midnight .ace_constant.ace_language { color:#39946A;}.ace-clouds-midnight .ace_constant.ace_numeric { color:#46A609;}.ace-clouds-midnight .ace_invalid { color:#FFFFFF;background-color:#E92E2E;}.ace-clouds-midnight .ace_fold { background-color: #927C5D; border-color: #929292;}.ace-clouds-midnight .ace_support.ace_function { color:#E92E2E;}.ace-clouds-midnight .ace_storage { color:#E92E2E;}.ace-clouds-midnight .ace_string { color:#5D90CD;}.ace-clouds-midnight .ace_comment { color:#3C403B;}.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name { color:#606060;}.ace-clouds-midnight .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-cobalt-noconflict.js b/public/ace_editor/theme-cobalt-noconflict.js new file mode 100644 index 0000000..f667243 --- /dev/null +++ b/public/ace_editor/theme-cobalt-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/cobalt",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-cobalt",b.cssText=".ace-cobalt .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-cobalt .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-cobalt .ace_gutter { background: #e8e8e8; color: #333;}.ace-cobalt .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-cobalt .ace_scroller { background-color: #002240;}.ace-cobalt .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-cobalt .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-cobalt .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-cobalt .ace_marker-layer .ace_selection { background: rgba(179, 101, 57, 0.75);}.ace-cobalt.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #002240; border-radius: 2px;}.ace-cobalt .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-cobalt .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(255, 255, 255, 0.15);}.ace-cobalt .ace_marker-layer .ace_active_line { background: rgba(0, 0, 0, 0.35);}.ace-cobalt .ace_marker-layer .ace_selected_word { border: 1px solid rgba(179, 101, 57, 0.75);}.ace-cobalt .ace_invisible { color: rgba(255, 255, 255, 0.15);}.ace-cobalt .ace_keyword, .ace-cobalt .ace_meta { color:#FF9D00;}.ace-cobalt .ace_constant, .ace-cobalt .ace_constant.ace_other { color:#FF628C;}.ace-cobalt .ace_constant.ace_character, { color:#FF628C;}.ace-cobalt .ace_constant.ace_character.ace_escape, { color:#FF628C;}.ace-cobalt .ace_invalid { color:#F8F8F8;background-color:#800F00;}.ace-cobalt .ace_support { color:#80FFBB;}.ace-cobalt .ace_support.ace_constant { color:#EB939A;}.ace-cobalt .ace_fold { background-color: #FF9D00; border-color: #FFFFFF;}.ace-cobalt .ace_support.ace_function { color:#FFB054;}.ace-cobalt .ace_storage { color:#FFEE80;}.ace-cobalt .ace_string.ace_regexp { color:#80FFC2;}.ace-cobalt .ace_comment { font-style:italic;color:#0088FF;}.ace-cobalt .ace_variable { color:#CCCCCC;}.ace-cobalt .ace_variable.ace_language { color:#FF80E1;}.ace-cobalt .ace_meta.ace_tag { color:#9EFFFF;}.ace-cobalt .ace_markup.ace_underline { text-decoration:underline;}.ace-cobalt .ace_markup.ace_heading { color:#C8E4FD;background-color:#001221;}.ace-cobalt .ace_markup.ace_list { background-color:#130D26;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-cobalt-uncompressed-noconflict.js b/public/ace_editor/theme-cobalt-uncompressed-noconflict.js new file mode 100644 index 0000000..dea9382 --- /dev/null +++ b/public/ace_editor/theme-cobalt-uncompressed-noconflict.js @@ -0,0 +1,187 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/cobalt', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-cobalt"; +exports.cssText = "\ +.ace-cobalt .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-cobalt .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-cobalt .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-cobalt .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-cobalt .ace_scroller {\ + background-color: #002240;\ +}\ +\ +.ace-cobalt .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-cobalt .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-cobalt .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_selection {\ + background: rgba(179, 101, 57, 0.75);\ +}\ +\ +.ace-cobalt.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #002240;\ + border-radius: 2px;\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(255, 255, 255, 0.15);\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_active_line {\ + background: rgba(0, 0, 0, 0.35);\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(179, 101, 57, 0.75);\ +}\ +\ +.ace-cobalt .ace_invisible {\ + color: rgba(255, 255, 255, 0.15);\ +}\ +\ +.ace-cobalt .ace_keyword, .ace-cobalt .ace_meta {\ + color:#FF9D00;\ +}\ +\ +.ace-cobalt .ace_constant, .ace-cobalt .ace_constant.ace_other {\ + color:#FF628C;\ +}\ +\ +.ace-cobalt .ace_constant.ace_character, {\ + color:#FF628C;\ +}\ +\ +.ace-cobalt .ace_constant.ace_character.ace_escape, {\ + color:#FF628C;\ +}\ +\ +.ace-cobalt .ace_invalid {\ + color:#F8F8F8;\ +background-color:#800F00;\ +}\ +\ +.ace-cobalt .ace_support {\ + color:#80FFBB;\ +}\ +\ +.ace-cobalt .ace_support.ace_constant {\ + color:#EB939A;\ +}\ +\ +.ace-cobalt .ace_fold {\ + background-color: #FF9D00;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-cobalt .ace_support.ace_function {\ + color:#FFB054;\ +}\ +\ +.ace-cobalt .ace_storage {\ + color:#FFEE80;\ +}\ +\ +.ace-cobalt .ace_string.ace_regexp {\ + color:#80FFC2;\ +}\ +\ +.ace-cobalt .ace_comment {\ + font-style:italic;\ +color:#0088FF;\ +}\ +\ +.ace-cobalt .ace_variable {\ + color:#CCCCCC;\ +}\ +\ +.ace-cobalt .ace_variable.ace_language {\ + color:#FF80E1;\ +}\ +\ +.ace-cobalt .ace_meta.ace_tag {\ + color:#9EFFFF;\ +}\ +\ +.ace-cobalt .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-cobalt .ace_markup.ace_heading {\ + color:#C8E4FD;\ +background-color:#001221;\ +}\ +\ +.ace-cobalt .ace_markup.ace_list {\ + background-color:#130D26;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-cobalt-uncompressed.js b/public/ace_editor/theme-cobalt-uncompressed.js new file mode 100644 index 0000000..e932be3 --- /dev/null +++ b/public/ace_editor/theme-cobalt-uncompressed.js @@ -0,0 +1,187 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/cobalt', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-cobalt"; +exports.cssText = "\ +.ace-cobalt .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-cobalt .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-cobalt .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-cobalt .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-cobalt .ace_scroller {\ + background-color: #002240;\ +}\ +\ +.ace-cobalt .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-cobalt .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-cobalt .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_selection {\ + background: rgba(179, 101, 57, 0.75);\ +}\ +\ +.ace-cobalt.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #002240;\ + border-radius: 2px;\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(255, 255, 255, 0.15);\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_active_line {\ + background: rgba(0, 0, 0, 0.35);\ +}\ +\ +.ace-cobalt .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(179, 101, 57, 0.75);\ +}\ +\ +.ace-cobalt .ace_invisible {\ + color: rgba(255, 255, 255, 0.15);\ +}\ +\ +.ace-cobalt .ace_keyword, .ace-cobalt .ace_meta {\ + color:#FF9D00;\ +}\ +\ +.ace-cobalt .ace_constant, .ace-cobalt .ace_constant.ace_other {\ + color:#FF628C;\ +}\ +\ +.ace-cobalt .ace_constant.ace_character, {\ + color:#FF628C;\ +}\ +\ +.ace-cobalt .ace_constant.ace_character.ace_escape, {\ + color:#FF628C;\ +}\ +\ +.ace-cobalt .ace_invalid {\ + color:#F8F8F8;\ +background-color:#800F00;\ +}\ +\ +.ace-cobalt .ace_support {\ + color:#80FFBB;\ +}\ +\ +.ace-cobalt .ace_support.ace_constant {\ + color:#EB939A;\ +}\ +\ +.ace-cobalt .ace_fold {\ + background-color: #FF9D00;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-cobalt .ace_support.ace_function {\ + color:#FFB054;\ +}\ +\ +.ace-cobalt .ace_storage {\ + color:#FFEE80;\ +}\ +\ +.ace-cobalt .ace_string.ace_regexp {\ + color:#80FFC2;\ +}\ +\ +.ace-cobalt .ace_comment {\ + font-style:italic;\ +color:#0088FF;\ +}\ +\ +.ace-cobalt .ace_variable {\ + color:#CCCCCC;\ +}\ +\ +.ace-cobalt .ace_variable.ace_language {\ + color:#FF80E1;\ +}\ +\ +.ace-cobalt .ace_meta.ace_tag {\ + color:#9EFFFF;\ +}\ +\ +.ace-cobalt .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-cobalt .ace_markup.ace_heading {\ + color:#C8E4FD;\ +background-color:#001221;\ +}\ +\ +.ace-cobalt .ace_markup.ace_list {\ + background-color:#130D26;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-cobalt.js b/public/ace_editor/theme-cobalt.js new file mode 100644 index 0000000..09abb0e --- /dev/null +++ b/public/ace_editor/theme-cobalt.js @@ -0,0 +1 @@ +define("ace/theme/cobalt",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-cobalt",b.cssText=".ace-cobalt .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-cobalt .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-cobalt .ace_gutter { background: #e8e8e8; color: #333;}.ace-cobalt .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-cobalt .ace_scroller { background-color: #002240;}.ace-cobalt .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-cobalt .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-cobalt .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-cobalt .ace_marker-layer .ace_selection { background: rgba(179, 101, 57, 0.75);}.ace-cobalt.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #002240; border-radius: 2px;}.ace-cobalt .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-cobalt .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(255, 255, 255, 0.15);}.ace-cobalt .ace_marker-layer .ace_active_line { background: rgba(0, 0, 0, 0.35);}.ace-cobalt .ace_marker-layer .ace_selected_word { border: 1px solid rgba(179, 101, 57, 0.75);}.ace-cobalt .ace_invisible { color: rgba(255, 255, 255, 0.15);}.ace-cobalt .ace_keyword, .ace-cobalt .ace_meta { color:#FF9D00;}.ace-cobalt .ace_constant, .ace-cobalt .ace_constant.ace_other { color:#FF628C;}.ace-cobalt .ace_constant.ace_character, { color:#FF628C;}.ace-cobalt .ace_constant.ace_character.ace_escape, { color:#FF628C;}.ace-cobalt .ace_invalid { color:#F8F8F8;background-color:#800F00;}.ace-cobalt .ace_support { color:#80FFBB;}.ace-cobalt .ace_support.ace_constant { color:#EB939A;}.ace-cobalt .ace_fold { background-color: #FF9D00; border-color: #FFFFFF;}.ace-cobalt .ace_support.ace_function { color:#FFB054;}.ace-cobalt .ace_storage { color:#FFEE80;}.ace-cobalt .ace_string.ace_regexp { color:#80FFC2;}.ace-cobalt .ace_comment { font-style:italic;color:#0088FF;}.ace-cobalt .ace_variable { color:#CCCCCC;}.ace-cobalt .ace_variable.ace_language { color:#FF80E1;}.ace-cobalt .ace_meta.ace_tag { color:#9EFFFF;}.ace-cobalt .ace_markup.ace_underline { text-decoration:underline;}.ace-cobalt .ace_markup.ace_heading { color:#C8E4FD;background-color:#001221;}.ace-cobalt .ace_markup.ace_list { background-color:#130D26;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-crimson_editor-noconflict.js b/public/ace_editor/theme-crimson_editor-noconflict.js new file mode 100644 index 0000000..68682ef --- /dev/null +++ b/public/ace_editor/theme-crimson_editor-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/crimson_editor",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssText=".ace-crimson-editor .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-crimson-editor .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-crimson-editor .ace_gutter { width: 50px; background: #e8e8e8; color: #333; overflow : hidden;}.ace-crimson-editor .ace_gutter-layer { width: 100%; text-align: right;}.ace-crimson-editor .ace_gutter-layer .ace_gutter-cell { padding-right: 6px;}.ace-crimson-editor .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-crimson-editor .ace_text-layer { cursor: text; color: rgb(64, 64, 64);}.ace-crimson-editor .ace_cursor { border-left: 2px solid black;}.ace-crimson-editor .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid black;}.ace-crimson-editor .ace_line .ace_invisible { color: rgb(191, 191, 191);}.ace-crimson-editor .ace_line .ace_identifier { color: black;}.ace-crimson-editor .ace_line .ace_keyword { color: blue;}.ace-crimson-editor .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-crimson-editor .ace_line .ace_constant.ace_language { color: rgb(255, 156, 0);}.ace-crimson-editor .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-crimson-editor .ace_line .ace_invalid { text-decoration: line-through; color: rgb(224, 0, 0);}.ace-crimson-editor .ace_line .ace_fold {}.ace-crimson-editor .ace_line .ace_support.ace_function { color: rgb(192, 0, 0);}.ace-crimson-editor .ace_line .ace_support.ace_constant { color: rgb(6, 150, 14);}.ace-crimson-editor .ace_line .ace_support.ace_type,.ace-crimson-editor .ace_line .ace_support.ace_class { color: rgb(109, 121, 222);}.ace-crimson-editor .ace_line .ace_keyword.ace_operator { color: rgb(49, 132, 149);}.ace-crimson-editor .ace_line .ace_string { color: rgb(128, 0, 128);}.ace-crimson-editor .ace_line .ace_comment { color: rgb(76, 136, 107);}.ace-crimson-editor .ace_line .ace_comment.ace_doc { color: rgb(0, 102, 255);}.ace-crimson-editor .ace_line .ace_comment.ace_doc.ace_tag { color: rgb(128, 159, 191);}.ace-crimson-editor .ace_line .ace_constant.ace_numeric { color: rgb(0, 0, 64);}.ace-crimson-editor .ace_line .ace_variable { color: rgb(0, 64, 128);}.ace-crimson-editor .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-crimson-editor .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-crimson-editor .ace_marker-layer .ace_step { background: rgb(252, 255, 0);}.ace-crimson-editor .ace_marker-layer .ace_stack { background: rgb(164, 229, 101);}.ace-crimson-editor .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-crimson-editor .ace_marker-layer .ace_active_line { background: rgb(232, 242, 254);}.ace-crimson-editor .ace_meta.ace_tag { color:rgb(28, 2, 255);}.ace-crimson-editor .ace_marker-layer .ace_selected_word { background: rgb(250, 250, 255); border: 1px solid rgb(200, 200, 250);}.ace-crimson-editor .ace_string.ace_regex { color: rgb(192, 0, 192);}",b.cssClass="ace-crimson-editor";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-crimson_editor-uncompressed-noconflict.js b/public/ace_editor/theme-crimson_editor-uncompressed-noconflict.js new file mode 100644 index 0000000..4e9cb08 --- /dev/null +++ b/public/ace_editor/theme-crimson_editor-uncompressed-noconflict.js @@ -0,0 +1,198 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/crimson_editor', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +exports.isDark = false; +exports.cssText = ".ace-crimson-editor .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-crimson-editor .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-crimson-editor .ace_gutter {\ + width: 50px;\ + background: #e8e8e8;\ + color: #333;\ + overflow : hidden;\ +}\ +\ +.ace-crimson-editor .ace_gutter-layer {\ + width: 100%;\ + text-align: right;\ +}\ +\ +.ace-crimson-editor .ace_gutter-layer .ace_gutter-cell {\ + padding-right: 6px;\ +}\ +\ +.ace-crimson-editor .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-crimson-editor .ace_text-layer {\ + cursor: text;\ + color: rgb(64, 64, 64);\ +}\ +\ +.ace-crimson-editor .ace_cursor {\ + border-left: 2px solid black;\ +}\ +\ +.ace-crimson-editor .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid black;\ +}\ +\ +.ace-crimson-editor .ace_line .ace_invisible {\ + color: rgb(191, 191, 191);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_identifier {\ + color: black;\ +}\ +\ +.ace-crimson-editor .ace_line .ace_keyword {\ + color: blue;\ +}\ +\ +.ace-crimson-editor .ace_line .ace_constant.ace_buildin {\ + color: rgb(88, 72, 246);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_constant.ace_language {\ + color: rgb(255, 156, 0);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_constant.ace_library {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_invalid {\ + text-decoration: line-through;\ + color: rgb(224, 0, 0);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_fold {\ +}\ +\ +.ace-crimson-editor .ace_line .ace_support.ace_function {\ + color: rgb(192, 0, 0);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_support.ace_constant {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_support.ace_type,\ +.ace-crimson-editor .ace_line .ace_support.ace_class {\ + color: rgb(109, 121, 222);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_keyword.ace_operator {\ + color: rgb(49, 132, 149);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_string {\ + color: rgb(128, 0, 128);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_comment {\ + color: rgb(76, 136, 107);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_comment.ace_doc {\ + color: rgb(0, 102, 255);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_comment.ace_doc.ace_tag {\ + color: rgb(128, 159, 191);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_constant.ace_numeric {\ + color: rgb(0, 0, 64);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_variable {\ + color: rgb(0, 64, 128);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_xml_pe {\ + color: rgb(104, 104, 91);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_selection {\ + background: rgb(181, 213, 255);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_step {\ + background: rgb(252, 255, 0);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_stack {\ + background: rgb(164, 229, 101);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgb(192, 192, 192);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_active_line {\ + background: rgb(232, 242, 254);\ +}\ +\ +.ace-crimson-editor .ace_meta.ace_tag {\ + color:rgb(28, 2, 255);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_selected_word {\ + background: rgb(250, 250, 255);\ + border: 1px solid rgb(200, 200, 250);\ +}\ +\ +.ace-crimson-editor .ace_string.ace_regex {\ + color: rgb(192, 0, 192);\ +}"; + +exports.cssClass = "ace-crimson-editor"; + +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-crimson_editor-uncompressed.js b/public/ace_editor/theme-crimson_editor-uncompressed.js new file mode 100644 index 0000000..40af199 --- /dev/null +++ b/public/ace_editor/theme-crimson_editor-uncompressed.js @@ -0,0 +1,198 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/crimson_editor', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +exports.isDark = false; +exports.cssText = ".ace-crimson-editor .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-crimson-editor .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-crimson-editor .ace_gutter {\ + width: 50px;\ + background: #e8e8e8;\ + color: #333;\ + overflow : hidden;\ +}\ +\ +.ace-crimson-editor .ace_gutter-layer {\ + width: 100%;\ + text-align: right;\ +}\ +\ +.ace-crimson-editor .ace_gutter-layer .ace_gutter-cell {\ + padding-right: 6px;\ +}\ +\ +.ace-crimson-editor .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-crimson-editor .ace_text-layer {\ + cursor: text;\ + color: rgb(64, 64, 64);\ +}\ +\ +.ace-crimson-editor .ace_cursor {\ + border-left: 2px solid black;\ +}\ +\ +.ace-crimson-editor .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid black;\ +}\ +\ +.ace-crimson-editor .ace_line .ace_invisible {\ + color: rgb(191, 191, 191);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_identifier {\ + color: black;\ +}\ +\ +.ace-crimson-editor .ace_line .ace_keyword {\ + color: blue;\ +}\ +\ +.ace-crimson-editor .ace_line .ace_constant.ace_buildin {\ + color: rgb(88, 72, 246);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_constant.ace_language {\ + color: rgb(255, 156, 0);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_constant.ace_library {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_invalid {\ + text-decoration: line-through;\ + color: rgb(224, 0, 0);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_fold {\ +}\ +\ +.ace-crimson-editor .ace_line .ace_support.ace_function {\ + color: rgb(192, 0, 0);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_support.ace_constant {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_support.ace_type,\ +.ace-crimson-editor .ace_line .ace_support.ace_class {\ + color: rgb(109, 121, 222);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_keyword.ace_operator {\ + color: rgb(49, 132, 149);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_string {\ + color: rgb(128, 0, 128);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_comment {\ + color: rgb(76, 136, 107);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_comment.ace_doc {\ + color: rgb(0, 102, 255);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_comment.ace_doc.ace_tag {\ + color: rgb(128, 159, 191);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_constant.ace_numeric {\ + color: rgb(0, 0, 64);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_variable {\ + color: rgb(0, 64, 128);\ +}\ +\ +.ace-crimson-editor .ace_line .ace_xml_pe {\ + color: rgb(104, 104, 91);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_selection {\ + background: rgb(181, 213, 255);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_step {\ + background: rgb(252, 255, 0);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_stack {\ + background: rgb(164, 229, 101);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgb(192, 192, 192);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_active_line {\ + background: rgb(232, 242, 254);\ +}\ +\ +.ace-crimson-editor .ace_meta.ace_tag {\ + color:rgb(28, 2, 255);\ +}\ +\ +.ace-crimson-editor .ace_marker-layer .ace_selected_word {\ + background: rgb(250, 250, 255);\ + border: 1px solid rgb(200, 200, 250);\ +}\ +\ +.ace-crimson-editor .ace_string.ace_regex {\ + color: rgb(192, 0, 192);\ +}"; + +exports.cssClass = "ace-crimson-editor"; + +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-crimson_editor.js b/public/ace_editor/theme-crimson_editor.js new file mode 100644 index 0000000..e8a4e2a --- /dev/null +++ b/public/ace_editor/theme-crimson_editor.js @@ -0,0 +1 @@ +define("ace/theme/crimson_editor",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssText=".ace-crimson-editor .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-crimson-editor .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-crimson-editor .ace_gutter { width: 50px; background: #e8e8e8; color: #333; overflow : hidden;}.ace-crimson-editor .ace_gutter-layer { width: 100%; text-align: right;}.ace-crimson-editor .ace_gutter-layer .ace_gutter-cell { padding-right: 6px;}.ace-crimson-editor .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-crimson-editor .ace_text-layer { cursor: text; color: rgb(64, 64, 64);}.ace-crimson-editor .ace_cursor { border-left: 2px solid black;}.ace-crimson-editor .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid black;}.ace-crimson-editor .ace_line .ace_invisible { color: rgb(191, 191, 191);}.ace-crimson-editor .ace_line .ace_identifier { color: black;}.ace-crimson-editor .ace_line .ace_keyword { color: blue;}.ace-crimson-editor .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-crimson-editor .ace_line .ace_constant.ace_language { color: rgb(255, 156, 0);}.ace-crimson-editor .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-crimson-editor .ace_line .ace_invalid { text-decoration: line-through; color: rgb(224, 0, 0);}.ace-crimson-editor .ace_line .ace_fold {}.ace-crimson-editor .ace_line .ace_support.ace_function { color: rgb(192, 0, 0);}.ace-crimson-editor .ace_line .ace_support.ace_constant { color: rgb(6, 150, 14);}.ace-crimson-editor .ace_line .ace_support.ace_type,.ace-crimson-editor .ace_line .ace_support.ace_class { color: rgb(109, 121, 222);}.ace-crimson-editor .ace_line .ace_keyword.ace_operator { color: rgb(49, 132, 149);}.ace-crimson-editor .ace_line .ace_string { color: rgb(128, 0, 128);}.ace-crimson-editor .ace_line .ace_comment { color: rgb(76, 136, 107);}.ace-crimson-editor .ace_line .ace_comment.ace_doc { color: rgb(0, 102, 255);}.ace-crimson-editor .ace_line .ace_comment.ace_doc.ace_tag { color: rgb(128, 159, 191);}.ace-crimson-editor .ace_line .ace_constant.ace_numeric { color: rgb(0, 0, 64);}.ace-crimson-editor .ace_line .ace_variable { color: rgb(0, 64, 128);}.ace-crimson-editor .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-crimson-editor .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-crimson-editor .ace_marker-layer .ace_step { background: rgb(252, 255, 0);}.ace-crimson-editor .ace_marker-layer .ace_stack { background: rgb(164, 229, 101);}.ace-crimson-editor .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-crimson-editor .ace_marker-layer .ace_active_line { background: rgb(232, 242, 254);}.ace-crimson-editor .ace_meta.ace_tag { color:rgb(28, 2, 255);}.ace-crimson-editor .ace_marker-layer .ace_selected_word { background: rgb(250, 250, 255); border: 1px solid rgb(200, 200, 250);}.ace-crimson-editor .ace_string.ace_regex { color: rgb(192, 0, 192);}",b.cssClass="ace-crimson-editor";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-dawn-noconflict.js b/public/ace_editor/theme-dawn-noconflict.js new file mode 100644 index 0000000..d70a29c --- /dev/null +++ b/public/ace_editor/theme-dawn-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/dawn",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssClass="ace-dawn",b.cssText=".ace-dawn .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-dawn .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-dawn .ace_gutter { background: #e8e8e8; color: #333;}.ace-dawn .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-dawn .ace_scroller { background-color: #F9F9F9;}.ace-dawn .ace_text-layer { cursor: text; color: #080808;}.ace-dawn .ace_cursor { border-left: 2px solid #000000;}.ace-dawn .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #000000;}.ace-dawn .ace_marker-layer .ace_selection { background: rgba(39, 95, 255, 0.30);}.ace-dawn.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #F9F9F9; border-radius: 2px;}.ace-dawn .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-dawn .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(75, 75, 126, 0.50);}.ace-dawn .ace_marker-layer .ace_active_line { background: rgba(36, 99, 180, 0.12);}.ace-dawn .ace_marker-layer .ace_selected_word { border: 1px solid rgba(39, 95, 255, 0.30);}.ace-dawn .ace_invisible { color: rgba(75, 75, 126, 0.50);}.ace-dawn .ace_keyword, .ace-dawn .ace_meta { color:#794938;}.ace-dawn .ace_constant, .ace-dawn .ace_constant.ace_other { color:#811F24;}.ace-dawn .ace_constant.ace_character, { color:#811F24;}.ace-dawn .ace_constant.ace_character.ace_escape, { color:#811F24;}.ace-dawn .ace_invalid.ace_illegal { text-decoration:underline;font-style:italic;color:#F8F8F8;background-color:#B52A1D;}.ace-dawn .ace_invalid.ace_deprecated { text-decoration:underline;font-style:italic;color:#B52A1D;}.ace-dawn .ace_support { color:#691C97;}.ace-dawn .ace_support.ace_constant { color:#B4371F;}.ace-dawn .ace_fold { background-color: #794938; border-color: #080808;}.ace-dawn .ace_support.ace_function { color:#693A17;}.ace-dawn .ace_storage { font-style:italic;color:#A71D5D;}.ace-dawn .ace_string { color:#0B6125;}.ace-dawn .ace_string.ace_regexp { color:#CF5628;}.ace-dawn .ace_comment { font-style:italic;color:#5A525F;}.ace-dawn .ace_variable { color:#234A97;}.ace-dawn .ace_markup.ace_underline { text-decoration:underline;}.ace-dawn .ace_markup.ace_heading { color:#19356D;}.ace-dawn .ace_markup.ace_list { color:#693A17;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-dawn-uncompressed-noconflict.js b/public/ace_editor/theme-dawn-uncompressed-noconflict.js new file mode 100644 index 0000000..6ebc435 --- /dev/null +++ b/public/ace_editor/theme-dawn-uncompressed-noconflict.js @@ -0,0 +1,191 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/dawn', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = false; +exports.cssClass = "ace-dawn"; +exports.cssText = "\ +.ace-dawn .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-dawn .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-dawn .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-dawn .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-dawn .ace_scroller {\ + background-color: #F9F9F9;\ +}\ +\ +.ace-dawn .ace_text-layer {\ + cursor: text;\ + color: #080808;\ +}\ +\ +.ace-dawn .ace_cursor {\ + border-left: 2px solid #000000;\ +}\ +\ +.ace-dawn .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #000000;\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_selection {\ + background: rgba(39, 95, 255, 0.30);\ +}\ +\ +.ace-dawn.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #F9F9F9;\ + border-radius: 2px;\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(75, 75, 126, 0.50);\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_active_line {\ + background: rgba(36, 99, 180, 0.12);\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(39, 95, 255, 0.30);\ +}\ +\ +.ace-dawn .ace_invisible {\ + color: rgba(75, 75, 126, 0.50);\ +}\ +\ +.ace-dawn .ace_keyword, .ace-dawn .ace_meta {\ + color:#794938;\ +}\ +\ +.ace-dawn .ace_constant, .ace-dawn .ace_constant.ace_other {\ + color:#811F24;\ +}\ +\ +.ace-dawn .ace_constant.ace_character, {\ + color:#811F24;\ +}\ +\ +.ace-dawn .ace_constant.ace_character.ace_escape, {\ + color:#811F24;\ +}\ +\ +.ace-dawn .ace_invalid.ace_illegal {\ + text-decoration:underline;\ +font-style:italic;\ +color:#F8F8F8;\ +background-color:#B52A1D;\ +}\ +\ +.ace-dawn .ace_invalid.ace_deprecated {\ + text-decoration:underline;\ +font-style:italic;\ +color:#B52A1D;\ +}\ +\ +.ace-dawn .ace_support {\ + color:#691C97;\ +}\ +\ +.ace-dawn .ace_support.ace_constant {\ + color:#B4371F;\ +}\ +\ +.ace-dawn .ace_fold {\ + background-color: #794938;\ + border-color: #080808;\ +}\ +\ +.ace-dawn .ace_support.ace_function {\ + color:#693A17;\ +}\ +\ +.ace-dawn .ace_storage {\ + font-style:italic;\ +color:#A71D5D;\ +}\ +\ +.ace-dawn .ace_string {\ + color:#0B6125;\ +}\ +\ +.ace-dawn .ace_string.ace_regexp {\ + color:#CF5628;\ +}\ +\ +.ace-dawn .ace_comment {\ + font-style:italic;\ +color:#5A525F;\ +}\ +\ +.ace-dawn .ace_variable {\ + color:#234A97;\ +}\ +\ +.ace-dawn .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-dawn .ace_markup.ace_heading {\ + color:#19356D;\ +}\ +\ +.ace-dawn .ace_markup.ace_list {\ + color:#693A17;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-dawn-uncompressed.js b/public/ace_editor/theme-dawn-uncompressed.js new file mode 100644 index 0000000..04e1730 --- /dev/null +++ b/public/ace_editor/theme-dawn-uncompressed.js @@ -0,0 +1,191 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/dawn', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = false; +exports.cssClass = "ace-dawn"; +exports.cssText = "\ +.ace-dawn .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-dawn .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-dawn .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-dawn .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-dawn .ace_scroller {\ + background-color: #F9F9F9;\ +}\ +\ +.ace-dawn .ace_text-layer {\ + cursor: text;\ + color: #080808;\ +}\ +\ +.ace-dawn .ace_cursor {\ + border-left: 2px solid #000000;\ +}\ +\ +.ace-dawn .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #000000;\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_selection {\ + background: rgba(39, 95, 255, 0.30);\ +}\ +\ +.ace-dawn.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #F9F9F9;\ + border-radius: 2px;\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(75, 75, 126, 0.50);\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_active_line {\ + background: rgba(36, 99, 180, 0.12);\ +}\ +\ +.ace-dawn .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(39, 95, 255, 0.30);\ +}\ +\ +.ace-dawn .ace_invisible {\ + color: rgba(75, 75, 126, 0.50);\ +}\ +\ +.ace-dawn .ace_keyword, .ace-dawn .ace_meta {\ + color:#794938;\ +}\ +\ +.ace-dawn .ace_constant, .ace-dawn .ace_constant.ace_other {\ + color:#811F24;\ +}\ +\ +.ace-dawn .ace_constant.ace_character, {\ + color:#811F24;\ +}\ +\ +.ace-dawn .ace_constant.ace_character.ace_escape, {\ + color:#811F24;\ +}\ +\ +.ace-dawn .ace_invalid.ace_illegal {\ + text-decoration:underline;\ +font-style:italic;\ +color:#F8F8F8;\ +background-color:#B52A1D;\ +}\ +\ +.ace-dawn .ace_invalid.ace_deprecated {\ + text-decoration:underline;\ +font-style:italic;\ +color:#B52A1D;\ +}\ +\ +.ace-dawn .ace_support {\ + color:#691C97;\ +}\ +\ +.ace-dawn .ace_support.ace_constant {\ + color:#B4371F;\ +}\ +\ +.ace-dawn .ace_fold {\ + background-color: #794938;\ + border-color: #080808;\ +}\ +\ +.ace-dawn .ace_support.ace_function {\ + color:#693A17;\ +}\ +\ +.ace-dawn .ace_storage {\ + font-style:italic;\ +color:#A71D5D;\ +}\ +\ +.ace-dawn .ace_string {\ + color:#0B6125;\ +}\ +\ +.ace-dawn .ace_string.ace_regexp {\ + color:#CF5628;\ +}\ +\ +.ace-dawn .ace_comment {\ + font-style:italic;\ +color:#5A525F;\ +}\ +\ +.ace-dawn .ace_variable {\ + color:#234A97;\ +}\ +\ +.ace-dawn .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-dawn .ace_markup.ace_heading {\ + color:#19356D;\ +}\ +\ +.ace-dawn .ace_markup.ace_list {\ + color:#693A17;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-dawn.js b/public/ace_editor/theme-dawn.js new file mode 100644 index 0000000..f1eaa7c --- /dev/null +++ b/public/ace_editor/theme-dawn.js @@ -0,0 +1 @@ +define("ace/theme/dawn",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssClass="ace-dawn",b.cssText=".ace-dawn .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-dawn .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-dawn .ace_gutter { background: #e8e8e8; color: #333;}.ace-dawn .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-dawn .ace_scroller { background-color: #F9F9F9;}.ace-dawn .ace_text-layer { cursor: text; color: #080808;}.ace-dawn .ace_cursor { border-left: 2px solid #000000;}.ace-dawn .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #000000;}.ace-dawn .ace_marker-layer .ace_selection { background: rgba(39, 95, 255, 0.30);}.ace-dawn.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #F9F9F9; border-radius: 2px;}.ace-dawn .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-dawn .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(75, 75, 126, 0.50);}.ace-dawn .ace_marker-layer .ace_active_line { background: rgba(36, 99, 180, 0.12);}.ace-dawn .ace_marker-layer .ace_selected_word { border: 1px solid rgba(39, 95, 255, 0.30);}.ace-dawn .ace_invisible { color: rgba(75, 75, 126, 0.50);}.ace-dawn .ace_keyword, .ace-dawn .ace_meta { color:#794938;}.ace-dawn .ace_constant, .ace-dawn .ace_constant.ace_other { color:#811F24;}.ace-dawn .ace_constant.ace_character, { color:#811F24;}.ace-dawn .ace_constant.ace_character.ace_escape, { color:#811F24;}.ace-dawn .ace_invalid.ace_illegal { text-decoration:underline;font-style:italic;color:#F8F8F8;background-color:#B52A1D;}.ace-dawn .ace_invalid.ace_deprecated { text-decoration:underline;font-style:italic;color:#B52A1D;}.ace-dawn .ace_support { color:#691C97;}.ace-dawn .ace_support.ace_constant { color:#B4371F;}.ace-dawn .ace_fold { background-color: #794938; border-color: #080808;}.ace-dawn .ace_support.ace_function { color:#693A17;}.ace-dawn .ace_storage { font-style:italic;color:#A71D5D;}.ace-dawn .ace_string { color:#0B6125;}.ace-dawn .ace_string.ace_regexp { color:#CF5628;}.ace-dawn .ace_comment { font-style:italic;color:#5A525F;}.ace-dawn .ace_variable { color:#234A97;}.ace-dawn .ace_markup.ace_underline { text-decoration:underline;}.ace-dawn .ace_markup.ace_heading { color:#19356D;}.ace-dawn .ace_markup.ace_list { color:#693A17;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-dreamweaver-noconflict.js b/public/ace_editor/theme-dreamweaver-noconflict.js new file mode 100644 index 0000000..6f40ba0 --- /dev/null +++ b/public/ace_editor/theme-dreamweaver-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/dreamweaver",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssClass="ace-dreamweaver",b.cssText=".ace-dreamweaver .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-dreamweaver .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-dreamweaver .ace_gutter { background: #e8e8e8; color: #333;}.ace-dreamweaver .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-dreamweaver .ace_fold { background-color: #00F;}.ace-dreamweaver .ace_text-layer { cursor: text;}.ace-dreamweaver .ace_cursor { border-left: 2px solid black;}.ace-dreamweaver .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid black;} .ace-dreamweaver .ace_line .ace_invisible { color: rgb(191, 191, 191);}.ace-dreamweaver .ace_line .ace_storage,.ace-dreamweaver .ace_line .ace_keyword { color: blue;}.ace-dreamweaver .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-dreamweaver .ace_line .ace_constant.ace_language { color: rgb(88, 92, 246);}.ace-dreamweaver .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-dreamweaver .ace_line .ace_invalid { background-color: rgb(153, 0, 0); color: white;}.ace-dreamweaver .ace_line .ace_support.ace_function { color: rgb(60, 76, 114);}.ace-dreamweaver .ace_line .ace_support.ace_constant { color: rgb(6, 150, 14);}.ace-dreamweaver .ace_line .ace_support.ace_type,.ace-dreamweaver .ace_line .ace_support.ace_class { color: #009;}.ace-dreamweaver .ace_line .ace_support.ace_php_tag { color: #f00;}.ace-dreamweaver .ace_line .ace_keyword.ace_operator { color: rgb(104, 118, 135);}.ace-dreamweaver .ace_line .ace_string { color: #00F;}.ace-dreamweaver .ace_line .ace_comment { color: rgb(76, 136, 107);}.ace-dreamweaver .ace_line .ace_comment.ace_doc { color: rgb(0, 102, 255);}.ace-dreamweaver .ace_line .ace_comment.ace_doc.ace_tag { color: rgb(128, 159, 191);}.ace-dreamweaver .ace_line .ace_constant.ace_numeric { color: rgb(0, 0, 205);}.ace-dreamweaver .ace_line .ace_variable { color: #06F}.ace-dreamweaver .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-dreamweaver .ace_entity.ace_name.ace_function { color: #00F;}.ace-dreamweaver .ace_markup.ace_markupine { text-decoration:underline;}.ace-dreamweaver .ace_markup.ace_heading { color: rgb(12, 7, 255);}.ace-dreamweaver .ace_markup.ace_list { color:rgb(185, 6, 144);}.ace-dreamweaver .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-dreamweaver .ace_marker-layer .ace_step { background: rgb(252, 255, 0);}.ace-dreamweaver .ace_marker-layer .ace_stack { background: rgb(164, 229, 101);}.ace-dreamweaver .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-dreamweaver .ace_marker-layer .ace_active_line { background: rgba(0, 0, 0, 0.07);}.ace-dreamweaver .ace_marker-layer .ace_selected_word { background: rgb(250, 250, 255); border: 1px solid rgb(200, 200, 250);}.ace-dreamweaver .ace_meta.ace_tag { color:#009;}.ace-dreamweaver .ace_meta.ace_tag.ace_anchor { color:#060;}.ace-dreamweaver .ace_meta.ace_tag.ace_form { color:#F90;}.ace-dreamweaver .ace_meta.ace_tag.ace_image { color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_script { color:#900;}.ace-dreamweaver .ace_meta.ace_tag.ace_style { color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_table { color:#099;}.ace-dreamweaver .ace_string.ace_regex { color: rgb(255, 0, 0)}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-dreamweaver-uncompressed-noconflict.js b/public/ace_editor/theme-dreamweaver-uncompressed-noconflict.js new file mode 100644 index 0000000..29a97ea --- /dev/null +++ b/public/ace_editor/theme-dreamweaver-uncompressed-noconflict.js @@ -0,0 +1,227 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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): + * Adam Jimenez + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/dreamweaver', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +exports.isDark = false; +exports.cssClass = "ace-dreamweaver"; +exports.cssText = ".ace-dreamweaver .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-dreamweaver .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-dreamweaver .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-dreamweaver .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-dreamweaver .ace_fold {\ + background-color: #00F;\ +}\ +\ +.ace-dreamweaver .ace_text-layer {\ + cursor: text;\ +}\ +\ +.ace-dreamweaver .ace_cursor {\ + border-left: 2px solid black;\ +}\ +\ +.ace-dreamweaver .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid black;\ +}\ + \ +.ace-dreamweaver .ace_line .ace_invisible {\ + color: rgb(191, 191, 191);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_storage,\ +.ace-dreamweaver .ace_line .ace_keyword {\ + color: blue;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_constant.ace_buildin {\ + color: rgb(88, 72, 246);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_constant.ace_language {\ + color: rgb(88, 92, 246);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_constant.ace_library {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_invalid {\ + background-color: rgb(153, 0, 0);\ + color: white;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_support.ace_function {\ + color: rgb(60, 76, 114);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_support.ace_constant {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_support.ace_type,\ +.ace-dreamweaver .ace_line .ace_support.ace_class {\ + color: #009;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_support.ace_php_tag {\ + color: #f00;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_keyword.ace_operator {\ + color: rgb(104, 118, 135);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_string {\ + color: #00F;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_comment {\ + color: rgb(76, 136, 107);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_comment.ace_doc {\ + color: rgb(0, 102, 255);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_comment.ace_doc.ace_tag {\ + color: rgb(128, 159, 191);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_constant.ace_numeric {\ + color: rgb(0, 0, 205);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_variable {\ + color: #06F\ +}\ +\ +.ace-dreamweaver .ace_line .ace_xml_pe {\ + color: rgb(104, 104, 91);\ +}\ +\ +.ace-dreamweaver .ace_entity.ace_name.ace_function {\ + color: #00F;\ +}\ +\ +.ace-dreamweaver .ace_markup.ace_markupine {\ + text-decoration:underline;\ +}\ +\ +.ace-dreamweaver .ace_markup.ace_heading {\ + color: rgb(12, 7, 255);\ +}\ +\ +.ace-dreamweaver .ace_markup.ace_list {\ + color:rgb(185, 6, 144);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_selection {\ + background: rgb(181, 213, 255);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_step {\ + background: rgb(252, 255, 0);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_stack {\ + background: rgb(164, 229, 101);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgb(192, 192, 192);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_active_line {\ + background: rgba(0, 0, 0, 0.07);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_selected_word {\ + background: rgb(250, 250, 255);\ + border: 1px solid rgb(200, 200, 250);\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag {\ + color:#009;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\ + color:#060;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_form {\ + color:#F90;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_image {\ + color:#909;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_script {\ + color:#900;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_style {\ + color:#909;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_table {\ + color:#099;\ +}\ +\ +.ace-dreamweaver .ace_string.ace_regex {\ + color: rgb(255, 0, 0)\ +}"; + +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-dreamweaver-uncompressed.js b/public/ace_editor/theme-dreamweaver-uncompressed.js new file mode 100644 index 0000000..d78ae07 --- /dev/null +++ b/public/ace_editor/theme-dreamweaver-uncompressed.js @@ -0,0 +1,227 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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): + * Adam Jimenez + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/dreamweaver', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +exports.isDark = false; +exports.cssClass = "ace-dreamweaver"; +exports.cssText = ".ace-dreamweaver .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-dreamweaver .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-dreamweaver .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-dreamweaver .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-dreamweaver .ace_fold {\ + background-color: #00F;\ +}\ +\ +.ace-dreamweaver .ace_text-layer {\ + cursor: text;\ +}\ +\ +.ace-dreamweaver .ace_cursor {\ + border-left: 2px solid black;\ +}\ +\ +.ace-dreamweaver .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid black;\ +}\ + \ +.ace-dreamweaver .ace_line .ace_invisible {\ + color: rgb(191, 191, 191);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_storage,\ +.ace-dreamweaver .ace_line .ace_keyword {\ + color: blue;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_constant.ace_buildin {\ + color: rgb(88, 72, 246);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_constant.ace_language {\ + color: rgb(88, 92, 246);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_constant.ace_library {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_invalid {\ + background-color: rgb(153, 0, 0);\ + color: white;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_support.ace_function {\ + color: rgb(60, 76, 114);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_support.ace_constant {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_support.ace_type,\ +.ace-dreamweaver .ace_line .ace_support.ace_class {\ + color: #009;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_support.ace_php_tag {\ + color: #f00;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_keyword.ace_operator {\ + color: rgb(104, 118, 135);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_string {\ + color: #00F;\ +}\ +\ +.ace-dreamweaver .ace_line .ace_comment {\ + color: rgb(76, 136, 107);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_comment.ace_doc {\ + color: rgb(0, 102, 255);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_comment.ace_doc.ace_tag {\ + color: rgb(128, 159, 191);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_constant.ace_numeric {\ + color: rgb(0, 0, 205);\ +}\ +\ +.ace-dreamweaver .ace_line .ace_variable {\ + color: #06F\ +}\ +\ +.ace-dreamweaver .ace_line .ace_xml_pe {\ + color: rgb(104, 104, 91);\ +}\ +\ +.ace-dreamweaver .ace_entity.ace_name.ace_function {\ + color: #00F;\ +}\ +\ +.ace-dreamweaver .ace_markup.ace_markupine {\ + text-decoration:underline;\ +}\ +\ +.ace-dreamweaver .ace_markup.ace_heading {\ + color: rgb(12, 7, 255);\ +}\ +\ +.ace-dreamweaver .ace_markup.ace_list {\ + color:rgb(185, 6, 144);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_selection {\ + background: rgb(181, 213, 255);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_step {\ + background: rgb(252, 255, 0);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_stack {\ + background: rgb(164, 229, 101);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgb(192, 192, 192);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_active_line {\ + background: rgba(0, 0, 0, 0.07);\ +}\ +\ +.ace-dreamweaver .ace_marker-layer .ace_selected_word {\ + background: rgb(250, 250, 255);\ + border: 1px solid rgb(200, 200, 250);\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag {\ + color:#009;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\ + color:#060;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_form {\ + color:#F90;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_image {\ + color:#909;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_script {\ + color:#900;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_style {\ + color:#909;\ +}\ +\ +.ace-dreamweaver .ace_meta.ace_tag.ace_table {\ + color:#099;\ +}\ +\ +.ace-dreamweaver .ace_string.ace_regex {\ + color: rgb(255, 0, 0)\ +}"; + +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-dreamweaver.js b/public/ace_editor/theme-dreamweaver.js new file mode 100644 index 0000000..4bd5e9d --- /dev/null +++ b/public/ace_editor/theme-dreamweaver.js @@ -0,0 +1 @@ +define("ace/theme/dreamweaver",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssClass="ace-dreamweaver",b.cssText=".ace-dreamweaver .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-dreamweaver .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-dreamweaver .ace_gutter { background: #e8e8e8; color: #333;}.ace-dreamweaver .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-dreamweaver .ace_fold { background-color: #00F;}.ace-dreamweaver .ace_text-layer { cursor: text;}.ace-dreamweaver .ace_cursor { border-left: 2px solid black;}.ace-dreamweaver .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid black;} .ace-dreamweaver .ace_line .ace_invisible { color: rgb(191, 191, 191);}.ace-dreamweaver .ace_line .ace_storage,.ace-dreamweaver .ace_line .ace_keyword { color: blue;}.ace-dreamweaver .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-dreamweaver .ace_line .ace_constant.ace_language { color: rgb(88, 92, 246);}.ace-dreamweaver .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-dreamweaver .ace_line .ace_invalid { background-color: rgb(153, 0, 0); color: white;}.ace-dreamweaver .ace_line .ace_support.ace_function { color: rgb(60, 76, 114);}.ace-dreamweaver .ace_line .ace_support.ace_constant { color: rgb(6, 150, 14);}.ace-dreamweaver .ace_line .ace_support.ace_type,.ace-dreamweaver .ace_line .ace_support.ace_class { color: #009;}.ace-dreamweaver .ace_line .ace_support.ace_php_tag { color: #f00;}.ace-dreamweaver .ace_line .ace_keyword.ace_operator { color: rgb(104, 118, 135);}.ace-dreamweaver .ace_line .ace_string { color: #00F;}.ace-dreamweaver .ace_line .ace_comment { color: rgb(76, 136, 107);}.ace-dreamweaver .ace_line .ace_comment.ace_doc { color: rgb(0, 102, 255);}.ace-dreamweaver .ace_line .ace_comment.ace_doc.ace_tag { color: rgb(128, 159, 191);}.ace-dreamweaver .ace_line .ace_constant.ace_numeric { color: rgb(0, 0, 205);}.ace-dreamweaver .ace_line .ace_variable { color: #06F}.ace-dreamweaver .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-dreamweaver .ace_entity.ace_name.ace_function { color: #00F;}.ace-dreamweaver .ace_markup.ace_markupine { text-decoration:underline;}.ace-dreamweaver .ace_markup.ace_heading { color: rgb(12, 7, 255);}.ace-dreamweaver .ace_markup.ace_list { color:rgb(185, 6, 144);}.ace-dreamweaver .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-dreamweaver .ace_marker-layer .ace_step { background: rgb(252, 255, 0);}.ace-dreamweaver .ace_marker-layer .ace_stack { background: rgb(164, 229, 101);}.ace-dreamweaver .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-dreamweaver .ace_marker-layer .ace_active_line { background: rgba(0, 0, 0, 0.07);}.ace-dreamweaver .ace_marker-layer .ace_selected_word { background: rgb(250, 250, 255); border: 1px solid rgb(200, 200, 250);}.ace-dreamweaver .ace_meta.ace_tag { color:#009;}.ace-dreamweaver .ace_meta.ace_tag.ace_anchor { color:#060;}.ace-dreamweaver .ace_meta.ace_tag.ace_form { color:#F90;}.ace-dreamweaver .ace_meta.ace_tag.ace_image { color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_script { color:#900;}.ace-dreamweaver .ace_meta.ace_tag.ace_style { color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_table { color:#099;}.ace-dreamweaver .ace_string.ace_regex { color: rgb(255, 0, 0)}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-eclipse-noconflict.js b/public/ace_editor/theme-eclipse-noconflict.js new file mode 100644 index 0000000..7da7e53 --- /dev/null +++ b/public/ace_editor/theme-eclipse-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/eclipse",["require","exports","module","ace/lib/dom"],function(a,b,c){"use strict",b.isDark=!1,b.cssText=".ace-eclipse .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-eclipse .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-eclipse .ace_gutter { background: rgb(227, 227, 227); border-right: 1px solid rgb(159, 159, 159); color: rgb(136, 136, 136);}.ace-eclipse .ace_print_margin { width: 1px; background: #b1b4ba;}.ace-eclipse .ace_fold { background-color: rgb(60, 76, 114);}.ace-eclipse .ace_text-layer { cursor: text;}.ace-eclipse .ace_cursor { border-left: 2px solid black;}.ace-eclipse .ace_line .ace_storage,.ace-eclipse .ace_line .ace_keyword,.ace-eclipse .ace_line .ace_variable { color: rgb(127, 0, 85);}.ace-eclipse .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-eclipse .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-eclipse .ace_line .ace_function { color: rgb(60, 76, 114);}.ace-eclipse .ace_line .ace_string { color: rgb(42, 0, 255);}.ace-eclipse .ace_line .ace_comment { color: rgb(63, 127, 95);}.ace-eclipse .ace_line .ace_comment.ace_doc { color: rgb(63, 95, 191);}.ace-eclipse .ace_line .ace_comment.ace_doc.ace_tag { color: rgb(127, 159, 191);}.ace-eclipse .ace_line .ace_constant.ace_numeric {}.ace-eclipse .ace_line .ace_tag { color: rgb(63, 127, 127);}.ace-eclipse .ace_line .ace_type { color: rgb(127, 0, 127);}.ace-eclipse .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-eclipse .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-eclipse .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-eclipse .ace_line .ace_meta.ace_tag { color:rgb(63, 127, 127);}.ace-eclipse .ace_entity.ace_other.ace_attribute-name { color:rgb(127, 0, 127);}.ace-eclipse .ace_marker-layer .ace_active_line { background: rgb(232, 242, 254);}",b.cssClass="ace-eclipse";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-eclipse-uncompressed-noconflict.js b/public/ace_editor/theme-eclipse-uncompressed-noconflict.js new file mode 100644 index 0000000..10a289a --- /dev/null +++ b/public/ace_editor/theme-eclipse-uncompressed-noconflict.js @@ -0,0 +1,147 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/eclipse', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +exports.isDark = false; +exports.cssText = ".ace-eclipse .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-eclipse .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-eclipse .ace_gutter {\ + background: rgb(227, 227, 227);\ + border-right: 1px solid rgb(159, 159, 159);\ + color: rgb(136, 136, 136);\ +}\ +\ +.ace-eclipse .ace_print_margin {\ + width: 1px;\ + background: #b1b4ba;\ +}\ +\ +.ace-eclipse .ace_fold {\ + background-color: rgb(60, 76, 114);\ +}\ +\ +.ace-eclipse .ace_text-layer {\ + cursor: text;\ +}\ +\ +.ace-eclipse .ace_cursor {\ + border-left: 2px solid black;\ +}\ +\ +.ace-eclipse .ace_line .ace_storage,\ +.ace-eclipse .ace_line .ace_keyword,\ +.ace-eclipse .ace_line .ace_variable {\ + color: rgb(127, 0, 85);\ +}\ +\ +.ace-eclipse .ace_line .ace_constant.ace_buildin {\ + color: rgb(88, 72, 246);\ +}\ +\ +.ace-eclipse .ace_line .ace_constant.ace_library {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-eclipse .ace_line .ace_function {\ + color: rgb(60, 76, 114);\ +}\ +\ +.ace-eclipse .ace_line .ace_string {\ + color: rgb(42, 0, 255);\ +}\ +\ +.ace-eclipse .ace_line .ace_comment {\ + color: rgb(63, 127, 95);\ +}\ +\ +.ace-eclipse .ace_line .ace_comment.ace_doc {\ + color: rgb(63, 95, 191);\ +}\ +\ +.ace-eclipse .ace_line .ace_comment.ace_doc.ace_tag {\ + color: rgb(127, 159, 191);\ +}\ +\ +.ace-eclipse .ace_line .ace_constant.ace_numeric {\ +}\ +\ +.ace-eclipse .ace_line .ace_tag {\ + color: rgb(63, 127, 127);\ +}\ +\ +.ace-eclipse .ace_line .ace_type {\ + color: rgb(127, 0, 127);\ +}\ +\ +.ace-eclipse .ace_line .ace_xml_pe {\ + color: rgb(104, 104, 91);\ +}\ +\ +.ace-eclipse .ace_marker-layer .ace_selection {\ + background: rgb(181, 213, 255);\ +}\ +\ +.ace-eclipse .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgb(192, 192, 192);\ +}\ +\ +.ace-eclipse .ace_line .ace_meta.ace_tag {\ + color:rgb(63, 127, 127);\ +}\ +\ +.ace-eclipse .ace_entity.ace_other.ace_attribute-name {\ + color:rgb(127, 0, 127);\ +}\ +\ +.ace-eclipse .ace_marker-layer .ace_active_line {\ + background: rgb(232, 242, 254);\ +}"; + +exports.cssClass = "ace-eclipse"; + +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-eclipse-uncompressed.js b/public/ace_editor/theme-eclipse-uncompressed.js new file mode 100644 index 0000000..b6e9dca --- /dev/null +++ b/public/ace_editor/theme-eclipse-uncompressed.js @@ -0,0 +1,147 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/eclipse', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { +"use strict"; + +exports.isDark = false; +exports.cssText = ".ace-eclipse .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-eclipse .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-eclipse .ace_gutter {\ + background: rgb(227, 227, 227);\ + border-right: 1px solid rgb(159, 159, 159);\ + color: rgb(136, 136, 136);\ +}\ +\ +.ace-eclipse .ace_print_margin {\ + width: 1px;\ + background: #b1b4ba;\ +}\ +\ +.ace-eclipse .ace_fold {\ + background-color: rgb(60, 76, 114);\ +}\ +\ +.ace-eclipse .ace_text-layer {\ + cursor: text;\ +}\ +\ +.ace-eclipse .ace_cursor {\ + border-left: 2px solid black;\ +}\ +\ +.ace-eclipse .ace_line .ace_storage,\ +.ace-eclipse .ace_line .ace_keyword,\ +.ace-eclipse .ace_line .ace_variable {\ + color: rgb(127, 0, 85);\ +}\ +\ +.ace-eclipse .ace_line .ace_constant.ace_buildin {\ + color: rgb(88, 72, 246);\ +}\ +\ +.ace-eclipse .ace_line .ace_constant.ace_library {\ + color: rgb(6, 150, 14);\ +}\ +\ +.ace-eclipse .ace_line .ace_function {\ + color: rgb(60, 76, 114);\ +}\ +\ +.ace-eclipse .ace_line .ace_string {\ + color: rgb(42, 0, 255);\ +}\ +\ +.ace-eclipse .ace_line .ace_comment {\ + color: rgb(63, 127, 95);\ +}\ +\ +.ace-eclipse .ace_line .ace_comment.ace_doc {\ + color: rgb(63, 95, 191);\ +}\ +\ +.ace-eclipse .ace_line .ace_comment.ace_doc.ace_tag {\ + color: rgb(127, 159, 191);\ +}\ +\ +.ace-eclipse .ace_line .ace_constant.ace_numeric {\ +}\ +\ +.ace-eclipse .ace_line .ace_tag {\ + color: rgb(63, 127, 127);\ +}\ +\ +.ace-eclipse .ace_line .ace_type {\ + color: rgb(127, 0, 127);\ +}\ +\ +.ace-eclipse .ace_line .ace_xml_pe {\ + color: rgb(104, 104, 91);\ +}\ +\ +.ace-eclipse .ace_marker-layer .ace_selection {\ + background: rgb(181, 213, 255);\ +}\ +\ +.ace-eclipse .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgb(192, 192, 192);\ +}\ +\ +.ace-eclipse .ace_line .ace_meta.ace_tag {\ + color:rgb(63, 127, 127);\ +}\ +\ +.ace-eclipse .ace_entity.ace_other.ace_attribute-name {\ + color:rgb(127, 0, 127);\ +}\ +\ +.ace-eclipse .ace_marker-layer .ace_active_line {\ + background: rgb(232, 242, 254);\ +}"; + +exports.cssClass = "ace-eclipse"; + +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-eclipse.js b/public/ace_editor/theme-eclipse.js new file mode 100644 index 0000000..e8d7f63 --- /dev/null +++ b/public/ace_editor/theme-eclipse.js @@ -0,0 +1 @@ +define("ace/theme/eclipse",["require","exports","module","ace/lib/dom"],function(a,b,c){"use strict",b.isDark=!1,b.cssText=".ace-eclipse .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-eclipse .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-eclipse .ace_gutter { background: rgb(227, 227, 227); border-right: 1px solid rgb(159, 159, 159); color: rgb(136, 136, 136);}.ace-eclipse .ace_print_margin { width: 1px; background: #b1b4ba;}.ace-eclipse .ace_fold { background-color: rgb(60, 76, 114);}.ace-eclipse .ace_text-layer { cursor: text;}.ace-eclipse .ace_cursor { border-left: 2px solid black;}.ace-eclipse .ace_line .ace_storage,.ace-eclipse .ace_line .ace_keyword,.ace-eclipse .ace_line .ace_variable { color: rgb(127, 0, 85);}.ace-eclipse .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-eclipse .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-eclipse .ace_line .ace_function { color: rgb(60, 76, 114);}.ace-eclipse .ace_line .ace_string { color: rgb(42, 0, 255);}.ace-eclipse .ace_line .ace_comment { color: rgb(63, 127, 95);}.ace-eclipse .ace_line .ace_comment.ace_doc { color: rgb(63, 95, 191);}.ace-eclipse .ace_line .ace_comment.ace_doc.ace_tag { color: rgb(127, 159, 191);}.ace-eclipse .ace_line .ace_constant.ace_numeric {}.ace-eclipse .ace_line .ace_tag { color: rgb(63, 127, 127);}.ace-eclipse .ace_line .ace_type { color: rgb(127, 0, 127);}.ace-eclipse .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-eclipse .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-eclipse .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-eclipse .ace_line .ace_meta.ace_tag { color:rgb(63, 127, 127);}.ace-eclipse .ace_entity.ace_other.ace_attribute-name { color:rgb(127, 0, 127);}.ace-eclipse .ace_marker-layer .ace_active_line { background: rgb(232, 242, 254);}",b.cssClass="ace-eclipse";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-idle_fingers-noconflict.js b/public/ace_editor/theme-idle_fingers-noconflict.js new file mode 100644 index 0000000..1c038e7 --- /dev/null +++ b/public/ace_editor/theme-idle_fingers-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/idle_fingers",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-idle-fingers",b.cssText=".ace-idle-fingers .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-idle-fingers .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-idle-fingers .ace_gutter { background: #e8e8e8; color: #333;}.ace-idle-fingers .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-idle-fingers .ace_scroller { background-color: #323232;}.ace-idle-fingers .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-idle-fingers .ace_cursor { border-left: 2px solid #91FF00;}.ace-idle-fingers .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #91FF00;}.ace-idle-fingers .ace_marker-layer .ace_selection { background: rgba(90, 100, 126, 0.88);}.ace-idle-fingers.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #323232; border-radius: 2px;}.ace-idle-fingers .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-idle-fingers .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404040;}.ace-idle-fingers .ace_marker-layer .ace_active_line { background: #353637;}.ace-idle-fingers .ace_marker-layer .ace_selected_word { border: 1px solid rgba(90, 100, 126, 0.88);}.ace-idle-fingers .ace_invisible { color: #404040;}.ace-idle-fingers .ace_keyword, .ace-idle-fingers .ace_meta { color:#CC7833;}.ace-idle-fingers .ace_constant, .ace-idle-fingers .ace_constant.ace_other { color:#6C99BB;}.ace-idle-fingers .ace_constant.ace_character, { color:#6C99BB;}.ace-idle-fingers .ace_constant.ace_character.ace_escape, { color:#6C99BB;}.ace-idle-fingers .ace_invalid { color:#FFFFFF;background-color:#FF0000;}.ace-idle-fingers .ace_support.ace_constant { color:#6C99BB;}.ace-idle-fingers .ace_fold { background-color: #CC7833; border-color: #FFFFFF;}.ace-idle-fingers .ace_support.ace_function { color:#B83426;}.ace-idle-fingers .ace_variable.ace_parameter { font-style:italic;}.ace-idle-fingers .ace_string { color:#A5C261;}.ace-idle-fingers .ace_string.ace_regexp { color:#CCCC33;}.ace-idle-fingers .ace_comment { font-style:italic;color:#BC9458;}.ace-idle-fingers .ace_meta.ace_tag { color:#FFE5BB;}.ace-idle-fingers .ace_entity.ace_name { color:#FFC66D;}.ace-idle-fingers .ace_markup.ace_underline { text-decoration:underline;}.ace-idle-fingers .ace_collab.ace_user1 { color:#323232;background-color:#FFF980;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-idle_fingers-uncompressed-noconflict.js b/public/ace_editor/theme-idle_fingers-uncompressed-noconflict.js new file mode 100644 index 0000000..fd21581 --- /dev/null +++ b/public/ace_editor/theme-idle_fingers-uncompressed-noconflict.js @@ -0,0 +1,179 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/idle_fingers', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-idle-fingers"; +exports.cssText = "\ +.ace-idle-fingers .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-idle-fingers .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-idle-fingers .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-idle-fingers .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-idle-fingers .ace_scroller {\ + background-color: #323232;\ +}\ +\ +.ace-idle-fingers .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-idle-fingers .ace_cursor {\ + border-left: 2px solid #91FF00;\ +}\ +\ +.ace-idle-fingers .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #91FF00;\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_selection {\ + background: rgba(90, 100, 126, 0.88);\ +}\ +\ +.ace-idle-fingers.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #323232;\ + border-radius: 2px;\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404040;\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_active_line {\ + background: #353637;\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(90, 100, 126, 0.88);\ +}\ +\ +.ace-idle-fingers .ace_invisible {\ + color: #404040;\ +}\ +\ +.ace-idle-fingers .ace_keyword, .ace-idle-fingers .ace_meta {\ + color:#CC7833;\ +}\ +\ +.ace-idle-fingers .ace_constant, .ace-idle-fingers .ace_constant.ace_other {\ + color:#6C99BB;\ +}\ +\ +.ace-idle-fingers .ace_constant.ace_character, {\ + color:#6C99BB;\ +}\ +\ +.ace-idle-fingers .ace_constant.ace_character.ace_escape, {\ + color:#6C99BB;\ +}\ +\ +.ace-idle-fingers .ace_invalid {\ + color:#FFFFFF;\ +background-color:#FF0000;\ +}\ +\ +.ace-idle-fingers .ace_support.ace_constant {\ + color:#6C99BB;\ +}\ +\ +.ace-idle-fingers .ace_fold {\ + background-color: #CC7833;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-idle-fingers .ace_support.ace_function {\ + color:#B83426;\ +}\ +\ +.ace-idle-fingers .ace_variable.ace_parameter {\ + font-style:italic;\ +}\ +\ +.ace-idle-fingers .ace_string {\ + color:#A5C261;\ +}\ +\ +.ace-idle-fingers .ace_string.ace_regexp {\ + color:#CCCC33;\ +}\ +\ +.ace-idle-fingers .ace_comment {\ + font-style:italic;\ +color:#BC9458;\ +}\ +\ +.ace-idle-fingers .ace_meta.ace_tag {\ + color:#FFE5BB;\ +}\ +\ +.ace-idle-fingers .ace_entity.ace_name {\ + color:#FFC66D;\ +}\ +\ +.ace-idle-fingers .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-idle-fingers .ace_collab.ace_user1 {\ + color:#323232;\ +background-color:#FFF980;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-idle_fingers-uncompressed.js b/public/ace_editor/theme-idle_fingers-uncompressed.js new file mode 100644 index 0000000..34eee0d --- /dev/null +++ b/public/ace_editor/theme-idle_fingers-uncompressed.js @@ -0,0 +1,179 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/idle_fingers', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-idle-fingers"; +exports.cssText = "\ +.ace-idle-fingers .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-idle-fingers .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-idle-fingers .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-idle-fingers .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-idle-fingers .ace_scroller {\ + background-color: #323232;\ +}\ +\ +.ace-idle-fingers .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-idle-fingers .ace_cursor {\ + border-left: 2px solid #91FF00;\ +}\ +\ +.ace-idle-fingers .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #91FF00;\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_selection {\ + background: rgba(90, 100, 126, 0.88);\ +}\ +\ +.ace-idle-fingers.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #323232;\ + border-radius: 2px;\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404040;\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_active_line {\ + background: #353637;\ +}\ +\ +.ace-idle-fingers .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(90, 100, 126, 0.88);\ +}\ +\ +.ace-idle-fingers .ace_invisible {\ + color: #404040;\ +}\ +\ +.ace-idle-fingers .ace_keyword, .ace-idle-fingers .ace_meta {\ + color:#CC7833;\ +}\ +\ +.ace-idle-fingers .ace_constant, .ace-idle-fingers .ace_constant.ace_other {\ + color:#6C99BB;\ +}\ +\ +.ace-idle-fingers .ace_constant.ace_character, {\ + color:#6C99BB;\ +}\ +\ +.ace-idle-fingers .ace_constant.ace_character.ace_escape, {\ + color:#6C99BB;\ +}\ +\ +.ace-idle-fingers .ace_invalid {\ + color:#FFFFFF;\ +background-color:#FF0000;\ +}\ +\ +.ace-idle-fingers .ace_support.ace_constant {\ + color:#6C99BB;\ +}\ +\ +.ace-idle-fingers .ace_fold {\ + background-color: #CC7833;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-idle-fingers .ace_support.ace_function {\ + color:#B83426;\ +}\ +\ +.ace-idle-fingers .ace_variable.ace_parameter {\ + font-style:italic;\ +}\ +\ +.ace-idle-fingers .ace_string {\ + color:#A5C261;\ +}\ +\ +.ace-idle-fingers .ace_string.ace_regexp {\ + color:#CCCC33;\ +}\ +\ +.ace-idle-fingers .ace_comment {\ + font-style:italic;\ +color:#BC9458;\ +}\ +\ +.ace-idle-fingers .ace_meta.ace_tag {\ + color:#FFE5BB;\ +}\ +\ +.ace-idle-fingers .ace_entity.ace_name {\ + color:#FFC66D;\ +}\ +\ +.ace-idle-fingers .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-idle-fingers .ace_collab.ace_user1 {\ + color:#323232;\ +background-color:#FFF980;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-idle_fingers.js b/public/ace_editor/theme-idle_fingers.js new file mode 100644 index 0000000..ec2c22e --- /dev/null +++ b/public/ace_editor/theme-idle_fingers.js @@ -0,0 +1 @@ +define("ace/theme/idle_fingers",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-idle-fingers",b.cssText=".ace-idle-fingers .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-idle-fingers .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-idle-fingers .ace_gutter { background: #e8e8e8; color: #333;}.ace-idle-fingers .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-idle-fingers .ace_scroller { background-color: #323232;}.ace-idle-fingers .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-idle-fingers .ace_cursor { border-left: 2px solid #91FF00;}.ace-idle-fingers .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #91FF00;}.ace-idle-fingers .ace_marker-layer .ace_selection { background: rgba(90, 100, 126, 0.88);}.ace-idle-fingers.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #323232; border-radius: 2px;}.ace-idle-fingers .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-idle-fingers .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404040;}.ace-idle-fingers .ace_marker-layer .ace_active_line { background: #353637;}.ace-idle-fingers .ace_marker-layer .ace_selected_word { border: 1px solid rgba(90, 100, 126, 0.88);}.ace-idle-fingers .ace_invisible { color: #404040;}.ace-idle-fingers .ace_keyword, .ace-idle-fingers .ace_meta { color:#CC7833;}.ace-idle-fingers .ace_constant, .ace-idle-fingers .ace_constant.ace_other { color:#6C99BB;}.ace-idle-fingers .ace_constant.ace_character, { color:#6C99BB;}.ace-idle-fingers .ace_constant.ace_character.ace_escape, { color:#6C99BB;}.ace-idle-fingers .ace_invalid { color:#FFFFFF;background-color:#FF0000;}.ace-idle-fingers .ace_support.ace_constant { color:#6C99BB;}.ace-idle-fingers .ace_fold { background-color: #CC7833; border-color: #FFFFFF;}.ace-idle-fingers .ace_support.ace_function { color:#B83426;}.ace-idle-fingers .ace_variable.ace_parameter { font-style:italic;}.ace-idle-fingers .ace_string { color:#A5C261;}.ace-idle-fingers .ace_string.ace_regexp { color:#CCCC33;}.ace-idle-fingers .ace_comment { font-style:italic;color:#BC9458;}.ace-idle-fingers .ace_meta.ace_tag { color:#FFE5BB;}.ace-idle-fingers .ace_entity.ace_name { color:#FFC66D;}.ace-idle-fingers .ace_markup.ace_underline { text-decoration:underline;}.ace-idle-fingers .ace_collab.ace_user1 { color:#323232;background-color:#FFF980;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-kr_theme-noconflict.js b/public/ace_editor/theme-kr_theme-noconflict.js new file mode 100644 index 0000000..301a437 --- /dev/null +++ b/public/ace_editor/theme-kr_theme-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/kr_theme",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-kr-theme",b.cssText=".ace-kr-theme .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-kr-theme .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-kr-theme .ace_gutter { background: #e8e8e8; color: #333;}.ace-kr-theme .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-kr-theme .ace_scroller { background-color: #0B0A09;}.ace-kr-theme .ace_text-layer { cursor: text; color: #FCFFE0;}.ace-kr-theme .ace_cursor { border-left: 2px solid #FF9900;}.ace-kr-theme .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FF9900;}.ace-kr-theme .ace_marker-layer .ace_selection { background: rgba(170, 0, 255, 0.45);}.ace-kr-theme.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #0B0A09; border-radius: 2px;}.ace-kr-theme .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-kr-theme .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(255, 177, 111, 0.32);}.ace-kr-theme .ace_marker-layer .ace_active_line { background: #38403D;}.ace-kr-theme .ace_marker-layer .ace_selected_word { border: 1px solid rgba(170, 0, 255, 0.45);}.ace-kr-theme .ace_invisible { color: rgba(255, 177, 111, 0.32);}.ace-kr-theme .ace_keyword, .ace-kr-theme .ace_meta { color:#949C8B;}.ace-kr-theme .ace_constant, .ace-kr-theme .ace_constant.ace_other { color:rgba(210, 117, 24, 0.76);}.ace-kr-theme .ace_constant.ace_character, { color:rgba(210, 117, 24, 0.76);}.ace-kr-theme .ace_constant.ace_character.ace_escape, { color:rgba(210, 117, 24, 0.76);}.ace-kr-theme .ace_invalid { color:#F8F8F8;background-color:#A41300;}.ace-kr-theme .ace_support { color:#9FC28A;}.ace-kr-theme .ace_support.ace_constant { color:#C27E66;}.ace-kr-theme .ace_fold { background-color: #949C8B; border-color: #FCFFE0;}.ace-kr-theme .ace_support.ace_function { color:#85873A;}.ace-kr-theme .ace_storage { color:#FFEE80;}.ace-kr-theme .ace_string.ace_regexp { color:rgba(125, 255, 192, 0.65);}.ace-kr-theme .ace_comment { font-style:italic;color:#706D5B;}.ace-kr-theme .ace_variable { color:#D1A796;}.ace-kr-theme .ace_variable.ace_language { color:#FF80E1;}.ace-kr-theme .ace_meta.ace_tag { color:#BABD9C;}.ace-kr-theme .ace_markup.ace_underline { text-decoration:underline;}.ace-kr-theme .ace_markup.ace_list { background-color:#0F0040;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-kr_theme-uncompressed-noconflict.js b/public/ace_editor/theme-kr_theme-uncompressed-noconflict.js new file mode 100644 index 0000000..23cb884 --- /dev/null +++ b/public/ace_editor/theme-kr_theme-uncompressed-noconflict.js @@ -0,0 +1,182 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/kr_theme', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-kr-theme"; +exports.cssText = "\ +.ace-kr-theme .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-kr-theme .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-kr-theme .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-kr-theme .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-kr-theme .ace_scroller {\ + background-color: #0B0A09;\ +}\ +\ +.ace-kr-theme .ace_text-layer {\ + cursor: text;\ + color: #FCFFE0;\ +}\ +\ +.ace-kr-theme .ace_cursor {\ + border-left: 2px solid #FF9900;\ +}\ +\ +.ace-kr-theme .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FF9900;\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_selection {\ + background: rgba(170, 0, 255, 0.45);\ +}\ +\ +.ace-kr-theme.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #0B0A09;\ + border-radius: 2px;\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(255, 177, 111, 0.32);\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_active_line {\ + background: #38403D;\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(170, 0, 255, 0.45);\ +}\ +\ +.ace-kr-theme .ace_invisible {\ + color: rgba(255, 177, 111, 0.32);\ +}\ +\ +.ace-kr-theme .ace_keyword, .ace-kr-theme .ace_meta {\ + color:#949C8B;\ +}\ +\ +.ace-kr-theme .ace_constant, .ace-kr-theme .ace_constant.ace_other {\ + color:rgba(210, 117, 24, 0.76);\ +}\ +\ +.ace-kr-theme .ace_constant.ace_character, {\ + color:rgba(210, 117, 24, 0.76);\ +}\ +\ +.ace-kr-theme .ace_constant.ace_character.ace_escape, {\ + color:rgba(210, 117, 24, 0.76);\ +}\ +\ +.ace-kr-theme .ace_invalid {\ + color:#F8F8F8;\ +background-color:#A41300;\ +}\ +\ +.ace-kr-theme .ace_support {\ + color:#9FC28A;\ +}\ +\ +.ace-kr-theme .ace_support.ace_constant {\ + color:#C27E66;\ +}\ +\ +.ace-kr-theme .ace_fold {\ + background-color: #949C8B;\ + border-color: #FCFFE0;\ +}\ +\ +.ace-kr-theme .ace_support.ace_function {\ + color:#85873A;\ +}\ +\ +.ace-kr-theme .ace_storage {\ + color:#FFEE80;\ +}\ +\ +.ace-kr-theme .ace_string.ace_regexp {\ + color:rgba(125, 255, 192, 0.65);\ +}\ +\ +.ace-kr-theme .ace_comment {\ + font-style:italic;\ +color:#706D5B;\ +}\ +\ +.ace-kr-theme .ace_variable {\ + color:#D1A796;\ +}\ +\ +.ace-kr-theme .ace_variable.ace_language {\ + color:#FF80E1;\ +}\ +\ +.ace-kr-theme .ace_meta.ace_tag {\ + color:#BABD9C;\ +}\ +\ +.ace-kr-theme .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-kr-theme .ace_markup.ace_list {\ + background-color:#0F0040;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-kr_theme-uncompressed.js b/public/ace_editor/theme-kr_theme-uncompressed.js new file mode 100644 index 0000000..b30ff07 --- /dev/null +++ b/public/ace_editor/theme-kr_theme-uncompressed.js @@ -0,0 +1,182 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/kr_theme', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-kr-theme"; +exports.cssText = "\ +.ace-kr-theme .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-kr-theme .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-kr-theme .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-kr-theme .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-kr-theme .ace_scroller {\ + background-color: #0B0A09;\ +}\ +\ +.ace-kr-theme .ace_text-layer {\ + cursor: text;\ + color: #FCFFE0;\ +}\ +\ +.ace-kr-theme .ace_cursor {\ + border-left: 2px solid #FF9900;\ +}\ +\ +.ace-kr-theme .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FF9900;\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_selection {\ + background: rgba(170, 0, 255, 0.45);\ +}\ +\ +.ace-kr-theme.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #0B0A09;\ + border-radius: 2px;\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(255, 177, 111, 0.32);\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_active_line {\ + background: #38403D;\ +}\ +\ +.ace-kr-theme .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(170, 0, 255, 0.45);\ +}\ +\ +.ace-kr-theme .ace_invisible {\ + color: rgba(255, 177, 111, 0.32);\ +}\ +\ +.ace-kr-theme .ace_keyword, .ace-kr-theme .ace_meta {\ + color:#949C8B;\ +}\ +\ +.ace-kr-theme .ace_constant, .ace-kr-theme .ace_constant.ace_other {\ + color:rgba(210, 117, 24, 0.76);\ +}\ +\ +.ace-kr-theme .ace_constant.ace_character, {\ + color:rgba(210, 117, 24, 0.76);\ +}\ +\ +.ace-kr-theme .ace_constant.ace_character.ace_escape, {\ + color:rgba(210, 117, 24, 0.76);\ +}\ +\ +.ace-kr-theme .ace_invalid {\ + color:#F8F8F8;\ +background-color:#A41300;\ +}\ +\ +.ace-kr-theme .ace_support {\ + color:#9FC28A;\ +}\ +\ +.ace-kr-theme .ace_support.ace_constant {\ + color:#C27E66;\ +}\ +\ +.ace-kr-theme .ace_fold {\ + background-color: #949C8B;\ + border-color: #FCFFE0;\ +}\ +\ +.ace-kr-theme .ace_support.ace_function {\ + color:#85873A;\ +}\ +\ +.ace-kr-theme .ace_storage {\ + color:#FFEE80;\ +}\ +\ +.ace-kr-theme .ace_string.ace_regexp {\ + color:rgba(125, 255, 192, 0.65);\ +}\ +\ +.ace-kr-theme .ace_comment {\ + font-style:italic;\ +color:#706D5B;\ +}\ +\ +.ace-kr-theme .ace_variable {\ + color:#D1A796;\ +}\ +\ +.ace-kr-theme .ace_variable.ace_language {\ + color:#FF80E1;\ +}\ +\ +.ace-kr-theme .ace_meta.ace_tag {\ + color:#BABD9C;\ +}\ +\ +.ace-kr-theme .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-kr-theme .ace_markup.ace_list {\ + background-color:#0F0040;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-kr_theme.js b/public/ace_editor/theme-kr_theme.js new file mode 100644 index 0000000..7d59932 --- /dev/null +++ b/public/ace_editor/theme-kr_theme.js @@ -0,0 +1 @@ +define("ace/theme/kr_theme",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-kr-theme",b.cssText=".ace-kr-theme .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-kr-theme .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-kr-theme .ace_gutter { background: #e8e8e8; color: #333;}.ace-kr-theme .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-kr-theme .ace_scroller { background-color: #0B0A09;}.ace-kr-theme .ace_text-layer { cursor: text; color: #FCFFE0;}.ace-kr-theme .ace_cursor { border-left: 2px solid #FF9900;}.ace-kr-theme .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FF9900;}.ace-kr-theme .ace_marker-layer .ace_selection { background: rgba(170, 0, 255, 0.45);}.ace-kr-theme.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #0B0A09; border-radius: 2px;}.ace-kr-theme .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-kr-theme .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(255, 177, 111, 0.32);}.ace-kr-theme .ace_marker-layer .ace_active_line { background: #38403D;}.ace-kr-theme .ace_marker-layer .ace_selected_word { border: 1px solid rgba(170, 0, 255, 0.45);}.ace-kr-theme .ace_invisible { color: rgba(255, 177, 111, 0.32);}.ace-kr-theme .ace_keyword, .ace-kr-theme .ace_meta { color:#949C8B;}.ace-kr-theme .ace_constant, .ace-kr-theme .ace_constant.ace_other { color:rgba(210, 117, 24, 0.76);}.ace-kr-theme .ace_constant.ace_character, { color:rgba(210, 117, 24, 0.76);}.ace-kr-theme .ace_constant.ace_character.ace_escape, { color:rgba(210, 117, 24, 0.76);}.ace-kr-theme .ace_invalid { color:#F8F8F8;background-color:#A41300;}.ace-kr-theme .ace_support { color:#9FC28A;}.ace-kr-theme .ace_support.ace_constant { color:#C27E66;}.ace-kr-theme .ace_fold { background-color: #949C8B; border-color: #FCFFE0;}.ace-kr-theme .ace_support.ace_function { color:#85873A;}.ace-kr-theme .ace_storage { color:#FFEE80;}.ace-kr-theme .ace_string.ace_regexp { color:rgba(125, 255, 192, 0.65);}.ace-kr-theme .ace_comment { font-style:italic;color:#706D5B;}.ace-kr-theme .ace_variable { color:#D1A796;}.ace-kr-theme .ace_variable.ace_language { color:#FF80E1;}.ace-kr-theme .ace_meta.ace_tag { color:#BABD9C;}.ace-kr-theme .ace_markup.ace_underline { text-decoration:underline;}.ace-kr-theme .ace_markup.ace_list { background-color:#0F0040;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-merbivore-noconflict.js b/public/ace_editor/theme-merbivore-noconflict.js new file mode 100644 index 0000000..51dd538 --- /dev/null +++ b/public/ace_editor/theme-merbivore-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/merbivore",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-merbivore",b.cssText=".ace-merbivore .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-merbivore .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-merbivore .ace_gutter { background: #e8e8e8; color: #333;}.ace-merbivore .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-merbivore .ace_scroller { background-color: #161616;}.ace-merbivore .ace_text-layer { cursor: text; color: #E6E1DC;}.ace-merbivore .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-merbivore .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-merbivore .ace_marker-layer .ace_selection { background: #454545;}.ace-merbivore.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #161616; border-radius: 2px;}.ace-merbivore .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-merbivore .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404040;}.ace-merbivore .ace_marker-layer .ace_active_line { background: #333435;}.ace-merbivore .ace_marker-layer .ace_selected_word { border: 1px solid #454545;}.ace-merbivore .ace_invisible { color: #404040;}.ace-merbivore .ace_keyword, .ace-merbivore .ace_meta { color:#FC6F09;}.ace-merbivore .ace_constant, .ace-merbivore .ace_constant.ace_other { color:#1EDAFB;}.ace-merbivore .ace_constant.ace_character, { color:#1EDAFB;}.ace-merbivore .ace_constant.ace_character.ace_escape, { color:#1EDAFB;}.ace-merbivore .ace_constant.ace_language { color:#FDC251;}.ace-merbivore .ace_constant.ace_library { color:#8DFF0A;}.ace-merbivore .ace_constant.ace_numeric { color:#58C554;}.ace-merbivore .ace_invalid { color:#FFFFFF;background-color:#990000;}.ace-merbivore .ace_support.ace_constant { color:#8DFF0A;}.ace-merbivore .ace_fold { background-color: #FC6F09; border-color: #E6E1DC;}.ace-merbivore .ace_support.ace_function { color:#FC6F09;}.ace-merbivore .ace_storage { color:#FC6F09;}.ace-merbivore .ace_string { color:#8DFF0A;}.ace-merbivore .ace_comment { font-style:italic;color:#AD2EA4;}.ace-merbivore .ace_meta.ace_tag { color:#FC6F09;}.ace-merbivore .ace_entity.ace_other.ace_attribute-name { color:#FFFF89;}.ace-merbivore .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-merbivore-uncompressed-noconflict.js b/public/ace_editor/theme-merbivore-uncompressed-noconflict.js new file mode 100644 index 0000000..43eaad4 --- /dev/null +++ b/public/ace_editor/theme-merbivore-uncompressed-noconflict.js @@ -0,0 +1,182 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/merbivore', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-merbivore"; +exports.cssText = "\ +.ace-merbivore .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-merbivore .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-merbivore .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-merbivore .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-merbivore .ace_scroller {\ + background-color: #161616;\ +}\ +\ +.ace-merbivore .ace_text-layer {\ + cursor: text;\ + color: #E6E1DC;\ +}\ +\ +.ace-merbivore .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-merbivore .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_selection {\ + background: #454545;\ +}\ +\ +.ace-merbivore.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #161616;\ + border-radius: 2px;\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404040;\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_active_line {\ + background: #333435;\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_selected_word {\ + border: 1px solid #454545;\ +}\ +\ +.ace-merbivore .ace_invisible {\ + color: #404040;\ +}\ +\ +.ace-merbivore .ace_keyword, .ace-merbivore .ace_meta {\ + color:#FC6F09;\ +}\ +\ +.ace-merbivore .ace_constant, .ace-merbivore .ace_constant.ace_other {\ + color:#1EDAFB;\ +}\ +\ +.ace-merbivore .ace_constant.ace_character, {\ + color:#1EDAFB;\ +}\ +\ +.ace-merbivore .ace_constant.ace_character.ace_escape, {\ + color:#1EDAFB;\ +}\ +\ +.ace-merbivore .ace_constant.ace_language {\ + color:#FDC251;\ +}\ +\ +.ace-merbivore .ace_constant.ace_library {\ + color:#8DFF0A;\ +}\ +\ +.ace-merbivore .ace_constant.ace_numeric {\ + color:#58C554;\ +}\ +\ +.ace-merbivore .ace_invalid {\ + color:#FFFFFF;\ +background-color:#990000;\ +}\ +\ +.ace-merbivore .ace_support.ace_constant {\ + color:#8DFF0A;\ +}\ +\ +.ace-merbivore .ace_fold {\ + background-color: #FC6F09;\ + border-color: #E6E1DC;\ +}\ +\ +.ace-merbivore .ace_support.ace_function {\ + color:#FC6F09;\ +}\ +\ +.ace-merbivore .ace_storage {\ + color:#FC6F09;\ +}\ +\ +.ace-merbivore .ace_string {\ + color:#8DFF0A;\ +}\ +\ +.ace-merbivore .ace_comment {\ + font-style:italic;\ +color:#AD2EA4;\ +}\ +\ +.ace-merbivore .ace_meta.ace_tag {\ + color:#FC6F09;\ +}\ +\ +.ace-merbivore .ace_entity.ace_other.ace_attribute-name {\ + color:#FFFF89;\ +}\ +\ +.ace-merbivore .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-merbivore-uncompressed.js b/public/ace_editor/theme-merbivore-uncompressed.js new file mode 100644 index 0000000..31039da --- /dev/null +++ b/public/ace_editor/theme-merbivore-uncompressed.js @@ -0,0 +1,182 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/merbivore', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-merbivore"; +exports.cssText = "\ +.ace-merbivore .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-merbivore .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-merbivore .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-merbivore .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-merbivore .ace_scroller {\ + background-color: #161616;\ +}\ +\ +.ace-merbivore .ace_text-layer {\ + cursor: text;\ + color: #E6E1DC;\ +}\ +\ +.ace-merbivore .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-merbivore .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_selection {\ + background: #454545;\ +}\ +\ +.ace-merbivore.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #161616;\ + border-radius: 2px;\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404040;\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_active_line {\ + background: #333435;\ +}\ +\ +.ace-merbivore .ace_marker-layer .ace_selected_word {\ + border: 1px solid #454545;\ +}\ +\ +.ace-merbivore .ace_invisible {\ + color: #404040;\ +}\ +\ +.ace-merbivore .ace_keyword, .ace-merbivore .ace_meta {\ + color:#FC6F09;\ +}\ +\ +.ace-merbivore .ace_constant, .ace-merbivore .ace_constant.ace_other {\ + color:#1EDAFB;\ +}\ +\ +.ace-merbivore .ace_constant.ace_character, {\ + color:#1EDAFB;\ +}\ +\ +.ace-merbivore .ace_constant.ace_character.ace_escape, {\ + color:#1EDAFB;\ +}\ +\ +.ace-merbivore .ace_constant.ace_language {\ + color:#FDC251;\ +}\ +\ +.ace-merbivore .ace_constant.ace_library {\ + color:#8DFF0A;\ +}\ +\ +.ace-merbivore .ace_constant.ace_numeric {\ + color:#58C554;\ +}\ +\ +.ace-merbivore .ace_invalid {\ + color:#FFFFFF;\ +background-color:#990000;\ +}\ +\ +.ace-merbivore .ace_support.ace_constant {\ + color:#8DFF0A;\ +}\ +\ +.ace-merbivore .ace_fold {\ + background-color: #FC6F09;\ + border-color: #E6E1DC;\ +}\ +\ +.ace-merbivore .ace_support.ace_function {\ + color:#FC6F09;\ +}\ +\ +.ace-merbivore .ace_storage {\ + color:#FC6F09;\ +}\ +\ +.ace-merbivore .ace_string {\ + color:#8DFF0A;\ +}\ +\ +.ace-merbivore .ace_comment {\ + font-style:italic;\ +color:#AD2EA4;\ +}\ +\ +.ace-merbivore .ace_meta.ace_tag {\ + color:#FC6F09;\ +}\ +\ +.ace-merbivore .ace_entity.ace_other.ace_attribute-name {\ + color:#FFFF89;\ +}\ +\ +.ace-merbivore .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-merbivore.js b/public/ace_editor/theme-merbivore.js new file mode 100644 index 0000000..3281016 --- /dev/null +++ b/public/ace_editor/theme-merbivore.js @@ -0,0 +1 @@ +define("ace/theme/merbivore",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-merbivore",b.cssText=".ace-merbivore .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-merbivore .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-merbivore .ace_gutter { background: #e8e8e8; color: #333;}.ace-merbivore .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-merbivore .ace_scroller { background-color: #161616;}.ace-merbivore .ace_text-layer { cursor: text; color: #E6E1DC;}.ace-merbivore .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-merbivore .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-merbivore .ace_marker-layer .ace_selection { background: #454545;}.ace-merbivore.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #161616; border-radius: 2px;}.ace-merbivore .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-merbivore .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404040;}.ace-merbivore .ace_marker-layer .ace_active_line { background: #333435;}.ace-merbivore .ace_marker-layer .ace_selected_word { border: 1px solid #454545;}.ace-merbivore .ace_invisible { color: #404040;}.ace-merbivore .ace_keyword, .ace-merbivore .ace_meta { color:#FC6F09;}.ace-merbivore .ace_constant, .ace-merbivore .ace_constant.ace_other { color:#1EDAFB;}.ace-merbivore .ace_constant.ace_character, { color:#1EDAFB;}.ace-merbivore .ace_constant.ace_character.ace_escape, { color:#1EDAFB;}.ace-merbivore .ace_constant.ace_language { color:#FDC251;}.ace-merbivore .ace_constant.ace_library { color:#8DFF0A;}.ace-merbivore .ace_constant.ace_numeric { color:#58C554;}.ace-merbivore .ace_invalid { color:#FFFFFF;background-color:#990000;}.ace-merbivore .ace_support.ace_constant { color:#8DFF0A;}.ace-merbivore .ace_fold { background-color: #FC6F09; border-color: #E6E1DC;}.ace-merbivore .ace_support.ace_function { color:#FC6F09;}.ace-merbivore .ace_storage { color:#FC6F09;}.ace-merbivore .ace_string { color:#8DFF0A;}.ace-merbivore .ace_comment { font-style:italic;color:#AD2EA4;}.ace-merbivore .ace_meta.ace_tag { color:#FC6F09;}.ace-merbivore .ace_entity.ace_other.ace_attribute-name { color:#FFFF89;}.ace-merbivore .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-merbivore_soft-noconflict.js b/public/ace_editor/theme-merbivore_soft-noconflict.js new file mode 100644 index 0000000..8348858 --- /dev/null +++ b/public/ace_editor/theme-merbivore_soft-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/merbivore_soft",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-merbivore-soft",b.cssText=".ace-merbivore-soft .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-merbivore-soft .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-merbivore-soft .ace_gutter { background: #e8e8e8; color: #333;}.ace-merbivore-soft .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-merbivore-soft .ace_scroller { background-color: #1C1C1C;}.ace-merbivore-soft .ace_text-layer { cursor: text; color: #E6E1DC;}.ace-merbivore-soft .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-merbivore-soft .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-merbivore-soft .ace_marker-layer .ace_selection { background: #494949;}.ace-merbivore-soft.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #1C1C1C; border-radius: 2px;}.ace-merbivore-soft .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-merbivore-soft .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404040;}.ace-merbivore-soft .ace_marker-layer .ace_active_line { background: #333435;}.ace-merbivore-soft .ace_marker-layer .ace_selected_word { border: 1px solid #494949;}.ace-merbivore-soft .ace_invisible { color: #404040;}.ace-merbivore-soft .ace_keyword, .ace-merbivore-soft .ace_meta { color:#FC803A;}.ace-merbivore-soft .ace_constant, .ace-merbivore-soft .ace_constant.ace_other { color:#68C1D8;}.ace-merbivore-soft .ace_constant.ace_character, { color:#68C1D8;}.ace-merbivore-soft .ace_constant.ace_character.ace_escape, { color:#68C1D8;}.ace-merbivore-soft .ace_constant.ace_language { color:#E1C582;}.ace-merbivore-soft .ace_constant.ace_library { color:#8EC65F;}.ace-merbivore-soft .ace_constant.ace_numeric { color:#7FC578;}.ace-merbivore-soft .ace_invalid { color:#FFFFFF;background-color:#FE3838;}.ace-merbivore-soft .ace_invalid.ace_deprecated { color:#FFFFFF;background-color:#FE3838;}.ace-merbivore-soft .ace_support.ace_constant { color:#8EC65F;}.ace-merbivore-soft .ace_fold { background-color: #FC803A; border-color: #E6E1DC;}.ace-merbivore-soft .ace_storage { color:#FC803A;}.ace-merbivore-soft .ace_string { color:#8EC65F;}.ace-merbivore-soft .ace_comment { font-style:italic;color:#AC4BB8;}.ace-merbivore-soft .ace_meta { font-style:italic;color:#AC4BB8;}.ace-merbivore-soft .ace_meta.ace_tag { color:#FC803A;}.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name { color:#EAF1A3;}.ace-merbivore-soft .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-merbivore_soft-uncompressed-noconflict.js b/public/ace_editor/theme-merbivore_soft-uncompressed-noconflict.js new file mode 100644 index 0000000..d377da8 --- /dev/null +++ b/public/ace_editor/theme-merbivore_soft-uncompressed-noconflict.js @@ -0,0 +1,188 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/merbivore_soft', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-merbivore-soft"; +exports.cssText = "\ +.ace-merbivore-soft .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-merbivore-soft .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-merbivore-soft .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-merbivore-soft .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-merbivore-soft .ace_scroller {\ + background-color: #1C1C1C;\ +}\ +\ +.ace-merbivore-soft .ace_text-layer {\ + cursor: text;\ + color: #E6E1DC;\ +}\ +\ +.ace-merbivore-soft .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-merbivore-soft .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_selection {\ + background: #494949;\ +}\ +\ +.ace-merbivore-soft.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #1C1C1C;\ + border-radius: 2px;\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404040;\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_active_line {\ + background: #333435;\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_selected_word {\ + border: 1px solid #494949;\ +}\ +\ +.ace-merbivore-soft .ace_invisible {\ + color: #404040;\ +}\ +\ +.ace-merbivore-soft .ace_keyword, .ace-merbivore-soft .ace_meta {\ + color:#FC803A;\ +}\ +\ +.ace-merbivore-soft .ace_constant, .ace-merbivore-soft .ace_constant.ace_other {\ + color:#68C1D8;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_character, {\ + color:#68C1D8;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_character.ace_escape, {\ + color:#68C1D8;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_language {\ + color:#E1C582;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_library {\ + color:#8EC65F;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_numeric {\ + color:#7FC578;\ +}\ +\ +.ace-merbivore-soft .ace_invalid {\ + color:#FFFFFF;\ +background-color:#FE3838;\ +}\ +\ +.ace-merbivore-soft .ace_invalid.ace_deprecated {\ + color:#FFFFFF;\ +background-color:#FE3838;\ +}\ +\ +.ace-merbivore-soft .ace_support.ace_constant {\ + color:#8EC65F;\ +}\ +\ +.ace-merbivore-soft .ace_fold {\ + background-color: #FC803A;\ + border-color: #E6E1DC;\ +}\ +\ +.ace-merbivore-soft .ace_storage {\ + color:#FC803A;\ +}\ +\ +.ace-merbivore-soft .ace_string {\ + color:#8EC65F;\ +}\ +\ +.ace-merbivore-soft .ace_comment {\ + font-style:italic;\ +color:#AC4BB8;\ +}\ +\ +.ace-merbivore-soft .ace_meta {\ + font-style:italic;\ +color:#AC4BB8;\ +}\ +\ +.ace-merbivore-soft .ace_meta.ace_tag {\ + color:#FC803A;\ +}\ +\ +.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\ + color:#EAF1A3;\ +}\ +\ +.ace-merbivore-soft .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-merbivore_soft-uncompressed.js b/public/ace_editor/theme-merbivore_soft-uncompressed.js new file mode 100644 index 0000000..7f71080 --- /dev/null +++ b/public/ace_editor/theme-merbivore_soft-uncompressed.js @@ -0,0 +1,188 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/merbivore_soft', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-merbivore-soft"; +exports.cssText = "\ +.ace-merbivore-soft .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-merbivore-soft .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-merbivore-soft .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-merbivore-soft .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-merbivore-soft .ace_scroller {\ + background-color: #1C1C1C;\ +}\ +\ +.ace-merbivore-soft .ace_text-layer {\ + cursor: text;\ + color: #E6E1DC;\ +}\ +\ +.ace-merbivore-soft .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-merbivore-soft .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_selection {\ + background: #494949;\ +}\ +\ +.ace-merbivore-soft.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #1C1C1C;\ + border-radius: 2px;\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404040;\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_active_line {\ + background: #333435;\ +}\ +\ +.ace-merbivore-soft .ace_marker-layer .ace_selected_word {\ + border: 1px solid #494949;\ +}\ +\ +.ace-merbivore-soft .ace_invisible {\ + color: #404040;\ +}\ +\ +.ace-merbivore-soft .ace_keyword, .ace-merbivore-soft .ace_meta {\ + color:#FC803A;\ +}\ +\ +.ace-merbivore-soft .ace_constant, .ace-merbivore-soft .ace_constant.ace_other {\ + color:#68C1D8;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_character, {\ + color:#68C1D8;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_character.ace_escape, {\ + color:#68C1D8;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_language {\ + color:#E1C582;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_library {\ + color:#8EC65F;\ +}\ +\ +.ace-merbivore-soft .ace_constant.ace_numeric {\ + color:#7FC578;\ +}\ +\ +.ace-merbivore-soft .ace_invalid {\ + color:#FFFFFF;\ +background-color:#FE3838;\ +}\ +\ +.ace-merbivore-soft .ace_invalid.ace_deprecated {\ + color:#FFFFFF;\ +background-color:#FE3838;\ +}\ +\ +.ace-merbivore-soft .ace_support.ace_constant {\ + color:#8EC65F;\ +}\ +\ +.ace-merbivore-soft .ace_fold {\ + background-color: #FC803A;\ + border-color: #E6E1DC;\ +}\ +\ +.ace-merbivore-soft .ace_storage {\ + color:#FC803A;\ +}\ +\ +.ace-merbivore-soft .ace_string {\ + color:#8EC65F;\ +}\ +\ +.ace-merbivore-soft .ace_comment {\ + font-style:italic;\ +color:#AC4BB8;\ +}\ +\ +.ace-merbivore-soft .ace_meta {\ + font-style:italic;\ +color:#AC4BB8;\ +}\ +\ +.ace-merbivore-soft .ace_meta.ace_tag {\ + color:#FC803A;\ +}\ +\ +.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\ + color:#EAF1A3;\ +}\ +\ +.ace-merbivore-soft .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-merbivore_soft.js b/public/ace_editor/theme-merbivore_soft.js new file mode 100644 index 0000000..2963739 --- /dev/null +++ b/public/ace_editor/theme-merbivore_soft.js @@ -0,0 +1 @@ +define("ace/theme/merbivore_soft",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-merbivore-soft",b.cssText=".ace-merbivore-soft .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-merbivore-soft .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-merbivore-soft .ace_gutter { background: #e8e8e8; color: #333;}.ace-merbivore-soft .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-merbivore-soft .ace_scroller { background-color: #1C1C1C;}.ace-merbivore-soft .ace_text-layer { cursor: text; color: #E6E1DC;}.ace-merbivore-soft .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-merbivore-soft .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-merbivore-soft .ace_marker-layer .ace_selection { background: #494949;}.ace-merbivore-soft.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #1C1C1C; border-radius: 2px;}.ace-merbivore-soft .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-merbivore-soft .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404040;}.ace-merbivore-soft .ace_marker-layer .ace_active_line { background: #333435;}.ace-merbivore-soft .ace_marker-layer .ace_selected_word { border: 1px solid #494949;}.ace-merbivore-soft .ace_invisible { color: #404040;}.ace-merbivore-soft .ace_keyword, .ace-merbivore-soft .ace_meta { color:#FC803A;}.ace-merbivore-soft .ace_constant, .ace-merbivore-soft .ace_constant.ace_other { color:#68C1D8;}.ace-merbivore-soft .ace_constant.ace_character, { color:#68C1D8;}.ace-merbivore-soft .ace_constant.ace_character.ace_escape, { color:#68C1D8;}.ace-merbivore-soft .ace_constant.ace_language { color:#E1C582;}.ace-merbivore-soft .ace_constant.ace_library { color:#8EC65F;}.ace-merbivore-soft .ace_constant.ace_numeric { color:#7FC578;}.ace-merbivore-soft .ace_invalid { color:#FFFFFF;background-color:#FE3838;}.ace-merbivore-soft .ace_invalid.ace_deprecated { color:#FFFFFF;background-color:#FE3838;}.ace-merbivore-soft .ace_support.ace_constant { color:#8EC65F;}.ace-merbivore-soft .ace_fold { background-color: #FC803A; border-color: #E6E1DC;}.ace-merbivore-soft .ace_storage { color:#FC803A;}.ace-merbivore-soft .ace_string { color:#8EC65F;}.ace-merbivore-soft .ace_comment { font-style:italic;color:#AC4BB8;}.ace-merbivore-soft .ace_meta { font-style:italic;color:#AC4BB8;}.ace-merbivore-soft .ace_meta.ace_tag { color:#FC803A;}.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name { color:#EAF1A3;}.ace-merbivore-soft .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-mono_industrial-noconflict.js b/public/ace_editor/theme-mono_industrial-noconflict.js new file mode 100644 index 0000000..7282fe8 --- /dev/null +++ b/public/ace_editor/theme-mono_industrial-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/mono_industrial",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-mono-industrial",b.cssText=".ace-mono-industrial .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-mono-industrial .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-mono-industrial .ace_gutter { background: #e8e8e8; color: #333;}.ace-mono-industrial .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-mono-industrial .ace_scroller { background-color: #222C28;}.ace-mono-industrial .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-mono-industrial .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-mono-industrial .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-mono-industrial .ace_marker-layer .ace_selection { background: rgba(145, 153, 148, 0.40);}.ace-mono-industrial.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #222C28; border-radius: 2px;}.ace-mono-industrial .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-mono-industrial .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(102, 108, 104, 0.50);}.ace-mono-industrial .ace_marker-layer .ace_active_line { background: rgba(12, 13, 12, 0.25);}.ace-mono-industrial .ace_marker-layer .ace_selected_word { border: 1px solid rgba(145, 153, 148, 0.40);}.ace-mono-industrial .ace_invisible { color: rgba(102, 108, 104, 0.50);}.ace-mono-industrial .ace_keyword, .ace-mono-industrial .ace_meta { color:#A39E64;}.ace-mono-industrial .ace_keyword.ace_operator { color:#A8B3AB;}.ace-mono-industrial .ace_constant, .ace-mono-industrial .ace_constant.ace_other { color:#E98800;}.ace-mono-industrial .ace_constant.ace_character, { color:#E98800;}.ace-mono-industrial .ace_constant.ace_character.ace_escape, { color:#E98800;}.ace-mono-industrial .ace_constant.ace_numeric { color:#E98800;}.ace-mono-industrial .ace_invalid { color:#FFFFFF;background-color:rgba(153, 0, 0, 0.68);}.ace-mono-industrial .ace_support.ace_constant { color:#C87500;}.ace-mono-industrial .ace_fold { background-color: #A8B3AB; border-color: #FFFFFF;}.ace-mono-industrial .ace_support.ace_function { color:#588E60;}.ace-mono-industrial .ace_storage { color:#C23B00;}.ace-mono-industrial .ace_variable { color:#A8B3AB;}.ace-mono-industrial .ace_variable.ace_parameter { color:#648BD2;}.ace-mono-industrial .ace_comment { color:#666C68;background-color:#151C19;}.ace-mono-industrial .ace_variable.ace_language { color:#648BD2;}.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name { color:#909993;}.ace-mono-industrial .ace_entity.ace_name { color:#5778B6;}.ace-mono-industrial .ace_entity.ace_name.ace_function { color:#A8B3AB;}.ace-mono-industrial .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-mono_industrial-uncompressed-noconflict.js b/public/ace_editor/theme-mono_industrial-uncompressed-noconflict.js new file mode 100644 index 0000000..7bd3149 --- /dev/null +++ b/public/ace_editor/theme-mono_industrial-uncompressed-noconflict.js @@ -0,0 +1,190 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/mono_industrial', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-mono-industrial"; +exports.cssText = "\ +.ace-mono-industrial .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-mono-industrial .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-mono-industrial .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-mono-industrial .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-mono-industrial .ace_scroller {\ + background-color: #222C28;\ +}\ +\ +.ace-mono-industrial .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-mono-industrial .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-mono-industrial .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_selection {\ + background: rgba(145, 153, 148, 0.40);\ +}\ +\ +.ace-mono-industrial.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #222C28;\ + border-radius: 2px;\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(102, 108, 104, 0.50);\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_active_line {\ + background: rgba(12, 13, 12, 0.25);\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(145, 153, 148, 0.40);\ +}\ +\ +.ace-mono-industrial .ace_invisible {\ + color: rgba(102, 108, 104, 0.50);\ +}\ +\ +.ace-mono-industrial .ace_keyword, .ace-mono-industrial .ace_meta {\ + color:#A39E64;\ +}\ +\ +.ace-mono-industrial .ace_keyword.ace_operator {\ + color:#A8B3AB;\ +}\ +\ +.ace-mono-industrial .ace_constant, .ace-mono-industrial .ace_constant.ace_other {\ + color:#E98800;\ +}\ +\ +.ace-mono-industrial .ace_constant.ace_character, {\ + color:#E98800;\ +}\ +\ +.ace-mono-industrial .ace_constant.ace_character.ace_escape, {\ + color:#E98800;\ +}\ +\ +.ace-mono-industrial .ace_constant.ace_numeric {\ + color:#E98800;\ +}\ +\ +.ace-mono-industrial .ace_invalid {\ + color:#FFFFFF;\ +background-color:rgba(153, 0, 0, 0.68);\ +}\ +\ +.ace-mono-industrial .ace_support.ace_constant {\ + color:#C87500;\ +}\ +\ +.ace-mono-industrial .ace_fold {\ + background-color: #A8B3AB;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-mono-industrial .ace_support.ace_function {\ + color:#588E60;\ +}\ +\ +.ace-mono-industrial .ace_storage {\ + color:#C23B00;\ +}\ +\ +.ace-mono-industrial .ace_variable {\ + color:#A8B3AB;\ +}\ +\ +.ace-mono-industrial .ace_variable.ace_parameter {\ + color:#648BD2;\ +}\ +\ +.ace-mono-industrial .ace_comment {\ + color:#666C68;\ +background-color:#151C19;\ +}\ +\ +.ace-mono-industrial .ace_variable.ace_language {\ + color:#648BD2;\ +}\ +\ +.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\ + color:#909993;\ +}\ +\ +.ace-mono-industrial .ace_entity.ace_name {\ + color:#5778B6;\ +}\ +\ +.ace-mono-industrial .ace_entity.ace_name.ace_function {\ + color:#A8B3AB;\ +}\ +\ +.ace-mono-industrial .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-mono_industrial-uncompressed.js b/public/ace_editor/theme-mono_industrial-uncompressed.js new file mode 100644 index 0000000..a8ccfe7 --- /dev/null +++ b/public/ace_editor/theme-mono_industrial-uncompressed.js @@ -0,0 +1,190 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/mono_industrial', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-mono-industrial"; +exports.cssText = "\ +.ace-mono-industrial .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-mono-industrial .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-mono-industrial .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-mono-industrial .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-mono-industrial .ace_scroller {\ + background-color: #222C28;\ +}\ +\ +.ace-mono-industrial .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-mono-industrial .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-mono-industrial .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_selection {\ + background: rgba(145, 153, 148, 0.40);\ +}\ +\ +.ace-mono-industrial.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #222C28;\ + border-radius: 2px;\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(102, 108, 104, 0.50);\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_active_line {\ + background: rgba(12, 13, 12, 0.25);\ +}\ +\ +.ace-mono-industrial .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(145, 153, 148, 0.40);\ +}\ +\ +.ace-mono-industrial .ace_invisible {\ + color: rgba(102, 108, 104, 0.50);\ +}\ +\ +.ace-mono-industrial .ace_keyword, .ace-mono-industrial .ace_meta {\ + color:#A39E64;\ +}\ +\ +.ace-mono-industrial .ace_keyword.ace_operator {\ + color:#A8B3AB;\ +}\ +\ +.ace-mono-industrial .ace_constant, .ace-mono-industrial .ace_constant.ace_other {\ + color:#E98800;\ +}\ +\ +.ace-mono-industrial .ace_constant.ace_character, {\ + color:#E98800;\ +}\ +\ +.ace-mono-industrial .ace_constant.ace_character.ace_escape, {\ + color:#E98800;\ +}\ +\ +.ace-mono-industrial .ace_constant.ace_numeric {\ + color:#E98800;\ +}\ +\ +.ace-mono-industrial .ace_invalid {\ + color:#FFFFFF;\ +background-color:rgba(153, 0, 0, 0.68);\ +}\ +\ +.ace-mono-industrial .ace_support.ace_constant {\ + color:#C87500;\ +}\ +\ +.ace-mono-industrial .ace_fold {\ + background-color: #A8B3AB;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-mono-industrial .ace_support.ace_function {\ + color:#588E60;\ +}\ +\ +.ace-mono-industrial .ace_storage {\ + color:#C23B00;\ +}\ +\ +.ace-mono-industrial .ace_variable {\ + color:#A8B3AB;\ +}\ +\ +.ace-mono-industrial .ace_variable.ace_parameter {\ + color:#648BD2;\ +}\ +\ +.ace-mono-industrial .ace_comment {\ + color:#666C68;\ +background-color:#151C19;\ +}\ +\ +.ace-mono-industrial .ace_variable.ace_language {\ + color:#648BD2;\ +}\ +\ +.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\ + color:#909993;\ +}\ +\ +.ace-mono-industrial .ace_entity.ace_name {\ + color:#5778B6;\ +}\ +\ +.ace-mono-industrial .ace_entity.ace_name.ace_function {\ + color:#A8B3AB;\ +}\ +\ +.ace-mono-industrial .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-mono_industrial.js b/public/ace_editor/theme-mono_industrial.js new file mode 100644 index 0000000..f179758 --- /dev/null +++ b/public/ace_editor/theme-mono_industrial.js @@ -0,0 +1 @@ +define("ace/theme/mono_industrial",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-mono-industrial",b.cssText=".ace-mono-industrial .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-mono-industrial .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-mono-industrial .ace_gutter { background: #e8e8e8; color: #333;}.ace-mono-industrial .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-mono-industrial .ace_scroller { background-color: #222C28;}.ace-mono-industrial .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-mono-industrial .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-mono-industrial .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-mono-industrial .ace_marker-layer .ace_selection { background: rgba(145, 153, 148, 0.40);}.ace-mono-industrial.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #222C28; border-radius: 2px;}.ace-mono-industrial .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-mono-industrial .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(102, 108, 104, 0.50);}.ace-mono-industrial .ace_marker-layer .ace_active_line { background: rgba(12, 13, 12, 0.25);}.ace-mono-industrial .ace_marker-layer .ace_selected_word { border: 1px solid rgba(145, 153, 148, 0.40);}.ace-mono-industrial .ace_invisible { color: rgba(102, 108, 104, 0.50);}.ace-mono-industrial .ace_keyword, .ace-mono-industrial .ace_meta { color:#A39E64;}.ace-mono-industrial .ace_keyword.ace_operator { color:#A8B3AB;}.ace-mono-industrial .ace_constant, .ace-mono-industrial .ace_constant.ace_other { color:#E98800;}.ace-mono-industrial .ace_constant.ace_character, { color:#E98800;}.ace-mono-industrial .ace_constant.ace_character.ace_escape, { color:#E98800;}.ace-mono-industrial .ace_constant.ace_numeric { color:#E98800;}.ace-mono-industrial .ace_invalid { color:#FFFFFF;background-color:rgba(153, 0, 0, 0.68);}.ace-mono-industrial .ace_support.ace_constant { color:#C87500;}.ace-mono-industrial .ace_fold { background-color: #A8B3AB; border-color: #FFFFFF;}.ace-mono-industrial .ace_support.ace_function { color:#588E60;}.ace-mono-industrial .ace_storage { color:#C23B00;}.ace-mono-industrial .ace_variable { color:#A8B3AB;}.ace-mono-industrial .ace_variable.ace_parameter { color:#648BD2;}.ace-mono-industrial .ace_comment { color:#666C68;background-color:#151C19;}.ace-mono-industrial .ace_variable.ace_language { color:#648BD2;}.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name { color:#909993;}.ace-mono-industrial .ace_entity.ace_name { color:#5778B6;}.ace-mono-industrial .ace_entity.ace_name.ace_function { color:#A8B3AB;}.ace-mono-industrial .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-monokai-noconflict.js b/public/ace_editor/theme-monokai-noconflict.js new file mode 100644 index 0000000..588ae0c --- /dev/null +++ b/public/ace_editor/theme-monokai-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-monokai",b.cssText=".ace-monokai .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-monokai .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-monokai .ace_gutter { background: #292a24; color: #f1f1f1;}.ace-monokai .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-monokai .ace_scroller { background-color: #272822;}.ace-monokai .ace_text-layer { cursor: text; color: #F8F8F2;}.ace-monokai .ace_cursor { border-left: 2px solid #F8F8F0;}.ace-monokai .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #F8F8F0;}.ace-monokai .ace_marker-layer .ace_selection { background: #49483E;}.ace-monokai.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #272822; border-radius: 2px;}.ace-monokai .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-monokai .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #49483E;}.ace-monokai .ace_marker-layer .ace_active_line{ background: #49483E;}.ace-monokai .ace_gutter_active_line{ background: #191916;}.ace-monokai .ace_marker-layer .ace_selected_word { border: 1px solid #49483E;}.ace-monokai .ace_invisible { color: #49483E;}.ace-monokai .ace_keyword, .ace-monokai .ace_meta { color:#F92672;}.ace-monokai .ace_constant.ace_language { color:#AE81FF;}.ace-monokai .ace_constant.ace_numeric { color:#AE81FF;}.ace-monokai .ace_constant.ace_other { color:#AE81FF;}.ace-monokai .ace_invalid { color:#F8F8F0;background-color:#F92672;}.ace-monokai .ace_invalid.ace_deprecated { color:#F8F8F0;background-color:#AE81FF;}.ace-monokai .ace_support.ace_constant { color:#66D9EF;}.ace-monokai .ace_fold { background-color: #A6E22E; border-color: #F8F8F2;}.ace-monokai .ace_support.ace_function { color:#66D9EF;}.ace-monokai .ace_storage { color:#F92672;}.ace-monokai .ace_storage.ace_type, .ace-monokai .ace_support.ace_type{ font-style:italic;color:#66D9EF;}.ace-monokai .ace_variable { color:#A6E22E;}.ace-monokai .ace_variable.ace_parameter { font-style:italic;color:#FD971F;}.ace-monokai .ace_string { color:#E6DB74;}.ace-monokai .ace_comment { color:#75715E;}.ace-monokai .ace_entity.ace_other.ace_attribute-name { color:#A6E22E;}.ace-monokai .ace_entity.ace_name.ace_function { color:#A6E22E;}.ace-monokai .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-monokai-uncompressed-noconflict.js b/public/ace_editor/theme-monokai-uncompressed-noconflict.js new file mode 100644 index 0000000..d0c9d9d --- /dev/null +++ b/public/ace_editor/theme-monokai-uncompressed-noconflict.js @@ -0,0 +1,191 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/monokai', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-monokai"; +exports.cssText = "\ +.ace-monokai .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-monokai .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-monokai .ace_gutter {\ + background: #292a24;\ + color: #f1f1f1;\ +}\ +\ +.ace-monokai .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-monokai .ace_scroller {\ + background-color: #272822;\ +}\ +\ +.ace-monokai .ace_text-layer {\ + cursor: text;\ + color: #F8F8F2;\ +}\ +\ +.ace-monokai .ace_cursor {\ + border-left: 2px solid #F8F8F0;\ +}\ +\ +.ace-monokai .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #F8F8F0;\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_selection {\ + background: #49483E;\ +}\ +\ +.ace-monokai.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #272822;\ + border-radius: 2px;\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #49483E;\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_active_line{\ + background: #49483E;\ +}\ +.ace-monokai .ace_gutter_active_line{\ + background: #191916;\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_selected_word {\ + border: 1px solid #49483E;\ +}\ +\ +.ace-monokai .ace_invisible {\ + color: #49483E;\ +}\ +\ +.ace-monokai .ace_keyword, .ace-monokai .ace_meta {\ + color:#F92672;\ +}\ +\ +.ace-monokai .ace_constant.ace_language {\ + color:#AE81FF;\ +}\ +\ +.ace-monokai .ace_constant.ace_numeric {\ + color:#AE81FF;\ +}\ +\ +.ace-monokai .ace_constant.ace_other {\ + color:#AE81FF;\ +}\ +\ +.ace-monokai .ace_invalid {\ + color:#F8F8F0;\ +background-color:#F92672;\ +}\ +\ +.ace-monokai .ace_invalid.ace_deprecated {\ + color:#F8F8F0;\ +background-color:#AE81FF;\ +}\ +\ +.ace-monokai .ace_support.ace_constant {\ + color:#66D9EF;\ +}\ +\ +.ace-monokai .ace_fold {\ + background-color: #A6E22E;\ + border-color: #F8F8F2;\ +}\ +\ +.ace-monokai .ace_support.ace_function {\ + color:#66D9EF;\ +}\ +\ +.ace-monokai .ace_storage {\ + color:#F92672;\ +}\ +\ +.ace-monokai .ace_storage.ace_type, .ace-monokai .ace_support.ace_type{\ + font-style:italic;\ +color:#66D9EF;\ +}\ +\ +.ace-monokai .ace_variable {\ + color:#A6E22E;\ +}\ +\ +.ace-monokai .ace_variable.ace_parameter {\ + font-style:italic;\ +color:#FD971F;\ +}\ +\ +.ace-monokai .ace_string {\ + color:#E6DB74;\ +}\ +\ +.ace-monokai .ace_comment {\ + color:#75715E;\ +}\ +\ +.ace-monokai .ace_entity.ace_other.ace_attribute-name {\ + color:#A6E22E;\ +}\ +\ +.ace-monokai .ace_entity.ace_name.ace_function {\ + color:#A6E22E;\ +}\ +\ +.ace-monokai .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-monokai-uncompressed.js b/public/ace_editor/theme-monokai-uncompressed.js new file mode 100644 index 0000000..4f63994 --- /dev/null +++ b/public/ace_editor/theme-monokai-uncompressed.js @@ -0,0 +1,191 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/monokai', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-monokai"; +exports.cssText = "\ +.ace-monokai .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-monokai .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-monokai .ace_gutter {\ + background: #292a24;\ + color: #f1f1f1;\ +}\ +\ +.ace-monokai .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-monokai .ace_scroller {\ + background-color: #272822;\ +}\ +\ +.ace-monokai .ace_text-layer {\ + cursor: text;\ + color: #F8F8F2;\ +}\ +\ +.ace-monokai .ace_cursor {\ + border-left: 2px solid #F8F8F0;\ +}\ +\ +.ace-monokai .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #F8F8F0;\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_selection {\ + background: #49483E;\ +}\ +\ +.ace-monokai.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #272822;\ + border-radius: 2px;\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #49483E;\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_active_line{\ + background: #49483E;\ +}\ +.ace-monokai .ace_gutter_active_line{\ + background: #191916;\ +}\ +\ +.ace-monokai .ace_marker-layer .ace_selected_word {\ + border: 1px solid #49483E;\ +}\ +\ +.ace-monokai .ace_invisible {\ + color: #49483E;\ +}\ +\ +.ace-monokai .ace_keyword, .ace-monokai .ace_meta {\ + color:#F92672;\ +}\ +\ +.ace-monokai .ace_constant.ace_language {\ + color:#AE81FF;\ +}\ +\ +.ace-monokai .ace_constant.ace_numeric {\ + color:#AE81FF;\ +}\ +\ +.ace-monokai .ace_constant.ace_other {\ + color:#AE81FF;\ +}\ +\ +.ace-monokai .ace_invalid {\ + color:#F8F8F0;\ +background-color:#F92672;\ +}\ +\ +.ace-monokai .ace_invalid.ace_deprecated {\ + color:#F8F8F0;\ +background-color:#AE81FF;\ +}\ +\ +.ace-monokai .ace_support.ace_constant {\ + color:#66D9EF;\ +}\ +\ +.ace-monokai .ace_fold {\ + background-color: #A6E22E;\ + border-color: #F8F8F2;\ +}\ +\ +.ace-monokai .ace_support.ace_function {\ + color:#66D9EF;\ +}\ +\ +.ace-monokai .ace_storage {\ + color:#F92672;\ +}\ +\ +.ace-monokai .ace_storage.ace_type, .ace-monokai .ace_support.ace_type{\ + font-style:italic;\ +color:#66D9EF;\ +}\ +\ +.ace-monokai .ace_variable {\ + color:#A6E22E;\ +}\ +\ +.ace-monokai .ace_variable.ace_parameter {\ + font-style:italic;\ +color:#FD971F;\ +}\ +\ +.ace-monokai .ace_string {\ + color:#E6DB74;\ +}\ +\ +.ace-monokai .ace_comment {\ + color:#75715E;\ +}\ +\ +.ace-monokai .ace_entity.ace_other.ace_attribute-name {\ + color:#A6E22E;\ +}\ +\ +.ace-monokai .ace_entity.ace_name.ace_function {\ + color:#A6E22E;\ +}\ +\ +.ace-monokai .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-monokai.js b/public/ace_editor/theme-monokai.js new file mode 100644 index 0000000..f6b455b --- /dev/null +++ b/public/ace_editor/theme-monokai.js @@ -0,0 +1 @@ +define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-monokai",b.cssText=".ace-monokai .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-monokai .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-monokai .ace_gutter { background: #292a24; color: #f1f1f1;}.ace-monokai .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-monokai .ace_scroller { background-color: #272822;}.ace-monokai .ace_text-layer { cursor: text; color: #F8F8F2;}.ace-monokai .ace_cursor { border-left: 2px solid #F8F8F0;}.ace-monokai .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #F8F8F0;}.ace-monokai .ace_marker-layer .ace_selection { background: #49483E;}.ace-monokai.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #272822; border-radius: 2px;}.ace-monokai .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-monokai .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #49483E;}.ace-monokai .ace_marker-layer .ace_active_line{ background: #49483E;}.ace-monokai .ace_gutter_active_line{ background: #191916;}.ace-monokai .ace_marker-layer .ace_selected_word { border: 1px solid #49483E;}.ace-monokai .ace_invisible { color: #49483E;}.ace-monokai .ace_keyword, .ace-monokai .ace_meta { color:#F92672;}.ace-monokai .ace_constant.ace_language { color:#AE81FF;}.ace-monokai .ace_constant.ace_numeric { color:#AE81FF;}.ace-monokai .ace_constant.ace_other { color:#AE81FF;}.ace-monokai .ace_invalid { color:#F8F8F0;background-color:#F92672;}.ace-monokai .ace_invalid.ace_deprecated { color:#F8F8F0;background-color:#AE81FF;}.ace-monokai .ace_support.ace_constant { color:#66D9EF;}.ace-monokai .ace_fold { background-color: #A6E22E; border-color: #F8F8F2;}.ace-monokai .ace_support.ace_function { color:#66D9EF;}.ace-monokai .ace_storage { color:#F92672;}.ace-monokai .ace_storage.ace_type, .ace-monokai .ace_support.ace_type{ font-style:italic;color:#66D9EF;}.ace-monokai .ace_variable { color:#A6E22E;}.ace-monokai .ace_variable.ace_parameter { font-style:italic;color:#FD971F;}.ace-monokai .ace_string { color:#E6DB74;}.ace-monokai .ace_comment { color:#75715E;}.ace-monokai .ace_entity.ace_other.ace_attribute-name { color:#A6E22E;}.ace-monokai .ace_entity.ace_name.ace_function { color:#A6E22E;}.ace-monokai .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-pastel_on_dark-noconflict.js b/public/ace_editor/theme-pastel_on_dark-noconflict.js new file mode 100644 index 0000000..0e2a07d --- /dev/null +++ b/public/ace_editor/theme-pastel_on_dark-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/pastel_on_dark",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-pastel-on-dark",b.cssText=".ace-pastel-on-dark .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-pastel-on-dark .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-pastel-on-dark .ace_gutter { background: #e8e8e8; color: #333;}.ace-pastel-on-dark .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-pastel-on-dark .ace_scroller { background-color: #2C2828;}.ace-pastel-on-dark .ace_text-layer { cursor: text; color: #8F938F;}.ace-pastel-on-dark .ace_cursor { border-left: 2px solid #A7A7A7;}.ace-pastel-on-dark .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #A7A7A7;}.ace-pastel-on-dark .ace_marker-layer .ace_selection { background: rgba(221, 240, 255, 0.20);}.ace-pastel-on-dark.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #2C2828; border-radius: 2px;}.ace-pastel-on-dark .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-pastel-on-dark .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(255, 255, 255, 0.25);}.ace-pastel-on-dark .ace_marker-layer .ace_active_line { background: rgba(255, 255, 255, 0.031);}.ace-pastel-on-dark .ace_marker-layer .ace_selected_word { border: 1px solid rgba(221, 240, 255, 0.20);}.ace-pastel-on-dark .ace_invisible { color: rgba(255, 255, 255, 0.25);}.ace-pastel-on-dark .ace_keyword, .ace-pastel-on-dark .ace_meta { color:#757aD8;}.ace-pastel-on-dark .ace_keyword.ace_operator { color:#797878;}.ace-pastel-on-dark .ace_constant, .ace-pastel-on-dark .ace_constant.ace_other { color:#4FB7C5;}.ace-pastel-on-dark .ace_constant.ace_character, { color:#4FB7C5;}.ace-pastel-on-dark .ace_constant.ace_character.ace_escape, { color:#4FB7C5;}.ace-pastel-on-dark .ace_constant.ace_language { color:#DE8E30;}.ace-pastel-on-dark .ace_constant.ace_numeric { color:#CCCCCC;}.ace-pastel-on-dark .ace_invalid { color:#F8F8F8;background-color:rgba(86, 45, 86, 0.75);}.ace-pastel-on-dark .ace_invalid.ace_illegal { color:#F8F8F8;background-color:rgba(86, 45, 86, 0.75);}.ace-pastel-on-dark .ace_invalid.ace_deprecated { text-decoration:underline;font-style:italic;color:#D2A8A1;}.ace-pastel-on-dark .ace_fold { background-color: #757aD8; border-color: #8F938F;}.ace-pastel-on-dark .ace_support.ace_function { color:#AEB2F8;}.ace-pastel-on-dark .ace_string { color:#66A968;}.ace-pastel-on-dark .ace_string.ace_regexp { color:#E9C062;}.ace-pastel-on-dark .ace_comment { color:#A6C6FF;}.ace-pastel-on-dark .ace_variable { color:#BEBF55;}.ace-pastel-on-dark .ace_variable.ace_language { color:#C1C144;}.ace-pastel-on-dark .ace_xml_pe { color:#494949;}.ace-pastel-on-dark .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-pastel_on_dark-uncompressed-noconflict.js b/public/ace_editor/theme-pastel_on_dark-uncompressed-noconflict.js new file mode 100644 index 0000000..0ff0590 --- /dev/null +++ b/public/ace_editor/theme-pastel_on_dark-uncompressed-noconflict.js @@ -0,0 +1,192 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/pastel_on_dark', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-pastel-on-dark"; +exports.cssText = "\ +.ace-pastel-on-dark .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-pastel-on-dark .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-pastel-on-dark .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-pastel-on-dark .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-pastel-on-dark .ace_scroller {\ + background-color: #2C2828;\ +}\ +\ +.ace-pastel-on-dark .ace_text-layer {\ + cursor: text;\ + color: #8F938F;\ +}\ +\ +.ace-pastel-on-dark .ace_cursor {\ + border-left: 2px solid #A7A7A7;\ +}\ +\ +.ace-pastel-on-dark .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #A7A7A7;\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_selection {\ + background: rgba(221, 240, 255, 0.20);\ +}\ +\ +.ace-pastel-on-dark.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #2C2828;\ + border-radius: 2px;\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(255, 255, 255, 0.25);\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_active_line {\ + background: rgba(255, 255, 255, 0.031);\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(221, 240, 255, 0.20);\ +}\ +\ +.ace-pastel-on-dark .ace_invisible {\ + color: rgba(255, 255, 255, 0.25);\ +}\ +\ +.ace-pastel-on-dark .ace_keyword, .ace-pastel-on-dark .ace_meta {\ + color:#757aD8;\ +}\ +\ +.ace-pastel-on-dark .ace_keyword.ace_operator {\ + color:#797878;\ +}\ +\ +.ace-pastel-on-dark .ace_constant, .ace-pastel-on-dark .ace_constant.ace_other {\ + color:#4FB7C5;\ +}\ +\ +.ace-pastel-on-dark .ace_constant.ace_character, {\ + color:#4FB7C5;\ +}\ +\ +.ace-pastel-on-dark .ace_constant.ace_character.ace_escape, {\ + color:#4FB7C5;\ +}\ +\ +.ace-pastel-on-dark .ace_constant.ace_language {\ + color:#DE8E30;\ +}\ +\ +.ace-pastel-on-dark .ace_constant.ace_numeric {\ + color:#CCCCCC;\ +}\ +\ +.ace-pastel-on-dark .ace_invalid {\ + color:#F8F8F8;\ +background-color:rgba(86, 45, 86, 0.75);\ +}\ +\ +.ace-pastel-on-dark .ace_invalid.ace_illegal {\ + color:#F8F8F8;\ +background-color:rgba(86, 45, 86, 0.75);\ +}\ +\ +.ace-pastel-on-dark .ace_invalid.ace_deprecated {\ + text-decoration:underline;\ +font-style:italic;\ +color:#D2A8A1;\ +}\ +\ +.ace-pastel-on-dark .ace_fold {\ + background-color: #757aD8;\ + border-color: #8F938F;\ +}\ +\ +.ace-pastel-on-dark .ace_support.ace_function {\ + color:#AEB2F8;\ +}\ +\ +.ace-pastel-on-dark .ace_string {\ + color:#66A968;\ +}\ +\ +.ace-pastel-on-dark .ace_string.ace_regexp {\ + color:#E9C062;\ +}\ +\ +.ace-pastel-on-dark .ace_comment {\ + color:#A6C6FF;\ +}\ +\ +.ace-pastel-on-dark .ace_variable {\ + color:#BEBF55;\ +}\ +\ +.ace-pastel-on-dark .ace_variable.ace_language {\ + color:#C1C144;\ +}\ +\ +.ace-pastel-on-dark .ace_xml_pe {\ + color:#494949;\ +}\ +\ +.ace-pastel-on-dark .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-pastel_on_dark-uncompressed.js b/public/ace_editor/theme-pastel_on_dark-uncompressed.js new file mode 100644 index 0000000..3ab1773 --- /dev/null +++ b/public/ace_editor/theme-pastel_on_dark-uncompressed.js @@ -0,0 +1,192 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/pastel_on_dark', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-pastel-on-dark"; +exports.cssText = "\ +.ace-pastel-on-dark .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-pastel-on-dark .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-pastel-on-dark .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-pastel-on-dark .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-pastel-on-dark .ace_scroller {\ + background-color: #2C2828;\ +}\ +\ +.ace-pastel-on-dark .ace_text-layer {\ + cursor: text;\ + color: #8F938F;\ +}\ +\ +.ace-pastel-on-dark .ace_cursor {\ + border-left: 2px solid #A7A7A7;\ +}\ +\ +.ace-pastel-on-dark .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #A7A7A7;\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_selection {\ + background: rgba(221, 240, 255, 0.20);\ +}\ +\ +.ace-pastel-on-dark.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #2C2828;\ + border-radius: 2px;\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(255, 255, 255, 0.25);\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_active_line {\ + background: rgba(255, 255, 255, 0.031);\ +}\ +\ +.ace-pastel-on-dark .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(221, 240, 255, 0.20);\ +}\ +\ +.ace-pastel-on-dark .ace_invisible {\ + color: rgba(255, 255, 255, 0.25);\ +}\ +\ +.ace-pastel-on-dark .ace_keyword, .ace-pastel-on-dark .ace_meta {\ + color:#757aD8;\ +}\ +\ +.ace-pastel-on-dark .ace_keyword.ace_operator {\ + color:#797878;\ +}\ +\ +.ace-pastel-on-dark .ace_constant, .ace-pastel-on-dark .ace_constant.ace_other {\ + color:#4FB7C5;\ +}\ +\ +.ace-pastel-on-dark .ace_constant.ace_character, {\ + color:#4FB7C5;\ +}\ +\ +.ace-pastel-on-dark .ace_constant.ace_character.ace_escape, {\ + color:#4FB7C5;\ +}\ +\ +.ace-pastel-on-dark .ace_constant.ace_language {\ + color:#DE8E30;\ +}\ +\ +.ace-pastel-on-dark .ace_constant.ace_numeric {\ + color:#CCCCCC;\ +}\ +\ +.ace-pastel-on-dark .ace_invalid {\ + color:#F8F8F8;\ +background-color:rgba(86, 45, 86, 0.75);\ +}\ +\ +.ace-pastel-on-dark .ace_invalid.ace_illegal {\ + color:#F8F8F8;\ +background-color:rgba(86, 45, 86, 0.75);\ +}\ +\ +.ace-pastel-on-dark .ace_invalid.ace_deprecated {\ + text-decoration:underline;\ +font-style:italic;\ +color:#D2A8A1;\ +}\ +\ +.ace-pastel-on-dark .ace_fold {\ + background-color: #757aD8;\ + border-color: #8F938F;\ +}\ +\ +.ace-pastel-on-dark .ace_support.ace_function {\ + color:#AEB2F8;\ +}\ +\ +.ace-pastel-on-dark .ace_string {\ + color:#66A968;\ +}\ +\ +.ace-pastel-on-dark .ace_string.ace_regexp {\ + color:#E9C062;\ +}\ +\ +.ace-pastel-on-dark .ace_comment {\ + color:#A6C6FF;\ +}\ +\ +.ace-pastel-on-dark .ace_variable {\ + color:#BEBF55;\ +}\ +\ +.ace-pastel-on-dark .ace_variable.ace_language {\ + color:#C1C144;\ +}\ +\ +.ace-pastel-on-dark .ace_xml_pe {\ + color:#494949;\ +}\ +\ +.ace-pastel-on-dark .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-pastel_on_dark.js b/public/ace_editor/theme-pastel_on_dark.js new file mode 100644 index 0000000..6748e29 --- /dev/null +++ b/public/ace_editor/theme-pastel_on_dark.js @@ -0,0 +1 @@ +define("ace/theme/pastel_on_dark",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-pastel-on-dark",b.cssText=".ace-pastel-on-dark .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-pastel-on-dark .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-pastel-on-dark .ace_gutter { background: #e8e8e8; color: #333;}.ace-pastel-on-dark .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-pastel-on-dark .ace_scroller { background-color: #2C2828;}.ace-pastel-on-dark .ace_text-layer { cursor: text; color: #8F938F;}.ace-pastel-on-dark .ace_cursor { border-left: 2px solid #A7A7A7;}.ace-pastel-on-dark .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #A7A7A7;}.ace-pastel-on-dark .ace_marker-layer .ace_selection { background: rgba(221, 240, 255, 0.20);}.ace-pastel-on-dark.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #2C2828; border-radius: 2px;}.ace-pastel-on-dark .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-pastel-on-dark .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(255, 255, 255, 0.25);}.ace-pastel-on-dark .ace_marker-layer .ace_active_line { background: rgba(255, 255, 255, 0.031);}.ace-pastel-on-dark .ace_marker-layer .ace_selected_word { border: 1px solid rgba(221, 240, 255, 0.20);}.ace-pastel-on-dark .ace_invisible { color: rgba(255, 255, 255, 0.25);}.ace-pastel-on-dark .ace_keyword, .ace-pastel-on-dark .ace_meta { color:#757aD8;}.ace-pastel-on-dark .ace_keyword.ace_operator { color:#797878;}.ace-pastel-on-dark .ace_constant, .ace-pastel-on-dark .ace_constant.ace_other { color:#4FB7C5;}.ace-pastel-on-dark .ace_constant.ace_character, { color:#4FB7C5;}.ace-pastel-on-dark .ace_constant.ace_character.ace_escape, { color:#4FB7C5;}.ace-pastel-on-dark .ace_constant.ace_language { color:#DE8E30;}.ace-pastel-on-dark .ace_constant.ace_numeric { color:#CCCCCC;}.ace-pastel-on-dark .ace_invalid { color:#F8F8F8;background-color:rgba(86, 45, 86, 0.75);}.ace-pastel-on-dark .ace_invalid.ace_illegal { color:#F8F8F8;background-color:rgba(86, 45, 86, 0.75);}.ace-pastel-on-dark .ace_invalid.ace_deprecated { text-decoration:underline;font-style:italic;color:#D2A8A1;}.ace-pastel-on-dark .ace_fold { background-color: #757aD8; border-color: #8F938F;}.ace-pastel-on-dark .ace_support.ace_function { color:#AEB2F8;}.ace-pastel-on-dark .ace_string { color:#66A968;}.ace-pastel-on-dark .ace_string.ace_regexp { color:#E9C062;}.ace-pastel-on-dark .ace_comment { color:#A6C6FF;}.ace-pastel-on-dark .ace_variable { color:#BEBF55;}.ace-pastel-on-dark .ace_variable.ace_language { color:#C1C144;}.ace-pastel-on-dark .ace_xml_pe { color:#494949;}.ace-pastel-on-dark .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-solarized_dark-noconflict.js b/public/ace_editor/theme-solarized_dark-noconflict.js new file mode 100644 index 0000000..96b23b1 --- /dev/null +++ b/public/ace_editor/theme-solarized_dark-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/solarized_dark",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-solarized-dark",b.cssText=".ace-solarized-dark .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-solarized-dark .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-solarized-dark .ace_gutter { background: #09222b; color: #d0edf7;}.ace-solarized-dark .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-solarized-dark .ace_scroller { background-color: #002B36;}.ace-solarized-dark .ace_text-layer { cursor: text; color: #93A1A1;}.ace-solarized-dark .ace_cursor { border-left: 2px solid #D30102;}.ace-solarized-dark .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #D30102;}.ace-solarized-dark .ace_marker-layer .ace_selection { background: #073642;}.ace-solarized-dark.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #002B36; border-radius: 2px;}.ace-solarized-dark .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-solarized-dark .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(147, 161, 161, 0.50);}.ace-solarized-dark .ace_marker-layer .ace_active_line { background: #073642;}.ace-solarized-dark .ace_gutter_active_line{ background: #0d3440;}.ace-solarized-dark .ace_marker-layer .ace_selected_word { border: 1px solid #073642;}.ace-solarized-dark .ace_invisible { color: rgba(147, 161, 161, 0.50);}.ace-solarized-dark .ace_keyword, .ace-solarized-dark .ace_meta { color:#859900;}.ace-solarized-dark .ace_constant.ace_language { color:#B58900;}.ace-solarized-dark .ace_constant.ace_numeric { color:#D33682;}.ace-solarized-dark .ace_constant.ace_other { color:#CB4B16;}.ace-solarized-dark .ace_fold { background-color: #268BD2; border-color: #93A1A1;}.ace-solarized-dark .ace_support.ace_function { color:#268BD2;}.ace-solarized-dark .ace_storage { color:#93A1A1;}.ace-solarized-dark .ace_variable { color:#268BD2;}.ace-solarized-dark .ace_string { color:#2AA198;}.ace-solarized-dark .ace_string.ace_regexp { color:#D30102;}.ace-solarized-dark .ace_comment { font-style:italic;color:#657B83;}.ace-solarized-dark .ace_variable.ace_language { color:#268BD2;}.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name { color:#93A1A1;}.ace-solarized-dark .ace_entity.ace_name.ace_function { color:#268BD2;}.ace-solarized-dark .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-solarized_dark-uncompressed-noconflict.js b/public/ace_editor/theme-solarized_dark-uncompressed-noconflict.js new file mode 100644 index 0000000..9b6eb69 --- /dev/null +++ b/public/ace_editor/theme-solarized_dark-uncompressed-noconflict.js @@ -0,0 +1,176 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/solarized_dark', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-solarized-dark"; +exports.cssText = "\ +.ace-solarized-dark .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-solarized-dark .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-solarized-dark .ace_gutter {\ + background: #09222b;\ + color: #d0edf7;\ +}\ +\ +.ace-solarized-dark .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-solarized-dark .ace_scroller {\ + background-color: #002B36;\ +}\ +\ +.ace-solarized-dark .ace_text-layer {\ + cursor: text;\ + color: #93A1A1;\ +}\ +\ +.ace-solarized-dark .ace_cursor {\ + border-left: 2px solid #D30102;\ +}\ +\ +.ace-solarized-dark .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #D30102;\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_selection {\ + background: #073642;\ +}\ +\ +.ace-solarized-dark.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #002B36;\ + border-radius: 2px;\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(147, 161, 161, 0.50);\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_active_line {\ + background: #073642;\ +}\ +.ace-solarized-dark .ace_gutter_active_line{\ + background: #0d3440;\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_selected_word {\ + border: 1px solid #073642;\ +}\ +\ +.ace-solarized-dark .ace_invisible {\ + color: rgba(147, 161, 161, 0.50);\ +}\ +\ +.ace-solarized-dark .ace_keyword, .ace-solarized-dark .ace_meta {\ + color:#859900;\ +}\ +\ +.ace-solarized-dark .ace_constant.ace_language {\ + color:#B58900;\ +}\ +\ +.ace-solarized-dark .ace_constant.ace_numeric {\ + color:#D33682;\ +}\ +\ +.ace-solarized-dark .ace_constant.ace_other {\ + color:#CB4B16;\ +}\ +\ +.ace-solarized-dark .ace_fold {\ + background-color: #268BD2;\ + border-color: #93A1A1;\ +}\ +\ +.ace-solarized-dark .ace_support.ace_function {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-dark .ace_storage {\ + color:#93A1A1;\ +}\ +\ +.ace-solarized-dark .ace_variable {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-dark .ace_string {\ + color:#2AA198;\ +}\ +\ +.ace-solarized-dark .ace_string.ace_regexp {\ + color:#D30102;\ +}\ +\ +.ace-solarized-dark .ace_comment {\ + font-style:italic;\ +color:#657B83;\ +}\ +\ +.ace-solarized-dark .ace_variable.ace_language {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name {\ + color:#93A1A1;\ +}\ +\ +.ace-solarized-dark .ace_entity.ace_name.ace_function {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-dark .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-solarized_dark-uncompressed.js b/public/ace_editor/theme-solarized_dark-uncompressed.js new file mode 100644 index 0000000..f96e08e --- /dev/null +++ b/public/ace_editor/theme-solarized_dark-uncompressed.js @@ -0,0 +1,176 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/solarized_dark', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-solarized-dark"; +exports.cssText = "\ +.ace-solarized-dark .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-solarized-dark .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-solarized-dark .ace_gutter {\ + background: #09222b;\ + color: #d0edf7;\ +}\ +\ +.ace-solarized-dark .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-solarized-dark .ace_scroller {\ + background-color: #002B36;\ +}\ +\ +.ace-solarized-dark .ace_text-layer {\ + cursor: text;\ + color: #93A1A1;\ +}\ +\ +.ace-solarized-dark .ace_cursor {\ + border-left: 2px solid #D30102;\ +}\ +\ +.ace-solarized-dark .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #D30102;\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_selection {\ + background: #073642;\ +}\ +\ +.ace-solarized-dark.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #002B36;\ + border-radius: 2px;\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(147, 161, 161, 0.50);\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_active_line {\ + background: #073642;\ +}\ +.ace-solarized-dark .ace_gutter_active_line{\ + background: #0d3440;\ +}\ +\ +.ace-solarized-dark .ace_marker-layer .ace_selected_word {\ + border: 1px solid #073642;\ +}\ +\ +.ace-solarized-dark .ace_invisible {\ + color: rgba(147, 161, 161, 0.50);\ +}\ +\ +.ace-solarized-dark .ace_keyword, .ace-solarized-dark .ace_meta {\ + color:#859900;\ +}\ +\ +.ace-solarized-dark .ace_constant.ace_language {\ + color:#B58900;\ +}\ +\ +.ace-solarized-dark .ace_constant.ace_numeric {\ + color:#D33682;\ +}\ +\ +.ace-solarized-dark .ace_constant.ace_other {\ + color:#CB4B16;\ +}\ +\ +.ace-solarized-dark .ace_fold {\ + background-color: #268BD2;\ + border-color: #93A1A1;\ +}\ +\ +.ace-solarized-dark .ace_support.ace_function {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-dark .ace_storage {\ + color:#93A1A1;\ +}\ +\ +.ace-solarized-dark .ace_variable {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-dark .ace_string {\ + color:#2AA198;\ +}\ +\ +.ace-solarized-dark .ace_string.ace_regexp {\ + color:#D30102;\ +}\ +\ +.ace-solarized-dark .ace_comment {\ + font-style:italic;\ +color:#657B83;\ +}\ +\ +.ace-solarized-dark .ace_variable.ace_language {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name {\ + color:#93A1A1;\ +}\ +\ +.ace-solarized-dark .ace_entity.ace_name.ace_function {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-dark .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-solarized_dark.js b/public/ace_editor/theme-solarized_dark.js new file mode 100644 index 0000000..5d266f6 --- /dev/null +++ b/public/ace_editor/theme-solarized_dark.js @@ -0,0 +1 @@ +define("ace/theme/solarized_dark",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-solarized-dark",b.cssText=".ace-solarized-dark .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-solarized-dark .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-solarized-dark .ace_gutter { background: #09222b; color: #d0edf7;}.ace-solarized-dark .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-solarized-dark .ace_scroller { background-color: #002B36;}.ace-solarized-dark .ace_text-layer { cursor: text; color: #93A1A1;}.ace-solarized-dark .ace_cursor { border-left: 2px solid #D30102;}.ace-solarized-dark .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #D30102;}.ace-solarized-dark .ace_marker-layer .ace_selection { background: #073642;}.ace-solarized-dark.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #002B36; border-radius: 2px;}.ace-solarized-dark .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-solarized-dark .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(147, 161, 161, 0.50);}.ace-solarized-dark .ace_marker-layer .ace_active_line { background: #073642;}.ace-solarized-dark .ace_gutter_active_line{ background: #0d3440;}.ace-solarized-dark .ace_marker-layer .ace_selected_word { border: 1px solid #073642;}.ace-solarized-dark .ace_invisible { color: rgba(147, 161, 161, 0.50);}.ace-solarized-dark .ace_keyword, .ace-solarized-dark .ace_meta { color:#859900;}.ace-solarized-dark .ace_constant.ace_language { color:#B58900;}.ace-solarized-dark .ace_constant.ace_numeric { color:#D33682;}.ace-solarized-dark .ace_constant.ace_other { color:#CB4B16;}.ace-solarized-dark .ace_fold { background-color: #268BD2; border-color: #93A1A1;}.ace-solarized-dark .ace_support.ace_function { color:#268BD2;}.ace-solarized-dark .ace_storage { color:#93A1A1;}.ace-solarized-dark .ace_variable { color:#268BD2;}.ace-solarized-dark .ace_string { color:#2AA198;}.ace-solarized-dark .ace_string.ace_regexp { color:#D30102;}.ace-solarized-dark .ace_comment { font-style:italic;color:#657B83;}.ace-solarized-dark .ace_variable.ace_language { color:#268BD2;}.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name { color:#93A1A1;}.ace-solarized-dark .ace_entity.ace_name.ace_function { color:#268BD2;}.ace-solarized-dark .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-solarized_light-noconflict.js b/public/ace_editor/theme-solarized_light-noconflict.js new file mode 100644 index 0000000..f262846 --- /dev/null +++ b/public/ace_editor/theme-solarized_light-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/solarized_light",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssClass="ace-solarized-light",b.cssText=".ace-solarized-light .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-solarized-light .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-solarized-light .ace_gutter { background: #e8e8e8; color: #333;}.ace-solarized-light .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-solarized-light .ace_scroller { background-color: #FDF6E3;}.ace-solarized-light .ace_text-layer { cursor: text; color: #586E75;}.ace-solarized-light .ace_cursor { border-left: 2px solid #000000;}.ace-solarized-light .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #000000;}.ace-solarized-light .ace_marker-layer .ace_selection { background: #073642;}.ace-solarized-light.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #FDF6E3; border-radius: 2px;}.ace-solarized-light .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-solarized-light .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(147, 161, 161, 0.50);}.ace-solarized-light .ace_marker-layer .ace_active_line { background: #EEE8D5;}.ace-solarized-light .ace_marker-layer .ace_selected_word { border: 1px solid #073642;}.ace-solarized-light .ace_invisible { color: rgba(147, 161, 161, 0.50);}.ace-solarized-light .ace_keyword, .ace-solarized-light .ace_meta { color:#859900;}.ace-solarized-light .ace_constant.ace_language { color:#B58900;}.ace-solarized-light .ace_constant.ace_numeric { color:#D33682;}.ace-solarized-light .ace_constant.ace_other { color:#CB4B16;}.ace-solarized-light .ace_fold { background-color: #268BD2; border-color: #586E75;}.ace-solarized-light .ace_support.ace_function { color:#268BD2;}.ace-solarized-light .ace_storage { color:#073642;}.ace-solarized-light .ace_variable { color:#268BD2;}.ace-solarized-light .ace_string { color:#2AA198;}.ace-solarized-light .ace_string.ace_regexp { color:#D30102;}.ace-solarized-light .ace_comment { color:#93A1A1;}.ace-solarized-light .ace_variable.ace_language { color:#268BD2;}.ace-solarized-light .ace_entity.ace_other.ace_attribute-name { color:#93A1A1;}.ace-solarized-light .ace_entity.ace_name.ace_function { color:#268BD2;}.ace-solarized-light .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-solarized_light-uncompressed-noconflict.js b/public/ace_editor/theme-solarized_light-uncompressed-noconflict.js new file mode 100644 index 0000000..910e9f4 --- /dev/null +++ b/public/ace_editor/theme-solarized_light-uncompressed-noconflict.js @@ -0,0 +1,172 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/solarized_light', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = false; +exports.cssClass = "ace-solarized-light"; +exports.cssText = "\ +.ace-solarized-light .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-solarized-light .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-solarized-light .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-solarized-light .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-solarized-light .ace_scroller {\ + background-color: #FDF6E3;\ +}\ +\ +.ace-solarized-light .ace_text-layer {\ + cursor: text;\ + color: #586E75;\ +}\ +\ +.ace-solarized-light .ace_cursor {\ + border-left: 2px solid #000000;\ +}\ +\ +.ace-solarized-light .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #000000;\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_selection {\ + background: #073642;\ +}\ +\ +.ace-solarized-light.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #FDF6E3;\ + border-radius: 2px;\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(147, 161, 161, 0.50);\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_active_line {\ + background: #EEE8D5;\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_selected_word {\ + border: 1px solid #073642;\ +}\ +\ +.ace-solarized-light .ace_invisible {\ + color: rgba(147, 161, 161, 0.50);\ +}\ +\ +.ace-solarized-light .ace_keyword, .ace-solarized-light .ace_meta {\ + color:#859900;\ +}\ +\ +.ace-solarized-light .ace_constant.ace_language {\ + color:#B58900;\ +}\ +\ +.ace-solarized-light .ace_constant.ace_numeric {\ + color:#D33682;\ +}\ +\ +.ace-solarized-light .ace_constant.ace_other {\ + color:#CB4B16;\ +}\ +\ +.ace-solarized-light .ace_fold {\ + background-color: #268BD2;\ + border-color: #586E75;\ +}\ +\ +.ace-solarized-light .ace_support.ace_function {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-light .ace_storage {\ + color:#073642;\ +}\ +\ +.ace-solarized-light .ace_variable {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-light .ace_string {\ + color:#2AA198;\ +}\ +\ +.ace-solarized-light .ace_string.ace_regexp {\ + color:#D30102;\ +}\ +\ +.ace-solarized-light .ace_comment {\ + color:#93A1A1;\ +}\ +\ +.ace-solarized-light .ace_variable.ace_language {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\ + color:#93A1A1;\ +}\ +\ +.ace-solarized-light .ace_entity.ace_name.ace_function {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-light .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-solarized_light-uncompressed.js b/public/ace_editor/theme-solarized_light-uncompressed.js new file mode 100644 index 0000000..f94a799 --- /dev/null +++ b/public/ace_editor/theme-solarized_light-uncompressed.js @@ -0,0 +1,172 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/solarized_light', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = false; +exports.cssClass = "ace-solarized-light"; +exports.cssText = "\ +.ace-solarized-light .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-solarized-light .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-solarized-light .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-solarized-light .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-solarized-light .ace_scroller {\ + background-color: #FDF6E3;\ +}\ +\ +.ace-solarized-light .ace_text-layer {\ + cursor: text;\ + color: #586E75;\ +}\ +\ +.ace-solarized-light .ace_cursor {\ + border-left: 2px solid #000000;\ +}\ +\ +.ace-solarized-light .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #000000;\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_selection {\ + background: #073642;\ +}\ +\ +.ace-solarized-light.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #FDF6E3;\ + border-radius: 2px;\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(147, 161, 161, 0.50);\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_active_line {\ + background: #EEE8D5;\ +}\ +\ +.ace-solarized-light .ace_marker-layer .ace_selected_word {\ + border: 1px solid #073642;\ +}\ +\ +.ace-solarized-light .ace_invisible {\ + color: rgba(147, 161, 161, 0.50);\ +}\ +\ +.ace-solarized-light .ace_keyword, .ace-solarized-light .ace_meta {\ + color:#859900;\ +}\ +\ +.ace-solarized-light .ace_constant.ace_language {\ + color:#B58900;\ +}\ +\ +.ace-solarized-light .ace_constant.ace_numeric {\ + color:#D33682;\ +}\ +\ +.ace-solarized-light .ace_constant.ace_other {\ + color:#CB4B16;\ +}\ +\ +.ace-solarized-light .ace_fold {\ + background-color: #268BD2;\ + border-color: #586E75;\ +}\ +\ +.ace-solarized-light .ace_support.ace_function {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-light .ace_storage {\ + color:#073642;\ +}\ +\ +.ace-solarized-light .ace_variable {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-light .ace_string {\ + color:#2AA198;\ +}\ +\ +.ace-solarized-light .ace_string.ace_regexp {\ + color:#D30102;\ +}\ +\ +.ace-solarized-light .ace_comment {\ + color:#93A1A1;\ +}\ +\ +.ace-solarized-light .ace_variable.ace_language {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\ + color:#93A1A1;\ +}\ +\ +.ace-solarized-light .ace_entity.ace_name.ace_function {\ + color:#268BD2;\ +}\ +\ +.ace-solarized-light .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-solarized_light.js b/public/ace_editor/theme-solarized_light.js new file mode 100644 index 0000000..ec2947d --- /dev/null +++ b/public/ace_editor/theme-solarized_light.js @@ -0,0 +1 @@ +define("ace/theme/solarized_light",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssClass="ace-solarized-light",b.cssText=".ace-solarized-light .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-solarized-light .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-solarized-light .ace_gutter { background: #e8e8e8; color: #333;}.ace-solarized-light .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-solarized-light .ace_scroller { background-color: #FDF6E3;}.ace-solarized-light .ace_text-layer { cursor: text; color: #586E75;}.ace-solarized-light .ace_cursor { border-left: 2px solid #000000;}.ace-solarized-light .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #000000;}.ace-solarized-light .ace_marker-layer .ace_selection { background: #073642;}.ace-solarized-light.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #FDF6E3; border-radius: 2px;}.ace-solarized-light .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-solarized-light .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(147, 161, 161, 0.50);}.ace-solarized-light .ace_marker-layer .ace_active_line { background: #EEE8D5;}.ace-solarized-light .ace_marker-layer .ace_selected_word { border: 1px solid #073642;}.ace-solarized-light .ace_invisible { color: rgba(147, 161, 161, 0.50);}.ace-solarized-light .ace_keyword, .ace-solarized-light .ace_meta { color:#859900;}.ace-solarized-light .ace_constant.ace_language { color:#B58900;}.ace-solarized-light .ace_constant.ace_numeric { color:#D33682;}.ace-solarized-light .ace_constant.ace_other { color:#CB4B16;}.ace-solarized-light .ace_fold { background-color: #268BD2; border-color: #586E75;}.ace-solarized-light .ace_support.ace_function { color:#268BD2;}.ace-solarized-light .ace_storage { color:#073642;}.ace-solarized-light .ace_variable { color:#268BD2;}.ace-solarized-light .ace_string { color:#2AA198;}.ace-solarized-light .ace_string.ace_regexp { color:#D30102;}.ace-solarized-light .ace_comment { color:#93A1A1;}.ace-solarized-light .ace_variable.ace_language { color:#268BD2;}.ace-solarized-light .ace_entity.ace_other.ace_attribute-name { color:#93A1A1;}.ace-solarized-light .ace_entity.ace_name.ace_function { color:#268BD2;}.ace-solarized-light .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-textmate-noconflict.js b/public/ace_editor/theme-textmate-noconflict.js new file mode 100644 index 0000000..e69de29 diff --git a/public/ace_editor/theme-textmate-uncompressed-noconflict.js b/public/ace_editor/theme-textmate-uncompressed-noconflict.js new file mode 100644 index 0000000..e69de29 diff --git a/public/ace_editor/theme-textmate-uncompressed.js b/public/ace_editor/theme-textmate-uncompressed.js new file mode 100644 index 0000000..e69de29 diff --git a/public/ace_editor/theme-textmate.js b/public/ace_editor/theme-textmate.js new file mode 100644 index 0000000..e69de29 diff --git a/public/ace_editor/theme-tomorrow-noconflict.js b/public/ace_editor/theme-tomorrow-noconflict.js new file mode 100644 index 0000000..b4230bb --- /dev/null +++ b/public/ace_editor/theme-tomorrow-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/tomorrow",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssClass="ace-tomorrow",b.cssText=".ace-tomorrow .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow .ace_gutter { background: #e8e8e8; color: #333;}.ace-tomorrow .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow .ace_scroller { background-color: #FFFFFF;}.ace-tomorrow .ace_text-layer { cursor: text; color: #4D4D4C;}.ace-tomorrow .ace_cursor { border-left: 2px solid #AEAFAD;}.ace-tomorrow .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #AEAFAD;}.ace-tomorrow .ace_marker-layer .ace_selection { background: #D6D6D6;}.ace-tomorrow.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #FFFFFF; border-radius: 2px;}.ace-tomorrow .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #D1D1D1;}.ace-tomorrow .ace_marker-layer .ace_active_line { background: #EFEFEF;}.ace-tomorrow .ace_marker-layer .ace_selected_word { border: 1px solid #D6D6D6;}.ace-tomorrow .ace_invisible { color: #D1D1D1;}.ace-tomorrow .ace_keyword, .ace-tomorrow .ace_meta { color:#8959A8;}.ace-tomorrow .ace_keyword.ace_operator { color:#3E999F;}.ace-tomorrow .ace_constant.ace_language { color:#F5871F;}.ace-tomorrow .ace_constant.ace_numeric { color:#F5871F;}.ace-tomorrow .ace_constant.ace_other { color:#666969;}.ace-tomorrow .ace_invalid { color:#FFFFFF;background-color:#C82829;}.ace-tomorrow .ace_invalid.ace_deprecated { color:#FFFFFF;background-color:#8959A8;}.ace-tomorrow .ace_support.ace_constant { color:#F5871F;}.ace-tomorrow .ace_fold { background-color: #4271AE; border-color: #4D4D4C;}.ace-tomorrow .ace_support.ace_function { color:#4271AE;}.ace-tomorrow .ace_storage { color:#8959A8;}.ace-tomorrow .ace_storage.ace_type, .ace-tomorrow .ace_support.ace_type{ color:#8959A8;}.ace-tomorrow .ace_variable { color:#4271AE;}.ace-tomorrow .ace_variable.ace_parameter { color:#F5871F;}.ace-tomorrow .ace_string { color:#718C00;}.ace-tomorrow .ace_string.ace_regexp { color:#C82829;}.ace-tomorrow .ace_comment { color:#8E908C;}.ace-tomorrow .ace_variable { color:#C82829;}.ace-tomorrow .ace_meta.ace_tag { color:#C82829;}.ace-tomorrow .ace_entity.ace_other.ace_attribute-name { color:#C82829;}.ace-tomorrow .ace_entity.ace_name.ace_function { color:#4271AE;}.ace-tomorrow .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow .ace_markup.ace_heading { color:#718C00;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-tomorrow-uncompressed-noconflict.js b/public/ace_editor/theme-tomorrow-uncompressed-noconflict.js new file mode 100644 index 0000000..383f8f7 --- /dev/null +++ b/public/ace_editor/theme-tomorrow-uncompressed-noconflict.js @@ -0,0 +1,206 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/tomorrow', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = false; +exports.cssClass = "ace-tomorrow"; +exports.cssText = "\ +.ace-tomorrow .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-tomorrow .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow .ace_scroller {\ + background-color: #FFFFFF;\ +}\ +\ +.ace-tomorrow .ace_text-layer {\ + cursor: text;\ + color: #4D4D4C;\ +}\ +\ +.ace-tomorrow .ace_cursor {\ + border-left: 2px solid #AEAFAD;\ +}\ +\ +.ace-tomorrow .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #AEAFAD;\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_selection {\ + background: #D6D6D6;\ +}\ +\ +.ace-tomorrow.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #FFFFFF;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #D1D1D1;\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_active_line {\ + background: #EFEFEF;\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_selected_word {\ + border: 1px solid #D6D6D6;\ +}\ +\ +.ace-tomorrow .ace_invisible {\ + color: #D1D1D1;\ +}\ +\ +.ace-tomorrow .ace_keyword, .ace-tomorrow .ace_meta {\ + color:#8959A8;\ +}\ +\ +.ace-tomorrow .ace_keyword.ace_operator {\ + color:#3E999F;\ +}\ +\ +.ace-tomorrow .ace_constant.ace_language {\ + color:#F5871F;\ +}\ +\ +.ace-tomorrow .ace_constant.ace_numeric {\ + color:#F5871F;\ +}\ +\ +.ace-tomorrow .ace_constant.ace_other {\ + color:#666969;\ +}\ +\ +.ace-tomorrow .ace_invalid {\ + color:#FFFFFF;\ +background-color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_invalid.ace_deprecated {\ + color:#FFFFFF;\ +background-color:#8959A8;\ +}\ +\ +.ace-tomorrow .ace_support.ace_constant {\ + color:#F5871F;\ +}\ +\ +.ace-tomorrow .ace_fold {\ + background-color: #4271AE;\ + border-color: #4D4D4C;\ +}\ +\ +.ace-tomorrow .ace_support.ace_function {\ + color:#4271AE;\ +}\ +\ +.ace-tomorrow .ace_storage {\ + color:#8959A8;\ +}\ +\ +.ace-tomorrow .ace_storage.ace_type, .ace-tomorrow .ace_support.ace_type{\ + color:#8959A8;\ +}\ +\ +.ace-tomorrow .ace_variable {\ + color:#4271AE;\ +}\ +\ +.ace-tomorrow .ace_variable.ace_parameter {\ + color:#F5871F;\ +}\ +\ +.ace-tomorrow .ace_string {\ + color:#718C00;\ +}\ +\ +.ace-tomorrow .ace_string.ace_regexp {\ + color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_comment {\ + color:#8E908C;\ +}\ +\ +.ace-tomorrow .ace_variable {\ + color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_meta.ace_tag {\ + color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_entity.ace_other.ace_attribute-name {\ + color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_entity.ace_name.ace_function {\ + color:#4271AE;\ +}\ +\ +.ace-tomorrow .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow .ace_markup.ace_heading {\ + color:#718C00;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow-uncompressed.js b/public/ace_editor/theme-tomorrow-uncompressed.js new file mode 100644 index 0000000..fcecb56 --- /dev/null +++ b/public/ace_editor/theme-tomorrow-uncompressed.js @@ -0,0 +1,206 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/tomorrow', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = false; +exports.cssClass = "ace-tomorrow"; +exports.cssText = "\ +.ace-tomorrow .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-tomorrow .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow .ace_scroller {\ + background-color: #FFFFFF;\ +}\ +\ +.ace-tomorrow .ace_text-layer {\ + cursor: text;\ + color: #4D4D4C;\ +}\ +\ +.ace-tomorrow .ace_cursor {\ + border-left: 2px solid #AEAFAD;\ +}\ +\ +.ace-tomorrow .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #AEAFAD;\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_selection {\ + background: #D6D6D6;\ +}\ +\ +.ace-tomorrow.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #FFFFFF;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #D1D1D1;\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_active_line {\ + background: #EFEFEF;\ +}\ +\ +.ace-tomorrow .ace_marker-layer .ace_selected_word {\ + border: 1px solid #D6D6D6;\ +}\ +\ +.ace-tomorrow .ace_invisible {\ + color: #D1D1D1;\ +}\ +\ +.ace-tomorrow .ace_keyword, .ace-tomorrow .ace_meta {\ + color:#8959A8;\ +}\ +\ +.ace-tomorrow .ace_keyword.ace_operator {\ + color:#3E999F;\ +}\ +\ +.ace-tomorrow .ace_constant.ace_language {\ + color:#F5871F;\ +}\ +\ +.ace-tomorrow .ace_constant.ace_numeric {\ + color:#F5871F;\ +}\ +\ +.ace-tomorrow .ace_constant.ace_other {\ + color:#666969;\ +}\ +\ +.ace-tomorrow .ace_invalid {\ + color:#FFFFFF;\ +background-color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_invalid.ace_deprecated {\ + color:#FFFFFF;\ +background-color:#8959A8;\ +}\ +\ +.ace-tomorrow .ace_support.ace_constant {\ + color:#F5871F;\ +}\ +\ +.ace-tomorrow .ace_fold {\ + background-color: #4271AE;\ + border-color: #4D4D4C;\ +}\ +\ +.ace-tomorrow .ace_support.ace_function {\ + color:#4271AE;\ +}\ +\ +.ace-tomorrow .ace_storage {\ + color:#8959A8;\ +}\ +\ +.ace-tomorrow .ace_storage.ace_type, .ace-tomorrow .ace_support.ace_type{\ + color:#8959A8;\ +}\ +\ +.ace-tomorrow .ace_variable {\ + color:#4271AE;\ +}\ +\ +.ace-tomorrow .ace_variable.ace_parameter {\ + color:#F5871F;\ +}\ +\ +.ace-tomorrow .ace_string {\ + color:#718C00;\ +}\ +\ +.ace-tomorrow .ace_string.ace_regexp {\ + color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_comment {\ + color:#8E908C;\ +}\ +\ +.ace-tomorrow .ace_variable {\ + color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_meta.ace_tag {\ + color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_entity.ace_other.ace_attribute-name {\ + color:#C82829;\ +}\ +\ +.ace-tomorrow .ace_entity.ace_name.ace_function {\ + color:#4271AE;\ +}\ +\ +.ace-tomorrow .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow .ace_markup.ace_heading {\ + color:#718C00;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow.js b/public/ace_editor/theme-tomorrow.js new file mode 100644 index 0000000..9fd233d --- /dev/null +++ b/public/ace_editor/theme-tomorrow.js @@ -0,0 +1 @@ +define("ace/theme/tomorrow",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!1,b.cssClass="ace-tomorrow",b.cssText=".ace-tomorrow .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow .ace_gutter { background: #e8e8e8; color: #333;}.ace-tomorrow .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow .ace_scroller { background-color: #FFFFFF;}.ace-tomorrow .ace_text-layer { cursor: text; color: #4D4D4C;}.ace-tomorrow .ace_cursor { border-left: 2px solid #AEAFAD;}.ace-tomorrow .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #AEAFAD;}.ace-tomorrow .ace_marker-layer .ace_selection { background: #D6D6D6;}.ace-tomorrow.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #FFFFFF; border-radius: 2px;}.ace-tomorrow .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #D1D1D1;}.ace-tomorrow .ace_marker-layer .ace_active_line { background: #EFEFEF;}.ace-tomorrow .ace_marker-layer .ace_selected_word { border: 1px solid #D6D6D6;}.ace-tomorrow .ace_invisible { color: #D1D1D1;}.ace-tomorrow .ace_keyword, .ace-tomorrow .ace_meta { color:#8959A8;}.ace-tomorrow .ace_keyword.ace_operator { color:#3E999F;}.ace-tomorrow .ace_constant.ace_language { color:#F5871F;}.ace-tomorrow .ace_constant.ace_numeric { color:#F5871F;}.ace-tomorrow .ace_constant.ace_other { color:#666969;}.ace-tomorrow .ace_invalid { color:#FFFFFF;background-color:#C82829;}.ace-tomorrow .ace_invalid.ace_deprecated { color:#FFFFFF;background-color:#8959A8;}.ace-tomorrow .ace_support.ace_constant { color:#F5871F;}.ace-tomorrow .ace_fold { background-color: #4271AE; border-color: #4D4D4C;}.ace-tomorrow .ace_support.ace_function { color:#4271AE;}.ace-tomorrow .ace_storage { color:#8959A8;}.ace-tomorrow .ace_storage.ace_type, .ace-tomorrow .ace_support.ace_type{ color:#8959A8;}.ace-tomorrow .ace_variable { color:#4271AE;}.ace-tomorrow .ace_variable.ace_parameter { color:#F5871F;}.ace-tomorrow .ace_string { color:#718C00;}.ace-tomorrow .ace_string.ace_regexp { color:#C82829;}.ace-tomorrow .ace_comment { color:#8E908C;}.ace-tomorrow .ace_variable { color:#C82829;}.ace-tomorrow .ace_meta.ace_tag { color:#C82829;}.ace-tomorrow .ace_entity.ace_other.ace_attribute-name { color:#C82829;}.ace-tomorrow .ace_entity.ace_name.ace_function { color:#4271AE;}.ace-tomorrow .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow .ace_markup.ace_heading { color:#718C00;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-tomorrow_night-noconflict.js b/public/ace_editor/theme-tomorrow_night-noconflict.js new file mode 100644 index 0000000..1eb2d77 --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/tomorrow_night",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-tomorrow-night",b.cssText=".ace-tomorrow-night .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow-night .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow-night .ace_gutter { background: #e8e8e8; color: #333;}.ace-tomorrow-night .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow-night .ace_scroller { background-color: #1D1F21;}.ace-tomorrow-night .ace_text-layer { cursor: text; color: #C5C8C6;}.ace-tomorrow-night .ace_cursor { border-left: 2px solid #AEAFAD;}.ace-tomorrow-night .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #AEAFAD;}.ace-tomorrow-night .ace_marker-layer .ace_selection { background: #373B41;}.ace-tomorrow-night.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #1D1F21; border-radius: 2px;}.ace-tomorrow-night .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow-night .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #4B4E55;}.ace-tomorrow-night .ace_marker-layer .ace_active_line { background: #282A2E;}.ace-tomorrow-night .ace_marker-layer .ace_selected_word { border: 1px solid #373B41;}.ace-tomorrow-night .ace_invisible { color: #4B4E55;}.ace-tomorrow-night .ace_keyword, .ace-tomorrow-night .ace_meta { color:#B294BB;}.ace-tomorrow-night .ace_keyword.ace_operator { color:#8ABEB7;}.ace-tomorrow-night .ace_constant.ace_language { color:#DE935F;}.ace-tomorrow-night .ace_constant.ace_numeric { color:#DE935F;}.ace-tomorrow-night .ace_constant.ace_other { color:#CED1CF;}.ace-tomorrow-night .ace_invalid { color:#CED2CF;background-color:#DF5F5F;}.ace-tomorrow-night .ace_invalid.ace_deprecated { color:#CED2CF;background-color:#B798BF;}.ace-tomorrow-night .ace_support.ace_constant { color:#DE935F;}.ace-tomorrow-night .ace_fold { background-color: #81A2BE; border-color: #C5C8C6;}.ace-tomorrow-night .ace_support.ace_function { color:#81A2BE;}.ace-tomorrow-night .ace_storage { color:#B294BB;}.ace-tomorrow-night .ace_storage.ace_type, .ace-tomorrow-night .ace_support.ace_type{ color:#B294BB;}.ace-tomorrow-night .ace_variable { color:#81A2BE;}.ace-tomorrow-night .ace_variable.ace_parameter { color:#DE935F;}.ace-tomorrow-night .ace_string { color:#B5BD68;}.ace-tomorrow-night .ace_string.ace_regexp { color:#CC6666;}.ace-tomorrow-night .ace_comment { color:#969896;}.ace-tomorrow-night .ace_variable { color:#CC6666;}.ace-tomorrow-night .ace_meta.ace_tag { color:#CC6666;}.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name { color:#CC6666;}.ace-tomorrow-night .ace_entity.ace_name.ace_function { color:#81A2BE;}.ace-tomorrow-night .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow-night .ace_markup.ace_heading { color:#B5BD68;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-tomorrow_night-uncompressed-noconflict.js b/public/ace_editor/theme-tomorrow_night-uncompressed-noconflict.js new file mode 100644 index 0000000..0073be8 --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night-uncompressed-noconflict.js @@ -0,0 +1,206 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/tomorrow_night', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-tomorrow-night"; +exports.cssText = "\ +.ace-tomorrow-night .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow-night .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow-night .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-tomorrow-night .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow-night .ace_scroller {\ + background-color: #1D1F21;\ +}\ +\ +.ace-tomorrow-night .ace_text-layer {\ + cursor: text;\ + color: #C5C8C6;\ +}\ +\ +.ace-tomorrow-night .ace_cursor {\ + border-left: 2px solid #AEAFAD;\ +}\ +\ +.ace-tomorrow-night .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #AEAFAD;\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_selection {\ + background: #373B41;\ +}\ +\ +.ace-tomorrow-night.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #1D1F21;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #4B4E55;\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_active_line {\ + background: #282A2E;\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_selected_word {\ + border: 1px solid #373B41;\ +}\ +\ +.ace-tomorrow-night .ace_invisible {\ + color: #4B4E55;\ +}\ +\ +.ace-tomorrow-night .ace_keyword, .ace-tomorrow-night .ace_meta {\ + color:#B294BB;\ +}\ +\ +.ace-tomorrow-night .ace_keyword.ace_operator {\ + color:#8ABEB7;\ +}\ +\ +.ace-tomorrow-night .ace_constant.ace_language {\ + color:#DE935F;\ +}\ +\ +.ace-tomorrow-night .ace_constant.ace_numeric {\ + color:#DE935F;\ +}\ +\ +.ace-tomorrow-night .ace_constant.ace_other {\ + color:#CED1CF;\ +}\ +\ +.ace-tomorrow-night .ace_invalid {\ + color:#CED2CF;\ +background-color:#DF5F5F;\ +}\ +\ +.ace-tomorrow-night .ace_invalid.ace_deprecated {\ + color:#CED2CF;\ +background-color:#B798BF;\ +}\ +\ +.ace-tomorrow-night .ace_support.ace_constant {\ + color:#DE935F;\ +}\ +\ +.ace-tomorrow-night .ace_fold {\ + background-color: #81A2BE;\ + border-color: #C5C8C6;\ +}\ +\ +.ace-tomorrow-night .ace_support.ace_function {\ + color:#81A2BE;\ +}\ +\ +.ace-tomorrow-night .ace_storage {\ + color:#B294BB;\ +}\ +\ +.ace-tomorrow-night .ace_storage.ace_type, .ace-tomorrow-night .ace_support.ace_type{\ + color:#B294BB;\ +}\ +\ +.ace-tomorrow-night .ace_variable {\ + color:#81A2BE;\ +}\ +\ +.ace-tomorrow-night .ace_variable.ace_parameter {\ + color:#DE935F;\ +}\ +\ +.ace-tomorrow-night .ace_string {\ + color:#B5BD68;\ +}\ +\ +.ace-tomorrow-night .ace_string.ace_regexp {\ + color:#CC6666;\ +}\ +\ +.ace-tomorrow-night .ace_comment {\ + color:#969896;\ +}\ +\ +.ace-tomorrow-night .ace_variable {\ + color:#CC6666;\ +}\ +\ +.ace-tomorrow-night .ace_meta.ace_tag {\ + color:#CC6666;\ +}\ +\ +.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name {\ + color:#CC6666;\ +}\ +\ +.ace-tomorrow-night .ace_entity.ace_name.ace_function {\ + color:#81A2BE;\ +}\ +\ +.ace-tomorrow-night .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow-night .ace_markup.ace_heading {\ + color:#B5BD68;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow_night-uncompressed.js b/public/ace_editor/theme-tomorrow_night-uncompressed.js new file mode 100644 index 0000000..a5a774f --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night-uncompressed.js @@ -0,0 +1,206 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/tomorrow_night', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-tomorrow-night"; +exports.cssText = "\ +.ace-tomorrow-night .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow-night .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow-night .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-tomorrow-night .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow-night .ace_scroller {\ + background-color: #1D1F21;\ +}\ +\ +.ace-tomorrow-night .ace_text-layer {\ + cursor: text;\ + color: #C5C8C6;\ +}\ +\ +.ace-tomorrow-night .ace_cursor {\ + border-left: 2px solid #AEAFAD;\ +}\ +\ +.ace-tomorrow-night .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #AEAFAD;\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_selection {\ + background: #373B41;\ +}\ +\ +.ace-tomorrow-night.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #1D1F21;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #4B4E55;\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_active_line {\ + background: #282A2E;\ +}\ +\ +.ace-tomorrow-night .ace_marker-layer .ace_selected_word {\ + border: 1px solid #373B41;\ +}\ +\ +.ace-tomorrow-night .ace_invisible {\ + color: #4B4E55;\ +}\ +\ +.ace-tomorrow-night .ace_keyword, .ace-tomorrow-night .ace_meta {\ + color:#B294BB;\ +}\ +\ +.ace-tomorrow-night .ace_keyword.ace_operator {\ + color:#8ABEB7;\ +}\ +\ +.ace-tomorrow-night .ace_constant.ace_language {\ + color:#DE935F;\ +}\ +\ +.ace-tomorrow-night .ace_constant.ace_numeric {\ + color:#DE935F;\ +}\ +\ +.ace-tomorrow-night .ace_constant.ace_other {\ + color:#CED1CF;\ +}\ +\ +.ace-tomorrow-night .ace_invalid {\ + color:#CED2CF;\ +background-color:#DF5F5F;\ +}\ +\ +.ace-tomorrow-night .ace_invalid.ace_deprecated {\ + color:#CED2CF;\ +background-color:#B798BF;\ +}\ +\ +.ace-tomorrow-night .ace_support.ace_constant {\ + color:#DE935F;\ +}\ +\ +.ace-tomorrow-night .ace_fold {\ + background-color: #81A2BE;\ + border-color: #C5C8C6;\ +}\ +\ +.ace-tomorrow-night .ace_support.ace_function {\ + color:#81A2BE;\ +}\ +\ +.ace-tomorrow-night .ace_storage {\ + color:#B294BB;\ +}\ +\ +.ace-tomorrow-night .ace_storage.ace_type, .ace-tomorrow-night .ace_support.ace_type{\ + color:#B294BB;\ +}\ +\ +.ace-tomorrow-night .ace_variable {\ + color:#81A2BE;\ +}\ +\ +.ace-tomorrow-night .ace_variable.ace_parameter {\ + color:#DE935F;\ +}\ +\ +.ace-tomorrow-night .ace_string {\ + color:#B5BD68;\ +}\ +\ +.ace-tomorrow-night .ace_string.ace_regexp {\ + color:#CC6666;\ +}\ +\ +.ace-tomorrow-night .ace_comment {\ + color:#969896;\ +}\ +\ +.ace-tomorrow-night .ace_variable {\ + color:#CC6666;\ +}\ +\ +.ace-tomorrow-night .ace_meta.ace_tag {\ + color:#CC6666;\ +}\ +\ +.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name {\ + color:#CC6666;\ +}\ +\ +.ace-tomorrow-night .ace_entity.ace_name.ace_function {\ + color:#81A2BE;\ +}\ +\ +.ace-tomorrow-night .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow-night .ace_markup.ace_heading {\ + color:#B5BD68;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow_night.js b/public/ace_editor/theme-tomorrow_night.js new file mode 100644 index 0000000..746ee82 --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night.js @@ -0,0 +1 @@ +define("ace/theme/tomorrow_night",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-tomorrow-night",b.cssText=".ace-tomorrow-night .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow-night .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow-night .ace_gutter { background: #e8e8e8; color: #333;}.ace-tomorrow-night .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow-night .ace_scroller { background-color: #1D1F21;}.ace-tomorrow-night .ace_text-layer { cursor: text; color: #C5C8C6;}.ace-tomorrow-night .ace_cursor { border-left: 2px solid #AEAFAD;}.ace-tomorrow-night .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #AEAFAD;}.ace-tomorrow-night .ace_marker-layer .ace_selection { background: #373B41;}.ace-tomorrow-night.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #1D1F21; border-radius: 2px;}.ace-tomorrow-night .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow-night .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #4B4E55;}.ace-tomorrow-night .ace_marker-layer .ace_active_line { background: #282A2E;}.ace-tomorrow-night .ace_marker-layer .ace_selected_word { border: 1px solid #373B41;}.ace-tomorrow-night .ace_invisible { color: #4B4E55;}.ace-tomorrow-night .ace_keyword, .ace-tomorrow-night .ace_meta { color:#B294BB;}.ace-tomorrow-night .ace_keyword.ace_operator { color:#8ABEB7;}.ace-tomorrow-night .ace_constant.ace_language { color:#DE935F;}.ace-tomorrow-night .ace_constant.ace_numeric { color:#DE935F;}.ace-tomorrow-night .ace_constant.ace_other { color:#CED1CF;}.ace-tomorrow-night .ace_invalid { color:#CED2CF;background-color:#DF5F5F;}.ace-tomorrow-night .ace_invalid.ace_deprecated { color:#CED2CF;background-color:#B798BF;}.ace-tomorrow-night .ace_support.ace_constant { color:#DE935F;}.ace-tomorrow-night .ace_fold { background-color: #81A2BE; border-color: #C5C8C6;}.ace-tomorrow-night .ace_support.ace_function { color:#81A2BE;}.ace-tomorrow-night .ace_storage { color:#B294BB;}.ace-tomorrow-night .ace_storage.ace_type, .ace-tomorrow-night .ace_support.ace_type{ color:#B294BB;}.ace-tomorrow-night .ace_variable { color:#81A2BE;}.ace-tomorrow-night .ace_variable.ace_parameter { color:#DE935F;}.ace-tomorrow-night .ace_string { color:#B5BD68;}.ace-tomorrow-night .ace_string.ace_regexp { color:#CC6666;}.ace-tomorrow-night .ace_comment { color:#969896;}.ace-tomorrow-night .ace_variable { color:#CC6666;}.ace-tomorrow-night .ace_meta.ace_tag { color:#CC6666;}.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name { color:#CC6666;}.ace-tomorrow-night .ace_entity.ace_name.ace_function { color:#81A2BE;}.ace-tomorrow-night .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow-night .ace_markup.ace_heading { color:#B5BD68;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-tomorrow_night_blue-noconflict.js b/public/ace_editor/theme-tomorrow_night_blue-noconflict.js new file mode 100644 index 0000000..35fa697 --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_blue-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/tomorrow_night_blue",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-tomorrow-night-blue",b.cssText=".ace-tomorrow-night-blue .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow-night-blue .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow-night-blue .ace_gutter { background: #022346; color: #7388b5;}.ace-tomorrow-night-blue .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow-night-blue .ace_scroller { background-color: #002451;}.ace-tomorrow-night-blue .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-tomorrow-night-blue .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-tomorrow-night-blue .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-tomorrow-night-blue .ace_marker-layer .ace_selection { background: #003F8E;}.ace-tomorrow-night-blue.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #002451; border-radius: 2px;}.ace-tomorrow-night-blue .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404F7D;}.ace-tomorrow-night-blue .ace_marker-layer .ace_active_line{ background: #00346E;}.ace-tomorrow-night-blue .ace_gutter_active_line{ background: #022040;}.ace-tomorrow-night-blue .ace_marker-layer .ace_selected_word { border: 1px solid #003F8E;}.ace-tomorrow-night-blue .ace_invisible { color: #404F7D;}.ace-tomorrow-night-blue .ace_keyword, .ace-tomorrow-night-blue .ace_meta { color:#EBBBFF;}.ace-tomorrow-night-blue .ace_keyword.ace_operator { color:#99FFFF;}.ace-tomorrow-night-blue .ace_constant.ace_language { color:#FFC58F;}.ace-tomorrow-night-blue .ace_constant.ace_numeric { color:#FFC58F;}.ace-tomorrow-night-blue .ace_constant.ace_other { color:#FFFFFF;}.ace-tomorrow-night-blue .ace_invalid { color:#FFFFFF;background-color:#F99DA5;}.ace-tomorrow-night-blue .ace_invalid.ace_deprecated { color:#FFFFFF;background-color:#EBBBFF;}.ace-tomorrow-night-blue .ace_support.ace_constant { color:#FFC58F;}.ace-tomorrow-night-blue .ace_fold { background-color: #BBDAFF; border-color: #FFFFFF;}.ace-tomorrow-night-blue .ace_support.ace_function { color:#BBDAFF;}.ace-tomorrow-night-blue .ace_storage { color:#EBBBFF;}.ace-tomorrow-night-blue .ace_storage.ace_type, .ace-tomorrow-night-blue .ace_support.ace_type{ color:#EBBBFF;}.ace-tomorrow-night-blue .ace_variable { color:#BBDAFF;}.ace-tomorrow-night-blue .ace_variable.ace_parameter { color:#FFC58F;}.ace-tomorrow-night-blue .ace_string { color:#D1F1A9;}.ace-tomorrow-night-blue .ace_string.ace_regexp { color:#FF9DA4;}.ace-tomorrow-night-blue .ace_comment { color:#7285B7;}.ace-tomorrow-night-blue .ace_variable { color:#FF9DA4;}.ace-tomorrow-night-blue .ace_meta.ace_tag { color:#FF9DA4;}.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name { color:#FF9DA4;}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function { color:#BBDAFF;}.ace-tomorrow-night-blue .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow-night-blue .ace_markup.ace_heading { color:#D1F1A9;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-tomorrow_night_blue-uncompressed-noconflict.js b/public/ace_editor/theme-tomorrow_night_blue-uncompressed-noconflict.js new file mode 100644 index 0000000..a5d95ca --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_blue-uncompressed-noconflict.js @@ -0,0 +1,209 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/tomorrow_night_blue', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-tomorrow-night-blue"; +exports.cssText = "\ +.ace-tomorrow-night-blue .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow-night-blue .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow-night-blue .ace_gutter {\ + background: #022346;\ + color: #7388b5;\ +}\ +\ +.ace-tomorrow-night-blue .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow-night-blue .ace_scroller {\ + background-color: #002451;\ +}\ +\ +.ace-tomorrow-night-blue .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\ + background: #003F8E;\ +}\ +\ +.ace-tomorrow-night-blue.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #002451;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404F7D;\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_active_line{\ + background: #00346E;\ +}\ +.ace-tomorrow-night-blue .ace_gutter_active_line{\ + background: #022040;\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_selected_word {\ + border: 1px solid #003F8E;\ +}\ +\ +.ace-tomorrow-night-blue .ace_invisible {\ + color: #404F7D;\ +}\ +\ +.ace-tomorrow-night-blue .ace_keyword, .ace-tomorrow-night-blue .ace_meta {\ + color:#EBBBFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_keyword.ace_operator {\ + color:#99FFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_constant.ace_language {\ + color:#FFC58F;\ +}\ +\ +.ace-tomorrow-night-blue .ace_constant.ace_numeric {\ + color:#FFC58F;\ +}\ +\ +.ace-tomorrow-night-blue .ace_constant.ace_other {\ + color:#FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_invalid {\ + color:#FFFFFF;\ +background-color:#F99DA5;\ +}\ +\ +.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\ + color:#FFFFFF;\ +background-color:#EBBBFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_support.ace_constant {\ + color:#FFC58F;\ +}\ +\ +.ace-tomorrow-night-blue .ace_fold {\ + background-color: #BBDAFF;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_support.ace_function {\ + color:#BBDAFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_storage {\ + color:#EBBBFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_storage.ace_type, .ace-tomorrow-night-blue .ace_support.ace_type{\ + color:#EBBBFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_variable {\ + color:#BBDAFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_variable.ace_parameter {\ + color:#FFC58F;\ +}\ +\ +.ace-tomorrow-night-blue .ace_string {\ + color:#D1F1A9;\ +}\ +\ +.ace-tomorrow-night-blue .ace_string.ace_regexp {\ + color:#FF9DA4;\ +}\ +\ +.ace-tomorrow-night-blue .ace_comment {\ + color:#7285B7;\ +}\ +\ +.ace-tomorrow-night-blue .ace_variable {\ + color:#FF9DA4;\ +}\ +\ +.ace-tomorrow-night-blue .ace_meta.ace_tag {\ + color:#FF9DA4;\ +}\ +\ +.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name {\ + color:#FF9DA4;\ +}\ +\ +.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function {\ + color:#BBDAFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow-night-blue .ace_markup.ace_heading {\ + color:#D1F1A9;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow_night_blue-uncompressed.js b/public/ace_editor/theme-tomorrow_night_blue-uncompressed.js new file mode 100644 index 0000000..7c01429 --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_blue-uncompressed.js @@ -0,0 +1,209 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/tomorrow_night_blue', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-tomorrow-night-blue"; +exports.cssText = "\ +.ace-tomorrow-night-blue .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow-night-blue .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow-night-blue .ace_gutter {\ + background: #022346;\ + color: #7388b5;\ +}\ +\ +.ace-tomorrow-night-blue .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow-night-blue .ace_scroller {\ + background-color: #002451;\ +}\ +\ +.ace-tomorrow-night-blue .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\ + background: #003F8E;\ +}\ +\ +.ace-tomorrow-night-blue.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #002451;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404F7D;\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_active_line{\ + background: #00346E;\ +}\ +.ace-tomorrow-night-blue .ace_gutter_active_line{\ + background: #022040;\ +}\ +\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_selected_word {\ + border: 1px solid #003F8E;\ +}\ +\ +.ace-tomorrow-night-blue .ace_invisible {\ + color: #404F7D;\ +}\ +\ +.ace-tomorrow-night-blue .ace_keyword, .ace-tomorrow-night-blue .ace_meta {\ + color:#EBBBFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_keyword.ace_operator {\ + color:#99FFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_constant.ace_language {\ + color:#FFC58F;\ +}\ +\ +.ace-tomorrow-night-blue .ace_constant.ace_numeric {\ + color:#FFC58F;\ +}\ +\ +.ace-tomorrow-night-blue .ace_constant.ace_other {\ + color:#FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_invalid {\ + color:#FFFFFF;\ +background-color:#F99DA5;\ +}\ +\ +.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\ + color:#FFFFFF;\ +background-color:#EBBBFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_support.ace_constant {\ + color:#FFC58F;\ +}\ +\ +.ace-tomorrow-night-blue .ace_fold {\ + background-color: #BBDAFF;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_support.ace_function {\ + color:#BBDAFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_storage {\ + color:#EBBBFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_storage.ace_type, .ace-tomorrow-night-blue .ace_support.ace_type{\ + color:#EBBBFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_variable {\ + color:#BBDAFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_variable.ace_parameter {\ + color:#FFC58F;\ +}\ +\ +.ace-tomorrow-night-blue .ace_string {\ + color:#D1F1A9;\ +}\ +\ +.ace-tomorrow-night-blue .ace_string.ace_regexp {\ + color:#FF9DA4;\ +}\ +\ +.ace-tomorrow-night-blue .ace_comment {\ + color:#7285B7;\ +}\ +\ +.ace-tomorrow-night-blue .ace_variable {\ + color:#FF9DA4;\ +}\ +\ +.ace-tomorrow-night-blue .ace_meta.ace_tag {\ + color:#FF9DA4;\ +}\ +\ +.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name {\ + color:#FF9DA4;\ +}\ +\ +.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function {\ + color:#BBDAFF;\ +}\ +\ +.ace-tomorrow-night-blue .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow-night-blue .ace_markup.ace_heading {\ + color:#D1F1A9;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow_night_blue.js b/public/ace_editor/theme-tomorrow_night_blue.js new file mode 100644 index 0000000..252a4fd --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_blue.js @@ -0,0 +1 @@ +define("ace/theme/tomorrow_night_blue",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-tomorrow-night-blue",b.cssText=".ace-tomorrow-night-blue .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow-night-blue .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow-night-blue .ace_gutter { background: #022346; color: #7388b5;}.ace-tomorrow-night-blue .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow-night-blue .ace_scroller { background-color: #002451;}.ace-tomorrow-night-blue .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-tomorrow-night-blue .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-tomorrow-night-blue .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-tomorrow-night-blue .ace_marker-layer .ace_selection { background: #003F8E;}.ace-tomorrow-night-blue.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #002451; border-radius: 2px;}.ace-tomorrow-night-blue .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404F7D;}.ace-tomorrow-night-blue .ace_marker-layer .ace_active_line{ background: #00346E;}.ace-tomorrow-night-blue .ace_gutter_active_line{ background: #022040;}.ace-tomorrow-night-blue .ace_marker-layer .ace_selected_word { border: 1px solid #003F8E;}.ace-tomorrow-night-blue .ace_invisible { color: #404F7D;}.ace-tomorrow-night-blue .ace_keyword, .ace-tomorrow-night-blue .ace_meta { color:#EBBBFF;}.ace-tomorrow-night-blue .ace_keyword.ace_operator { color:#99FFFF;}.ace-tomorrow-night-blue .ace_constant.ace_language { color:#FFC58F;}.ace-tomorrow-night-blue .ace_constant.ace_numeric { color:#FFC58F;}.ace-tomorrow-night-blue .ace_constant.ace_other { color:#FFFFFF;}.ace-tomorrow-night-blue .ace_invalid { color:#FFFFFF;background-color:#F99DA5;}.ace-tomorrow-night-blue .ace_invalid.ace_deprecated { color:#FFFFFF;background-color:#EBBBFF;}.ace-tomorrow-night-blue .ace_support.ace_constant { color:#FFC58F;}.ace-tomorrow-night-blue .ace_fold { background-color: #BBDAFF; border-color: #FFFFFF;}.ace-tomorrow-night-blue .ace_support.ace_function { color:#BBDAFF;}.ace-tomorrow-night-blue .ace_storage { color:#EBBBFF;}.ace-tomorrow-night-blue .ace_storage.ace_type, .ace-tomorrow-night-blue .ace_support.ace_type{ color:#EBBBFF;}.ace-tomorrow-night-blue .ace_variable { color:#BBDAFF;}.ace-tomorrow-night-blue .ace_variable.ace_parameter { color:#FFC58F;}.ace-tomorrow-night-blue .ace_string { color:#D1F1A9;}.ace-tomorrow-night-blue .ace_string.ace_regexp { color:#FF9DA4;}.ace-tomorrow-night-blue .ace_comment { color:#7285B7;}.ace-tomorrow-night-blue .ace_variable { color:#FF9DA4;}.ace-tomorrow-night-blue .ace_meta.ace_tag { color:#FF9DA4;}.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name { color:#FF9DA4;}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function { color:#BBDAFF;}.ace-tomorrow-night-blue .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow-night-blue .ace_markup.ace_heading { color:#D1F1A9;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-tomorrow_night_bright-noconflict.js b/public/ace_editor/theme-tomorrow_night_bright-noconflict.js new file mode 100644 index 0000000..839033a --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_bright-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/tomorrow_night_bright",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-tomorrow-night-bright",b.cssText=".ace-tomorrow-night-bright .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow-night-bright .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow-night-bright .ace_gutter { background: #e8e8e8; color: #333;}.ace-tomorrow-night-bright .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow-night-bright .ace_scroller { background-color: #000000;}.ace-tomorrow-night-bright .ace_text-layer { cursor: text; color: #DEDEDE;}.ace-tomorrow-night-bright .ace_cursor { border-left: 2px solid #9F9F9F;}.ace-tomorrow-night-bright .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #9F9F9F;}.ace-tomorrow-night-bright .ace_marker-layer .ace_selection { background: #424242;}.ace-tomorrow-night-bright.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #000000; border-radius: 2px;}.ace-tomorrow-night-bright .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #343434;}.ace-tomorrow-night-bright .ace_marker-layer .ace_active_line { background: #2A2A2A;}.ace-tomorrow-night-bright .ace_marker-layer .ace_selected_word { border: 1px solid #424242;}.ace-tomorrow-night-bright .ace_invisible { color: #343434;}.ace-tomorrow-night-bright .ace_keyword, .ace-tomorrow-night-bright .ace_meta { color:#C397D8;}.ace-tomorrow-night-bright .ace_keyword.ace_operator { color:#70C0B1;}.ace-tomorrow-night-bright .ace_constant.ace_language { color:#E78C45;}.ace-tomorrow-night-bright .ace_constant.ace_numeric { color:#E78C45;}.ace-tomorrow-night-bright .ace_constant.ace_other { color:#EEEEEE;}.ace-tomorrow-night-bright .ace_invalid { color:#CED2CF;background-color:#DF5F5F;}.ace-tomorrow-night-bright .ace_invalid.ace_deprecated { color:#CED2CF;background-color:#B798BF;}.ace-tomorrow-night-bright .ace_support.ace_constant { color:#E78C45;}.ace-tomorrow-night-bright .ace_fold { background-color: #7AA6DA; border-color: #DEDEDE;}.ace-tomorrow-night-bright .ace_support.ace_function { color:#7AA6DA;}.ace-tomorrow-night-bright .ace_storage { color:#C397D8;}.ace-tomorrow-night-bright .ace_storage.ace_type, .ace-tomorrow-night-bright .ace_support.ace_type{ color:#C397D8;}.ace-tomorrow-night-bright .ace_variable { color:#7AA6DA;}.ace-tomorrow-night-bright .ace_variable.ace_parameter { color:#E78C45;}.ace-tomorrow-night-bright .ace_string { color:#B9CA4A;}.ace-tomorrow-night-bright .ace_string.ace_regexp { color:#D54E53;}.ace-tomorrow-night-bright .ace_comment { color:#969896;}.ace-tomorrow-night-bright .ace_variable { color:#D54E53;}.ace-tomorrow-night-bright .ace_meta.ace_tag { color:#D54E53;}.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name { color:#D54E53;}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function { color:#7AA6DA;}.ace-tomorrow-night-bright .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow-night-bright .ace_markup.ace_heading { color:#B9CA4A;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-tomorrow_night_bright-uncompressed-noconflict.js b/public/ace_editor/theme-tomorrow_night_bright-uncompressed-noconflict.js new file mode 100644 index 0000000..931f855 --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_bright-uncompressed-noconflict.js @@ -0,0 +1,206 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/tomorrow_night_bright', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-tomorrow-night-bright"; +exports.cssText = "\ +.ace-tomorrow-night-bright .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow-night-bright .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow-night-bright .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-tomorrow-night-bright .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow-night-bright .ace_scroller {\ + background-color: #000000;\ +}\ +\ +.ace-tomorrow-night-bright .ace_text-layer {\ + cursor: text;\ + color: #DEDEDE;\ +}\ +\ +.ace-tomorrow-night-bright .ace_cursor {\ + border-left: 2px solid #9F9F9F;\ +}\ +\ +.ace-tomorrow-night-bright .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #9F9F9F;\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\ + background: #424242;\ +}\ +\ +.ace-tomorrow-night-bright.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #000000;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #343434;\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_active_line {\ + background: #2A2A2A;\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_selected_word {\ + border: 1px solid #424242;\ +}\ +\ +.ace-tomorrow-night-bright .ace_invisible {\ + color: #343434;\ +}\ +\ +.ace-tomorrow-night-bright .ace_keyword, .ace-tomorrow-night-bright .ace_meta {\ + color:#C397D8;\ +}\ +\ +.ace-tomorrow-night-bright .ace_keyword.ace_operator {\ + color:#70C0B1;\ +}\ +\ +.ace-tomorrow-night-bright .ace_constant.ace_language {\ + color:#E78C45;\ +}\ +\ +.ace-tomorrow-night-bright .ace_constant.ace_numeric {\ + color:#E78C45;\ +}\ +\ +.ace-tomorrow-night-bright .ace_constant.ace_other {\ + color:#EEEEEE;\ +}\ +\ +.ace-tomorrow-night-bright .ace_invalid {\ + color:#CED2CF;\ +background-color:#DF5F5F;\ +}\ +\ +.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\ + color:#CED2CF;\ +background-color:#B798BF;\ +}\ +\ +.ace-tomorrow-night-bright .ace_support.ace_constant {\ + color:#E78C45;\ +}\ +\ +.ace-tomorrow-night-bright .ace_fold {\ + background-color: #7AA6DA;\ + border-color: #DEDEDE;\ +}\ +\ +.ace-tomorrow-night-bright .ace_support.ace_function {\ + color:#7AA6DA;\ +}\ +\ +.ace-tomorrow-night-bright .ace_storage {\ + color:#C397D8;\ +}\ +\ +.ace-tomorrow-night-bright .ace_storage.ace_type, .ace-tomorrow-night-bright .ace_support.ace_type{\ + color:#C397D8;\ +}\ +\ +.ace-tomorrow-night-bright .ace_variable {\ + color:#7AA6DA;\ +}\ +\ +.ace-tomorrow-night-bright .ace_variable.ace_parameter {\ + color:#E78C45;\ +}\ +\ +.ace-tomorrow-night-bright .ace_string {\ + color:#B9CA4A;\ +}\ +\ +.ace-tomorrow-night-bright .ace_string.ace_regexp {\ + color:#D54E53;\ +}\ +\ +.ace-tomorrow-night-bright .ace_comment {\ + color:#969896;\ +}\ +\ +.ace-tomorrow-night-bright .ace_variable {\ + color:#D54E53;\ +}\ +\ +.ace-tomorrow-night-bright .ace_meta.ace_tag {\ + color:#D54E53;\ +}\ +\ +.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name {\ + color:#D54E53;\ +}\ +\ +.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function {\ + color:#7AA6DA;\ +}\ +\ +.ace-tomorrow-night-bright .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow-night-bright .ace_markup.ace_heading {\ + color:#B9CA4A;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow_night_bright-uncompressed.js b/public/ace_editor/theme-tomorrow_night_bright-uncompressed.js new file mode 100644 index 0000000..7d93bee --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_bright-uncompressed.js @@ -0,0 +1,206 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/tomorrow_night_bright', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-tomorrow-night-bright"; +exports.cssText = "\ +.ace-tomorrow-night-bright .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow-night-bright .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow-night-bright .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-tomorrow-night-bright .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow-night-bright .ace_scroller {\ + background-color: #000000;\ +}\ +\ +.ace-tomorrow-night-bright .ace_text-layer {\ + cursor: text;\ + color: #DEDEDE;\ +}\ +\ +.ace-tomorrow-night-bright .ace_cursor {\ + border-left: 2px solid #9F9F9F;\ +}\ +\ +.ace-tomorrow-night-bright .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #9F9F9F;\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\ + background: #424242;\ +}\ +\ +.ace-tomorrow-night-bright.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #000000;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #343434;\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_active_line {\ + background: #2A2A2A;\ +}\ +\ +.ace-tomorrow-night-bright .ace_marker-layer .ace_selected_word {\ + border: 1px solid #424242;\ +}\ +\ +.ace-tomorrow-night-bright .ace_invisible {\ + color: #343434;\ +}\ +\ +.ace-tomorrow-night-bright .ace_keyword, .ace-tomorrow-night-bright .ace_meta {\ + color:#C397D8;\ +}\ +\ +.ace-tomorrow-night-bright .ace_keyword.ace_operator {\ + color:#70C0B1;\ +}\ +\ +.ace-tomorrow-night-bright .ace_constant.ace_language {\ + color:#E78C45;\ +}\ +\ +.ace-tomorrow-night-bright .ace_constant.ace_numeric {\ + color:#E78C45;\ +}\ +\ +.ace-tomorrow-night-bright .ace_constant.ace_other {\ + color:#EEEEEE;\ +}\ +\ +.ace-tomorrow-night-bright .ace_invalid {\ + color:#CED2CF;\ +background-color:#DF5F5F;\ +}\ +\ +.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\ + color:#CED2CF;\ +background-color:#B798BF;\ +}\ +\ +.ace-tomorrow-night-bright .ace_support.ace_constant {\ + color:#E78C45;\ +}\ +\ +.ace-tomorrow-night-bright .ace_fold {\ + background-color: #7AA6DA;\ + border-color: #DEDEDE;\ +}\ +\ +.ace-tomorrow-night-bright .ace_support.ace_function {\ + color:#7AA6DA;\ +}\ +\ +.ace-tomorrow-night-bright .ace_storage {\ + color:#C397D8;\ +}\ +\ +.ace-tomorrow-night-bright .ace_storage.ace_type, .ace-tomorrow-night-bright .ace_support.ace_type{\ + color:#C397D8;\ +}\ +\ +.ace-tomorrow-night-bright .ace_variable {\ + color:#7AA6DA;\ +}\ +\ +.ace-tomorrow-night-bright .ace_variable.ace_parameter {\ + color:#E78C45;\ +}\ +\ +.ace-tomorrow-night-bright .ace_string {\ + color:#B9CA4A;\ +}\ +\ +.ace-tomorrow-night-bright .ace_string.ace_regexp {\ + color:#D54E53;\ +}\ +\ +.ace-tomorrow-night-bright .ace_comment {\ + color:#969896;\ +}\ +\ +.ace-tomorrow-night-bright .ace_variable {\ + color:#D54E53;\ +}\ +\ +.ace-tomorrow-night-bright .ace_meta.ace_tag {\ + color:#D54E53;\ +}\ +\ +.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name {\ + color:#D54E53;\ +}\ +\ +.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function {\ + color:#7AA6DA;\ +}\ +\ +.ace-tomorrow-night-bright .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow-night-bright .ace_markup.ace_heading {\ + color:#B9CA4A;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow_night_bright.js b/public/ace_editor/theme-tomorrow_night_bright.js new file mode 100644 index 0000000..0566de0 --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_bright.js @@ -0,0 +1 @@ +define("ace/theme/tomorrow_night_bright",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-tomorrow-night-bright",b.cssText=".ace-tomorrow-night-bright .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow-night-bright .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow-night-bright .ace_gutter { background: #e8e8e8; color: #333;}.ace-tomorrow-night-bright .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow-night-bright .ace_scroller { background-color: #000000;}.ace-tomorrow-night-bright .ace_text-layer { cursor: text; color: #DEDEDE;}.ace-tomorrow-night-bright .ace_cursor { border-left: 2px solid #9F9F9F;}.ace-tomorrow-night-bright .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #9F9F9F;}.ace-tomorrow-night-bright .ace_marker-layer .ace_selection { background: #424242;}.ace-tomorrow-night-bright.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #000000; border-radius: 2px;}.ace-tomorrow-night-bright .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #343434;}.ace-tomorrow-night-bright .ace_marker-layer .ace_active_line { background: #2A2A2A;}.ace-tomorrow-night-bright .ace_marker-layer .ace_selected_word { border: 1px solid #424242;}.ace-tomorrow-night-bright .ace_invisible { color: #343434;}.ace-tomorrow-night-bright .ace_keyword, .ace-tomorrow-night-bright .ace_meta { color:#C397D8;}.ace-tomorrow-night-bright .ace_keyword.ace_operator { color:#70C0B1;}.ace-tomorrow-night-bright .ace_constant.ace_language { color:#E78C45;}.ace-tomorrow-night-bright .ace_constant.ace_numeric { color:#E78C45;}.ace-tomorrow-night-bright .ace_constant.ace_other { color:#EEEEEE;}.ace-tomorrow-night-bright .ace_invalid { color:#CED2CF;background-color:#DF5F5F;}.ace-tomorrow-night-bright .ace_invalid.ace_deprecated { color:#CED2CF;background-color:#B798BF;}.ace-tomorrow-night-bright .ace_support.ace_constant { color:#E78C45;}.ace-tomorrow-night-bright .ace_fold { background-color: #7AA6DA; border-color: #DEDEDE;}.ace-tomorrow-night-bright .ace_support.ace_function { color:#7AA6DA;}.ace-tomorrow-night-bright .ace_storage { color:#C397D8;}.ace-tomorrow-night-bright .ace_storage.ace_type, .ace-tomorrow-night-bright .ace_support.ace_type{ color:#C397D8;}.ace-tomorrow-night-bright .ace_variable { color:#7AA6DA;}.ace-tomorrow-night-bright .ace_variable.ace_parameter { color:#E78C45;}.ace-tomorrow-night-bright .ace_string { color:#B9CA4A;}.ace-tomorrow-night-bright .ace_string.ace_regexp { color:#D54E53;}.ace-tomorrow-night-bright .ace_comment { color:#969896;}.ace-tomorrow-night-bright .ace_variable { color:#D54E53;}.ace-tomorrow-night-bright .ace_meta.ace_tag { color:#D54E53;}.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name { color:#D54E53;}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function { color:#7AA6DA;}.ace-tomorrow-night-bright .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow-night-bright .ace_markup.ace_heading { color:#B9CA4A;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-tomorrow_night_eighties-noconflict.js b/public/ace_editor/theme-tomorrow_night_eighties-noconflict.js new file mode 100644 index 0000000..8c2f344 --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_eighties-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/tomorrow_night_eighties",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-tomorrow-night-eighties",b.cssText=".ace-tomorrow-night-eighties .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow-night-eighties .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow-night-eighties .ace_gutter { background: #e8e8e8; color: #333;}.ace-tomorrow-night-eighties .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow-night-eighties .ace_scroller { background-color: #2D2D2D;}.ace-tomorrow-night-eighties .ace_text-layer { cursor: text; color: #CCCCCC;}.ace-tomorrow-night-eighties .ace_cursor { border-left: 2px solid #CCCCCC;}.ace-tomorrow-night-eighties .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #CCCCCC;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection { background: #515151;}.ace-tomorrow-night-eighties.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #2D2D2D; border-radius: 2px;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #6A6A6A;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_active_line { background: #393939;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected_word { border: 1px solid #515151;}.ace-tomorrow-night-eighties .ace_invisible { color: #6A6A6A;}.ace-tomorrow-night-eighties .ace_keyword, .ace-tomorrow-night-eighties .ace_meta { color:#CC99CC;}.ace-tomorrow-night-eighties .ace_keyword.ace_operator { color:#66CCCC;}.ace-tomorrow-night-eighties .ace_constant.ace_language { color:#F99157;}.ace-tomorrow-night-eighties .ace_constant.ace_numeric { color:#F99157;}.ace-tomorrow-night-eighties .ace_constant.ace_other { color:#CCCCCC;}.ace-tomorrow-night-eighties .ace_invalid { color:#CDCDCD;background-color:#F2777A;}.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated { color:#CDCDCD;background-color:#CC99CC;}.ace-tomorrow-night-eighties .ace_support.ace_constant { color:#F99157;}.ace-tomorrow-night-eighties .ace_fold { background-color: #6699CC; border-color: #CCCCCC;}.ace-tomorrow-night-eighties .ace_support.ace_function { color:#6699CC;}.ace-tomorrow-night-eighties .ace_storage { color:#CC99CC;}.ace-tomorrow-night-eighties .ace_storage.ace_type, .ace-tomorrow-night-eighties .ace_support.ace_type{ color:#CC99CC;}.ace-tomorrow-night-eighties .ace_variable { color:#6699CC;}.ace-tomorrow-night-eighties .ace_variable.ace_parameter { color:#F99157;}.ace-tomorrow-night-eighties .ace_string { color:#99CC99;}.ace-tomorrow-night-eighties .ace_comment { color:#999999;}.ace-tomorrow-night-eighties .ace_variable { color:#F2777A;}.ace-tomorrow-night-eighties .ace_meta.ace_tag { color:#F2777A;}.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name { color:#F2777A;}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function { color:#6699CC;}.ace-tomorrow-night-eighties .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow-night-eighties .ace_markup.ace_heading { color:#99CC99;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-tomorrow_night_eighties-uncompressed-noconflict.js b/public/ace_editor/theme-tomorrow_night_eighties-uncompressed-noconflict.js new file mode 100644 index 0000000..631d78c --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_eighties-uncompressed-noconflict.js @@ -0,0 +1,202 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/tomorrow_night_eighties', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-tomorrow-night-eighties"; +exports.cssText = "\ +.ace-tomorrow-night-eighties .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow-night-eighties .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_scroller {\ + background-color: #2D2D2D;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_text-layer {\ + cursor: text;\ + color: #CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_cursor {\ + border-left: 2px solid #CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\ + background: #515151;\ +}\ +\ +.ace-tomorrow-night-eighties.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #2D2D2D;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #6A6A6A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_active_line {\ + background: #393939;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected_word {\ + border: 1px solid #515151;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_invisible {\ + color: #6A6A6A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_keyword, .ace-tomorrow-night-eighties .ace_meta {\ + color:#CC99CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_keyword.ace_operator {\ + color:#66CCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_constant.ace_language {\ + color:#F99157;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_constant.ace_numeric {\ + color:#F99157;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_constant.ace_other {\ + color:#CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_invalid {\ + color:#CDCDCD;\ +background-color:#F2777A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\ + color:#CDCDCD;\ +background-color:#CC99CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_support.ace_constant {\ + color:#F99157;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_fold {\ + background-color: #6699CC;\ + border-color: #CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_support.ace_function {\ + color:#6699CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_storage {\ + color:#CC99CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_storage.ace_type, .ace-tomorrow-night-eighties .ace_support.ace_type{\ + color:#CC99CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_variable {\ + color:#6699CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_variable.ace_parameter {\ + color:#F99157;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_string {\ + color:#99CC99;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_comment {\ + color:#999999;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_variable {\ + color:#F2777A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_meta.ace_tag {\ + color:#F2777A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name {\ + color:#F2777A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function {\ + color:#6699CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_markup.ace_heading {\ + color:#99CC99;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow_night_eighties-uncompressed.js b/public/ace_editor/theme-tomorrow_night_eighties-uncompressed.js new file mode 100644 index 0000000..9b24b0e --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_eighties-uncompressed.js @@ -0,0 +1,202 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/tomorrow_night_eighties', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-tomorrow-night-eighties"; +exports.cssText = "\ +.ace-tomorrow-night-eighties .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-tomorrow-night-eighties .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_scroller {\ + background-color: #2D2D2D;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_text-layer {\ + cursor: text;\ + color: #CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_cursor {\ + border-left: 2px solid #CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\ + background: #515151;\ +}\ +\ +.ace-tomorrow-night-eighties.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #2D2D2D;\ + border-radius: 2px;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #6A6A6A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_active_line {\ + background: #393939;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected_word {\ + border: 1px solid #515151;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_invisible {\ + color: #6A6A6A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_keyword, .ace-tomorrow-night-eighties .ace_meta {\ + color:#CC99CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_keyword.ace_operator {\ + color:#66CCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_constant.ace_language {\ + color:#F99157;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_constant.ace_numeric {\ + color:#F99157;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_constant.ace_other {\ + color:#CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_invalid {\ + color:#CDCDCD;\ +background-color:#F2777A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\ + color:#CDCDCD;\ +background-color:#CC99CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_support.ace_constant {\ + color:#F99157;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_fold {\ + background-color: #6699CC;\ + border-color: #CCCCCC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_support.ace_function {\ + color:#6699CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_storage {\ + color:#CC99CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_storage.ace_type, .ace-tomorrow-night-eighties .ace_support.ace_type{\ + color:#CC99CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_variable {\ + color:#6699CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_variable.ace_parameter {\ + color:#F99157;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_string {\ + color:#99CC99;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_comment {\ + color:#999999;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_variable {\ + color:#F2777A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_meta.ace_tag {\ + color:#F2777A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name {\ + color:#F2777A;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function {\ + color:#6699CC;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-tomorrow-night-eighties .ace_markup.ace_heading {\ + color:#99CC99;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-tomorrow_night_eighties.js b/public/ace_editor/theme-tomorrow_night_eighties.js new file mode 100644 index 0000000..21cb743 --- /dev/null +++ b/public/ace_editor/theme-tomorrow_night_eighties.js @@ -0,0 +1 @@ +define("ace/theme/tomorrow_night_eighties",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-tomorrow-night-eighties",b.cssText=".ace-tomorrow-night-eighties .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tomorrow-night-eighties .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tomorrow-night-eighties .ace_gutter { background: #e8e8e8; color: #333;}.ace-tomorrow-night-eighties .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tomorrow-night-eighties .ace_scroller { background-color: #2D2D2D;}.ace-tomorrow-night-eighties .ace_text-layer { cursor: text; color: #CCCCCC;}.ace-tomorrow-night-eighties .ace_cursor { border-left: 2px solid #CCCCCC;}.ace-tomorrow-night-eighties .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #CCCCCC;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection { background: #515151;}.ace-tomorrow-night-eighties.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #2D2D2D; border-radius: 2px;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #6A6A6A;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_active_line { background: #393939;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected_word { border: 1px solid #515151;}.ace-tomorrow-night-eighties .ace_invisible { color: #6A6A6A;}.ace-tomorrow-night-eighties .ace_keyword, .ace-tomorrow-night-eighties .ace_meta { color:#CC99CC;}.ace-tomorrow-night-eighties .ace_keyword.ace_operator { color:#66CCCC;}.ace-tomorrow-night-eighties .ace_constant.ace_language { color:#F99157;}.ace-tomorrow-night-eighties .ace_constant.ace_numeric { color:#F99157;}.ace-tomorrow-night-eighties .ace_constant.ace_other { color:#CCCCCC;}.ace-tomorrow-night-eighties .ace_invalid { color:#CDCDCD;background-color:#F2777A;}.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated { color:#CDCDCD;background-color:#CC99CC;}.ace-tomorrow-night-eighties .ace_support.ace_constant { color:#F99157;}.ace-tomorrow-night-eighties .ace_fold { background-color: #6699CC; border-color: #CCCCCC;}.ace-tomorrow-night-eighties .ace_support.ace_function { color:#6699CC;}.ace-tomorrow-night-eighties .ace_storage { color:#CC99CC;}.ace-tomorrow-night-eighties .ace_storage.ace_type, .ace-tomorrow-night-eighties .ace_support.ace_type{ color:#CC99CC;}.ace-tomorrow-night-eighties .ace_variable { color:#6699CC;}.ace-tomorrow-night-eighties .ace_variable.ace_parameter { color:#F99157;}.ace-tomorrow-night-eighties .ace_string { color:#99CC99;}.ace-tomorrow-night-eighties .ace_comment { color:#999999;}.ace-tomorrow-night-eighties .ace_variable { color:#F2777A;}.ace-tomorrow-night-eighties .ace_meta.ace_tag { color:#F2777A;}.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name { color:#F2777A;}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function { color:#6699CC;}.ace-tomorrow-night-eighties .ace_markup.ace_underline { text-decoration:underline;}.ace-tomorrow-night-eighties .ace_markup.ace_heading { color:#99CC99;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-twilight-noconflict.js b/public/ace_editor/theme-twilight-noconflict.js new file mode 100644 index 0000000..83b266a --- /dev/null +++ b/public/ace_editor/theme-twilight-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/twilight",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-twilight",b.cssText=".ace-twilight .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-twilight .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-twilight .ace_gutter { background: #e8e8e8; color: #333;}.ace-twilight .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-twilight .ace_scroller { background-color: #141414;}.ace-twilight .ace_text-layer { cursor: text; color: #F8F8F8;}.ace-twilight .ace_cursor { border-left: 2px solid #A7A7A7;}.ace-twilight .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #A7A7A7;}.ace-twilight .ace_marker-layer .ace_selection { background: rgba(221, 240, 255, 0.20);}.ace-twilight.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #141414; border-radius: 2px;}.ace-twilight .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-twilight .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(255, 255, 255, 0.25);}.ace-twilight .ace_marker-layer .ace_active_line { background: rgba(255, 255, 255, 0.031);}.ace-twilight .ace_marker-layer .ace_selected_word { border: 1px solid rgba(221, 240, 255, 0.20);}.ace-twilight .ace_invisible { color: rgba(255, 255, 255, 0.25);}.ace-twilight .ace_keyword, .ace-twilight .ace_meta { color:#CDA869;}.ace-twilight .ace_constant, .ace-twilight .ace_constant.ace_other { color:#CF6A4C;}.ace-twilight .ace_constant.ace_character, { color:#CF6A4C;}.ace-twilight .ace_constant.ace_character.ace_escape, { color:#CF6A4C;}.ace-twilight .ace_invalid.ace_illegal { color:#F8F8F8;background-color:rgba(86, 45, 86, 0.75);}.ace-twilight .ace_invalid.ace_deprecated { text-decoration:underline;font-style:italic;color:#D2A8A1;}.ace-twilight .ace_support { color:#9B859D;}.ace-twilight .ace_support.ace_constant { color:#CF6A4C;}.ace-twilight .ace_fold { background-color: #AC885B; border-color: #F8F8F8;}.ace-twilight .ace_support.ace_function { color:#DAD085;}.ace-twilight .ace_storage { color:#F9EE98;}.ace-twilight .ace_variable { color:#AC885B;}.ace-twilight .ace_string { color:#8F9D6A;}.ace-twilight .ace_string.ace_regexp { color:#E9C062;}.ace-twilight .ace_comment { font-style:italic;color:#5F5A60;}.ace-twilight .ace_variable { color:#7587A6;}.ace-twilight .ace_xml_pe { color:#494949;}.ace-twilight .ace_meta.ace_tag { color:#AC885B;}.ace-twilight .ace_entity.ace_name.ace_function { color:#AC885B;}.ace-twilight .ace_markup.ace_underline { text-decoration:underline;}.ace-twilight .ace_markup.ace_heading { color:#CF6A4C;}.ace-twilight .ace_markup.ace_list { color:#F9EE98;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-twilight-uncompressed-noconflict.js b/public/ace_editor/theme-twilight-uncompressed-noconflict.js new file mode 100644 index 0000000..894ce62 --- /dev/null +++ b/public/ace_editor/theme-twilight-uncompressed-noconflict.js @@ -0,0 +1,204 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/twilight', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-twilight"; +exports.cssText = "\ +.ace-twilight .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-twilight .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-twilight .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-twilight .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-twilight .ace_scroller {\ + background-color: #141414;\ +}\ +\ +.ace-twilight .ace_text-layer {\ + cursor: text;\ + color: #F8F8F8;\ +}\ +\ +.ace-twilight .ace_cursor {\ + border-left: 2px solid #A7A7A7;\ +}\ +\ +.ace-twilight .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #A7A7A7;\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_selection {\ + background: rgba(221, 240, 255, 0.20);\ +}\ +\ +.ace-twilight.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #141414;\ + border-radius: 2px;\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(255, 255, 255, 0.25);\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_active_line {\ + background: rgba(255, 255, 255, 0.031);\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(221, 240, 255, 0.20);\ +}\ +\ +.ace-twilight .ace_invisible {\ + color: rgba(255, 255, 255, 0.25);\ +}\ +\ +.ace-twilight .ace_keyword, .ace-twilight .ace_meta {\ + color:#CDA869;\ +}\ +\ +.ace-twilight .ace_constant, .ace-twilight .ace_constant.ace_other {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_constant.ace_character, {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_constant.ace_character.ace_escape, {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_invalid.ace_illegal {\ + color:#F8F8F8;\ +background-color:rgba(86, 45, 86, 0.75);\ +}\ +\ +.ace-twilight .ace_invalid.ace_deprecated {\ + text-decoration:underline;\ +font-style:italic;\ +color:#D2A8A1;\ +}\ +\ +.ace-twilight .ace_support {\ + color:#9B859D;\ +}\ +\ +.ace-twilight .ace_support.ace_constant {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_fold {\ + background-color: #AC885B;\ + border-color: #F8F8F8;\ +}\ +\ +.ace-twilight .ace_support.ace_function {\ + color:#DAD085;\ +}\ +\ +.ace-twilight .ace_storage {\ + color:#F9EE98;\ +}\ +\ +.ace-twilight .ace_variable {\ + color:#AC885B;\ +}\ +\ +.ace-twilight .ace_string {\ + color:#8F9D6A;\ +}\ +\ +.ace-twilight .ace_string.ace_regexp {\ + color:#E9C062;\ +}\ +\ +.ace-twilight .ace_comment {\ + font-style:italic;\ +color:#5F5A60;\ +}\ +\ +.ace-twilight .ace_variable {\ + color:#7587A6;\ +}\ +\ +.ace-twilight .ace_xml_pe {\ + color:#494949;\ +}\ +\ +.ace-twilight .ace_meta.ace_tag {\ + color:#AC885B;\ +}\ +\ +.ace-twilight .ace_entity.ace_name.ace_function {\ + color:#AC885B;\ +}\ +\ +.ace-twilight .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-twilight .ace_markup.ace_heading {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_markup.ace_list {\ + color:#F9EE98;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-twilight-uncompressed.js b/public/ace_editor/theme-twilight-uncompressed.js new file mode 100644 index 0000000..72cd8ec --- /dev/null +++ b/public/ace_editor/theme-twilight-uncompressed.js @@ -0,0 +1,204 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/twilight', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-twilight"; +exports.cssText = "\ +.ace-twilight .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-twilight .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-twilight .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-twilight .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-twilight .ace_scroller {\ + background-color: #141414;\ +}\ +\ +.ace-twilight .ace_text-layer {\ + cursor: text;\ + color: #F8F8F8;\ +}\ +\ +.ace-twilight .ace_cursor {\ + border-left: 2px solid #A7A7A7;\ +}\ +\ +.ace-twilight .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #A7A7A7;\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_selection {\ + background: rgba(221, 240, 255, 0.20);\ +}\ +\ +.ace-twilight.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #141414;\ + border-radius: 2px;\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid rgba(255, 255, 255, 0.25);\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_active_line {\ + background: rgba(255, 255, 255, 0.031);\ +}\ +\ +.ace-twilight .ace_marker-layer .ace_selected_word {\ + border: 1px solid rgba(221, 240, 255, 0.20);\ +}\ +\ +.ace-twilight .ace_invisible {\ + color: rgba(255, 255, 255, 0.25);\ +}\ +\ +.ace-twilight .ace_keyword, .ace-twilight .ace_meta {\ + color:#CDA869;\ +}\ +\ +.ace-twilight .ace_constant, .ace-twilight .ace_constant.ace_other {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_constant.ace_character, {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_constant.ace_character.ace_escape, {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_invalid.ace_illegal {\ + color:#F8F8F8;\ +background-color:rgba(86, 45, 86, 0.75);\ +}\ +\ +.ace-twilight .ace_invalid.ace_deprecated {\ + text-decoration:underline;\ +font-style:italic;\ +color:#D2A8A1;\ +}\ +\ +.ace-twilight .ace_support {\ + color:#9B859D;\ +}\ +\ +.ace-twilight .ace_support.ace_constant {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_fold {\ + background-color: #AC885B;\ + border-color: #F8F8F8;\ +}\ +\ +.ace-twilight .ace_support.ace_function {\ + color:#DAD085;\ +}\ +\ +.ace-twilight .ace_storage {\ + color:#F9EE98;\ +}\ +\ +.ace-twilight .ace_variable {\ + color:#AC885B;\ +}\ +\ +.ace-twilight .ace_string {\ + color:#8F9D6A;\ +}\ +\ +.ace-twilight .ace_string.ace_regexp {\ + color:#E9C062;\ +}\ +\ +.ace-twilight .ace_comment {\ + font-style:italic;\ +color:#5F5A60;\ +}\ +\ +.ace-twilight .ace_variable {\ + color:#7587A6;\ +}\ +\ +.ace-twilight .ace_xml_pe {\ + color:#494949;\ +}\ +\ +.ace-twilight .ace_meta.ace_tag {\ + color:#AC885B;\ +}\ +\ +.ace-twilight .ace_entity.ace_name.ace_function {\ + color:#AC885B;\ +}\ +\ +.ace-twilight .ace_markup.ace_underline {\ + text-decoration:underline;\ +}\ +\ +.ace-twilight .ace_markup.ace_heading {\ + color:#CF6A4C;\ +}\ +\ +.ace-twilight .ace_markup.ace_list {\ + color:#F9EE98;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-twilight.js b/public/ace_editor/theme-twilight.js new file mode 100644 index 0000000..fa5b43d --- /dev/null +++ b/public/ace_editor/theme-twilight.js @@ -0,0 +1 @@ +define("ace/theme/twilight",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-twilight",b.cssText=".ace-twilight .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-twilight .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-twilight .ace_gutter { background: #e8e8e8; color: #333;}.ace-twilight .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-twilight .ace_scroller { background-color: #141414;}.ace-twilight .ace_text-layer { cursor: text; color: #F8F8F8;}.ace-twilight .ace_cursor { border-left: 2px solid #A7A7A7;}.ace-twilight .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #A7A7A7;}.ace-twilight .ace_marker-layer .ace_selection { background: rgba(221, 240, 255, 0.20);}.ace-twilight.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #141414; border-radius: 2px;}.ace-twilight .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-twilight .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgba(255, 255, 255, 0.25);}.ace-twilight .ace_marker-layer .ace_active_line { background: rgba(255, 255, 255, 0.031);}.ace-twilight .ace_marker-layer .ace_selected_word { border: 1px solid rgba(221, 240, 255, 0.20);}.ace-twilight .ace_invisible { color: rgba(255, 255, 255, 0.25);}.ace-twilight .ace_keyword, .ace-twilight .ace_meta { color:#CDA869;}.ace-twilight .ace_constant, .ace-twilight .ace_constant.ace_other { color:#CF6A4C;}.ace-twilight .ace_constant.ace_character, { color:#CF6A4C;}.ace-twilight .ace_constant.ace_character.ace_escape, { color:#CF6A4C;}.ace-twilight .ace_invalid.ace_illegal { color:#F8F8F8;background-color:rgba(86, 45, 86, 0.75);}.ace-twilight .ace_invalid.ace_deprecated { text-decoration:underline;font-style:italic;color:#D2A8A1;}.ace-twilight .ace_support { color:#9B859D;}.ace-twilight .ace_support.ace_constant { color:#CF6A4C;}.ace-twilight .ace_fold { background-color: #AC885B; border-color: #F8F8F8;}.ace-twilight .ace_support.ace_function { color:#DAD085;}.ace-twilight .ace_storage { color:#F9EE98;}.ace-twilight .ace_variable { color:#AC885B;}.ace-twilight .ace_string { color:#8F9D6A;}.ace-twilight .ace_string.ace_regexp { color:#E9C062;}.ace-twilight .ace_comment { font-style:italic;color:#5F5A60;}.ace-twilight .ace_variable { color:#7587A6;}.ace-twilight .ace_xml_pe { color:#494949;}.ace-twilight .ace_meta.ace_tag { color:#AC885B;}.ace-twilight .ace_entity.ace_name.ace_function { color:#AC885B;}.ace-twilight .ace_markup.ace_underline { text-decoration:underline;}.ace-twilight .ace_markup.ace_heading { color:#CF6A4C;}.ace-twilight .ace_markup.ace_list { color:#F9EE98;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-vibrant_ink-noconflict.js b/public/ace_editor/theme-vibrant_ink-noconflict.js new file mode 100644 index 0000000..9c2e51f --- /dev/null +++ b/public/ace_editor/theme-vibrant_ink-noconflict.js @@ -0,0 +1 @@ +ace.define("ace/theme/vibrant_ink",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-vibrant-ink",b.cssText=".ace-vibrant-ink .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-vibrant-ink .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-vibrant-ink .ace_gutter { background: #e8e8e8; color: #333;}.ace-vibrant-ink .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-vibrant-ink .ace_scroller { background-color: #0F0F0F;}.ace-vibrant-ink .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-vibrant-ink .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-vibrant-ink .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-vibrant-ink .ace_marker-layer .ace_selection { background: #6699CC;}.ace-vibrant-ink.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #0F0F0F; border-radius: 2px;}.ace-vibrant-ink .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-vibrant-ink .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404040;}.ace-vibrant-ink .ace_marker-layer .ace_active_line { background: #333333;}.ace-vibrant-ink .ace_marker-layer .ace_selected_word { border: 1px solid #6699CC;}.ace-vibrant-ink .ace_invisible { color: #404040;}.ace-vibrant-ink .ace_keyword, .ace-vibrant-ink .ace_meta { color:#FF6600;}.ace-vibrant-ink .ace_constant, .ace-vibrant-ink .ace_constant.ace_other { color:#339999;}.ace-vibrant-ink .ace_constant.ace_character, { color:#339999;}.ace-vibrant-ink .ace_constant.ace_character.ace_escape, { color:#339999;}.ace-vibrant-ink .ace_constant.ace_numeric { color:#99CC99;}.ace-vibrant-ink .ace_invalid { color:#CCFF33;background-color:#000000;}.ace-vibrant-ink .ace_invalid.ace_deprecated { color:#CCFF33;background-color:#000000;}.ace-vibrant-ink .ace_fold { background-color: #FFCC00; border-color: #FFFFFF;}.ace-vibrant-ink .ace_support.ace_function { color:#FFCC00;}.ace-vibrant-ink .ace_variable { color:#FFCC00;}.ace-vibrant-ink .ace_variable.ace_parameter { font-style:italic;}.ace-vibrant-ink .ace_string { color:#66FF00;}.ace-vibrant-ink .ace_string.ace_regexp { color:#44B4CC;}.ace-vibrant-ink .ace_comment { color:#9933CC;}.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name { font-style:italic;color:#99CC99;}.ace-vibrant-ink .ace_entity.ace_name.ace_function { color:#FFCC00;}.ace-vibrant-ink .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/theme-vibrant_ink-uncompressed-noconflict.js b/public/ace_editor/theme-vibrant_ink-uncompressed-noconflict.js new file mode 100644 index 0000000..0b9eb79 --- /dev/null +++ b/public/ace_editor/theme-vibrant_ink-uncompressed-noconflict.js @@ -0,0 +1,183 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +ace.define('ace/theme/vibrant_ink', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-vibrant-ink"; +exports.cssText = "\ +.ace-vibrant-ink .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-vibrant-ink .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-vibrant-ink .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-vibrant-ink .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-vibrant-ink .ace_scroller {\ + background-color: #0F0F0F;\ +}\ +\ +.ace-vibrant-ink .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-vibrant-ink .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-vibrant-ink .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_selection {\ + background: #6699CC;\ +}\ +\ +.ace-vibrant-ink.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #0F0F0F;\ + border-radius: 2px;\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404040;\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_active_line {\ + background: #333333;\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_selected_word {\ + border: 1px solid #6699CC;\ +}\ +\ +.ace-vibrant-ink .ace_invisible {\ + color: #404040;\ +}\ +\ +.ace-vibrant-ink .ace_keyword, .ace-vibrant-ink .ace_meta {\ + color:#FF6600;\ +}\ +\ +.ace-vibrant-ink .ace_constant, .ace-vibrant-ink .ace_constant.ace_other {\ + color:#339999;\ +}\ +\ +.ace-vibrant-ink .ace_constant.ace_character, {\ + color:#339999;\ +}\ +\ +.ace-vibrant-ink .ace_constant.ace_character.ace_escape, {\ + color:#339999;\ +}\ +\ +.ace-vibrant-ink .ace_constant.ace_numeric {\ + color:#99CC99;\ +}\ +\ +.ace-vibrant-ink .ace_invalid {\ + color:#CCFF33;\ +background-color:#000000;\ +}\ +\ +.ace-vibrant-ink .ace_invalid.ace_deprecated {\ + color:#CCFF33;\ +background-color:#000000;\ +}\ +\ +.ace-vibrant-ink .ace_fold {\ + background-color: #FFCC00;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-vibrant-ink .ace_support.ace_function {\ + color:#FFCC00;\ +}\ +\ +.ace-vibrant-ink .ace_variable {\ + color:#FFCC00;\ +}\ +\ +.ace-vibrant-ink .ace_variable.ace_parameter {\ + font-style:italic;\ +}\ +\ +.ace-vibrant-ink .ace_string {\ + color:#66FF00;\ +}\ +\ +.ace-vibrant-ink .ace_string.ace_regexp {\ + color:#44B4CC;\ +}\ +\ +.ace-vibrant-ink .ace_comment {\ + color:#9933CC;\ +}\ +\ +.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\ + font-style:italic;\ +color:#99CC99;\ +}\ +\ +.ace-vibrant-ink .ace_entity.ace_name.ace_function {\ + color:#FFCC00;\ +}\ +\ +.ace-vibrant-ink .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-vibrant_ink-uncompressed.js b/public/ace_editor/theme-vibrant_ink-uncompressed.js new file mode 100644 index 0000000..6c0e27c --- /dev/null +++ b/public/ace_editor/theme-vibrant_ink-uncompressed.js @@ -0,0 +1,183 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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/vibrant_ink', ['require', 'exports', 'module' , 'ace/lib/dom'], function(require, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-vibrant-ink"; +exports.cssText = "\ +.ace-vibrant-ink .ace_editor {\ + border: 2px solid rgb(159, 159, 159);\ +}\ +\ +.ace-vibrant-ink .ace_editor.ace_focus {\ + border: 2px solid #327fbd;\ +}\ +\ +.ace-vibrant-ink .ace_gutter {\ + background: #e8e8e8;\ + color: #333;\ +}\ +\ +.ace-vibrant-ink .ace_print_margin {\ + width: 1px;\ + background: #e8e8e8;\ +}\ +\ +.ace-vibrant-ink .ace_scroller {\ + background-color: #0F0F0F;\ +}\ +\ +.ace-vibrant-ink .ace_text-layer {\ + cursor: text;\ + color: #FFFFFF;\ +}\ +\ +.ace-vibrant-ink .ace_cursor {\ + border-left: 2px solid #FFFFFF;\ +}\ +\ +.ace-vibrant-ink .ace_cursor.ace_overwrite {\ + border-left: 0px;\ + border-bottom: 1px solid #FFFFFF;\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_selection {\ + background: #6699CC;\ +}\ +\ +.ace-vibrant-ink.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #0F0F0F;\ + border-radius: 2px;\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_step {\ + background: rgb(198, 219, 174);\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_bracket {\ + margin: -1px 0 0 -1px;\ + border: 1px solid #404040;\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_active_line {\ + background: #333333;\ +}\ +\ +.ace-vibrant-ink .ace_marker-layer .ace_selected_word {\ + border: 1px solid #6699CC;\ +}\ +\ +.ace-vibrant-ink .ace_invisible {\ + color: #404040;\ +}\ +\ +.ace-vibrant-ink .ace_keyword, .ace-vibrant-ink .ace_meta {\ + color:#FF6600;\ +}\ +\ +.ace-vibrant-ink .ace_constant, .ace-vibrant-ink .ace_constant.ace_other {\ + color:#339999;\ +}\ +\ +.ace-vibrant-ink .ace_constant.ace_character, {\ + color:#339999;\ +}\ +\ +.ace-vibrant-ink .ace_constant.ace_character.ace_escape, {\ + color:#339999;\ +}\ +\ +.ace-vibrant-ink .ace_constant.ace_numeric {\ + color:#99CC99;\ +}\ +\ +.ace-vibrant-ink .ace_invalid {\ + color:#CCFF33;\ +background-color:#000000;\ +}\ +\ +.ace-vibrant-ink .ace_invalid.ace_deprecated {\ + color:#CCFF33;\ +background-color:#000000;\ +}\ +\ +.ace-vibrant-ink .ace_fold {\ + background-color: #FFCC00;\ + border-color: #FFFFFF;\ +}\ +\ +.ace-vibrant-ink .ace_support.ace_function {\ + color:#FFCC00;\ +}\ +\ +.ace-vibrant-ink .ace_variable {\ + color:#FFCC00;\ +}\ +\ +.ace-vibrant-ink .ace_variable.ace_parameter {\ + font-style:italic;\ +}\ +\ +.ace-vibrant-ink .ace_string {\ + color:#66FF00;\ +}\ +\ +.ace-vibrant-ink .ace_string.ace_regexp {\ + color:#44B4CC;\ +}\ +\ +.ace-vibrant-ink .ace_comment {\ + color:#9933CC;\ +}\ +\ +.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\ + font-style:italic;\ +color:#99CC99;\ +}\ +\ +.ace-vibrant-ink .ace_entity.ace_name.ace_function {\ + color:#FFCC00;\ +}\ +\ +.ace-vibrant-ink .ace_markup.ace_underline {\ + text-decoration:underline;\ +}"; + + var dom = require("../lib/dom"); + dom.importCssString(exports.cssText, exports.cssClass); +}); diff --git a/public/ace_editor/theme-vibrant_ink.js b/public/ace_editor/theme-vibrant_ink.js new file mode 100644 index 0000000..77d87ef --- /dev/null +++ b/public/ace_editor/theme-vibrant_ink.js @@ -0,0 +1 @@ +define("ace/theme/vibrant_ink",["require","exports","module","ace/lib/dom"],function(a,b,c){b.isDark=!0,b.cssClass="ace-vibrant-ink",b.cssText=".ace-vibrant-ink .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-vibrant-ink .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-vibrant-ink .ace_gutter { background: #e8e8e8; color: #333;}.ace-vibrant-ink .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-vibrant-ink .ace_scroller { background-color: #0F0F0F;}.ace-vibrant-ink .ace_text-layer { cursor: text; color: #FFFFFF;}.ace-vibrant-ink .ace_cursor { border-left: 2px solid #FFFFFF;}.ace-vibrant-ink .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid #FFFFFF;}.ace-vibrant-ink .ace_marker-layer .ace_selection { background: #6699CC;}.ace-vibrant-ink.multiselect .ace_selection.start { box-shadow: 0 0 3px 0px #0F0F0F; border-radius: 2px;}.ace-vibrant-ink .ace_marker-layer .ace_step { background: rgb(198, 219, 174);}.ace-vibrant-ink .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid #404040;}.ace-vibrant-ink .ace_marker-layer .ace_active_line { background: #333333;}.ace-vibrant-ink .ace_marker-layer .ace_selected_word { border: 1px solid #6699CC;}.ace-vibrant-ink .ace_invisible { color: #404040;}.ace-vibrant-ink .ace_keyword, .ace-vibrant-ink .ace_meta { color:#FF6600;}.ace-vibrant-ink .ace_constant, .ace-vibrant-ink .ace_constant.ace_other { color:#339999;}.ace-vibrant-ink .ace_constant.ace_character, { color:#339999;}.ace-vibrant-ink .ace_constant.ace_character.ace_escape, { color:#339999;}.ace-vibrant-ink .ace_constant.ace_numeric { color:#99CC99;}.ace-vibrant-ink .ace_invalid { color:#CCFF33;background-color:#000000;}.ace-vibrant-ink .ace_invalid.ace_deprecated { color:#CCFF33;background-color:#000000;}.ace-vibrant-ink .ace_fold { background-color: #FFCC00; border-color: #FFFFFF;}.ace-vibrant-ink .ace_support.ace_function { color:#FFCC00;}.ace-vibrant-ink .ace_variable { color:#FFCC00;}.ace-vibrant-ink .ace_variable.ace_parameter { font-style:italic;}.ace-vibrant-ink .ace_string { color:#66FF00;}.ace-vibrant-ink .ace_string.ace_regexp { color:#44B4CC;}.ace-vibrant-ink .ace_comment { color:#9933CC;}.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name { font-style:italic;color:#99CC99;}.ace-vibrant-ink .ace_entity.ace_name.ace_function { color:#FFCC00;}.ace-vibrant-ink .ace_markup.ace_underline { text-decoration:underline;}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)}) \ No newline at end of file diff --git a/public/ace_editor/worker-coffee.js b/public/ace_editor/worker-coffee.js new file mode 100644 index 0000000..aa9daad --- /dev/null +++ b/public/ace_editor/worker-coffee.js @@ -0,0 +1,7997 @@ +"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 + * + * 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 ( typeof(str) == 'string' && 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 +// 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Mike de Boer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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], 10) - 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], 10) - 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; + +/** + * class Document + * + * Contains the text of the document. Documents are controlled by a single [[EditSession `EditSession`]]. At its core, `Document`s are just an array of strings, with each row in the document matching up to the array index. + * + * + **/ + + /** + * new Document([text]) + * - text (String | Array): The starting text + * + * Creates a new `Document`. If `text` is included, the `Document` contains those strings; otherwise, it's empty. + * + **/ +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); + + /** + * Document.setValue(text) -> Void + * - text (String): The text to use + * + * Replaces all the lines in the current `Document` with the value of `text`. + **/ + 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); + }; + + /** + * Document.getValue() -> String + * + * Returns all the lines in the document as a single string, split by the new line character. + **/ + this.getValue = function() { + return this.getAllLines().join(this.getNewLineCharacter()); + }; + + /** + * Document.createAnchor(row, column) -> Anchor + * - row (Number): The row number to use + * - column (Number): The column number to use + * + * Creates a new `Anchor` to define a floating point in the document. + **/ + this.createAnchor = function(row, column) { + return new Anchor(this, row, column); + }; + + /** internal, hide + * Document.$split(text) -> [String] + * - text (String): The text to work with + * + ([String]): A String array, with each index containing a piece of the original `text` string. + * + * Splits a string of text on any newline (`\n`) or carriage-return ('\r') characters. + * + * + **/ + + // 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/); + }; + + + /** internal, hide + * Document.$detectNewLine(text) -> Void + * + * + **/ + this.$detectNewLine = function(text) { + var match = text.match(/^.*?(\r\n|\r|\n)/m); + if (match) { + this.$autoNewLine = match[1]; + } else { + this.$autoNewLine = "\n"; + } + }; + + /** + * Document.getNewLineCharacter() -> String + * + (String): If `newLineMode == windows`, `\r\n` is returned.
      + * If `newLineMode == unix`, `\n` is returned.
      + * If `newLineMode == auto`, the value of `autoNewLine` is returned. + * + * Returns the newline character that's being used, depending on the value of `newLineMode`. + * + * + * + **/ + 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"; + /** + * Document.setNewLineMode(newLineMode) -> Void + * - newLineMode(String): [The newline mode to use; can be either `windows`, `unix`, or `auto`]{: #Document.setNewLineMode.param} + * + * [Sets the new line mode.]{: #Document.setNewLineMode.desc} + **/ + this.setNewLineMode = function(newLineMode) { + if (this.$newLineMode === newLineMode) + return; + + this.$newLineMode = newLineMode; + }; + + /** + * Document.getNewLineMode() -> String + * + * [Returns the type of newlines being used; either `windows`, `unix`, or `auto`]{: #Document.getNewLineMode} + * + **/ + this.getNewLineMode = function() { + return this.$newLineMode; + }; + + /** + * Document.isNewLine(text) -> Boolean + * - text (String): The text to check + * + * Returns `true` if `text` is a newline character (either `\r\n`, `\r`, or `\n`). + * + **/ + this.isNewLine = function(text) { + return (text == "\r\n" || text == "\r" || text == "\n"); + }; + + /** + * Document.getLine(row) -> String + * - row (Number): The row index to retrieve + * + * Returns a verbatim copy of the given line as it is in the document + * + **/ + this.getLine = function(row) { + return this.$lines[row] || ""; + }; + + /** + * Document.getLines(firstRow, lastRow) -> [String] + * - firstRow (Number): The first row index to retrieve + * - lastRow (Number): The final row index to retrieve + * + * Returns an array of strings of the rows between `firstRow` and `lastRow`. This function is inclusive of `lastRow`. + * + **/ + this.getLines = function(firstRow, lastRow) { + return this.$lines.slice(firstRow, lastRow + 1); + }; + + /** + * Document.getAllLines() -> [String] + * + * 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()); + }; + + /** + * Document.getLength() -> Number + * + * Returns the number of rows in the document. + **/ + this.getLength = function() { + return this.$lines.length; + }; + + /** + * Document.getTextRange(range) -> String + * - range (Range): The range to work with + * + * [Given a range within the document, this function returns all the text within that range as a single string.]{: #Document.getTextRange.desc} + **/ + 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 = this.getLines(range.start.row+1, range.end.row-1); + lines.unshift((this.$lines[range.start.row] || "").substring(range.start.column)); + lines.push((this.$lines[range.end.row] || "").substring(0, range.end.column)); + return lines.join(this.getNewLineCharacter()); + } + }; + + /** internal, hide + * Document.$clipPosition(position) -> Number + * + * + **/ + 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; + }; + + /** + * Document.insert(position, text) -> Number + * - position (Number): The position to start inserting at + * - text (String): A chunk of text to insert + * + (Number): The position of the last line of `text`. If the length of `text` is 0, this function simply returns `position`. + * Inserts a block of `text` and the indicated `position`. + * + * + **/ + this.insert = function(position, text) { + if (!text || text.length === 0) + return position; + + position = this.$clipPosition(position); + + // only detect new lines if the document has no line break yet + 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; + }; + + /** + * Document.insertLines(row, lines) -> Object + * - row (Number): The index of the row to insert at + * - lines (Array): An array of strings + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}```
      + * If `lines` is empty, this function returns an object containing the current row, and column, like this:
      + * ```{row: row, column: 0}``` + * + * Inserts the elements in `lines` into the document, starting at the row index given by `row`. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.insertNewLine(position) -> Object + * - position (String): The position to insert at + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}``` + * + * Inserts a new line into the document at the current row's `position`. This method also triggers the `'change'` event. + * + * + * + **/ + 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; + }; + + /** + * Document.insertInLine(position, text) -> Object | Number + * - position (Number): The position to insert at + * - text (String): A chunk of text + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}``` + * + (Number): If `text` is empty, this function returns the value of `position` + * + * Inserts `text` into the `position` at the current row. This method also triggers the `'change'` event. + * + * + * + **/ + 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; + }; + + /** + * Document.remove(range) -> Object + * - range (Range): A specified Range to remove + * + (Object): Returns the new `start` property of the range, which contains `startRow` and `startColumn`. If `range` is empty, this function returns the unmodified value of `range.start`. + * + * Removes the `range` from the document. + * + * + **/ + 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; + }; + + /** + * Document.removeInLine(row, startColumn, endColumn) -> Object + * - row (Number): The row to remove from + * - startColumn (Number): The column to start removing at + * - endColumn (Number): The column to stop removing at + * + (Object): Returns an object containing `startRow` and `startColumn`, indicating the new row and column values.
      If `startColumn` is equal to `endColumn`, this function returns nothing. + * + * Removes the specified columns from the `row`. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.removeLines(firstRow, lastRow) -> [String] + * - firstRow (Number): The first row to be removed + * - lastRow (Number): The last row to be removed + * + ([String]): Returns all the removed lines. + * + * Removes a range of full lines. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.removeNewLine(row) -> Void + * - row (Number): The row to check + * + * Removes the new line between `row` and the row immediately following it. This method also triggers the `'change'` event. + * + **/ + 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 }); + }; + + /** + * Document.replace(range, text) -> Object + * - range (Range): A specified Range to replace + * - text (String): The new text to use as a replacement + * + (Object): Returns an object containing the final row and column, like this: + * {row: endRow, column: 0} + * If the text and range are empty, this function returns an object containing the current `range.start` value. + * If the text is the exact same as what currently exists, this function returns an object containing the current `range.end` value. + * + * Replaces a range in the document with the new `text`. + * + **/ + 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; + }; + + /** + * Document.applyDeltas(deltas) -> Void + * + * Applies all the changes previously accumulated. These can be either `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + **/ + this.applyDeltas = function(deltas) { + for (var i=0; i Void + * + * Reverts any changes previously applied. These can be either `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + **/ + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + +/** + * class Range + * + * This object is used in various places to indicate a region within the editor. To better visualize how this works, imagine a rectangle. Each quadrant of the rectangle is analogus to a range, as ranges contain a starting row and starting column, and an ending row, and ending column. + * + **/ + +/** + * new Range(startRow, startColumn, endRow, endColumn) + * - startRow (Number): The starting row + * - startColumn (Number): The starting column + * - endRow (Number): The ending row + * - endColumn (Number): The ending column + * + * Creates a new `Range` object with the given starting and ending row and column points. + * + **/ +var Range = function(startRow, startColumn, endRow, endColumn) { + this.start = { + row: startRow, + column: startColumn + }; + + this.end = { + row: endRow, + column: endColumn + }; +}; + +(function() { + /** + * Range.isEqual(range) -> Boolean + * - range (Range): A range to check against + * + * Returns `true` if and only if the starting row and column, and ending tow and column, are equivalent to those given by `range`. + * + **/ + this.isEqual = 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 + }; + + /** + * Range.toString() -> String + * + * Returns a string containing the range's row and column information, given like this: + * + * [start.row/start.column] -> [end.row/end.column] + * + **/ + + this.toString = function() { + return ("Range: [" + this.start.row + "/" + this.start.column + + "] -> [" + this.end.row + "/" + this.end.column + "]"); + }; + + /** related to: Range.compare + * Range.contains(row, column) -> Boolean + * - row (Number): A row to check for + * - column (Number): A column to check for + * + * Returns `true` if the `row` and `column` provided are within the given range. This can better be expressed as returning `true` if: + * + * this.start.row <= row <= this.end.row && + * this.start.column <= column <= this.end.column + * + **/ + + this.contains = function(row, column) { + return this.compare(row, column) == 0; + }; + + /** related to: Range.compare + * Range.compareRange(range) -> Number + * - range (Range): A range to compare with + * + (Number): This method returns one of the following numbers:
      + *
      + * * `-2`: (B) is in front of (A), and doesn't intersect with (A)
      + * * `-1`: (B) begins before (A) but ends inside of (A)
      + * * `0`: (B) is completely inside of (A) OR (A) is completely 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) + * + * Compares `this` range (A) with another range (B). + * + **/ + 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; + } + } + } + + /** related to: Range.compare + * Range.comparePoint(p) -> Number + * - p (Range): A point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1
      + * + * Checks the row and column points of `p` with the row and column points of the calling range. + * + * + * + **/ + this.comparePoint = function(p) { + return this.compare(p.row, p.column); + } + + /** related to: Range.comparePoint + * Range.containsRange(range) -> Boolean + * - range (Range): A range to compare with + * + * Checks the start and end points of `range` and compares them to the calling range. Returns `true` if the `range` is contained within the caller's range. + * + **/ + this.containsRange = function(range) { + return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; + } + + /** + * Range.intersects(range) -> Boolean + * - range (Range): A range to compare with + * + * Returns `true` if passed in `range` intersects with the one calling this method. + * + **/ + this.intersects = function(range) { + var cmp = this.compareRange(range); + return (cmp == -1 || cmp == 0 || cmp == 1); + } + + /** + * Range.isEnd(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the caller's ending row point is the same as `row`, and if the caller's ending column is the same as `column`. + * + **/ + this.isEnd = function(row, column) { + return this.end.row == row && this.end.column == column; + } + + /** + * Range.isStart(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the caller's starting row point is the same as `row`, and if the caller's starting column is the same as `column`. + * + **/ + this.isStart = function(row, column) { + return this.start.row == row && this.start.column == column; + } + + /** + * Range.setStart(row, column) + * - row (Number): A row point to set + * - column (Number): A column point to set + * + * Sets the starting row and column for the range. + * + **/ + 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; + } + } + + /** + * Range.setEnd(row, column) + * - row (Number): A row point to set + * - column (Number): A column point to set + * + * Sets the starting row and column for the range. + * + **/ + 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; + } + } + + /** related to: Range.compare + * Range.inside(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range. + * + **/ + 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; + } + + /** related to: Range.compare + * Range.insideStart(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range's starting points. + * + **/ + this.insideStart = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column)) { + return false; + } else { + return true; + } + } + return false; + } + + /** related to: Range.compare + * Range.insideEnd(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range's ending points. + * + **/ + this.insideEnd = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isStart(row, column)) { + return false; + } else { + return true; + } + } + return false; + } + + /** + * Range.compare(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + **/ + 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; + }; + + /** + * Range.compareStart(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + *
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range, or if `isStart` is `true`.
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + * + **/ + this.compareStart = function(row, column) { + if (this.start.row == row && this.start.column == column) { + return -1; + } else { + return this.compare(row, column); + } + } + + /** + * Range.compareEnd(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range, or if `isEnd` is `true.
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + **/ + this.compareEnd = function(row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } else { + return this.compare(row, column); + } + } + + /** + * Range.compareInside(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `1` if the ending row of the calling range is equal to `row`, and the ending column of the calling range is equal to `column`
      + * * `-1` if the starting row of the calling range is equal to `row`, and the starting column of the calling range is equal to `column`
      + *
      + * Otherwise, it returns the value after calling [[Range.compare `compare()`]]. + * + * Checks the row and column points with the row and column points of the calling range. + * + * + * + **/ + 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); + } + } + + /** + * Range.clipRows(firstRow, lastRow) -> Range + * - firstRow (Number): The starting row + * - lastRow (Number): The ending row + * + * Returns the part of the current `Range` that occurs within the boundaries of `firstRow` and `lastRow` as a new `Range` object. + * + **/ + 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); + }; + + /** + * Range.extend(row, column) -> Range + * - row (Number): A new row to extend to + * - column (Number): A new column to extend to + * + * Changes the row and column points for the calling range for both the starting and ending points. This method returns that range with a new row. + * + **/ + 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); + }; + + /** + * Range.isMultiLine() -> Boolean + * + * Returns true if the range spans across multiple lines. + * + **/ + this.isMultiLine = function() { + return (this.start.row !== this.end.row); + }; + + /** + * Range.clone() -> Range + * + * Returns a duplicate of the calling range. + * + **/ + this.clone = function() { + return Range.fromPoints(this.start, this.end); + }; + + /** + * Range.collapseRows() -> Range + * + * Returns a range containing the starting and ending rows of the original range, but with a column value of `0`. + * + **/ + 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) + }; + + /** + * Range.toScreenRange(session) -> Range + * - session (EditSession): The `EditSession` to retrieve coordinates from + * + * Given the current `Range`, this function converts those starting and ending points into screen positions, and then returns a new `Range` object. + **/ + 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(start, end) -> Range + * - start (Range): A starting point to use + * - end (Range): An ending point to use + * + * Creates and returns a new `Range` based on the row and column of the given parameters. + * +**/ +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; + +/** + * class Anchor + * + * Defines the floating pointer in the document. Whenever text is inserted or deleted before the cursor, the position of the cursor is updated + * + **/ + +/** + * new Anchor(doc, row, column) + * - doc (Document): The document to associate with the anchor + * - row (Number): The starting row position + * - column (Number): The starting column position + * + * Creates a new `Anchor` and associates it with a document. + * + **/ + +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); + + /** + * Anchor.getPosition() -> Object + * + * Returns an object identifying the `row` and `column` position of the current anchor. + * + **/ + + this.getPosition = function() { + return this.$clipPositionToDocument(this.row, this.column); + }; + + /** + * Anchor.getDocument() -> Document + * + * Returns the current document. + * + **/ + + this.getDocument = function() { + return this.document; + }; + + /** + * Anchor@onChange(e) + * - e (Event): Contains data about the event + * + * Fires whenever the anchor position changes. Events that can trigger this function include `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + * + **/ + + 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); + }; + + /** + * Anchor.setPosition(row, column, noClip) + * - row (Number): The row index to move the anchor to + * - column (Number): The column index to move the anchor to + * - noClip (Boolean): Identifies if you want the position to be clipped + * + * Sets the anchor position to the specified row and column. If `noClip` is `true`, the position is not clipped. + * + **/ + + 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 + }); + }; + + /** + * Anchor.detach() + * + * When called, the `'change'` event listener is removed. + * + **/ + + this.detach = function() { + this.document.removeEventListener("change", this.$onChange); + }; + + /** internal, hide + * Anchor.clipPositionToDocument(row, column) + * - row (Number): The row index to clip the anchor to + * - column (Number): The column index to clip the anchor to + * + * Clips the anchor position to the specified row and column. + * + **/ + + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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) { +// Generated by CoffeeScript 1.2.1-pre + + var BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, key, last, starts, _ref, _ref1, + __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + _ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES; + + _ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last; + + exports.Lexer = Lexer = (function() { + + Lexer.name = 'Lexer'; + + function Lexer() {} + + Lexer.prototype.tokenize = function(code, opts) { + var i, tag; + 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.ends = []; + 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 (tag = this.ends.pop()) this.error("missing " + tag); + 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 (!forcedIdentifier && (__indexOf.call(JS_KEYWORDS, id) >= 0 || __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.error("reserved word \"" + 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': + return 'STATEMENT'; + default: + return tag; + } + })(); + } + this.token(tag, id); + if (colon) this.token(':', ':'); + return input.length; + }; + + Lexer.prototype.numberToken = function() { + var binaryLiteral, lexedLength, match, number, octalLiteral; + if (!(match = NUMBER.exec(this.chunk))) return 0; + number = match[0]; + if (/E/.test(number)) { + this.error("exponential notation '" + number + "' must be indicated with a lowercase 'e'"); + } else if (/[BOX]/.test(number)) { + this.error("radix prefix '" + number + "' must be lowercase"); + } else if (/^0[89]/.test(number)) { + this.error("decimal literal '" + number + "' must not be prefixed with '0'"); + } else if (/^0[0-7]/.test(number)) { + this.error("octal literal '" + number + "' must be prefixed with '0o'"); + } + lexedLength = number.length; + if (octalLiteral = /0o([0-7]+)/.exec(number)) { + number = (parseInt(octalLiteral[1], 8)).toString(); + } + if (binaryLiteral = /0b([01]+)/.exec(number)) { + number = (parseInt(binaryLiteral[1], 2)).toString(); + } + this.token('NUMBER', number); + return lexedLength; + }; + + Lexer.prototype.stringToken = function() { + var match, octalEsc, 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; + } + if (octalEsc = /^(?:\\.|[^\\])*\\[0-7]/.test(string)) { + this.error("octal escape sequences " + string + " are not allowed"); + } + 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.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 flags, length, match, prev, regex, _ref2, _ref3; + if (this.chunk.charAt(0) !== '/') return 0; + if (match = HEREGEX.exec(this.chunk)) { + length = this.heregexToken(match); + this.line += count(match[0], '\n'); + return length; + } + 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; + _ref3 = match, match = _ref3[0], regex = _ref3[1], flags = _ref3[2]; + if (regex.slice(0, 2) === '/*') { + this.error('regular expressions cannot begin with `*`'); + } + if (regex === '//') regex = '/(?:)/'; + this.token('REGEX', "" + regex + flags); + return match.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, '\\/'); + if (re.match(/^\*/)) { + this.error('regular expressions cannot begin with `*`'); + } + 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'); + this.seenFor = false; + 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.ends.push('OUTDENT'); + 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) { + 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.pair('OUTDENT'); + this.token('OUTDENT', dent); + } + } + if (dent) this.outdebt -= moveOut; + while (this.value() === ';') { + this.tokens.pop(); + } + 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() { + while (this.value() === ';') { + this.tokens.pop(); + } + 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.error("reserved word \"" + (this.value()) + "\" can't be assigned"); + } + if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') { + prev[0] = 'COMPOUND_ASSIGN'; + prev[1] += '='; + return value.length; + } + } + if (value === ';') { + this.seenFor = false; + 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'; + } + } + } + switch (value) { + case '(': + case '{': + case '[': + this.ends.push(INVERSES[value]); + break; + case ')': + case '}': + case ']': + this.pair(value); + } + 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)) { + this.error("block comment cannot contain \"*/\", starting"); + } + 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; + } else { + return this; + } + } + } + return this; + }; + + Lexer.prototype.closeIndentation = function() { + return this.outdentToken(this.indent); + }; + + Lexer.prototype.balancedString = function(str, end) { + var continueCount, i, letter, match, prev, stack, _i, _ref2; + continueCount = 0; + stack = [end]; + for (i = _i = 1, _ref2 = str.length; 1 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 1 <= _ref2 ? ++_i : --_i) { + if (continueCount) { + --continueCount; + continue; + } + switch (letter = str.charAt(i)) { + case '\\': + ++continueCount; + continue; + case end: + stack.pop(); + if (!stack.length) return str.slice(0, i + 1 || 9e9); + end = stack[stack.length - 1]; + continue; + } + if (end === '}' && (letter === '"' || letter === "'")) { + stack.push(end = letter); + } else if (end === '}' && letter === '/' && (match = HEREGEX.exec(str.slice(i)) || REGEX.exec(str.slice(i)))) { + continueCount += match[0].length - 1; + } else if (end === '}' && letter === '{') { + stack.push(end = '}'); + } else if (end === '"' && prev === '#' && letter === '{') { + stack.push(end = '}'); + } + prev = letter; + } + return this.error("missing " + (stack.pop()) + ", starting"); + }; + + Lexer.prototype.interpolateString = function(str, options) { + var expr, heredoc, i, inner, interpolated, len, letter, nested, pi, regex, tag, tokens, value, _i, _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(['(', '(', this.line]); + nested.push([')', ')', this.line]); + } + 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 = _i = 0, _len = tokens.length; _i < _len; i = ++_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.pair = function(tag) { + var size, wanted; + if (tag !== (wanted = last(this.ends))) { + if ('OUTDENT' !== wanted) this.error("unmatched " + tag); + this.indent -= size = last(this.indents); + this.outdentToken(size, true); + return this.pair(tag); + } + return this.ends.pop(); + }; + + 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 _ref2; + return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS'); + }; + + 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; + }; + + Lexer.prototype.error = function(message) { + throw SyntaxError("" + message + " on line " + (this.line + 1)); + }; + + 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', 'implements', 'interface', 'let', 'package', 'private', 'protected', 'public', 'static', 'yield']; + + STRICT_PROSCRIBED = ['arguments', 'eval']; + + JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED); + + exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED); + + exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED; + + IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/; + + NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\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 = /\*\//; + + LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/; + + TRAILING_SPACES = /\s+$/; + + 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) { +// Generated by CoffeeScript 1.2.1-pre + + 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, + __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, + __slice = [].slice; + + exports.Rewriter = (function() { + + Rewriter.name = 'Rewriter'; + + 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(); + 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, _ref1; + 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 (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) { + levels -= 1; + } + i += 1; + } + return i - 1; + }; + + Rewriter.prototype.removeLeadingNewlines = function() { + var i, tag, _i, _len, _ref; + _ref = this.tokens; + for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_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, sameLine, stack, start, startIndent, startsLine; + stack = []; + start = null; + startsLine = null; + sameLine = true; + startIndent = 0; + condition = function(token, i) { + var one, tag, three, two, _ref, _ref1; + _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]; + if (__indexOf.call(LINEBREAKS, tag) >= 0) sameLine = false; + return (((tag === 'TERMINATOR' || tag === 'OUTDENT') || (__indexOf.call(IMPLICIT_END, tag) >= 0 && sameLine)) && ((!startsLine && this.tag(i - 1) !== ',') || !((two != null ? two[0] : void 0) === ':' || (one != null ? one[0] : void 0) === '@' && (three != null ? three[0] : void 0) === ':'))) || (tag === ',' && one && ((_ref1 = one[0]) !== 'IDENTIFIER' && _ref1 !== 'NUMBER' && _ref1 !== 'STRING' && _ref1 !== '@' && _ref1 !== 'TERMINATOR' && _ref1 !== 'OUTDENT')); + }; + action = function(token, i) { + var tok; + tok = this.generate('}', '}', token[2]); + return this.tokens.splice(i, 0, tok); + }; + return this.scanTokens(function(token, i, tokens) { + var ago, idx, prevTag, tag, tok, value, _ref, _ref1; + 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)) === ':' || ((_ref1 = stack[stack.length - 1]) != null ? _ref1[0] : void 0) !== '{'))) { + return 1; + } + sameLine = true; + stack.push(['{']); + idx = ago === '@' ? i - 2 : i - 1; + while (this.tag(idx - 2) === 'HERECOMMENT') { + idx -= 2; + } + prevTag = this.tag(idx - 1); + startsLine = !prevTag || (__indexOf.call(LINEBREAKS, prevTag) >= 0); + value = new String('{'); + value.generated = true; + tok = this.generate('{', value, token[2]); + tokens.splice(idx, 0, tok); + this.detectEnd(i + 2, condition, action); + return 2; + }); + }; + + Rewriter.prototype.addImplicitParentheses = function() { + var action, condition, noCall, seenControl, seenSingle; + noCall = seenSingle = seenControl = false; + condition = function(token, i) { + var post, tag, _ref, _ref1; + tag = token[0]; + if (!seenSingle && token.fromThen) return true; + if (tag === 'IF' || tag === 'ELSE' || tag === 'CATCH' || tag === '->' || tag === '=>' || tag === 'CLASS') { + seenSingle = true; + } + if (tag === 'IF' || tag === 'ELSE' || tag === 'SWITCH' || tag === 'TRY' || tag === '=') { + 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' || (((_ref = this.tag(i - 2)) !== 'CLASS' && _ref !== 'EXTENDS') && (_ref1 = this.tag(i - 1), __indexOf.call(IMPLICIT_BLOCK, _ref1) < 0) && !((post = this.tokens[i + 1]) && post.generated && post[0] === '{'))); + }; + action = function(token, i) { + return this.tokens.splice(i, 0, this.generate('CALL_END', ')', token[2])); + }; + return this.scanTokens(function(token, i, tokens) { + var callObject, current, next, prev, tag, _ref, _ref1, _ref2; + tag = token[0]; + if (tag === 'CLASS' || tag === 'IF' || tag === 'FOR' || tag === 'WHILE') { + 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 && (_ref1 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref1) >= 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 || (_ref2 = prev[0], __indexOf.call(IMPLICIT_FUNC, _ref2) >= 0)) && (__indexOf.call(IMPLICIT_CALL, tag) >= 0 || !(token.spaced || token.newLine) && __indexOf.call(IMPLICIT_UNSPACED_CALL, tag) >= 0))) { + return 1; + } + tokens.splice(i, 0, this.generate('CALL_START', '(', token[2])); + this.detectEnd(i + 1, condition, action); + if (prev[0] === '?') prev[0] = 'FUNC_EXIST'; + return 2; + }); + }; + + Rewriter.prototype.addImplicitIndentation = function() { + var action, condition, indent, outdent, starter; + starter = indent = outdent = null; + condition = function(token, i) { + var _ref; + return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 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); + }; + return this.scanTokens(function(token, i, tokens) { + var tag, _ref, _ref1; + 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; + _ref1 = this.indentation(token, true), indent = _ref1[0], outdent = _ref1[1]; + if (starter === 'THEN') indent.fromThen = true; + tokens.splice(i + 1, 0, indent); + this.detectEnd(i + 2, condition, action); + if (tag === 'THEN') tokens.splice(i, 1); + return 1; + } + return 1; + }); + }; + + Rewriter.prototype.tagPostfixConditionals = function() { + var action, condition, original; + original = null; + condition = function(token, i) { + var _ref; + return (_ref = token[0]) === 'TERMINATOR' || _ref === 'INDENT'; + }; + action = function(token, i) { + if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) { + return original[0] = 'POST_' + original[0]; + } + }; + return this.scanTokens(function(token, i) { + if (token[0] !== 'IF') return 1; + original = token; + this.detectEnd(i + 1, condition, action); + return 1; + }); + }; + + Rewriter.prototype.indentation = function(token, implicit) { + var indent, outdent; + if (implicit == null) implicit = false; + indent = ['INDENT', 2, token[2]]; + outdent = ['OUTDENT', 2, token[2]]; + if (implicit) indent.generated = outdent.generated = true; + return [indent, outdent]; + }; + + Rewriter.prototype.generate = function(tag, value, line) { + var tok; + tok = [tag, value, line]; + tok.generated = true; + return tok; + }; + + 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']]; + + exports.INVERSES = 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) { +// Generated by CoffeeScript 1.2.1-pre + + 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 */ + +undefined +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,"Comment":11,"STATEMENT":12,"Value":13,"Invocation":14,"Code":15,"Operation":16,"Assign":17,"If":18,"Try":19,"While":20,"For":21,"Switch":22,"Class":23,"Throw":24,"INDENT":25,"OUTDENT":26,"Identifier":27,"IDENTIFIER":28,"AlphaNumeric":29,"NUMBER":30,"STRING":31,"Literal":32,"JS":33,"REGEX":34,"DEBUGGER":35,"BOOL":36,"Assignable":37,"=":38,"AssignObj":39,"ObjAssignable":40,":":41,"ThisProperty":42,"RETURN":43,"HERECOMMENT":44,"PARAM_START":45,"ParamList":46,"PARAM_END":47,"FuncGlyph":48,"->":49,"=>":50,"OptComma":51,",":52,"Param":53,"ParamVar":54,"...":55,"Array":56,"Object":57,"Splat":58,"SimpleAssignable":59,"Accessor":60,"Parenthetical":61,"Range":62,"This":63,".":64,"?.":65,"::":66,"Index":67,"INDEX_START":68,"IndexValue":69,"INDEX_END":70,"INDEX_SOAK":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",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"BOOL",38:"=",41:":",43:"RETURN",44:"HERECOMMENT",45:"PARAM_START",47:"PARAM_END",49:"->",50:"=>",52:",",55:"...",64:".",65:"?.",66:"::",68:"INDEX_START",70:"INDEX_END",71:"INDEX_SOAK",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],[8,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],[32,1],[17,3],[17,4],[17,5],[39,1],[39,3],[39,5],[39,1],[40,1],[40,1],[40,1],[10,2],[10,1],[11,1],[15,5],[15,2],[48,1],[48,1],[51,0],[51,1],[46,0],[46,1],[46,3],[53,1],[53,2],[53,3],[54,1],[54,1],[54,1],[54,1],[58,2],[59,1],[59,2],[59,2],[59,1],[37,1],[37,1],[37,1],[13,1],[13,1],[13,1],[13,1],[13,1],[60,2],[60,2],[60,2],[60,1],[60,1],[67,3],[67,2],[69,1],[69,1],[57,4],[74,0],[74,1],[74,3],[74,4],[74,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[78,0],[78,1],[79,2],[79,4],[63,1],[63,1],[42,2],[56,2],[56,4],[89,1],[89,1],[62,5],[72,3],[72,2],[72,2],[72,1],[84,1],[84,3],[84,4],[84,4],[84,6],[91,1],[91,1],[92,1],[92,3],[19,2],[19,3],[19,4],[19,5],[94,3],[24,2],[61,3],[61,5],[100,2],[100,4],[100,2],[100,4],[20,2],[20,2],[20,2],[20,1],[104,2],[104,2],[21,2],[21,2],[21,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],[22,5],[22,7],[22,4],[22,6],[117,1],[117,2],[119,3],[119,4],[121,3],[121,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,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.$ = new yy.Literal($$[$0]); +break; +case 12:this.$ = $$[$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.$ = new yy.Literal($$[$0]); +break; +case 33:this.$ = (function () { + var val; + val = new yy.Literal($$[$0]); + if ($$[$0] === 'undefined') val.isUndefined = true; + return val; + }()); +break; +case 34:this.$ = new yy.Assign($$[$0-2], $$[$0]); +break; +case 35:this.$ = new yy.Assign($$[$0-3], $$[$0]); +break; +case 36:this.$ = new yy.Assign($$[$0-4], $$[$0-1]); +break; +case 37:this.$ = new yy.Value($$[$0]); +break; +case 38:this.$ = new yy.Assign(new yy.Value($$[$0-2]), $$[$0], 'object'); +break; +case 39:this.$ = new yy.Assign(new yy.Value($$[$0-4]), $$[$0-1], 'object'); +break; +case 40:this.$ = $$[$0]; +break; +case 41:this.$ = $$[$0]; +break; +case 42:this.$ = $$[$0]; +break; +case 43:this.$ = $$[$0]; +break; +case 44:this.$ = new yy.Return($$[$0]); +break; +case 45:this.$ = new yy.Return; +break; +case 46:this.$ = new yy.Comment($$[$0]); +break; +case 47:this.$ = new yy.Code($$[$0-3], $$[$0], $$[$0-1]); +break; +case 48:this.$ = new yy.Code([], $$[$0], $$[$0-1]); +break; +case 49:this.$ = 'func'; +break; +case 50:this.$ = 'boundfunc'; +break; +case 51:this.$ = $$[$0]; +break; +case 52:this.$ = $$[$0]; +break; +case 53:this.$ = []; +break; +case 54:this.$ = [$$[$0]]; +break; +case 55:this.$ = $$[$0-2].concat($$[$0]); +break; +case 56:this.$ = new yy.Param($$[$0]); +break; +case 57:this.$ = new yy.Param($$[$0-1], null, true); +break; +case 58:this.$ = new yy.Param($$[$0-2], $$[$0]); +break; +case 59:this.$ = $$[$0]; +break; +case 60:this.$ = $$[$0]; +break; +case 61:this.$ = $$[$0]; +break; +case 62:this.$ = $$[$0]; +break; +case 63:this.$ = new yy.Splat($$[$0-1]); +break; +case 64:this.$ = new yy.Value($$[$0]); +break; +case 65:this.$ = $$[$0-1].add($$[$0]); +break; +case 66:this.$ = new yy.Value($$[$0-1], [].concat($$[$0])); +break; +case 67:this.$ = $$[$0]; +break; +case 68:this.$ = $$[$0]; +break; +case 69:this.$ = new yy.Value($$[$0]); +break; +case 70:this.$ = new yy.Value($$[$0]); +break; +case 71:this.$ = $$[$0]; +break; +case 72:this.$ = new yy.Value($$[$0]); +break; +case 73:this.$ = new yy.Value($$[$0]); +break; +case 74:this.$ = new yy.Value($$[$0]); +break; +case 75:this.$ = $$[$0]; +break; +case 76:this.$ = new yy.Access($$[$0]); +break; +case 77:this.$ = new yy.Access($$[$0], 'soak'); +break; +case 78:this.$ = [new yy.Access(new yy.Literal('prototype')), new yy.Access($$[$0])]; +break; +case 79:this.$ = new yy.Access(new yy.Literal('prototype')); +break; +case 80:this.$ = $$[$0]; +break; +case 81:this.$ = $$[$0-1]; +break; +case 82:this.$ = yy.extend($$[$0], { + soak: true + }); +break; +case 83:this.$ = new yy.Index($$[$0]); +break; +case 84:this.$ = new yy.Slice($$[$0]); +break; +case 85:this.$ = new yy.Obj($$[$0-2], $$[$0-3].generated); +break; +case 86:this.$ = []; +break; +case 87:this.$ = [$$[$0]]; +break; +case 88:this.$ = $$[$0-2].concat($$[$0]); +break; +case 89:this.$ = $$[$0-3].concat($$[$0]); +break; +case 90:this.$ = $$[$0-5].concat($$[$0-2]); +break; +case 91:this.$ = new yy.Class; +break; +case 92:this.$ = new yy.Class(null, null, $$[$0]); +break; +case 93:this.$ = new yy.Class(null, $$[$0]); +break; +case 94:this.$ = new yy.Class(null, $$[$0-1], $$[$0]); +break; +case 95:this.$ = new yy.Class($$[$0]); +break; +case 96:this.$ = new yy.Class($$[$0-1], null, $$[$0]); +break; +case 97:this.$ = new yy.Class($$[$0-2], $$[$0]); +break; +case 98:this.$ = new yy.Class($$[$0-3], $$[$0-1], $$[$0]); +break; +case 99:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]); +break; +case 100:this.$ = new yy.Call($$[$0-2], $$[$0], $$[$0-1]); +break; +case 101:this.$ = new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]); +break; +case 102:this.$ = new yy.Call('super', $$[$0]); +break; +case 103:this.$ = false; +break; +case 104:this.$ = true; +break; +case 105:this.$ = []; +break; +case 106:this.$ = $$[$0-2]; +break; +case 107:this.$ = new yy.Value(new yy.Literal('this')); +break; +case 108:this.$ = new yy.Value(new yy.Literal('this')); +break; +case 109:this.$ = new yy.Value(new yy.Literal('this'), [new yy.Access($$[$0])], 'this'); +break; +case 110:this.$ = new yy.Arr([]); +break; +case 111:this.$ = new yy.Arr($$[$0-2]); +break; +case 112:this.$ = 'inclusive'; +break; +case 113:this.$ = 'exclusive'; +break; +case 114:this.$ = new yy.Range($$[$0-3], $$[$0-1], $$[$0-2]); +break; +case 115:this.$ = new yy.Range($$[$0-2], $$[$0], $$[$0-1]); +break; +case 116:this.$ = new yy.Range($$[$0-1], null, $$[$0]); +break; +case 117:this.$ = new yy.Range(null, $$[$0], $$[$0-1]); +break; +case 118:this.$ = new yy.Range(null, null, $$[$0]); +break; +case 119:this.$ = [$$[$0]]; +break; +case 120:this.$ = $$[$0-2].concat($$[$0]); +break; +case 121:this.$ = $$[$0-3].concat($$[$0]); +break; +case 122:this.$ = $$[$0-2]; +break; +case 123:this.$ = $$[$0-5].concat($$[$0-2]); +break; +case 124:this.$ = $$[$0]; +break; +case 125:this.$ = $$[$0]; +break; +case 126:this.$ = $$[$0]; +break; +case 127:this.$ = [].concat($$[$0-2], $$[$0]); +break; +case 128:this.$ = new yy.Try($$[$0]); +break; +case 129:this.$ = new yy.Try($$[$0-1], $$[$0][0], $$[$0][1]); +break; +case 130:this.$ = new yy.Try($$[$0-2], null, null, $$[$0]); +break; +case 131:this.$ = new yy.Try($$[$0-3], $$[$0-2][0], $$[$0-2][1], $$[$0]); +break; +case 132:this.$ = [$$[$0-1], $$[$0]]; +break; +case 133:this.$ = new yy.Throw($$[$0]); +break; +case 134:this.$ = new yy.Parens($$[$0-1]); +break; +case 135:this.$ = new yy.Parens($$[$0-2]); +break; +case 136:this.$ = new yy.While($$[$0]); +break; +case 137:this.$ = new yy.While($$[$0-2], { + guard: $$[$0] + }); +break; +case 138:this.$ = new yy.While($$[$0], { + invert: true + }); +break; +case 139:this.$ = new yy.While($$[$0-2], { + invert: true, + guard: $$[$0] + }); +break; +case 140:this.$ = $$[$0-1].addBody($$[$0]); +break; +case 141:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]])); +break; +case 142:this.$ = $$[$0].addBody(yy.Block.wrap([$$[$0-1]])); +break; +case 143:this.$ = $$[$0]; +break; +case 144:this.$ = new yy.While(new yy.Literal('true')).addBody($$[$0]); +break; +case 145:this.$ = new yy.While(new yy.Literal('true')).addBody(yy.Block.wrap([$$[$0]])); +break; +case 146:this.$ = new yy.For($$[$0-1], $$[$0]); +break; +case 147:this.$ = new yy.For($$[$0-1], $$[$0]); +break; +case 148:this.$ = new yy.For($$[$0], $$[$0-1]); +break; +case 149:this.$ = { + source: new yy.Value($$[$0]) + }; +break; +case 150:this.$ = (function () { + $$[$0].own = $$[$0-1].own; + $$[$0].name = $$[$0-1][0]; + $$[$0].index = $$[$0-1][1]; + return $$[$0]; + }()); +break; +case 151:this.$ = $$[$0]; +break; +case 152:this.$ = (function () { + $$[$0].own = true; + return $$[$0]; + }()); +break; +case 153:this.$ = $$[$0]; +break; +case 154:this.$ = new yy.Value($$[$0]); +break; +case 155:this.$ = new yy.Value($$[$0]); +break; +case 156:this.$ = [$$[$0]]; +break; +case 157:this.$ = [$$[$0-2], $$[$0]]; +break; +case 158:this.$ = { + source: $$[$0] + }; +break; +case 159:this.$ = { + source: $$[$0], + object: true + }; +break; +case 160:this.$ = { + source: $$[$0-2], + guard: $$[$0] + }; +break; +case 161:this.$ = { + source: $$[$0-2], + guard: $$[$0], + object: true + }; +break; +case 162:this.$ = { + source: $$[$0-2], + step: $$[$0] + }; +break; +case 163:this.$ = { + source: $$[$0-4], + guard: $$[$0-2], + step: $$[$0] + }; +break; +case 164:this.$ = { + source: $$[$0-4], + step: $$[$0-2], + guard: $$[$0] + }; +break; +case 165:this.$ = new yy.Switch($$[$0-3], $$[$0-1]); +break; +case 166:this.$ = new yy.Switch($$[$0-5], $$[$0-3], $$[$0-1]); +break; +case 167:this.$ = new yy.Switch(null, $$[$0-1]); +break; +case 168:this.$ = new yy.Switch(null, $$[$0-3], $$[$0-1]); +break; +case 169:this.$ = $$[$0]; +break; +case 170:this.$ = $$[$0-1].concat($$[$0]); +break; +case 171:this.$ = [[$$[$0-1], $$[$0]]]; +break; +case 172:this.$ = [[$$[$0-2], $$[$0-1]]]; +break; +case 173:this.$ = new yy.If($$[$0-1], $$[$0], { + type: $$[$0-2] + }); +break; +case 174:this.$ = $$[$0-4].addElse(new yy.If($$[$0-1], $$[$0], { + type: $$[$0-2] + })); +break; +case 175:this.$ = $$[$0]; +break; +case 176:this.$ = $$[$0-2].addElse($$[$0]); +break; +case 177:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), { + type: $$[$0-1], + statement: true + }); +break; +case 178:this.$ = new yy.If($$[$0], yy.Block.wrap([$$[$0-2]]), { + type: $$[$0-1], + statement: true + }); +break; +case 179:this.$ = new yy.Op($$[$0-1], $$[$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]); +break; +case 183:this.$ = new yy.Op('++', $$[$0]); +break; +case 184:this.$ = new yy.Op('--', $$[$0-1], null, true); +break; +case 185:this.$ = new yy.Op('++', $$[$0-1], null, true); +break; +case 186:this.$ = new yy.Existence($$[$0-1]); +break; +case 187:this.$ = new yy.Op('+', $$[$0-2], $$[$0]); +break; +case 188:this.$ = new yy.Op('-', $$[$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.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]); +break; +case 192:this.$ = new yy.Op($$[$0-1], $$[$0-2], $$[$0]); +break; +case 193: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 194:this.$ = new yy.Assign($$[$0-2], $$[$0], $$[$0-1]); +break; +case 195:this.$ = new yy.Assign($$[$0-4], $$[$0-1], $$[$0-3]); +break; +case 196: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:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[3]},{1:[2,2],6:[1,72]},{6:[1,73]},{1:[2,4],6:[2,4],26:[2,4],99:[2,4]},{4:75,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,74],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],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:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,8],6:[2,8],26:[2,8],99:[2,8],100:88,101:[1,63],103:[1,64],106:89,107:[1,66],108:67,123:[1,87]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],47:[2,12],52:[2,12],55:[2,12],60:91,64:[1,93],65:[1,94],66:[1,95],67:96,68:[1,97],70:[2,12],71:[1,98],75:[2,12],78:90,81:[1,92],82:[2,103],83:[2,12],88:[2,12],90:[2,12],99:[2,12],101:[2,12],102:[2,12],103:[2,12],107:[2,12],115:[2,12],123:[2,12],125:[2,12],126:[2,12],129:[2,12],130:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],47:[2,13],52:[2,13],55:[2,13],60:100,64:[1,93],65:[1,94],66:[1,95],67:96,68:[1,97],70:[2,13],71:[1,98],75:[2,13],78:99,81:[1,92],82:[2,103],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],47:[2,14],52:[2,14],55:[2,14],70:[2,14],75:[2,14],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],47:[2,15],52:[2,15],55:[2,15],70:[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],47:[2,16],52:[2,16],55:[2,16],70:[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],47:[2,17],52:[2,17],55:[2,17],70:[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],47:[2,18],52:[2,18],55:[2,18],70:[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],47:[2,19],52:[2,19],55:[2,19],70:[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],47:[2,20],52:[2,20],55:[2,20],70:[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],47:[2,21],52:[2,21],55:[2,21],70:[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],47:[2,22],52:[2,22],55:[2,22],70:[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],47:[2,23],52:[2,23],55:[2,23],70:[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,71],6:[2,71],25:[2,71],26:[2,71],38:[1,101],47:[2,71],52:[2,71],55:[2,71],64:[2,71],65:[2,71],66:[2,71],68:[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],47:[2,72],52:[2,72],55:[2,72],64:[2,72],65:[2,72],66:[2,72],68:[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],47:[2,73],52:[2,73],55:[2,73],64:[2,73],65:[2,73],66:[2,73],68:[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,74],6:[2,74],25:[2,74],26:[2,74],47:[2,74],52:[2,74],55:[2,74],64:[2,74],65:[2,74],66:[2,74],68:[2,74],70:[2,74],71:[2,74],75:[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],129:[2,74],130:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],47:[2,75],52:[2,75],55:[2,75],64:[2,75],65:[2,75],66:[2,75],68:[2,75],70:[2,75],71:[2,75],75:[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],129:[2,75],130:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75]},{1:[2,101],6:[2,101],25:[2,101],26:[2,101],47:[2,101],52:[2,101],55:[2,101],64:[2,101],65:[2,101],66:[2,101],68:[2,101],70:[2,101],71:[2,101],75:[2,101],79:102,81:[2,101],82:[1,103],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]},{27:107,28:[1,71],42:108,46:104,47:[2,53],52:[2,53],53:105,54:106,56:109,57:110,73:[1,68],86:[1,111],87:[1,112]},{5:113,25:[1,5]},{8:114,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:116,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:117,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{13:119,14:120,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:121,42:61,56:47,57:48,59:118,61:25,62:26,63:27,73:[1,68],80:[1,28],85:[1,56],86:[1,57],87:[1,55],98:[1,54]},{13:119,14:120,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:121,42:61,56:47,57:48,59:122,61:25,62:26,63:27,73:[1,68],80:[1,28],85:[1,56],86:[1,57],87:[1,55],98:[1,54]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],38:[2,68],47:[2,68],52:[2,68],55:[2,68],64:[2,68],65:[2,68],66:[2,68],68:[2,68],70:[2,68],71:[2,68],75:[2,68],77:[1,126],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],127:[1,123],128:[1,124],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[1,125]},{1:[2,175],6:[2,175],25:[2,175],26:[2,175],47:[2,175],52:[2,175],55:[2,175],70:[2,175],75:[2,175],83:[2,175],88:[2,175],90:[2,175],99:[2,175],101:[2,175],102:[2,175],103:[2,175],107:[2,175],115:[2,175],118:[1,127],123:[2,175],125:[2,175],126:[2,175],129:[2,175],130:[2,175],131:[2,175],132:[2,175],133:[2,175],134:[2,175]},{5:128,25:[1,5]},{5:129,25:[1,5]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],47:[2,143],52:[2,143],55:[2,143],70:[2,143],75:[2,143],83:[2,143],88:[2,143],90:[2,143],99:[2,143],101:[2,143],102:[2,143],103:[2,143],107:[2,143],115:[2,143],123:[2,143],125:[2,143],126:[2,143],129:[2,143],130:[2,143],131:[2,143],132:[2,143],133:[2,143],134:[2,143]},{5:130,25:[1,5]},{8:131,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,132],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,91],5:133,6:[2,91],13:119,14:120,25:[1,5],26:[2,91],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:121,42:61,47:[2,91],52:[2,91],55:[2,91],56:47,57:48,59:135,61:25,62:26,63:27,70:[2,91],73:[1,68],75:[2,91],77:[1,134],80:[1,28],83:[2,91],85:[1,56],86:[1,57],87:[1,55],88:[2,91],90:[2,91],98:[1,54],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]},{8:136,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,45],6:[2,45],8:137,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,45],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],99:[2,45],100:39,101:[2,45],103:[2,45],104:40,105:[1,65],106:41,107:[2,45],108:67,116:[1,42],121:37,122:[1,62],123:[2,45],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],52:[2,46],75:[2,46],99:[2,46],101:[2,46],103:[2,46],107:[2,46],123:[2,46]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],38:[2,69],47:[2,69],52:[2,69],55:[2,69],64:[2,69],65:[2,69],66:[2,69],68:[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],38:[2,70],47:[2,70],52:[2,70],55:[2,70],64:[2,70],65:[2,70],66:[2,70],68:[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,29],6:[2,29],25:[2,29],26:[2,29],47:[2,29],52:[2,29],55:[2,29],64:[2,29],65:[2,29],66:[2,29],68:[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],47:[2,30],52:[2,30],55:[2,30],64:[2,30],65:[2,30],66:[2,30],68:[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],47:[2,31],52:[2,31],55:[2,31],64:[2,31],65:[2,31],66:[2,31],68:[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],47:[2,32],52:[2,32],55:[2,32],64:[2,32],65:[2,32],66:[2,32],68:[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]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],47:[2,33],52:[2,33],55:[2,33],64:[2,33],65:[2,33],66:[2,33],68:[2,33],70:[2,33],71:[2,33],75:[2,33],81:[2,33],82:[2,33],83:[2,33],88:[2,33],90:[2,33],99:[2,33],101:[2,33],102:[2,33],103:[2,33],107:[2,33],115:[2,33],123:[2,33],125:[2,33],126:[2,33],129:[2,33],130:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33]},{4:138,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,139],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:140,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],84:142,85:[1,56],86:[1,57],87:[1,55],88:[1,141],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,107],6:[2,107],25:[2,107],26:[2,107],47:[2,107],52:[2,107],55:[2,107],64:[2,107],65:[2,107],66:[2,107],68:[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]},{1:[2,108],6:[2,108],25:[2,108],26:[2,108],27:146,28:[1,71],47:[2,108],52:[2,108],55:[2,108],64:[2,108],65:[2,108],66:[2,108],68:[2,108],70:[2,108],71:[2,108],75:[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],129:[2,108],130:[2,108],131:[2,108],132:[2,108],133:[2,108],134:[2,108]},{25:[2,49]},{25:[2,50]},{1:[2,64],6:[2,64],25:[2,64],26:[2,64],38:[2,64],47:[2,64],52:[2,64],55:[2,64],64:[2,64],65:[2,64],66:[2,64],68:[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]},{1:[2,67],6:[2,67],25:[2,67],26:[2,67],38:[2,67],47:[2,67],52:[2,67],55:[2,67],64:[2,67],65:[2,67],66:[2,67],68:[2,67],70:[2,67],71:[2,67],75:[2,67],77:[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],127:[2,67],128:[2,67],129:[2,67],130:[2,67],131:[2,67],132:[2,67],133:[2,67],134:[2,67],135:[2,67]},{8:147,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:148,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:149,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{5:150,8:151,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{27:156,28:[1,71],56:157,57:158,62:152,73:[1,68],87:[1,55],110:153,111:[1,154],112:155},{109:159,113:[1,160],114:[1,161]},{6:[2,86],11:165,25:[2,86],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],39:163,40:164,42:168,44:[1,46],52:[2,86],74:162,75:[2,86],86:[1,111]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],41:[2,27],47:[2,27],52:[2,27],55:[2,27],64:[2,27],65:[2,27],66:[2,27],68:[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],41:[2,28],47:[2,28],52:[2,28],55:[2,28],64:[2,28],65:[2,28],66:[2,28],68:[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],38:[2,26],41:[2,26],47:[2,26],52:[2,26],55:[2,26],64:[2,26],65:[2,26],66:[2,26],68:[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:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],99:[2,6],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],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],47:[2,24],52:[2,24],55:[2,24],70:[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,72],26:[1,170]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],47:[2,186],52:[2,186],55:[2,186],70:[2,186],75:[2,186],83:[2,186],88:[2,186],90:[2,186],99:[2,186],101:[2,186],102:[2,186],103:[2,186],107:[2,186],115:[2,186],123:[2,186],125:[2,186],126:[2,186],129:[2,186],130:[2,186],131:[2,186],132:[2,186],133:[2,186],134:[2,186]},{8:171,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:172,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:173,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:174,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:175,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:176,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:177,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:178,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],47:[2,142],52:[2,142],55:[2,142],70:[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,147],6:[2,147],25:[2,147],26:[2,147],47:[2,147],52:[2,147],55:[2,147],70:[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]},{8:179,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],47:[2,141],52:[2,141],55:[2,141],70:[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]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],47:[2,146],52:[2,146],55:[2,146],70:[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]},{79:180,82:[1,103]},{1:[2,65],6:[2,65],25:[2,65],26:[2,65],38:[2,65],47:[2,65],52:[2,65],55:[2,65],64:[2,65],65:[2,65],66:[2,65],68:[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]},{82:[2,104]},{27:181,28:[1,71]},{27:182,28:[1,71]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],27:183,28:[1,71],38:[2,79],47:[2,79],52:[2,79],55:[2,79],64:[2,79],65:[2,79],66:[2,79],68:[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]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],38:[2,80],47:[2,80],52:[2,80],55:[2,80],64:[2,80],65:[2,80],66:[2,80],68:[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]},{8:185,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],55:[1,189],56:47,57:48,59:36,61:25,62:26,63:27,69:184,72:186,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],89:187,90:[1,188],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{67:190,68:[1,97],71:[1,98]},{79:191,82:[1,103]},{1:[2,66],6:[2,66],25:[2,66],26:[2,66],38:[2,66],47:[2,66],52:[2,66],55:[2,66],64:[2,66],65:[2,66],66:[2,66],68:[2,66],70:[2,66],71:[2,66],75:[2,66],77:[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],127:[2,66],128:[2,66],129:[2,66],130:[2,66],131:[2,66],132:[2,66],133:[2,66],134:[2,66],135:[2,66]},{6:[1,193],8:192,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,194],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],47:[2,102],52:[2,102],55:[2,102],64:[2,102],65:[2,102],66:[2,102],68:[2,102],70:[2,102],71:[2,102],75:[2,102],81:[2,102],82:[2,102],83:[2,102],88:[2,102],90:[2,102],99:[2,102],101:[2,102],102:[2,102],103:[2,102],107:[2,102],115:[2,102],123:[2,102],125:[2,102],126:[2,102],129:[2,102],130:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102]},{8:197,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],83:[1,195],84:196,85:[1,56],86:[1,57],87:[1,55],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{47:[1,198],52:[1,199]},{47:[2,54],52:[2,54]},{38:[1,201],47:[2,56],52:[2,56],55:[1,200]},{38:[2,59],47:[2,59],52:[2,59],55:[2,59]},{38:[2,60],47:[2,60],52:[2,60],55:[2,60]},{38:[2,61],47:[2,61],52:[2,61],55:[2,61]},{38:[2,62],47:[2,62],52:[2,62],55:[2,62]},{27:146,28:[1,71]},{8:197,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],84:142,85:[1,56],86:[1,57],87:[1,55],88:[1,141],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],47:[2,48],52:[2,48],55:[2,48],70:[2,48],75:[2,48],83:[2,48],88:[2,48],90:[2,48],99:[2,48],101:[2,48],102:[2,48],103:[2,48],107:[2,48],115:[2,48],123:[2,48],125:[2,48],126:[2,48],129:[2,48],130:[2,48],131:[2,48],132:[2,48],133:[2,48],134:[2,48]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],47:[2,179],52:[2,179],55:[2,179],70:[2,179],75:[2,179],83:[2,179],88:[2,179],90:[2,179],99:[2,179],100:85,101:[2,179],102:[2,179],103:[2,179],106:86,107:[2,179],108:67,115:[2,179],123:[2,179],125:[2,179],126:[2,179],129:[1,76],130:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179]},{100:88,101:[1,63],103:[1,64],106:89,107:[1,66],108:67,123:[1,87]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],47:[2,180],52:[2,180],55:[2,180],70:[2,180],75:[2,180],83:[2,180],88:[2,180],90:[2,180],99:[2,180],100:85,101:[2,180],102:[2,180],103:[2,180],106:86,107:[2,180],108:67,115:[2,180],123:[2,180],125:[2,180],126:[2,180],129:[1,76],130:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],47:[2,181],52:[2,181],55:[2,181],70:[2,181],75:[2,181],83:[2,181],88:[2,181],90:[2,181],99:[2,181],100:85,101:[2,181],102:[2,181],103:[2,181],106:86,107:[2,181],108:67,115:[2,181],123:[2,181],125:[2,181],126:[2,181],129:[1,76],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],47:[2,182],52:[2,182],55:[2,182],64:[2,68],65:[2,68],66:[2,68],68:[2,68],70:[2,182],71:[2,68],75:[2,182],81:[2,68],82:[2,68],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]},{60:91,64:[1,93],65:[1,94],66:[1,95],67:96,68:[1,97],71:[1,98],78:90,81:[1,92],82:[2,103]},{60:100,64:[1,93],65:[1,94],66:[1,95],67:96,68:[1,97],71:[1,98],78:99,81:[1,92],82:[2,103]},{64:[2,71],65:[2,71],66:[2,71],68:[2,71],71:[2,71],81:[2,71],82:[2,71]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],47:[2,183],52:[2,183],55:[2,183],64:[2,68],65:[2,68],66:[2,68],68:[2,68],70:[2,183],71:[2,68],75:[2,183],81:[2,68],82:[2,68],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]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],47:[2,184],52:[2,184],55:[2,184],70:[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]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],47:[2,185],52:[2,185],55:[2,185],70:[2,185],75:[2,185],83:[2,185],88:[2,185],90:[2,185],99:[2,185],101:[2,185],102:[2,185],103:[2,185],107:[2,185],115:[2,185],123:[2,185],125:[2,185],126:[2,185],129:[2,185],130:[2,185],131:[2,185],132:[2,185],133:[2,185],134:[2,185]},{8:202,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,203],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:204,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],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,128],6:[2,128],25:[2,128],26:[2,128],47:[2,128],52:[2,128],55:[2,128],70:[2,128],75:[2,128],83:[2,128],88:[2,128],90:[2,128],94:207,95:[1,208],96:[1,209],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]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],47:[2,140],52:[2,140],55:[2,140],70:[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,148],6:[2,148],25:[2,148],26:[2,148],47:[2,148],52:[2,148],55:[2,148],70:[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]},{25:[1,210],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{117:211,119:212,120:[1,213]},{1:[2,92],6:[2,92],25:[2,92],26:[2,92],47:[2,92],52:[2,92],55:[2,92],70:[2,92],75:[2,92],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]},{8:214,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,95],5:215,6:[2,95],25:[1,5],26:[2,95],47:[2,95],52:[2,95],55:[2,95],64:[2,68],65:[2,68],66:[2,68],68:[2,68],70:[2,95],71:[2,68],75:[2,95],77:[1,216],81:[2,68],82:[2,68],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]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],47:[2,133],52:[2,133],55:[2,133],70:[2,133],75:[2,133],83:[2,133],88:[2,133],90:[2,133],99:[2,133],100:85,101:[2,133],102:[2,133],103:[2,133],106:86,107:[2,133],108:67,115:[2,133],123:[2,133],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,44],6:[2,44],26:[2,44],99:[2,44],100:85,101:[2,44],103:[2,44],106:86,107:[2,44],108:67,123:[2,44],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[1,72],99:[1,217]},{4:218,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,124],25:[2,124],52:[2,124],55:[1,220],88:[2,124],89:219,90:[1,188],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],38:[2,110],47:[2,110],52:[2,110],55:[2,110],64:[2,110],65:[2,110],66:[2,110],68:[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]},{6:[2,51],25:[2,51],51:221,52:[1,222],88:[2,51]},{6:[2,119],25:[2,119],26:[2,119],52:[2,119],83:[2,119],88:[2,119]},{8:197,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],84:223,85:[1,56],86:[1,57],87:[1,55],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,125],25:[2,125],26:[2,125],52:[2,125],83:[2,125],88:[2,125]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],38:[2,109],41:[2,109],47:[2,109],52:[2,109],55:[2,109],64:[2,109],65:[2,109],66:[2,109],68:[2,109],70:[2,109],71:[2,109],75:[2,109],77:[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],115:[2,109],123:[2,109],125:[2,109],126:[2,109],127:[2,109],128:[2,109],129:[2,109],130:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109]},{5:224,25:[1,5],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],47:[2,136],52:[2,136],55:[2,136],70:[2,136],75:[2,136],83:[2,136],88:[2,136],90:[2,136],99:[2,136],100:85,101:[1,63],102:[1,225],103:[1,64],106:86,107:[1,66],108:67,115:[2,136],123:[2,136],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],47:[2,138],52:[2,138],55:[2,138],70:[2,138],75:[2,138],83:[2,138],88:[2,138],90:[2,138],99:[2,138],100:85,101:[1,63],102:[1,226],103:[1,64],106:86,107:[1,66],108:67,115:[2,138],123:[2,138],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],47:[2,144],52:[2,144],55:[2,144],70:[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]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],47:[2,145],52:[2,145],55:[2,145],70:[2,145],75:[2,145],83:[2,145],88:[2,145],90:[2,145],99:[2,145],100:85,101:[1,63],102:[2,145],103:[1,64],106:86,107:[1,66],108:67,115:[2,145],123:[2,145],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],47:[2,149],52:[2,149],55:[2,149],70:[2,149],75:[2,149],83:[2,149],88:[2,149],90:[2,149],99:[2,149],101:[2,149],102:[2,149],103:[2,149],107:[2,149],115:[2,149],123:[2,149],125:[2,149],126:[2,149],129:[2,149],130:[2,149],131:[2,149],132:[2,149],133:[2,149],134:[2,149]},{113:[2,151],114:[2,151]},{27:156,28:[1,71],56:157,57:158,73:[1,68],87:[1,112],110:227,112:155},{52:[1,228],113:[2,156],114:[2,156]},{52:[2,153],113:[2,153],114:[2,153]},{52:[2,154],113:[2,154],114:[2,154]},{52:[2,155],113:[2,155],114:[2,155]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],47:[2,150],52:[2,150],55:[2,150],70:[2,150],75:[2,150],83:[2,150],88:[2,150],90:[2,150],99:[2,150],101:[2,150],102:[2,150],103:[2,150],107:[2,150],115:[2,150],123:[2,150],125:[2,150],126:[2,150],129:[2,150],130:[2,150],131:[2,150],132:[2,150],133:[2,150],134:[2,150]},{8:229,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:230,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,51],25:[2,51],51:231,52:[1,232],75:[2,51]},{6:[2,87],25:[2,87],26:[2,87],52:[2,87],75:[2,87]},{6:[2,37],25:[2,37],26:[2,37],41:[1,233],52:[2,37],75:[2,37]},{6:[2,40],25:[2,40],26:[2,40],52:[2,40],75:[2,40]},{6:[2,41],25:[2,41],26:[2,41],41:[2,41],52:[2,41],75:[2,41]},{6:[2,42],25:[2,42],26:[2,42],41:[2,42],52:[2,42],75:[2,42]},{6:[2,43],25:[2,43],26:[2,43],41:[2,43],52:[2,43],75:[2,43]},{1:[2,5],6:[2,5],26:[2,5],99:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],47:[2,25],52:[2,25],55:[2,25],70:[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,187],6:[2,187],25:[2,187],26:[2,187],47:[2,187],52:[2,187],55:[2,187],70:[2,187],75:[2,187],83:[2,187],88:[2,187],90:[2,187],99:[2,187],100:85,101:[2,187],102:[2,187],103:[2,187],106:86,107:[2,187],108:67,115:[2,187],123:[2,187],125:[2,187],126:[2,187],129:[1,76],130:[1,79],131:[2,187],132:[2,187],133:[2,187],134:[2,187]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],47:[2,188],52:[2,188],55:[2,188],70:[2,188],75:[2,188],83:[2,188],88:[2,188],90:[2,188],99:[2,188],100:85,101:[2,188],102:[2,188],103:[2,188],106:86,107:[2,188],108:67,115:[2,188],123:[2,188],125:[2,188],126:[2,188],129:[1,76],130:[1,79],131:[2,188],132:[2,188],133:[2,188],134:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],47:[2,189],52:[2,189],55:[2,189],70:[2,189],75:[2,189],83:[2,189],88:[2,189],90:[2,189],99:[2,189],100:85,101:[2,189],102:[2,189],103:[2,189],106:86,107:[2,189],108:67,115:[2,189],123:[2,189],125:[2,189],126:[2,189],129:[1,76],130:[2,189],131:[2,189],132:[2,189],133:[2,189],134:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],47:[2,190],52:[2,190],55:[2,190],70:[2,190],75:[2,190],83:[2,190],88:[2,190],90:[2,190],99:[2,190],100:85,101:[2,190],102:[2,190],103:[2,190],106:86,107:[2,190],108:67,115:[2,190],123:[2,190],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[2,190],132:[2,190],133:[2,190],134:[2,190]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],47:[2,191],52:[2,191],55:[2,191],70:[2,191],75:[2,191],83:[2,191],88:[2,191],90:[2,191],99:[2,191],100:85,101:[2,191],102:[2,191],103:[2,191],106:86,107:[2,191],108:67,115:[2,191],123:[2,191],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[2,191],133:[2,191],134:[1,83]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],47:[2,192],52:[2,192],55:[2,192],70:[2,192],75:[2,192],83:[2,192],88:[2,192],90:[2,192],99:[2,192],100:85,101:[2,192],102:[2,192],103:[2,192],106:86,107:[2,192],108:67,115:[2,192],123:[2,192],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[2,192],134:[1,83]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],47:[2,193],52:[2,193],55:[2,193],70:[2,193],75:[2,193],83:[2,193],88:[2,193],90:[2,193],99:[2,193],100:85,101:[2,193],102:[2,193],103:[2,193],106:86,107:[2,193],108:67,115:[2,193],123:[2,193],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[2,193],133:[2,193],134:[2,193]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],47:[2,178],52:[2,178],55:[2,178],70:[2,178],75:[2,178],83:[2,178],88:[2,178],90:[2,178],99:[2,178],100:85,101:[1,63],102:[2,178],103:[1,64],106:86,107:[1,66],108:67,115:[2,178],123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,177],6:[2,177],25:[2,177],26:[2,177],47:[2,177],52:[2,177],55:[2,177],70:[2,177],75:[2,177],83:[2,177],88:[2,177],90:[2,177],99:[2,177],100:85,101:[1,63],102:[2,177],103:[1,64],106:86,107:[1,66],108:67,115:[2,177],123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,99],6:[2,99],25:[2,99],26:[2,99],47:[2,99],52:[2,99],55:[2,99],64:[2,99],65:[2,99],66:[2,99],68:[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,76],6:[2,76],25:[2,76],26:[2,76],38:[2,76],47:[2,76],52:[2,76],55:[2,76],64:[2,76],65:[2,76],66:[2,76],68:[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]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],38:[2,77],47:[2,77],52:[2,77],55:[2,77],64:[2,77],65:[2,77],66:[2,77],68:[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],38:[2,78],47:[2,78],52:[2,78],55:[2,78],64:[2,78],65:[2,78],66:[2,78],68:[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]},{70:[1,234]},{55:[1,189],70:[2,83],89:235,90:[1,188],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{70:[2,84]},{8:236,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,70:[2,118],73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{12:[2,112],28:[2,112],30:[2,112],31:[2,112],33:[2,112],34:[2,112],35:[2,112],36:[2,112],43:[2,112],44:[2,112],45:[2,112],49:[2,112],50:[2,112],70:[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]},{12:[2,113],28:[2,113],30:[2,113],31:[2,113],33:[2,113],34:[2,113],35:[2,113],36:[2,113],43:[2,113],44:[2,113],45:[2,113],49:[2,113],50:[2,113],70:[2,113],73:[2,113],76:[2,113],80:[2,113],85:[2,113],86:[2,113],87:[2,113],93:[2,113],97:[2,113],98:[2,113],101:[2,113],103:[2,113],105:[2,113],107:[2,113],116:[2,113],122:[2,113],124:[2,113],125:[2,113],126:[2,113],127:[2,113],128:[2,113]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],38:[2,82],47:[2,82],52:[2,82],55:[2,82],64:[2,82],65:[2,82],66:[2,82],68:[2,82],70:[2,82],71:[2,82],75:[2,82],77:[2,82],81:[2,82],82:[2,82],83:[2,82],88:[2,82],90:[2,82],99:[2,82],101:[2,82],102:[2,82],103:[2,82],107:[2,82],115:[2,82],123:[2,82],125:[2,82],126:[2,82],127:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],47:[2,100],52:[2,100],55:[2,100],64:[2,100],65:[2,100],66:[2,100],68:[2,100],70:[2,100],71:[2,100],75:[2,100],81:[2,100],82:[2,100],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]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],47:[2,34],52:[2,34],55:[2,34],70:[2,34],75:[2,34],83:[2,34],88:[2,34],90:[2,34],99:[2,34],100:85,101:[2,34],102:[2,34],103:[2,34],106:86,107:[2,34],108:67,115:[2,34],123:[2,34],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{8:237,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:238,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],47:[2,105],52:[2,105],55:[2,105],64:[2,105],65:[2,105],66:[2,105],68:[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]},{6:[2,51],25:[2,51],51:239,52:[1,222],83:[2,51]},{6:[2,124],25:[2,124],26:[2,124],52:[2,124],55:[1,240],83:[2,124],88:[2,124],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{48:241,49:[1,58],50:[1,59]},{27:107,28:[1,71],42:108,53:242,54:106,56:109,57:110,73:[1,68],86:[1,111],87:[1,112]},{47:[2,57],52:[2,57]},{8:243,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],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],47:[2,194],52:[2,194],55:[2,194],70:[2,194],75:[2,194],83:[2,194],88:[2,194],90:[2,194],99:[2,194],100:85,101:[2,194],102:[2,194],103:[2,194],106:86,107:[2,194],108:67,115:[2,194],123:[2,194],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{8:244,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],47:[2,196],52:[2,196],55:[2,196],70:[2,196],75:[2,196],83:[2,196],88:[2,196],90:[2,196],99:[2,196],100:85,101:[2,196],102:[2,196],103:[2,196],106:86,107:[2,196],108:67,115:[2,196],123:[2,196],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,176],6:[2,176],25:[2,176],26:[2,176],47:[2,176],52:[2,176],55:[2,176],70:[2,176],75:[2,176],83:[2,176],88:[2,176],90:[2,176],99:[2,176],101:[2,176],102:[2,176],103:[2,176],107:[2,176],115:[2,176],123:[2,176],125:[2,176],126:[2,176],129:[2,176],130:[2,176],131:[2,176],132:[2,176],133:[2,176],134:[2,176]},{8:245,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,129],6:[2,129],25:[2,129],26:[2,129],47:[2,129],52:[2,129],55:[2,129],70:[2,129],75:[2,129],83:[2,129],88:[2,129],90:[2,129],95:[1,246],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]},{5:247,25:[1,5]},{27:248,28:[1,71]},{117:249,119:212,120:[1,213]},{26:[1,250],118:[1,251],119:252,120:[1,213]},{26:[2,169],118:[2,169],120:[2,169]},{8:254,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],92:253,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,93],5:255,6:[2,93],25:[1,5],26:[2,93],47:[2,93],52:[2,93],55:[2,93],70:[2,93],75:[2,93],83:[2,93],88:[2,93],90:[2,93],99:[2,93],100:85,101:[1,63],102:[2,93],103:[1,64],106:86,107:[1,66],108:67,115:[2,93],123:[2,93],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],47:[2,96],52:[2,96],55:[2,96],70:[2,96],75:[2,96],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]},{8:256,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],47:[2,134],52:[2,134],55:[2,134],64:[2,134],65:[2,134],66:[2,134],68:[2,134],70:[2,134],71:[2,134],75:[2,134],81:[2,134],82:[2,134],83:[2,134],88:[2,134],90:[2,134],99:[2,134],101:[2,134],102:[2,134],103:[2,134],107:[2,134],115:[2,134],123:[2,134],125:[2,134],126:[2,134],129:[2,134],130:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134]},{6:[1,72],26:[1,257]},{8:258,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,63],12:[2,113],25:[2,63],28:[2,113],30:[2,113],31:[2,113],33:[2,113],34:[2,113],35:[2,113],36:[2,113],43:[2,113],44:[2,113],45:[2,113],49:[2,113],50:[2,113],52:[2,63],73:[2,113],76:[2,113],80:[2,113],85:[2,113],86:[2,113],87:[2,113],88:[2,63],93:[2,113],97:[2,113],98:[2,113],101:[2,113],103:[2,113],105:[2,113],107:[2,113],116:[2,113],122:[2,113],124:[2,113],125:[2,113],126:[2,113],127:[2,113],128:[2,113]},{6:[1,260],25:[1,261],88:[1,259]},{6:[2,52],8:197,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,52],26:[2,52],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],83:[2,52],85:[1,56],86:[1,57],87:[1,55],88:[2,52],91:262,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,51],25:[2,51],26:[2,51],51:263,52:[1,222]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],47:[2,173],52:[2,173],55:[2,173],70:[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:[2,173],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]},{8:264,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:265,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{113:[2,152],114:[2,152]},{27:156,28:[1,71],56:157,57:158,73:[1,68],87:[1,112],112:266},{1:[2,158],6:[2,158],25:[2,158],26:[2,158],47:[2,158],52:[2,158],55:[2,158],70:[2,158],75:[2,158],83:[2,158],88:[2,158],90:[2,158],99:[2,158],100:85,101:[2,158],102:[1,267],103:[2,158],106:86,107:[2,158],108:67,115:[1,268],123:[2,158],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,159],6:[2,159],25:[2,159],26:[2,159],47:[2,159],52:[2,159],55:[2,159],70:[2,159],75:[2,159],83:[2,159],88:[2,159],90:[2,159],99:[2,159],100:85,101:[2,159],102:[1,269],103:[2,159],106:86,107:[2,159],108:67,115:[2,159],123:[2,159],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[1,271],25:[1,272],75:[1,270]},{6:[2,52],11:165,25:[2,52],26:[2,52],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],39:273,40:164,42:168,44:[1,46],75:[2,52],86:[1,111]},{8:274,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,275],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],38:[2,81],47:[2,81],52:[2,81],55:[2,81],64:[2,81],65:[2,81],66:[2,81],68:[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]},{8:276,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,70:[2,116],73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{70:[2,117],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],47:[2,35],52:[2,35],55:[2,35],70:[2,35],75:[2,35],83:[2,35],88:[2,35],90:[2,35],99:[2,35],100:85,101:[2,35],102:[2,35],103:[2,35],106:86,107:[2,35],108:67,115:[2,35],123:[2,35],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{26:[1,277],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[1,260],25:[1,261],83:[1,278]},{6:[2,63],25:[2,63],26:[2,63],52:[2,63],83:[2,63],88:[2,63]},{5:279,25:[1,5]},{47:[2,55],52:[2,55]},{47:[2,58],52:[2,58],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{26:[1,280],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{5:281,25:[1,5],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{5:282,25:[1,5]},{1:[2,130],6:[2,130],25:[2,130],26:[2,130],47:[2,130],52:[2,130],55:[2,130],70:[2,130],75:[2,130],83:[2,130],88:[2,130],90:[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]},{5:283,25:[1,5]},{26:[1,284],118:[1,285],119:252,120:[1,213]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],47:[2,167],52:[2,167],55:[2,167],70:[2,167],75:[2,167],83:[2,167],88:[2,167],90:[2,167],99:[2,167],101:[2,167],102:[2,167],103:[2,167],107:[2,167],115:[2,167],123:[2,167],125:[2,167],126:[2,167],129:[2,167],130:[2,167],131:[2,167],132:[2,167],133:[2,167],134:[2,167]},{5:286,25:[1,5]},{26:[2,170],118:[2,170],120:[2,170]},{5:287,25:[1,5],52:[1,288]},{25:[2,126],52:[2,126],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,94],6:[2,94],25:[2,94],26:[2,94],47:[2,94],52:[2,94],55:[2,94],70:[2,94],75:[2,94],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,97],5:289,6:[2,97],25:[1,5],26:[2,97],47:[2,97],52:[2,97],55:[2,97],70:[2,97],75:[2,97],83:[2,97],88:[2,97],90:[2,97],99:[2,97],100:85,101:[1,63],102:[2,97],103:[1,64],106:86,107:[1,66],108:67,115:[2,97],123:[2,97],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{99:[1,290]},{88:[1,291],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],38:[2,111],47:[2,111],52:[2,111],55:[2,111],64:[2,111],65:[2,111],66:[2,111],68:[2,111],70:[2,111],71:[2,111],75:[2,111],81:[2,111],82:[2,111],83:[2,111],88:[2,111],90:[2,111],99:[2,111],101:[2,111],102:[2,111],103:[2,111],107:[2,111],113:[2,111],114:[2,111],115:[2,111],123:[2,111],125:[2,111],126:[2,111],129:[2,111],130:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111]},{8:197,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],91:292,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:197,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,144],27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,58:145,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],84:293,85:[1,56],86:[1,57],87:[1,55],91:143,93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{6:[2,120],25:[2,120],26:[2,120],52:[2,120],83:[2,120],88:[2,120]},{6:[1,260],25:[1,261],26:[1,294]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],47:[2,137],52:[2,137],55:[2,137],70:[2,137],75:[2,137],83:[2,137],88:[2,137],90:[2,137],99:[2,137],100:85,101:[1,63],102:[2,137],103:[1,64],106:86,107:[1,66],108:67,115:[2,137],123:[2,137],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],47:[2,139],52:[2,139],55:[2,139],70:[2,139],75:[2,139],83:[2,139],88:[2,139],90:[2,139],99:[2,139],100:85,101:[1,63],102:[2,139],103:[1,64],106:86,107:[1,66],108:67,115:[2,139],123:[2,139],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{113:[2,157],114:[2,157]},{8:295,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:296,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:297,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],38:[2,85],47:[2,85],52:[2,85],55:[2,85],64:[2,85],65:[2,85],66:[2,85],68:[2,85],70:[2,85],71:[2,85],75:[2,85],81:[2,85],82:[2,85],83:[2,85],88:[2,85],90:[2,85],99:[2,85],101:[2,85],102:[2,85],103:[2,85],107:[2,85],113:[2,85],114:[2,85],115:[2,85],123:[2,85],125:[2,85],126:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85]},{11:165,27:166,28:[1,71],29:167,30:[1,69],31:[1,70],39:298,40:164,42:168,44:[1,46],86:[1,111]},{6:[2,86],11:165,25:[2,86],26:[2,86],27:166,28:[1,71],29:167,30:[1,69],31:[1,70],39:163,40:164,42:168,44:[1,46],52:[2,86],74:299,86:[1,111]},{6:[2,88],25:[2,88],26:[2,88],52:[2,88],75:[2,88]},{6:[2,38],25:[2,38],26:[2,38],52:[2,38],75:[2,38],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{8:300,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{70:[2,115],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],47:[2,36],52:[2,36],55:[2,36],70:[2,36],75:[2,36],83:[2,36],88:[2,36],90:[2,36],99:[2,36],101:[2,36],102:[2,36],103:[2,36],107:[2,36],115:[2,36],123:[2,36],125:[2,36],126:[2,36],129:[2,36],130:[2,36],131:[2,36],132:[2,36],133:[2,36],134:[2,36]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],47:[2,106],52:[2,106],55:[2,106],64:[2,106],65:[2,106],66:[2,106],68:[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,47],6:[2,47],25:[2,47],26:[2,47],47:[2,47],52:[2,47],55:[2,47],70:[2,47],75:[2,47],83:[2,47],88:[2,47],90:[2,47],99:[2,47],101:[2,47],102:[2,47],103:[2,47],107:[2,47],115:[2,47],123:[2,47],125:[2,47],126:[2,47],129:[2,47],130:[2,47],131:[2,47],132:[2,47],133:[2,47],134:[2,47]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],47:[2,195],52:[2,195],55:[2,195],70:[2,195],75:[2,195],83:[2,195],88:[2,195],90:[2,195],99:[2,195],101:[2,195],102:[2,195],103:[2,195],107:[2,195],115:[2,195],123:[2,195],125:[2,195],126:[2,195],129:[2,195],130:[2,195],131:[2,195],132:[2,195],133:[2,195],134:[2,195]},{1:[2,174],6:[2,174],25:[2,174],26:[2,174],47:[2,174],52:[2,174],55:[2,174],70:[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],118:[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]},{1:[2,131],6:[2,131],25:[2,131],26:[2,131],47:[2,131],52:[2,131],55:[2,131],70:[2,131],75:[2,131],83:[2,131],88:[2,131],90:[2,131],99:[2,131],101:[2,131],102:[2,131],103:[2,131],107:[2,131],115:[2,131],123:[2,131],125:[2,131],126:[2,131],129:[2,131],130:[2,131],131:[2,131],132:[2,131],133:[2,131],134:[2,131]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],47:[2,132],52:[2,132],55:[2,132],70:[2,132],75:[2,132],83:[2,132],88:[2,132],90:[2,132],95:[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]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],47:[2,165],52:[2,165],55:[2,165],70:[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:301,25:[1,5]},{26:[1,302]},{6:[1,303],26:[2,171],118:[2,171],120:[2,171]},{8:304,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],47:[2,98],52:[2,98],55:[2,98],70:[2,98],75:[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,135],6:[2,135],25:[2,135],26:[2,135],47:[2,135],52:[2,135],55:[2,135],64:[2,135],65:[2,135],66:[2,135],68:[2,135],70:[2,135],71:[2,135],75:[2,135],81:[2,135],82:[2,135],83:[2,135],88:[2,135],90:[2,135],99:[2,135],101:[2,135],102:[2,135],103:[2,135],107:[2,135],115:[2,135],123:[2,135],125:[2,135],126:[2,135],129:[2,135],130:[2,135],131:[2,135],132:[2,135],133:[2,135],134:[2,135]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],47:[2,114],52:[2,114],55:[2,114],64:[2,114],65:[2,114],66:[2,114],68:[2,114],70:[2,114],71:[2,114],75:[2,114],81:[2,114],82:[2,114],83:[2,114],88:[2,114],90:[2,114],99:[2,114],101:[2,114],102:[2,114],103:[2,114],107:[2,114],115:[2,114],123:[2,114],125:[2,114],126:[2,114],129:[2,114],130:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114]},{6:[2,121],25:[2,121],26:[2,121],52:[2,121],83:[2,121],88:[2,121]},{6:[2,51],25:[2,51],26:[2,51],51:305,52:[1,222]},{6:[2,122],25:[2,122],26:[2,122],52:[2,122],83:[2,122],88:[2,122]},{1:[2,160],6:[2,160],25:[2,160],26:[2,160],47:[2,160],52:[2,160],55:[2,160],70:[2,160],75:[2,160],83:[2,160],88:[2,160],90:[2,160],99:[2,160],100:85,101:[2,160],102:[2,160],103:[2,160],106:86,107:[2,160],108:67,115:[1,306],123:[2,160],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,162],6:[2,162],25:[2,162],26:[2,162],47:[2,162],52:[2,162],55:[2,162],70:[2,162],75:[2,162],83:[2,162],88:[2,162],90:[2,162],99:[2,162],100:85,101:[2,162],102:[1,307],103:[2,162],106:86,107:[2,162],108:67,115:[2,162],123:[2,162],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,161],6:[2,161],25:[2,161],26:[2,161],47:[2,161],52:[2,161],55:[2,161],70:[2,161],75:[2,161],83:[2,161],88:[2,161],90:[2,161],99:[2,161],100:85,101:[2,161],102:[2,161],103:[2,161],106:86,107:[2,161],108:67,115:[2,161],123:[2,161],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[2,89],25:[2,89],26:[2,89],52:[2,89],75:[2,89]},{6:[2,51],25:[2,51],26:[2,51],51:308,52:[1,232]},{26:[1,309],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{26:[1,310]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],47:[2,168],52:[2,168],55:[2,168],70:[2,168],75:[2,168],83:[2,168],88:[2,168],90:[2,168],99:[2,168],101:[2,168],102:[2,168],103:[2,168],107:[2,168],115:[2,168],123:[2,168],125:[2,168],126:[2,168],129:[2,168],130:[2,168],131:[2,168],132:[2,168],133:[2,168],134:[2,168]},{26:[2,172],118:[2,172],120:[2,172]},{25:[2,127],52:[2,127],100:85,101:[1,63],103:[1,64],106:86,107:[1,66],108:67,123:[1,84],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[1,260],25:[1,261],26:[1,311]},{8:312,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],124:[1,31],125:[1,32],126:[1,33],127:[1,34],128:[1,35]},{8:313,9:115,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:60,28:[1,71],29:49,30:[1,69],31:[1,70],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:23,42:61,43:[1,45],44:[1,46],45:[1,29],48:30,49:[1,58],50:[1,59],56:47,57:48,59:36,61:25,62:26,63:27,73:[1,68],76:[1,43],80:[1,28],85:[1,56],86:[1,57],87:[1,55],93:[1,38],97:[1,44],98:[1,54],100:39,101:[1,63],103:[1,64],104:40,105:[1,65],106:41,107:[1,66],108:67,116:[1,42],121:37,122:[1,62],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,39],25:[2,39],26:[2,39],52:[2,39],75:[2,39]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],47:[2,166],52:[2,166],55:[2,166],70:[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]},{6:[2,123],25:[2,123],26:[2,123],52:[2,123],83:[2,123],88:[2,123]},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],47:[2,163],52:[2,163],55:[2,163],70:[2,163],75:[2,163],83:[2,163],88:[2,163],90:[2,163],99:[2,163],100:85,101:[2,163],102:[2,163],103:[2,163],106:86,107:[2,163],108:67,115:[2,163],123:[2,163],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],47:[2,164],52:[2,164],55:[2,164],70:[2,164],75:[2,164],83:[2,164],88:[2,164],90:[2,164],99:[2,164],100:85,101:[2,164],102:[2,164],103:[2,164],106:86,107:[2,164],108:67,115:[2,164],123:[2,164],125:[1,78],126:[1,77],129:[1,76],130:[1,79],131:[1,80],132:[1,81],133:[1,82],134:[1,83]},{6:[2,90],25:[2,90],26:[2,90],52:[2,90],75:[2,90]}], +defaultActions: {58:[2,49],59:[2,50],73:[2,3],92:[2,104],186:[2,84]}, +parseError: function parseError(str, hash) { + throw new Error(str); +}, +parse: function parse(input) { + var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; + 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; + 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) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol == null) + symbol = lex(); + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + if (!recovering) { + 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(", ") + ", got '" + this.terminals_[symbol] + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"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}); + } + } + 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: + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); + symbol = null; + if (!preErrorSymbol) { + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) + recovering--; + } else { + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + 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; + } + 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]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + 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/lexer', 'ace/mode/coffee/helpers'], function(require, exports, module) { +// Generated by CoffeeScript 1.2.1-pre + + var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, 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, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, compact, del, ends, extend, flatten, last, merge, multident, starts, unfoldSoak, utility, _ref, _ref1, + __hasProp = {}.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; }, + __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Scope = require('./scope').Scope; + + _ref = require('./lexer'), RESERVED = _ref.RESERVED, STRICT_PROSCRIBED = _ref.STRICT_PROSCRIBED; + + _ref1 = require('./helpers'), compact = _ref1.compact, flatten = _ref1.flatten, extend = _ref1.extend, merge = _ref1.merge, del = _ref1.del, starts = _ref1.starts, ends = _ref1.ends, last = _ref1.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() { + + Base.name = 'Base'; + + 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()) { + 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(res) { + var me; + me = this.unwrapAll(); + if (res) { + return new Call(new Literal("" + res + ".push"), [me]); + } else { + return new Return(me); + } + }; + + 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, _len1, _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, _len1 = _ref3.length; _j < _len1; _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(_super) { + + __extends(Block, _super); + + Block.name = 'Block'; + + 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(res) { + var expr, len; + len = this.expressions.length; + while (len--) { + expr = this.expressions[len]; + if (!(expr instanceof Comment)) { + this.expressions[len] = expr.makeReturn(res); + 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 (node instanceof Block) { + codes.push(node.compileNode(o)); + } else if (top) { + node.front = true; + code = node.compile(o); + if (!node.isStatement(o)) { + code = "" + this.tab + code + ";"; + if (node instanceof Literal) code = "" + code + "\n"; + } + codes.push(code); + } else { + codes.push(node.compile(o, LEVEL_LIST)); + } + } + if (top) { + if (this.spaced) { + return "\n" + (codes.join('\n\n')) + "\n"; + } else { + 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, exp, i, prelude, preludeExps, rest; + o.indent = o.bare ? '' : TAB; + o.scope = new Scope(null, this, null); + o.level = LEVEL_TOP; + this.spaced = true; + prelude = ""; + if (!o.bare) { + preludeExps = (function() { + var _i, _len, _ref2, _results; + _ref2 = this.expressions; + _results = []; + for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) { + exp = _ref2[i]; + if (!(exp.unwrap() instanceof Comment)) break; + _results.push(exp); + } + return _results; + }).call(this); + rest = this.expressions.slice(preludeExps.length); + this.expressions = preludeExps; + if (preludeExps.length) { + prelude = "" + (this.compileNode(merge(o, { + indent: '' + }))) + "\n"; + } + this.expressions = rest; + } + code = this.compileWithDeclarations(o); + if (o.bare) return code; + return "" + prelude + "(function() {\n" + code + "\n}).call(this);\n"; + }; + + Block.prototype.compileWithDeclarations = function(o) { + var assigns, code, declars, exp, i, post, rest, scope, spaced, _i, _len, _ref2, _ref3, _ref4; + code = post = ''; + _ref2 = this.expressions; + for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_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, 9e9); + _ref3 = [this.spaced, false], spaced = _ref3[0], this.spaced = _ref3[1]; + _ref4 = [this.compileNode(o), spaced], code = _ref4[0], this.spaced = _ref4[1]; + this.expressions = rest; + } + post = this.compileNode(o); + scope = o.scope; + if (scope.expressions === this) { + declars = o.scope.hasDeclarations(); + assigns = scope.hasAssignments; + if (declars || assigns) { + if (i) code += '\n'; + code += "" + this.tab + "var "; + if (declars) code += scope.declaredVariables().join(', '); + if (assigns) { + if (declars) code += ",\n" + (this.tab + TAB); + code += scope.assignedVariables().join(",\n" + (this.tab + TAB)); + } + code += ';\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; + + })(Base); + + exports.Literal = Literal = (function(_super) { + + __extends(Literal, _super); + + Literal.name = 'Literal'; + + function Literal(value) { + this.value = value; + } + + Literal.prototype.makeReturn = function() { + if (this.isStatement()) { + return this; + } else { + return Literal.__super__.makeReturn.apply(this, arguments); + } + }; + + 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.value === 'break' && !((o != null ? o.loop : void 0) || (o != null ? o.block : void 0))) { + return this; + } + if (this.value === 'continue' && !(o != null ? o.loop : void 0)) return this; + }; + + Literal.prototype.compileNode = function(o) { + var code, _ref2; + code = this.isUndefined ? o.level >= LEVEL_ACCESS ? '(void 0)' : 'void 0' : this.value === 'this' ? ((_ref2 = o.scope.method) != null ? _ref2.bound : void 0) ? o.scope.method.context : this.value : 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; + + })(Base); + + exports.Return = Return = (function(_super) { + + __extends(Return, _super); + + Return.name = 'Return'; + + 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)) : void 0] + ";"); + }; + + return Return; + + })(Base); + + exports.Value = Value = (function(_super) { + + __extends(Value, _super); + + Value.name = 'Value'; + + 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.add = function(props) { + this.properties = this.properties.concat(props); + 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.isString = function() { + return this.base instanceof Literal && IS_STRING.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.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.add(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 ((this.base instanceof Parens || props.length) && SIMPLENUM.test(code)) { + 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, + _this = this; + if (this.unfoldedSoak != null) return this.unfoldedSoak; + result = (function() { + var fst, i, ifn, prop, ref, snd, _i, _len, _ref2; + if (ifn = _this.base.unfoldSoak(o)) { + Array.prototype.push.apply(ifn.body.properties, _this.properties); + return ifn; + } + _ref2 = _this.properties; + for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) { + prop = _ref2[i]; + if (!prop.soak) continue; + 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; + })(); + return this.unfoldedSoak = result || false; + }; + + return Value; + + })(Base); + + exports.Comment = Comment = (function(_super) { + + __extends(Comment, _super); + + Comment.name = 'Comment'; + + 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) + ("\n" + this.tab + "*/\n"); + if ((level || o.level) === LEVEL_TOP) code = o.indent + code; + return code; + }; + + return Comment; + + })(Base); + + exports.Call = Call = (function(_super) { + + __extends(Call, _super); + + Call.name = 'Call'; + + 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, _ref2; + base = ((_ref2 = this.variable) != null ? _ref2.base : void 0) || this.variable; + if (base instanceof Call && !base.isNew) { + base.newInstance(); + } else { + this.isNew = true; + } + return this; + }; + + Call.prototype.superReference = function(o) { + var accesses, method, name; + method = o.scope.method; + if (!method) throw SyntaxError('cannot call super outside of a function.'); + name = method.name; + if (name == null) { + throw SyntaxError('cannot call super on an anonymous function.'); + } + if (method.klass) { + accesses = [new Access(new Literal('__super__'))]; + if (method["static"]) { + accesses.push(new Access(new Literal('constructor'))); + } + accesses.push(new Access(new Literal(name))); + return (new Value(new Literal(method.klass), accesses)).compile(o); + } 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, _len1, _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, _len1 = _ref2.length; _j < _len1; _j++) { + prop = _ref2[_j]; + if (prop instanceof Assign || prop instanceof Comment) { + 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), t = typeof result;\n" + idt + "return t == \"object\" || t == \"function\" ? result || child : 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; + + })(Base); + + exports.Extends = Extends = (function(_super) { + + __extends(Extends, _super); + + Extends.name = 'Extends'; + + function Extends(child, parent) { + this.child = child; + this.parent = parent; + } + + Extends.prototype.children = ['child', 'parent']; + + Extends.prototype.compile = function(o) { + return new Call(new Value(new Literal(utility('extends'))), [this.child, this.parent]).compile(o); + }; + + return Extends; + + })(Base); + + exports.Access = Access = (function(_super) { + + __extends(Access, _super); + + Access.name = 'Access'; + + function Access(name, tag) { + this.name = name; + this.name.asKey = true; + this.soak = tag === 'soak'; + } + + Access.prototype.children = ['name']; + + Access.prototype.compile = function(o) { + var name; + name = this.name.compile(o); + if (IDENTIFIER.test(name)) { + return "." + name; + } else { + return "[" + name + "]"; + } + }; + + Access.prototype.isComplex = NO; + + return Access; + + })(Base); + + exports.Index = Index = (function(_super) { + + __extends(Index, _super); + + Index.name = 'Index'; + + function Index(index) { + this.index = index; + } + + Index.prototype.children = ['index']; + + Index.prototype.compile = function(o) { + return "[" + (this.index.compile(o, LEVEL_PAREN)) + "]"; + }; + + Index.prototype.isComplex = function() { + return this.index.isComplex(); + }; + + return Index; + + })(Base); + + exports.Range = Range = (function(_super) { + + __extends(Range, _super); + + Range.name = 'Range'; + + 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.fromC = _ref2[0], this.fromVar = _ref2[1]; + _ref3 = this.to.cache(o, LEVEL_LIST), this.toC = _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, idxName, known, lt, namedIndex, 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'); + idxName = del(o, 'name'); + namedIndex = idxName && idxName !== idx; + varPart = "" + idx + " = " + this.fromC; + if (this.toC !== this.toVar) varPart += ", " + this.toC; + if (this.step !== this.stepVar) varPart += ", " + this.step; + _ref2 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref2[0], gt = _ref2[1]; + condPart = this.stepNum ? +this.stepNum > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref3 = [+this.fromNum, +this.toNum], from = _ref3[0], to = _ref3[1], _ref3), from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar); + stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? namedIndex ? from <= to ? "++" + idx : "--" + idx : from <= to ? "" + idx + "++" : "" + idx + "--" : namedIndex ? "" + cond + " ? ++" + idx + " : --" + idx : "" + cond + " ? " + idx + "++ : " + idx + "--"; + if (namedIndex) varPart = "" + idxName + " = " + varPart; + if (namedIndex) stepPart = "" + idxName + " = " + stepPart; + return "" + varPart + "; " + condPart + "; " + stepPart; + }; + + Range.prototype.compileArray = function(o) { + var args, body, cond, hasArgs, 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); + 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.fromC) + (this.toC !== this.toVar ? ", " + this.toC : ''); + 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; + hasArgs = function(node) { + return node != null ? node.contains(function(n) { + return n instanceof Literal && n.value === 'arguments' && !n.asKey; + }) : void 0; + }; + if (hasArgs(this.from) || hasArgs(this.to)) args = ', arguments'; + return "(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).apply(this" + (args != null ? args : '') + ")"; + }; + + return Range; + + })(Base); + + exports.Slice = Slice = (function(_super) { + + __extends(Slice, _super); + + Slice.name = 'Slice'; + + 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) : (compiled = to.compile(o, LEVEL_ACCESS), "" + compiled + " + 1 || 9e9")); + } + return ".slice(" + fromStr + (toStr || '') + ")"; + }; + + return Slice; + + })(Base); + + exports.Obj = Obj = (function(_super) { + + __extends(Obj, _super); + + Obj.name = 'Obj'; + + 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, propName, propNames, props, _i, _j, _len, _len1, _ref2; + props = this.properties; + propNames = []; + _ref2 = this.properties; + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + prop = _ref2[_i]; + if (prop.isComplex()) prop = prop.variable; + if (prop != null) { + propName = prop.unwrapAll().value.toString(); + if (__indexOf.call(propNames, propName) >= 0) { + throw SyntaxError("multiple object literal properties named \"" + propName + "\""); + } + propNames.push(propName); + } + } + if (!props.length) return (this.front ? '({})' : '{}'); + if (this.generated) { + for (_j = 0, _len1 = props.length; _j < _len1; _j++) { + node = props[_j]; + 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 _k, _len2, _results; + _results = []; + for (i = _k = 0, _len2 = props.length; _k < _len2; i = ++_k) { + 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; + + })(Base); + + exports.Arr = Arr = (function(_super) { + + __extends(Arr, _super); + + Arr.name = 'Arr'; + + 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; + + })(Base); + + exports.Class = Class = (function(_super) { + + __extends(Class, _super); + + Class.name = 'Class'; + + 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; + if (__indexOf.call(STRICT_PROSCRIBED, decl) >= 0) { + throw SyntaxError("variable name may not be " + decl); + } + 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 bvar, lhs, _i, _len, _ref2, _results; + if (this.boundFuncs.length) { + _ref2 = this.boundFuncs; + _results = []; + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + bvar = _ref2[_i]; + lhs = (new Value(new Literal("this"), [new Access(bvar)])).compile(o); + _results.push(this.ctor.body.unshift(new Literal("" + lhs + " = " + (utility('bind')) + "(" + lhs + ", 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"]) { + func["static"] = true; + if (func.bound) func.context = name; + } else { + assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), new Access(base)]); + 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) { + var _this = this; + return this.traverseChildren(false, function(child) { + var exps, i, node, _i, _len, _ref2; + if (child instanceof Class) return false; + if (child instanceof Block) { + _ref2 = exps = child.expressions; + for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) { + node = _ref2[i]; + if (node instanceof Value && node.isObject(true)) { + exps[i] = _this.addProperties(node, name, o); + } + } + return child.expressions = exps = flatten(exps); + } + }); + }; + + Class.prototype.hoistDirectivePrologue = function() { + var expressions, index, node; + index = 0; + expressions = this.body.expressions; + while ((node = expressions[index]) && node instanceof Comment || node instanceof Value && node.isString()) { + ++index; + } + return this.directives = expressions.splice(0, index); + }; + + 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.ctor.body.makeReturn(); + 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 call, decl, klass, lname, name, params, _ref2; + decl = this.determineName(); + name = decl || '_Class'; + if (name.reserved) name = "_" + name; + lname = new Literal(name); + this.hoistDirectivePrologue(); + this.setContext(name); + this.walkBody(name, o); + this.ensureConstructor(name); + this.body.spaced = true; + if (!(this.ctor instanceof Code)) this.body.expressions.unshift(this.ctor); + if (decl) { + this.body.expressions.unshift(new Assign(new Value(new Literal(name), [new Access(new Literal('name'))]), new Literal("'" + name + "'"))); + } + this.body.expressions.push(lname); + (_ref2 = this.body.expressions).unshift.apply(_ref2, this.directives); + this.addBoundFunctions(o); + call = Closure.wrap(this.body); + if (this.parent) { + this.superClass = new Literal(o.scope.freeVariable('super', false)); + this.body.expressions.unshift(new Extends(lname, this.superClass)); + call.args.push(this.parent); + params = call.variable.params || call.variable.base.params; + params.push(new Param(this.superClass)); + } + klass = new Parens(call, true); + if (this.variable) klass = new Assign(this.variable, klass); + return klass.compile(o); + }; + + return Class; + + })(Base); + + exports.Assign = Assign = (function(_super) { + + __extends(Assign, _super); + + Assign.name = 'Assign'; + + function Assign(variable, value, context, options) { + var forbidden, name, _ref2; + this.variable = variable; + this.value = value; + this.context = context; + this.param = options && options.param; + this.subpattern = options && options.subpattern; + forbidden = (_ref2 = (name = this.variable.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0); + if (forbidden && this.context !== 'object') { + throw SyntaxError("variable name may not be \"" + name + "\""); + } + } + + Assign.prototype.children = ['variable', 'value']; + + Assign.prototype.isStatement = function(o) { + return (o != null ? o.level : void 0) === LEVEL_TOP && (this.context != null) && __indexOf.call(this.context, "?") >= 0; + }; + + 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, varBase, _ref2, _ref3, _ref4, _ref5; + 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) { + if (!(varBase = this.variable.unwrapAll()).isAssignable()) { + throw SyntaxError("\"" + (this.variable.compile(o)) + "\" cannot be assigned."); + } + if (!(typeof varBase.hasProperties === "function" ? varBase.hasProperties() : void 0)) { + if (this.param) { + o.scope.add(name, 'var'); + } else { + o.scope.find(name); + } + } + } + if (this.value instanceof Code && (match = METHOD_DEF.exec(name))) { + if (match[1]) this.value.klass = match[1]; + this.value.name = (_ref3 = (_ref4 = (_ref5 = match[2]) != null ? _ref5 : match[3]) != null ? _ref4 : match[4]) != null ? _ref3 : match[5]; + } + 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, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8; + 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, (_ref3 = _ref2.variable, idx = _ref3.base), obj = _ref2.value; + } else { + if (obj.base instanceof Parens) { + _ref4 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref4[0], idx = _ref4[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)); + if (_ref5 = obj.unwrap().value, __indexOf.call(RESERVED, _ref5) >= 0) { + throw new SyntaxError("assignment to a reserved word: " + (obj.compile(o)) + " = " + (value.compile(o))); + } + 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 = _i = 0, _len = objects.length; _i < _len; i = ++_i) { + obj = objects[i]; + idx = i; + if (isObject) { + if (obj instanceof Assign) { + _ref6 = obj, (_ref7 = _ref6.variable, idx = _ref7.base), obj = _ref6.value; + } else { + if (obj.base instanceof Parens) { + _ref8 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref8[0], idx = _ref8[1]; + } else { + idx = obj["this"] ? obj.properties[0].name : obj; + } + } + } + if (!splat && obj instanceof Splat) { + name = obj.name.unwrap().value; + obj = obj.unwrap(); + 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 { + name = obj.unwrap().value; + if (obj instanceof Splat) { + obj = obj.name.compile(o); + throw new 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)]); + } + if ((name != null) && __indexOf.call(RESERVED, name) >= 0) { + throw new SyntaxError("assignment to a reserved word: " + (obj.compile(o)) + " = " + (val.compile(o))); + } + assigns.push(new Assign(obj, val, null, { + param: this.param, + subpattern: true + }).compile(o, LEVEL_LIST)); + } + if (!(top || this.subpattern)) assigns.push(vvar); + code = assigns.join(', '); + if (o.level < LEVEL_LIST) { + return code; + } else { + return "(" + code + ")"; + } + }; + + Assign.prototype.compileConditional = function(o) { + var left, right, _ref2; + _ref2 = this.variable.cacheReference(o), left = _ref2[0], right = _ref2[1]; + if (left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) { + throw new Error("the variable \"" + left.base.value + "\" can't be assigned with " + this.context + " because it has not been defined."); + } + if (__indexOf.call(this.context, "?") >= 0) o.isExistentialEquals = true; + return new Op(this.context.slice(0, -1), left, new Assign(right, 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, LEVEL_ACCESS) + ' - ' + 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; + + })(Base); + + exports.Code = Code = (function(_super) { + + __extends(Code, _super); + + Code.name = 'Code'; + + 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, name, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8; + o.scope = new Scope(o.scope, this.body, this); + o.scope.shared = del(o, 'sharedScope'); + o.indent += TAB; + delete o.bare; + delete o.isExistentialEquals; + params = []; + exprs = []; + _ref2 = this.paramNames(); + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + name = _ref2[_i]; + if (!o.scope.check(name)) o.scope.parameter(name); + } + _ref3 = this.params; + for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { + param = _ref3[_j]; + if (!param.splat) continue; + _ref4 = this.params; + for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) { + p = _ref4[_k]; + if (p.name.value) o.scope.add(p.name.value, 'var', true); + } + splats = new Assign(new Value(new Arr((function() { + var _l, _len3, _ref5, _results; + _ref5 = this.params; + _results = []; + for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) { + p = _ref5[_l]; + _results.push(p.asReference(o)); + } + return _results; + }).call(this))), new Value(new Literal('arguments'))); + break; + } + _ref5 = this.params; + for (_l = 0, _len3 = _ref5.length; _l < _len3; _l++) { + param = _ref5[_l]; + 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) params.push(ref); + } + wasEmpty = this.body.isEmpty(); + if (splats) exprs.unshift(splats); + if (exprs.length) { + (_ref6 = this.body.expressions).unshift.apply(_ref6, exprs); + } + for (i = _m = 0, _len4 = params.length; _m < _len4; i = ++_m) { + p = params[i]; + o.scope.parameter(params[i] = p.compile(o)); + } + uniqs = []; + _ref7 = this.paramNames(); + for (_n = 0, _len5 = _ref7.length; _n < _len5; _n++) { + name = _ref7[_n]; + if (__indexOf.call(uniqs, name) >= 0) { + throw SyntaxError("multiple parameters named '" + name + "'"); + } + uniqs.push(name); + } + if (!(wasEmpty || this.noReturn)) this.body.makeReturn(); + if (this.bound) { + if ((_ref8 = o.scope.parent.method) != null ? _ref8.bound : void 0) { + this.bound = this.context = o.scope.parent.method.context; + } else if (!this["static"]) { + o.scope.parent.assign('_this', 'this'); + } + } + idt = o.indent; + code = 'function'; + if (this.ctor) code += ' ' + this.name; + code += '(' + params.join(', ') + ') {'; + if (!this.body.isEmpty()) { + code += "\n" + (this.body.compileWithDeclarations(o)) + "\n" + this.tab; + } + code += '}'; + if (this.ctor) return this.tab + code; + if (this.front || (o.level >= LEVEL_ACCESS)) { + return "(" + code + ")"; + } else { + return code; + } + }; + + Code.prototype.paramNames = function() { + var names, param, _i, _len, _ref2; + names = []; + _ref2 = this.params; + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + param = _ref2[_i]; + names.push.apply(names, param.names()); + } + return names; + }; + + Code.prototype.traverseChildren = function(crossScope, func) { + if (crossScope) { + return Code.__super__.traverseChildren.call(this, crossScope, func); + } + }; + + return Code; + + })(Base); + + exports.Param = Param = (function(_super) { + + __extends(Param, _super); + + Param.name = 'Param'; + + function Param(name, value, splat) { + var _ref2; + this.name = name; + this.value = value; + this.splat = splat; + if (_ref2 = (name = this.name.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) { + throw SyntaxError("parameter name \"" + name + "\" is not allowed"); + } + } + + 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(o.scope.freeVariable(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(); + }; + + Param.prototype.names = function(name) { + var atParam, names, obj, _i, _len, _ref2; + if (name == null) name = this.name; + atParam = function(obj) { + var value; + value = obj.properties[0].name.value; + if (value.reserved) { + return []; + } else { + return [value]; + } + }; + if (name instanceof Literal) return [name.value]; + if (name instanceof Value) return atParam(name); + names = []; + _ref2 = name.objects; + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + obj = _ref2[_i]; + if (obj instanceof Assign) { + names.push(obj.variable.base.value); + } else if (obj.isArray() || obj.isObject()) { + names.push.apply(names, this.names(obj.base)); + } else if (obj["this"]) { + names.push.apply(names, atParam(obj)); + } else { + names.push(obj.base.value); + } + } + return names; + }; + + return Param; + + })(Base); + + exports.Splat = Splat = (function(_super) { + + __extends(Splat, _super); + + Splat.name = 'Splat'; + + 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.prototype.unwrap = function() { + return this.name; + }; + + Splat.compileSplattedArray = function(o, list, apply) { + var args, base, code, i, index, node, _i, _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 = _i = 0, _len = args.length; _i < _len; i = ++_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 _j, _len1, _ref2, _results; + _ref2 = list.slice(0, index); + _results = []; + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + node = _ref2[_j]; + _results.push(node.compile(o, LEVEL_LIST)); + } + return _results; + })(); + return "[" + (base.join(', ')) + "].concat(" + (args.join(', ')) + ")"; + }; + + return Splat; + + })(Base); + + exports.While = While = (function(_super) { + + __extends(While, _super); + + While.name = 'While'; + + 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(res) { + if (res) { + return While.__super__.makeReturn.apply(this, arguments); + } else { + this.returns = !this.jumps({ + loop: 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 (this.returns) { + body.makeReturn(rvar = o.scope.freeVariable('results')); + set = "" + this.tab + rvar + " = [];\n"; + } + if (this.guard) { + if (body.expressions.length > 1) { + body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue"))); + } else { + 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; + + })(Base); + + exports.Op = Op = (function(_super) { + var CONVERSIONS, INVERSIONS; + + __extends(Op, _super); + + Op.name = 'Op'; + + function Op(op, first, second, flip) { + if (op === 'in') return new In(first, second); + if (op === 'do') return this.generateDo(first); + if (op === 'new') { + if (first instanceof Call && !first["do"] && !first.isNew) { + 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.generateDo = function(exp) { + var call, func, param, passedParams, ref, _i, _len, _ref2; + passedParams = []; + func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp; + _ref2 = func.params || []; + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + param = _ref2[_i]; + if (param.value) { + passedParams.push(param.value); + delete param.value; + } else { + passedParams.push(param); + } + } + call = new Call(exp, passedParams); + call["do"] = true; + return call; + }; + + Op.prototype.compileNode = function(o) { + var code, isChain, _ref2, _ref3; + isChain = this.isChainable() && this.first.isChainable(); + if (!isChain) this.first.front = this.front; + if (this.operator === 'delete' && o.scope.check(this.first.unwrapAll().value)) { + throw SyntaxError('delete operand may not be argument or var'); + } + if (((_ref2 = this.operator) === '--' || _ref2 === '++') && (_ref3 = this.first.unwrapAll().value, __indexOf.call(STRICT_PROSCRIBED, _ref3) >= 0)) { + throw SyntaxError('prefix increment/decrement may not have eval or arguments operand'); + } + if (this.isUnary()) return this.compileUnary(o); + if (isChain) return this.compileChain(o); + if (this.operator === '?') return this.compileExistence(o); + 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() && o.level > LEVEL_TOP) { + 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, plusMinus; + if (o.level >= LEVEL_ACCESS) return (new Parens(this)).compile(o); + parts = [op = this.operator]; + plusMinus = op === '+' || op === '-'; + if ((op === 'new' || op === 'typeof' || op === 'delete') || plusMinus && this.first instanceof Op && this.first.operator === op) { + parts.push(' '); + } + if ((plusMinus && this.first instanceof Op) || (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; + + })(Base); + + exports.In = In = (function(_super) { + + __extends(In, _super); + + In.name = 'In'; + + 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)) continue; + 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; + if (this.array.base.objects.length === 0) return "" + (!!this.negated); + _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 _i, _len, _ref4, _results; + _ref4 = this.array.base.objects; + _results = []; + for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) { + item = _ref4[i]; + _results.push((i ? ref : sub) + cmp + item.compile(o, LEVEL_ACCESS)); + } + return _results; + }).call(this); + 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; + + })(Base); + + exports.Try = Try = (function(_super) { + + __extends(Try, _super); + + Try.name = 'Try'; + + 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(res) { + if (this.attempt) this.attempt = this.attempt.makeReturn(res); + if (this.recovery) this.recovery = this.recovery.makeReturn(res); + return this; + }; + + Try.prototype.compileNode = function(o) { + var catchPart, ensurePart, errorPart, tryPart; + o.indent += TAB; + errorPart = this.error ? " (" + (this.error.compile(o)) + ") " : ' '; + tryPart = this.attempt.compile(o, LEVEL_TOP); + catchPart = (function() { + var _ref2; + if (this.recovery) { + if (_ref2 = this.error.value, __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) { + throw SyntaxError("catch variable may not be \"" + this.error.value + "\""); + } + if (!o.scope.check(this.error.value)) { + o.scope.add(this.error.value, 'param'); + } + return " catch" + errorPart + "{\n" + (this.recovery.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}"; + } else if (!(this.ensure || this.recovery)) { + return ' catch (_error) {}'; + } + }).call(this); + ensurePart = this.ensure ? " finally {\n" + (this.ensure.compile(o, LEVEL_TOP)) + "\n" + this.tab + "}" : ''; + return "" + this.tab + "try {\n" + tryPart + "\n" + this.tab + "}" + (catchPart || '') + ensurePart; + }; + + return Try; + + })(Base); + + exports.Throw = Throw = (function(_super) { + + __extends(Throw, _super); + + Throw.name = 'Throw'; + + 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; + + })(Base); + + exports.Existence = Existence = (function(_super) { + + __extends(Existence, _super); + + Existence.name = 'Existence'; + + function Existence(expression) { + this.expression = expression; + } + + Existence.prototype.children = ['expression']; + + Existence.prototype.invert = NEGATE; + + Existence.prototype.compileNode = function(o) { + var cmp, cnj, code, _ref2; + this.expression.front = this.front; + code = this.expression.compile(o, LEVEL_OP); + if (IDENTIFIER.test(code) && !o.scope.check(code)) { + _ref2 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref2[0], cnj = _ref2[1]; + code = "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null"; + } else { + code = "" + code + " " + (this.negated ? '==' : '!=') + " null"; + } + if (o.level <= LEVEL_COND) { + return code; + } else { + return "(" + code + ")"; + } + }; + + return Existence; + + })(Base); + + exports.Parens = Parens = (function(_super) { + + __extends(Parens, _super); + + Parens.name = 'Parens'; + + 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.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; + + })(Base); + + exports.For = For = (function(_super) { + + __extends(For, _super); + + For.name = 'For'; + + 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.compileNode = function(o) { + var body, defPart, forPart, forVarPart, guardPart, idt1, index, ivar, kvar, kvarAssign, 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.object && index) || scope.freeVariable('i'); + kvar = (this.range && name) || index || ivar; + kvarAssign = kvar !== ivar ? "" + kvar + " = " : ""; + 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, + name: name, + 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 + "[" + kvar + "]"; + } + if (!this.object) { + lvar = scope.freeVariable('len'); + forVarPart = "" + kvarAssign + ivar + " = 0, " + lvar + " = " + svar + ".length"; + if (this.step) { + forVarPart += ", " + stepvar + " = " + (this.step.compile(o, LEVEL_OP)); + } + stepPart = "" + kvarAssign + (this.step ? "" + ivar + " += " + stepvar : (kvar !== ivar ? "++" + ivar : "" + ivar + "++")); + forPart = "" + forVarPart + "; " + ivar + " < " + lvar + "; " + stepPart; + } + } + if (this.returns) { + resultPart = "" + this.tab + rvar + " = [];\n"; + returnResult = "\n" + this.tab + "return " + rvar + ";"; + body.makeReturn(rvar); + } + if (this.guard) { + if (body.expressions.length > 1) { + body.expressions.unshift(new If((new Parens(this.guard)).invert(), new Literal("continue"))); + } else { + if (this.guard) body = Block.wrap([new If(this.guard, body)]); + } + } + if (this.pattern) { + body.expressions.unshift(new Assign(this.name, new Literal("" + svar + "[" + kvar + "]"))); + } + defPart += this.pluckDirectCall(o, body); + if (namePart) varPart = "\n" + idt1 + namePart + ";"; + if (this.object) { + forPart = "" + kvar + " in " + svar; + if (this.own) { + guardPart = "\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + kvar + ")) 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, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7; + defs = ''; + _ref2 = body.expressions; + for (idx = _i = 0, _len = _ref2.length; _i < _len; idx = ++_i) { + 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]; + body.expressions[idx] = new Call(base, expr.args); + defs += this.tab + new Assign(ref, fn).compile(o, LEVEL_TOP) + ';\n'; + } + return defs; + }; + + return For; + + })(While); + + exports.Switch = Switch = (function(_super) { + + __extends(Switch, _super); + + Switch.name = 'Switch'; + + 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(res) { + var pair, _i, _len, _ref2, _ref3; + _ref2 = this.cases; + for (_i = 0, _len = _ref2.length; _i < _len; _i++) { + pair = _ref2[_i]; + pair[1].makeReturn(res); + } + if (res) { + this.otherwise || (this.otherwise = new Block([new Literal('void 0')])); + } + if ((_ref3 = this.otherwise) != null) _ref3.makeReturn(res); + return this; + }; + + Switch.prototype.compileNode = function(o) { + var block, body, code, cond, conditions, expr, i, idt1, idt2, _i, _j, _len, _len1, _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 = _i = 0, _len = _ref3.length; _i < _len; i = ++_i) { + _ref4 = _ref3[i], conditions = _ref4[0], block = _ref4[1]; + _ref5 = flatten([conditions]); + for (_j = 0, _len1 = _ref5.length; _j < _len1; _j++) { + cond = _ref5[_j]; + 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; + + })(Base); + + exports.If = If = (function(_super) { + + __extends(If, _super); + + If.name = 'If'; + + 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(res) { + if (res) { + this.elseBody || (this.elseBody = new Block([new Literal('void 0')])); + } + this.body && (this.body = new Block([this.body.makeReturn(res)])); + this.elseBody && (this.elseBody = new Block([this.elseBody.makeReturn(res)])); + 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, bodyc, child, cond, exeq, ifPart, _ref2; + 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); + bodyc = body.compile(o); + if (1 === ((_ref2 = body.expressions) != null ? _ref2.length : void 0) && !this.elseBody && !child && bodyc && cond && -1 === (bodyc.indexOf('\n')) && 80 > cond.length + bodyc.length) { + return "" + this.tab + "if (" + cond + ") " + (bodyc.replace(/^\s+/, '')); + } + if (bodyc) bodyc = "\n" + bodyc + "\n" + this.tab; + ifPart = "if (" + cond + ") {" + bodyc + "}"; + 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; + + })(Base); + + 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() { + return "function(child, parent) { for (var key in parent) { if (" + (utility('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() { + return 'function(fn, me){ return function(){ return fn.apply(me, arguments); }; }'; + }, + indexOf: function() { + return "[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }"; + }, + hasProp: function() { + return '{}.hasOwnProperty'; + }, + slice: function() { + return '[].slice'; + } + }; + + LEVEL_TOP = 1; + + LEVEL_PAREN = 2; + + LEVEL_LIST = 3; + + LEVEL_COND = 4; + + LEVEL_OP = 5; + + LEVEL_ACCESS = 6; + + TAB = ' '; + + IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*"; + + IDENTIFIER = RegExp("^" + IDENTIFIER_STR + "$"); + + SIMPLENUM = /^[+-]?\d+$/; + + METHOD_DEF = RegExp("^(?:(" + IDENTIFIER_STR + ")\\.prototype(?:\\.(" + IDENTIFIER_STR + ")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|(" + IDENTIFIER_STR + ")$"); + + IS_STRING = /^['"]/; + + utility = function(name) { + var ref; + ref = "__" + name; + Scope.root.assign(ref, UTILITIES[name]()); + return ref; + }; + + multident = function(code, tab) { + code = code.replace(/\n/g, '$&' + tab); + return code.replace(/\s+$/, ''); + }; + + +}); +/* + * 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) { +// Generated by CoffeeScript 1.2.1-pre + + var Scope, extend, last, _ref; + + _ref = require('./helpers'), extend = _ref.extend, last = _ref.last; + + exports.Scope = Scope = (function() { + + Scope.name = 'Scope'; + + 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) { + if (this.shared && !immediate) return this.parent.add(name, type, immediate); + if (Object.prototype.hasOwnProperty.call(this.positions, name)) { + return this.variables[this.positions[name]].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, _ref1; + found = !!this.type(name); + if (found || immediate) return found; + return !!((_ref1 = this.parent) != null ? _ref1.check(name) : void 0); + }; + + Scope.prototype.temporary = function(name, index) { + if (name.length > 1) { + return '_' + name + (index > 1 ? index - 1 : ''); + } else { + return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a'); + } + }; + + Scope.prototype.type = function(name) { + var v, _i, _len, _ref1; + _ref1 = this.variables; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + v = _ref1[_i]; + if (v.name === name) return v.type; + } + return null; + }; + + Scope.prototype.freeVariable = function(name, reserve) { + var index, temp; + if (reserve == null) reserve = true; + index = 0; + while (this.check((temp = this.temporary(name, index)))) { + index++; + } + if (reserve) this.add(temp, 'var', true); + return temp; + }; + + Scope.prototype.assign = function(name, value) { + this.add(name, { + value: value, + assigned: true + }, true); + return this.hasAssignments = true; + }; + + Scope.prototype.hasDeclarations = function() { + return !!this.declaredVariables().length; + }; + + Scope.prototype.declaredVariables = function() { + var realVars, tempVars, v, _i, _len, _ref1; + realVars = []; + tempVars = []; + _ref1 = this.variables; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + v = _ref1[_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, _ref1, _results; + _ref1 = this.variables; + _results = []; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + v = _ref1[_i]; + if (v.type.assigned) _results.push("" + v.name + " = " + v.type.value); + } + return _results; + }; + + return Scope; + + })(); + + +}); diff --git a/public/ace_editor/worker-css.js b/public/ace_editor/worker-css.js new file mode 100644 index 0000000..a86bbcb --- /dev/null +++ b/public/ace_editor/worker-css.js @@ -0,0 +1,12228 @@ +"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 + * + * 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 ( typeof(str) == 'string' && 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 +// 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 + * Irakli Gozalishvili (http://jeditoolkit.com) + * Mike de Boer + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; + +/** + * class Document + * + * Contains the text of the document. Documents are controlled by a single [[EditSession `EditSession`]]. At its core, `Document`s are just an array of strings, with each row in the document matching up to the array index. + * + * + **/ + + /** + * new Document([text]) + * - text (String | Array): The starting text + * + * Creates a new `Document`. If `text` is included, the `Document` contains those strings; otherwise, it's empty. + * + **/ +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); + + /** + * Document.setValue(text) -> Void + * - text (String): The text to use + * + * Replaces all the lines in the current `Document` with the value of `text`. + **/ + 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); + }; + + /** + * Document.getValue() -> String + * + * Returns all the lines in the document as a single string, split by the new line character. + **/ + this.getValue = function() { + return this.getAllLines().join(this.getNewLineCharacter()); + }; + + /** + * Document.createAnchor(row, column) -> Anchor + * - row (Number): The row number to use + * - column (Number): The column number to use + * + * Creates a new `Anchor` to define a floating point in the document. + **/ + this.createAnchor = function(row, column) { + return new Anchor(this, row, column); + }; + + /** internal, hide + * Document.$split(text) -> [String] + * - text (String): The text to work with + * + ([String]): A String array, with each index containing a piece of the original `text` string. + * + * Splits a string of text on any newline (`\n`) or carriage-return ('\r') characters. + * + * + **/ + + // 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/); + }; + + + /** internal, hide + * Document.$detectNewLine(text) -> Void + * + * + **/ + this.$detectNewLine = function(text) { + var match = text.match(/^.*?(\r\n|\r|\n)/m); + if (match) { + this.$autoNewLine = match[1]; + } else { + this.$autoNewLine = "\n"; + } + }; + + /** + * Document.getNewLineCharacter() -> String + * + (String): If `newLineMode == windows`, `\r\n` is returned.
      + * If `newLineMode == unix`, `\n` is returned.
      + * If `newLineMode == auto`, the value of `autoNewLine` is returned. + * + * Returns the newline character that's being used, depending on the value of `newLineMode`. + * + * + * + **/ + 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"; + /** + * Document.setNewLineMode(newLineMode) -> Void + * - newLineMode(String): [The newline mode to use; can be either `windows`, `unix`, or `auto`]{: #Document.setNewLineMode.param} + * + * [Sets the new line mode.]{: #Document.setNewLineMode.desc} + **/ + this.setNewLineMode = function(newLineMode) { + if (this.$newLineMode === newLineMode) + return; + + this.$newLineMode = newLineMode; + }; + + /** + * Document.getNewLineMode() -> String + * + * [Returns the type of newlines being used; either `windows`, `unix`, or `auto`]{: #Document.getNewLineMode} + * + **/ + this.getNewLineMode = function() { + return this.$newLineMode; + }; + + /** + * Document.isNewLine(text) -> Boolean + * - text (String): The text to check + * + * Returns `true` if `text` is a newline character (either `\r\n`, `\r`, or `\n`). + * + **/ + this.isNewLine = function(text) { + return (text == "\r\n" || text == "\r" || text == "\n"); + }; + + /** + * Document.getLine(row) -> String + * - row (Number): The row index to retrieve + * + * Returns a verbatim copy of the given line as it is in the document + * + **/ + this.getLine = function(row) { + return this.$lines[row] || ""; + }; + + /** + * Document.getLines(firstRow, lastRow) -> [String] + * - firstRow (Number): The first row index to retrieve + * - lastRow (Number): The final row index to retrieve + * + * Returns an array of strings of the rows between `firstRow` and `lastRow`. This function is inclusive of `lastRow`. + * + **/ + this.getLines = function(firstRow, lastRow) { + return this.$lines.slice(firstRow, lastRow + 1); + }; + + /** + * Document.getAllLines() -> [String] + * + * 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()); + }; + + /** + * Document.getLength() -> Number + * + * Returns the number of rows in the document. + **/ + this.getLength = function() { + return this.$lines.length; + }; + + /** + * Document.getTextRange(range) -> String + * - range (Range): The range to work with + * + * [Given a range within the document, this function returns all the text within that range as a single string.]{: #Document.getTextRange.desc} + **/ + 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 = this.getLines(range.start.row+1, range.end.row-1); + lines.unshift((this.$lines[range.start.row] || "").substring(range.start.column)); + lines.push((this.$lines[range.end.row] || "").substring(0, range.end.column)); + return lines.join(this.getNewLineCharacter()); + } + }; + + /** internal, hide + * Document.$clipPosition(position) -> Number + * + * + **/ + 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; + }; + + /** + * Document.insert(position, text) -> Number + * - position (Number): The position to start inserting at + * - text (String): A chunk of text to insert + * + (Number): The position of the last line of `text`. If the length of `text` is 0, this function simply returns `position`. + * Inserts a block of `text` and the indicated `position`. + * + * + **/ + this.insert = function(position, text) { + if (!text || text.length === 0) + return position; + + position = this.$clipPosition(position); + + // only detect new lines if the document has no line break yet + 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; + }; + + /** + * Document.insertLines(row, lines) -> Object + * - row (Number): The index of the row to insert at + * - lines (Array): An array of strings + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}```
      + * If `lines` is empty, this function returns an object containing the current row, and column, like this:
      + * ```{row: row, column: 0}``` + * + * Inserts the elements in `lines` into the document, starting at the row index given by `row`. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.insertNewLine(position) -> Object + * - position (String): The position to insert at + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}``` + * + * Inserts a new line into the document at the current row's `position`. This method also triggers the `'change'` event. + * + * + * + **/ + 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; + }; + + /** + * Document.insertInLine(position, text) -> Object | Number + * - position (Number): The position to insert at + * - text (String): A chunk of text + * + (Object): Returns an object containing the final row and column, like this:
      + * ```{row: endRow, column: 0}``` + * + (Number): If `text` is empty, this function returns the value of `position` + * + * Inserts `text` into the `position` at the current row. This method also triggers the `'change'` event. + * + * + * + **/ + 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; + }; + + /** + * Document.remove(range) -> Object + * - range (Range): A specified Range to remove + * + (Object): Returns the new `start` property of the range, which contains `startRow` and `startColumn`. If `range` is empty, this function returns the unmodified value of `range.start`. + * + * Removes the `range` from the document. + * + * + **/ + 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; + }; + + /** + * Document.removeInLine(row, startColumn, endColumn) -> Object + * - row (Number): The row to remove from + * - startColumn (Number): The column to start removing at + * - endColumn (Number): The column to stop removing at + * + (Object): Returns an object containing `startRow` and `startColumn`, indicating the new row and column values.
      If `startColumn` is equal to `endColumn`, this function returns nothing. + * + * Removes the specified columns from the `row`. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.removeLines(firstRow, lastRow) -> [String] + * - firstRow (Number): The first row to be removed + * - lastRow (Number): The last row to be removed + * + ([String]): Returns all the removed lines. + * + * Removes a range of full lines. This method also triggers the `'change'` event. + * + * + **/ + 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; + }; + + /** + * Document.removeNewLine(row) -> Void + * - row (Number): The row to check + * + * Removes the new line between `row` and the row immediately following it. This method also triggers the `'change'` event. + * + **/ + 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 }); + }; + + /** + * Document.replace(range, text) -> Object + * - range (Range): A specified Range to replace + * - text (String): The new text to use as a replacement + * + (Object): Returns an object containing the final row and column, like this: + * {row: endRow, column: 0} + * If the text and range are empty, this function returns an object containing the current `range.start` value. + * If the text is the exact same as what currently exists, this function returns an object containing the current `range.end` value. + * + * Replaces a range in the document with the new `text`. + * + **/ + 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; + }; + + /** + * Document.applyDeltas(deltas) -> Void + * + * Applies all the changes previously accumulated. These can be either `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + **/ + this.applyDeltas = function(deltas) { + for (var i=0; i Void + * + * Reverts any changes previously applied. These can be either `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + **/ + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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"; + +/** + * class Range + * + * This object is used in various places to indicate a region within the editor. To better visualize how this works, imagine a rectangle. Each quadrant of the rectangle is analogus to a range, as ranges contain a starting row and starting column, and an ending row, and ending column. + * + **/ + +/** + * new Range(startRow, startColumn, endRow, endColumn) + * - startRow (Number): The starting row + * - startColumn (Number): The starting column + * - endRow (Number): The ending row + * - endColumn (Number): The ending column + * + * Creates a new `Range` object with the given starting and ending row and column points. + * + **/ +var Range = function(startRow, startColumn, endRow, endColumn) { + this.start = { + row: startRow, + column: startColumn + }; + + this.end = { + row: endRow, + column: endColumn + }; +}; + +(function() { + /** + * Range.isEqual(range) -> Boolean + * - range (Range): A range to check against + * + * Returns `true` if and only if the starting row and column, and ending tow and column, are equivalent to those given by `range`. + * + **/ + this.isEqual = 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 + }; + + /** + * Range.toString() -> String + * + * Returns a string containing the range's row and column information, given like this: + * + * [start.row/start.column] -> [end.row/end.column] + * + **/ + + this.toString = function() { + return ("Range: [" + this.start.row + "/" + this.start.column + + "] -> [" + this.end.row + "/" + this.end.column + "]"); + }; + + /** related to: Range.compare + * Range.contains(row, column) -> Boolean + * - row (Number): A row to check for + * - column (Number): A column to check for + * + * Returns `true` if the `row` and `column` provided are within the given range. This can better be expressed as returning `true` if: + * + * this.start.row <= row <= this.end.row && + * this.start.column <= column <= this.end.column + * + **/ + + this.contains = function(row, column) { + return this.compare(row, column) == 0; + }; + + /** related to: Range.compare + * Range.compareRange(range) -> Number + * - range (Range): A range to compare with + * + (Number): This method returns one of the following numbers:
      + *
      + * * `-2`: (B) is in front of (A), and doesn't intersect with (A)
      + * * `-1`: (B) begins before (A) but ends inside of (A)
      + * * `0`: (B) is completely inside of (A) OR (A) is completely 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) + * + * Compares `this` range (A) with another range (B). + * + **/ + 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; + } + } + } + + /** related to: Range.compare + * Range.comparePoint(p) -> Number + * - p (Range): A point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1
      + * + * Checks the row and column points of `p` with the row and column points of the calling range. + * + * + * + **/ + this.comparePoint = function(p) { + return this.compare(p.row, p.column); + } + + /** related to: Range.comparePoint + * Range.containsRange(range) -> Boolean + * - range (Range): A range to compare with + * + * Checks the start and end points of `range` and compares them to the calling range. Returns `true` if the `range` is contained within the caller's range. + * + **/ + this.containsRange = function(range) { + return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; + } + + /** + * Range.intersects(range) -> Boolean + * - range (Range): A range to compare with + * + * Returns `true` if passed in `range` intersects with the one calling this method. + * + **/ + this.intersects = function(range) { + var cmp = this.compareRange(range); + return (cmp == -1 || cmp == 0 || cmp == 1); + } + + /** + * Range.isEnd(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the caller's ending row point is the same as `row`, and if the caller's ending column is the same as `column`. + * + **/ + this.isEnd = function(row, column) { + return this.end.row == row && this.end.column == column; + } + + /** + * Range.isStart(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the caller's starting row point is the same as `row`, and if the caller's starting column is the same as `column`. + * + **/ + this.isStart = function(row, column) { + return this.start.row == row && this.start.column == column; + } + + /** + * Range.setStart(row, column) + * - row (Number): A row point to set + * - column (Number): A column point to set + * + * Sets the starting row and column for the range. + * + **/ + 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; + } + } + + /** + * Range.setEnd(row, column) + * - row (Number): A row point to set + * - column (Number): A column point to set + * + * Sets the starting row and column for the range. + * + **/ + 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; + } + } + + /** related to: Range.compare + * Range.inside(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range. + * + **/ + 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; + } + + /** related to: Range.compare + * Range.insideStart(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range's starting points. + * + **/ + this.insideStart = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column)) { + return false; + } else { + return true; + } + } + return false; + } + + /** related to: Range.compare + * Range.insideEnd(row, column) -> Boolean + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + * Returns `true` if the `row` and `column` are within the given range's ending points. + * + **/ + this.insideEnd = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isStart(row, column)) { + return false; + } else { + return true; + } + } + return false; + } + + /** + * Range.compare(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + **/ + 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; + }; + + /** + * Range.compareStart(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + *
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range, or if `isStart` is `true`.
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + * + **/ + this.compareStart = function(row, column) { + if (this.start.row == row && this.start.column == column) { + return -1; + } else { + return this.compare(row, column); + } + } + + /** + * Range.compareEnd(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `0` if the two points are exactly equal
      + * * `-1` if `p.row` is less then the calling range
      + * * `1` if `p.row` is greater than the calling range, or if `isEnd` is `true.
      + *
      + * If the starting row of the calling range is equal to `p.row`, and:
      + * * `p.column` is greater than or equal to the calling range's starting column, this returns `0`
      + * * Otherwise, it returns -1
      + *
      + * If the ending row of the calling range is equal to `p.row`, and:
      + * * `p.column` is less than or equal to the calling range's ending column, this returns `0`
      + * * Otherwise, it returns 1 + * + * Checks the row and column points with the row and column points of the calling range. + * + * + **/ + this.compareEnd = function(row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } else { + return this.compare(row, column); + } + } + + /** + * Range.compareInside(row, column) -> Number + * - row (Number): A row point to compare with + * - column (Number): A column point to compare with + * + (Number): This method returns one of the following numbers:
      + * * `1` if the ending row of the calling range is equal to `row`, and the ending column of the calling range is equal to `column`
      + * * `-1` if the starting row of the calling range is equal to `row`, and the starting column of the calling range is equal to `column`
      + *
      + * Otherwise, it returns the value after calling [[Range.compare `compare()`]]. + * + * Checks the row and column points with the row and column points of the calling range. + * + * + * + **/ + 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); + } + } + + /** + * Range.clipRows(firstRow, lastRow) -> Range + * - firstRow (Number): The starting row + * - lastRow (Number): The ending row + * + * Returns the part of the current `Range` that occurs within the boundaries of `firstRow` and `lastRow` as a new `Range` object. + * + **/ + 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); + }; + + /** + * Range.extend(row, column) -> Range + * - row (Number): A new row to extend to + * - column (Number): A new column to extend to + * + * Changes the row and column points for the calling range for both the starting and ending points. This method returns that range with a new row. + * + **/ + 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); + }; + + /** + * Range.isMultiLine() -> Boolean + * + * Returns true if the range spans across multiple lines. + * + **/ + this.isMultiLine = function() { + return (this.start.row !== this.end.row); + }; + + /** + * Range.clone() -> Range + * + * Returns a duplicate of the calling range. + * + **/ + this.clone = function() { + return Range.fromPoints(this.start, this.end); + }; + + /** + * Range.collapseRows() -> Range + * + * Returns a range containing the starting and ending rows of the original range, but with a column value of `0`. + * + **/ + 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) + }; + + /** + * Range.toScreenRange(session) -> Range + * - session (EditSession): The `EditSession` to retrieve coordinates from + * + * Given the current `Range`, this function converts those starting and ending points into screen positions, and then returns a new `Range` object. + **/ + 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(start, end) -> Range + * - start (Range): A starting point to use + * - end (Range): An ending point to use + * + * Creates and returns a new `Range` based on the row and column of the given parameters. + * +**/ +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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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; + +/** + * class Anchor + * + * Defines the floating pointer in the document. Whenever text is inserted or deleted before the cursor, the position of the cursor is updated + * + **/ + +/** + * new Anchor(doc, row, column) + * - doc (Document): The document to associate with the anchor + * - row (Number): The starting row position + * - column (Number): The starting column position + * + * Creates a new `Anchor` and associates it with a document. + * + **/ + +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); + + /** + * Anchor.getPosition() -> Object + * + * Returns an object identifying the `row` and `column` position of the current anchor. + * + **/ + + this.getPosition = function() { + return this.$clipPositionToDocument(this.row, this.column); + }; + + /** + * Anchor.getDocument() -> Document + * + * Returns the current document. + * + **/ + + this.getDocument = function() { + return this.document; + }; + + /** + * Anchor@onChange(e) + * - e (Event): Contains data about the event + * + * Fires whenever the anchor position changes. Events that can trigger this function include `'includeText'`, `'insertLines'`, `'removeText'`, and `'removeLines'`. + * + **/ + + 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); + }; + + /** + * Anchor.setPosition(row, column, noClip) + * - row (Number): The row index to move the anchor to + * - column (Number): The column index to move the anchor to + * - noClip (Boolean): Identifies if you want the position to be clipped + * + * Sets the anchor position to the specified row and column. If `noClip` is `true`, the position is not clipped. + * + **/ + + 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 + }); + }; + + /** + * Anchor.detach() + * + * When called, the `'change'` event listener is removed. + * + **/ + + this.detach = function() { + this.document.removeEventListener("change", this.$onChange); + }; + + /** internal, hide + * Anchor.clipPositionToDocument(row, column) + * - row (Number): The row index to clip the anchor to + * - column (Number): The column index to clip the anchor to + * + * Clips the anchor position to the specified row and column. + * + **/ + + 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 + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may 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= 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. + +*/ +/* Version v0.1.6, Build time: 2-March-2012 02:44:32 */ +(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", + lightgray :"#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" +}; +/*global SyntaxUnit, Parser*/ +/** + * 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, Parser.COMBINATOR_TYPE); + + /** + * 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; + + +/*global SyntaxUnit, Parser*/ +/** + * 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, Parser.MEDIA_FEATURE_TYPE); + + /** + * 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; + + +/*global SyntaxUnit, Parser*/ +/** + * 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, Parser.MEDIA_QUERY_TYPE); + + /** + * 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; + + +/*global Tokens, TokenStream, SyntaxError, Properties, Validation, ValidationError, SyntaxUnit, + PropertyValue, PropertyValuePart, SelectorPart, SelectorSubPart, Selector, + PropertyName, Combinator, MediaFeature, MediaQuery, EventTarget */ + +/** + * 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; +} + +//Static constants +Parser.DEFAULT_TYPE = 0; +Parser.COMBINATOR_TYPE = 1; +Parser.MEDIA_FEATURE_TYPE = 2; +Parser.MEDIA_QUERY_TYPE = 3; +Parser.PROPERTY_NAME_TYPE = 4; +Parser.PROPERTY_VALUE_TYPE = 5; +Parser.PROPERTY_VALUE_PART_TYPE = 6; +Parser.SELECTOR_TYPE = 7; +Parser.SELECTOR_PART_TYPE = 8; +Parser.SELECTOR_SUB_PART_TYPE = 9; + +Parser.prototype = function(){ + + var proto = new EventTarget(), //new prototype + prop, + additions = { + + //restore constructor + constructor: Parser, + + //instance constants - yuck + DEFAULT_TYPE : 0, + COMBINATOR_TYPE : 1, + MEDIA_FEATURE_TYPE : 2, + MEDIA_QUERY_TYPE : 3, + PROPERTY_NAME_TYPE : 4, + PROPERTY_VALUE_TYPE : 5, + PROPERTY_VALUE_PART_TYPE : 6, + SELECTOR_TYPE : 7, + SELECTOR_PART_TYPE : 8, + SELECTOR_SUB_PART_TYPE : 9, + + //----------------------------------------------------------------- + // 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, + count, + 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.UNKNOWN_SYM: //unknown @ rule + tokenStream.get(); + if (!this.options.strict){ + + //fire error event + this.fire({ + type: "error", + error: null, + message: "Unknown @ rule: " + tokenStream.LT(0).value + ".", + line: tokenStream.LT(0).startLine, + col: tokenStream.LT(0).startCol + }); + + //skip braces + count=0; + while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE){ + count++; //keep track of nesting depth + } + + while(count){ + tokenStream.advance([Tokens.RBRACE]); + count--; + } + + } else { + //not a syntax error, rethrow it + throw new SyntaxError("Unknown @ rule.", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol); + } + 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, + error = null, + invalid = 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(); + + try { + this._validateProperty(property, expr); + } catch (ex) { + invalid = ex; + } + + this.fire({ + type: "property", + property: property, + value: expr, + important: prio, + line: property.line, + col: property.col, + invalid: invalid + }); + + 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].line, values[0].col) : 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, + token, + 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 + token = this._hexcolor(); + if (token === 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 { + value = token.value; + if (unary === null){ + line = token.startLine; + col = 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, + lt; + + if (tokenStream.match(Tokens.FUNCTION)){ + functionText = tokenStream.token().value; + this._readWhitespace(); + expr = this._expr(); + functionText += expr; + + //START: Horrible hack in case it's an IE filter + if (this.options.ieFilters && tokenStream.peek() == Tokens.EQUALS){ + 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])); + } + + //END: Horrible Hack + + tokenStream.match(Tokens.RPAREN); + functionText += ")"; + 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 = null, + color; + + 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 token; + }, + + //----------------------------------------------------------------- + // 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 (tokenStream.match(Tokens.SEMICOLON) || (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 + //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)); + } + }, + + //----------------------------------------------------------------- + // Validation methods + //----------------------------------------------------------------- + _validateProperty: function(property, value){ + Validation.validate(property, value); + }, + + //----------------------------------------------------------------- + // 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; + }, + + /** + * Parses an HTML style attribute: a set of CSS declarations + * separated by semicolons. + * @param {String} input The text to parse as a style attribute + * @return {void} + * @method parseStyleAttribute + */ + parseStyleAttribute: function(input){ + input += "}"; // for error recovery in _readDeclarations() + this._tokenStream = new TokenStream(input, Tokens); + this._readDeclarations(); + } + }; + + //copy over onto prototype + for (prop in additions){ + if (additions.hasOwnProperty(prop)){ + proto[prop] = additions[prop]; + } + } + + return proto; +}(); + + +/* +nth + : S* [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]? | + ['-'|'+']? INTEGER | {O}{D}{D} | {E}{V}{E}{N} ] S* + ; +*/ +/*global Validation, ValidationTypes, ValidationError*/ +var Properties = { + + //A + "alignment-adjust" : "auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | | ", + "alignment-baseline" : "baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical", + "animation" : 1, + "animation-delay" : { multi: "

    i_o+m{6D9lSr@>eOG$01#fB+Z(E8qhB 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/md.png b/app/assets/images/file_types/md.png new file mode 100644 index 0000000000000000000000000000000000000000..f93189508f6570d16e39941928cc86fdd3784e45 GIT binary patch literal 5968 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 JD^Vc?{vTqCLk|D| literal 0 HcmV?d00001 diff --git a/app/assets/images/file_types/mpg.png b/app/assets/images/file_types/mpg.png new file mode 100644 index 0000000000000000000000000000000000000000..b1582c6d281d798458af913edf3c4c8c4bb54fb3 GIT binary patch literal 14820 zcmV4Tx0C)lIT4zuc-L^eF85r`AbIv(~l5@^ka+aJyf`DX@q#!|p7!Z}9AW;E9 zqGCW40hJ)4hzJ6ri0~SHe)qnr`|rJf&r>zit9GB>eX7s&>{WX$0Qgm1gM2WT6AC5F zO3H@?(Knv${-=xnEk+p%-w*)E6pj(Re`AkB?DiW+AL6L+;Ba_O&LMX9afQ!A)i4$g zwKUg&@dE&Gc<*1BXzCEV{lb)Q53#Fjs5bx%>+pPbS66QsGgAD5J$Ru!}%HE zHDIU$J$wV<5PT1evWI7wI{>^F;W^G8VeSC{@S$M59uN=&pXb|xF~56oD10qHGmN