summaryrefslogtreecommitdiff
path: root/gstudio/static/gstudio/js/Gnowmacs/src
diff options
context:
space:
mode:
Diffstat (limited to 'gstudio/static/gstudio/js/Gnowmacs/src')
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/.svn/all-wcprops5
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/.svn/entries40
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/all-wcprops35
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/entries201
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-dark.css.svn-base60
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-light.css.svn-base56
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-syntax-dark.css.svn-base73
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-syntax-light.css.svn-base58
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs.css.svn-base92
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/all-wcprops119
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/entries674
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-andreas.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-bharadwaj.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-billw.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-blue-mood.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-calm-forest.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-charcoal-black.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-clarity-and-beauty.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-classic.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-gnome2.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-gtk-ide.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-high-contrast.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-linh-dang-dark.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-mishoo.css.svn-base45
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-scintilla.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard-dark.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard-xemacs.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-vim-colors.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-zenburn.css.svn-base59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-andreas.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-bharadwaj.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-billw.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-blue-mood.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-calm-forest.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-charcoal-black.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-clarity-and-beauty.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-classic.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-gnome2.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-gtk-ide.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-high-contrast.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-linh-dang-dark.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-mishoo.css45
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-scintilla.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard-dark.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard-xemacs.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-vim-colors.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-zenburn.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-dark.css59
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-light.css55
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-syntax-dark.css73
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-syntax-light.css58
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs.css92
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/all-wcprops11
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/entries62
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/text-base/ymacs-color-theme.el.svn-base103
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/el/ymacs-color-theme.el103
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/gnow-server/gnow-server.el361
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/all-wcprops11
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/entries62
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/text-base/ymacs-min.js.svn-base33
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js-minified/ymacs-min.js33
l---------gstudio/static/gstudio/js/Gnowmacs/src/js/.#editorload.js1
l---------gstudio/static/gstudio/js/Gnowmacs/src/js/.#savetext.js1
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/all-wcprops149
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/entries844
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/gnowmacs.js.svn-base345
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/gnowmoz.html.svn-base276
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-buffer.js.svn-base1079
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-commands-utils.js.svn-base157
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-commands.js.svn-base1491
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-exception.js.svn-base36
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-frame.js.svn-base696
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-interactive.js.svn-base286
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keyboard.js.svn-base106
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap-emacs.js.svn-base264
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap-isearch.js.svn-base181
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap.js.svn-base167
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-marker.js.svn-base105
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-minibuffer.js.svn-base429
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-css.js.svn-base263
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-js.js.svn-base431
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-lisp.js.svn-base419
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-markdown.js.svn-base89
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-paren-match.js.svn-base301
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-xml.js.svn-base474
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-regexp.js.svn-base96
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-textprop.js.svn-base168
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-tokenizer.js.svn-base337
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base559
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/content.html91
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/editorload.js28
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/gnowmacs.js345
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/jquery-1.7.1.min.js4
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/jquery-ui-1.8.18.custom.min.js356
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/jquery.ui.gnowmacs.js929
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/savedata.js13
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-buffer.js1079
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-commands-utils.js157
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-commands.js1517
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-exception.js36
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-frame.js696
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-interactive.js286
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keyboard.js106
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap-emacs.js264
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap-isearch.js181
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap.js167
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-marker.js105
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-minibuffer.js429
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-css.js263
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-js.js431
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-lisp.js419
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-markdown.js89
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-paren-match.js301
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-xml.js474
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-regexp.js96
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-textprop.js168
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-tokenizer.js335
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs.js559
120 files changed, 24417 insertions, 0 deletions
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/.svn/all-wcprops b/gstudio/static/gstudio/js/Gnowmacs/src/.svn/all-wcprops
new file mode 100644
index 0000000..546cd66
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/.svn/all-wcprops
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 34
+/svn/labcode/!svn/ver/56/Ymacs/src
+END
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/.svn/entries b/gstudio/static/gstudio/js/Gnowmacs/src/.svn/entries
new file mode 100644
index 0000000..5192ce1
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/.svn/entries
@@ -0,0 +1,40 @@
+10
+
+dir
+60
+https://svn.gnowledge.org/svn/labcode/Ymacs/src
+https://svn.gnowledge.org/svn/labcode
+
+
+
+2011-07-04T13:18:15.544880Z
+56
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15bf0492-30b5-4620-9f24-ebed40bad4e9
+
+el
+dir
+
+css
+dir
+
+js
+dir
+
+js-minified
+dir
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/all-wcprops b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/all-wcprops
new file mode 100644
index 0000000..332c488
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/all-wcprops
@@ -0,0 +1,35 @@
+K 25
+svn:wc:ra_dav:version-url
+V 37
+/svn/labcode/!svn/ver/2/Ymacs/src/css
+END
+ymacs-dark.css
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/labcode/!svn/ver/2/Ymacs/src/css/ymacs-dark.css
+END
+ymacs.css
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/labcode/!svn/ver/2/Ymacs/src/css/ymacs.css
+END
+ymacs-syntax-dark.css
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/labcode/!svn/ver/2/Ymacs/src/css/ymacs-syntax-dark.css
+END
+ymacs-light.css
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/labcode/!svn/ver/2/Ymacs/src/css/ymacs-light.css
+END
+ymacs-syntax-light.css
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/labcode/!svn/ver/2/Ymacs/src/css/ymacs-syntax-light.css
+END
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/entries b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/entries
new file mode 100644
index 0000000..519cd96
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/entries
@@ -0,0 +1,201 @@
+10
+
+dir
+60
+https://svn.gnowledge.org/svn/labcode/Ymacs/src/css
+https://svn.gnowledge.org/svn/labcode
+
+
+
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15bf0492-30b5-4620-9f24-ebed40bad4e9
+
+ymacs-dark.css
+file
+
+
+
+
+2012-01-23T13:07:10.461354Z
+663fc78e7ba3e24afc1e42ede7a496f7
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1681
+
+ymacs.css
+file
+
+
+
+
+2012-01-23T13:07:10.461354Z
+4671fca7e6e450d3044bfb8790ba5b29
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2401
+
+themes
+dir
+
+ymacs-syntax-dark.css
+file
+
+
+
+
+2012-01-23T13:07:10.461354Z
+44bda10d7f1a965982db9f4cdf5f0306
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5873
+
+ymacs-light.css
+file
+
+
+
+
+2012-01-23T13:07:10.461354Z
+6d5a4521616b67eb48db51ac923b0b4d
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1507
+
+ymacs-syntax-light.css
+file
+
+
+
+
+2012-01-23T13:07:10.461354Z
+c6e513b09ac800be5e67bfeacf4189d1
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4247
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-dark.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-dark.css.svn-base
new file mode 100644
index 0000000..adbc0ef
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-dark.css.svn-base
@@ -0,0 +1,60 @@
+@import url("ymacs-syntax-dark.css");
+
+@import url("themes/emacs-mishoo.css");
+@import url("themes/emacs-billw.css");
+@import url("themes/emacs-charcoal-black.css");
+@import url("themes/emacs-clarity-and-beauty.css");
+@import url("themes/emacs-classic.css");
+@import url("themes/emacs-gnome2.css");
+@import url("themes/emacs-calm-forest.css");
+@import url("themes/emacs-linh-dang-dark.css");
+@import url("themes/emacs-blue-mood.css");
+@import url("themes/emacs-zenburn.css");
+@import url("themes/emacs-standard-dark.css");
+
+.Ymacs-Theme-dark .Ymacs-caret {
+ background-color: #aaa;
+ /* outline: 1px solid #f83; */
+}
+
+.Ymacs-Theme-dark .Ymacs_Frame-focus .Ymacs-caret {
+ background-color: #f83;
+ color: #324 !important;
+ /* outline: none; */
+}
+
+.Ymacs-Theme-dark .Ymacs_Frame-focus .Ymacs-current-line {
+ background-color: #000;
+}
+
+.Ymacs-Theme-dark .Ymacs-overwrite-mode .Ymacs-caret {
+ background-color: #97f;
+ color: #fff;
+}
+
+.Ymacs-Theme-dark .Ymacs_Overlay .match-paren { background: #8f8; }
+.Ymacs-Theme-dark .Ymacs_Overlay .selection { background: #ccf; }
+.Ymacs-Theme-dark .Ymacs_Overlay .isearch { background: #ffc; }
+
+.Ymacs-Theme-dark .Ymacs_Modeline {
+ background-color: #777;
+ color: #111;
+ border-top: 1px solid #999;
+ border-bottom: 1px solid #000;
+}
+
+.Ymacs-Theme-dark .Ymacs_Frame-active .Ymacs_Modeline {
+ background-color: #bbb;
+ color: #000;
+ border-top: 1px solid #fff;
+}
+
+.Ymacs-Theme-dark .Ymacs-line-numbers .Ymacs-frame-content div.line:before {
+ border-right: 1px dotted #888;
+ background-color: #112;
+}
+
+.Ymacs-Theme-dark .Ymacs-line-numbers .Ymacs-frame-content div.Ymacs-current-line:before {
+ background-color: #000;
+ color: #f51;
+}
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-light.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-light.css.svn-base
new file mode 100644
index 0000000..8da102c
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-light.css.svn-base
@@ -0,0 +1,56 @@
+@import url("ymacs-syntax-light.css");
+
+@import url("themes/emacs-andreas.css");
+@import url("themes/emacs-high-contrast.css");
+@import url("themes/emacs-gtk-ide.css");
+@import url("themes/emacs-standard-xemacs.css");
+@import url("themes/emacs-bharadwaj.css");
+@import url("themes/emacs-scintilla.css");
+@import url("themes/emacs-vim-colors.css");
+@import url("themes/emacs-standard.css");
+
+.Ymacs-Theme-light .Ymacs-caret {
+ background-color: #888;
+}
+
+.Ymacs-Theme-light .Ymacs_Frame-focus .Ymacs-caret {
+ background-color: #f51;
+ color: #324;
+}
+
+.Ymacs-Theme-light .Ymacs_Frame-focus .Ymacs-current-line {
+ background-color: #fdb;
+}
+
+.Ymacs-Theme-light .Ymacs-overwrite-mode .Ymacs-caret {
+ background-color: #97f;
+ color: #fff;
+}
+
+
+.Ymacs-Theme-light .Ymacs_Overlay .match-paren { background: #080; }
+.Ymacs-Theme-light .Ymacs_Overlay .selection { background: #88f; opacity: 0.8; }
+.Ymacs-Theme-light .Ymacs_Overlay .isearch { background: #a22; }
+
+.Ymacs-Theme-light .Ymacs_Modeline {
+ background-color: #777;
+ color: #111;
+ border-top: 1px solid #999;
+ border-bottom: 1px solid #000;
+}
+
+.Ymacs-Theme-light .Ymacs_Frame-active .Ymacs_Modeline {
+ background-color: #bbb;
+ color: #000;
+ border-top: 1px solid #fff;
+}
+
+.Ymacs-Theme-light .Ymacs-line-numbers .Ymacs-frame-content div.line:before {
+ border-right: 1px dotted #888;
+ background-color: #edc;
+}
+
+.Ymacs-Theme-light .Ymacs-line-numbers .Ymacs-frame-content div.Ymacs-current-line:before {
+ background-color: #fdb;
+ color: #000;
+}
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-syntax-dark.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-syntax-dark.css.svn-base
new file mode 100644
index 0000000..4a5d8e8
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-syntax-dark.css.svn-base
@@ -0,0 +1,73 @@
+/* general stuff */
+
+.Ymacs-Theme-dark .Ymacs_Frame { color: wheat; background-color: #262626; }
+
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .type { color: #87ceeb; font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .builtin { color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .function-name { color: rgb(135, 206, 250); font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .variable-name { color: rgb(238, 221, 130); font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .constant { color: rgb(127, 255, 212); font-style: normal; }
+
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .string { color: rgb(250, 200, 80); font-style: normal; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .string-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .string-stopper { color: #c59500; }
+
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .regexp { color: #d9f; font-style: normal; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .regexp-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .regexp-stopper,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .regexp-modifier { color: #e4f; font-weight: bold; }
+
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .keyword { color: rgb(0, 255, 255); font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .comment,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .mcomment { color: #45cc00; font-style: normal; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .comment-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .mcomment-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .mcomment-stopper { color: #999; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .number { color: yellow; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .operator { color: #fff; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .error { color: #ff0; background-color: #a00; font-weight: bold; }
+/* .Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .trailing-whitespace { text-decoration: underline; color: #777; } */
+
+/* XML mode */
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-open-tag,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-close-tag { color: rgb(0, 255, 255); font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-attribute { color: rgb(106, 176, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-entity-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-entity-stopper { color: #f4c; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-entity { color: #e4f; font-style: normal; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-closetag-slash { color: #f51; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-open-bracket,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-close-bracket { color: #a56500; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-cdata { color: #bbb; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-stopper { color: #888; }
+
+/* Lisp mode */
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .lisp-keyword { color: #8f8; font-weight: bold; }
+
+/* Markdown mode */
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading1 { color: #8df; font-weight: bold; font-size: 200%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading2 { color: #8df; font-weight: bold; font-size: 170%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading3 { color: #8df; font-weight: bold; font-size: 150%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading4 { color: #8df; font-weight: bold; font-size: 130%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading5 { color: #8df; font-weight: bold; font-size: 110%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading6 { color: #8df; font-weight: bold; font-size: 100%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-blockquote1 { color: #8f8; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-blockquote2 { color: #88f; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-blockquote3 { color: #f8f; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-blockquote { color: #aaa; }
+
+/* Org Mode */
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-bold { font-weight: bold; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-italic { font-style: italic; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-underline { text-decoration: underline; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-strike { text-decoration: line-through; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-link-text {text-decoration: underline; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading1 { color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-syntax-light.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-syntax-light.css.svn-base
new file mode 100644
index 0000000..e52c77c
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs-syntax-light.css.svn-base
@@ -0,0 +1,58 @@
+/* general stuff */
+
+.Ymacs-Theme-light .Ymacs_Frame { color: #222; background-color: wheat;}
+
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .type { color: #6b8e23; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .builtin { color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .function-name { color: #5f5fff; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .variable-name { color: #ba8912; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .constant { color: #53868b; font-style: normal; }
+
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .string { color: #8b6969; font-style: normal; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .string-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .string-stopper { color: #6b4949; }
+
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .regexp { color: #8b008b; font-style: normal; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .regexp-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .regexp-stopper,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .regexp-modifier { color: #6b006b; font-weight: bold; }
+
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .keyword { color: #4020f0; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .comment,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .mcomment { color: #080; font-style: italic; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .comment-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .mcomment-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .mcomment-stopper { color: #333; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .number { color: #c00; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .operator { color: #000; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .error { color: #f00; background-color: #faa; font-weight: bold; }
+/* .Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .trailing-whitespace { text-decoration: underline; color: #777; } */
+
+/* XML mode */
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-open-tag,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-close-tag { color: #4020f0; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-attribute { color: #6b8e23; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-entity-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-entity-stopper { color: #d4a; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-entity { color: #c4d; font-style: normal; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-closetag-slash { color: #f51; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-open-bracket,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-close-bracket { color: #a56500; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-cdata { color: #555; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-stopper { color: #888; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-stopper { font-weight: bold; color: #9932cc; }
+
+/* Org Mode */
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-bold { font-weight: bold; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-italic { font-style: italic; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-underline { text-decoration: underline; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-strike { text-decoration: line-through; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-link-text {text-decoration: underline; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading1 { color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs.css.svn-base
new file mode 100644
index 0000000..37fc096
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/.svn/text-base/ymacs.css.svn-base
@@ -0,0 +1,92 @@
+@import url("ymacs-dark.css");
+@import url("ymacs-light.css");
+
+.Ymacs_Frame {
+ font-family: "DejaVu Sans Mono","Lucida Sans Typewriter",monospace;
+ overflow: hidden;
+}
+
+/* .Ymacs_Frame { */
+/* opacity: 0.8; */
+/* } */
+/* .Ymacs_Frame-active { */
+/* opacity: 1; */
+/* } */
+
+.Ymacs-frame-overlays {
+ overflow: hidden;
+ position: relative;
+}
+
+.Ymacs-frame-content {
+ white-space: pre;
+ padding-bottom: 1000px;
+}
+
+.Ymacs-caret {
+ margin: 0;
+ padding: 0;
+}
+
+.Ymacs_Frame-focus .Ymacs-caret {
+ opacity: 1;
+}
+
+.Ymacs_Minibuffer .Ymacs-caret { background-color: inherit; color: inherit; }
+
+.Ymacs_Minibuffer .Ymacs_Modeline { display: none; }
+
+.Ymacs_Minibuffer .Ymacs-frame-content {
+ padding-bottom: 0;
+}
+
+/* .Ymacs_Frame-hasOverlays .Ymacs-current-line { */
+/* background: transparent !important; */
+/* } */
+
+.Ymacs-overwrite-mode .Ymacs-caret {
+ -moz-border-radius: 15px;
+}
+
+.Ymacs_Overlay { position: absolute; right: 0; opacity: 0.5; filter: alpha(opacity=50); }
+.Ymacs_Overlay .match-paren { opacity: 0.4; filter: alpha(opacity=40); }
+.Ymacs_Overlay .selection { opacity: 0.7; filter: alpha(opacity=70); }
+
+.Ymacs_Message_Popup {
+ background-color: wheat;
+ padding: 10px;
+}
+
+.Ymacs_Modeline {
+ font-family: "Lucida Sans Typewriter",monospace;
+ white-space: pre;
+ padding-bottom: 1px;
+ overflow: hidden;
+}
+
+.Ymacs_Modeline:after {
+ content: "-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------";
+}
+
+.Ymacs_Message_Popup {
+ background-color: wheat;
+ color: #000;
+ padding: 10px;
+}
+
+.Ymacs_Completion_Popup .DlMenuItem .div2 { font-size: 100%; }
+
+.Ymacs-line-numbers .Ymacs-frame-content { counter-reset: ymacs-line 0; }
+.Ymacs-line-numbers .Ymacs-frame-content div.line { counter-increment: ymacs-line; }
+.Ymacs-line-numbers .Ymacs-frame-content div.line:before {
+ color: #888;
+ display: inline-block;
+ width: 3em;
+ padding-right: 0.5em;
+ margin-right: 0.5em;
+ content: counter(ymacs-line, decimal);
+ text-align: right;
+}
+
+.Ymacs-splitbar-horiz { border-bottom: 1px solid #000; }
+.Ymacs-splitbar-vert { border-left: 1px solid #000; border-right: 1px solid #000; border-bottom: 1px solid #000; }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/all-wcprops b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/all-wcprops
new file mode 100644
index 0000000..34372ee
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/all-wcprops
@@ -0,0 +1,119 @@
+K 25
+svn:wc:ra_dav:version-url
+V 44
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes
+END
+emacs-billw.css
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-billw.css
+END
+emacs-high-contrast.css
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-high-contrast.css
+END
+emacs-calm-forest.css
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-calm-forest.css
+END
+emacs-andreas.css
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-andreas.css
+END
+emacs-standard-xemacs.css
+K 25
+svn:wc:ra_dav:version-url
+V 70
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-standard-xemacs.css
+END
+emacs-standard-dark.css
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-standard-dark.css
+END
+emacs-linh-dang-dark.css
+K 25
+svn:wc:ra_dav:version-url
+V 69
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-linh-dang-dark.css
+END
+emacs-classic.css
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-classic.css
+END
+emacs-scintilla.css
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-scintilla.css
+END
+emacs-blue-mood.css
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-blue-mood.css
+END
+emacs-bharadwaj.css
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-bharadwaj.css
+END
+emacs-zenburn.css
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-zenburn.css
+END
+emacs-gtk-ide.css
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-gtk-ide.css
+END
+emacs-charcoal-black.css
+K 25
+svn:wc:ra_dav:version-url
+V 69
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-charcoal-black.css
+END
+emacs-gnome2.css
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-gnome2.css
+END
+emacs-vim-colors.css
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-vim-colors.css
+END
+emacs-mishoo.css
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-mishoo.css
+END
+emacs-clarity-and-beauty.css
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-clarity-and-beauty.css
+END
+emacs-standard.css
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/labcode/!svn/ver/2/Ymacs/src/css/themes/emacs-standard.css
+END
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/entries b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/entries
new file mode 100644
index 0000000..0c5ce3b
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/entries
@@ -0,0 +1,674 @@
+10
+
+dir
+60
+https://svn.gnowledge.org/svn/labcode/Ymacs/src/css/themes
+https://svn.gnowledge.org/svn/labcode
+
+
+
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15bf0492-30b5-4620-9f24-ebed40bad4e9
+
+emacs-billw.css
+file
+
+
+
+
+2012-01-23T13:07:10.453354Z
+0ef746fdf589588ca60196644a51bf3b
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4146
+
+emacs-high-contrast.css
+file
+
+
+
+
+2012-01-23T13:07:10.453354Z
+3ae2ab45da0b4fedf7ec25deda69f6e1
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5000
+
+emacs-calm-forest.css
+file
+
+
+
+
+2012-01-23T13:07:10.453354Z
+276fcd55811d81371a621b4941583ce8
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4431
+
+emacs-andreas.css
+file
+
+
+
+
+2012-01-23T13:07:10.453354Z
+17804e1dde35a46f18f2dbf9a48fc6a0
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4260
+
+emacs-standard-xemacs.css
+file
+
+
+
+
+2012-01-23T13:07:10.453354Z
+25d5f100e422920e0d7c63e1786ed5d6
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4716
+
+emacs-standard-dark.css
+file
+
+
+
+
+2012-01-23T13:07:10.453354Z
+b324336df57735d380edc083afc4c995
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4525
+
+emacs-linh-dang-dark.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+c118bc1ab946fbda6427f7d9121018b3
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4945
+
+emacs-classic.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+c32d1177f4dc31ed7a59392de267d7ec
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4386
+
+emacs-scintilla.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+960541e76305e57f391a5fd52c774edb
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4385
+
+emacs-blue-mood.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+38fdff6115932eafa1cdb0ecd4fd85f3
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4640
+
+emacs-bharadwaj.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+b24239adc67d2e6668fcb73502079275
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4431
+
+emacs-zenburn.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+0f738d58b07ae61fd0a29e1399bce2cf
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4347
+
+emacs-gtk-ide.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+db61db429fa70d8948d3e2953db857c3
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4658
+
+emacs-charcoal-black.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+4e7d266fbdd33bb4c74e683e89592830
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4808
+
+emacs-gnome2.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+cb75fe7ad38a8217785ee9f32b9783e4
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4352
+
+emacs-vim-colors.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+f0ec0cbc1a5e7021c413aa3a3faf623d
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4562
+
+emacs-mishoo.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+7bad7ea5d28819ba7e03183787117ea2
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3194
+
+emacs-clarity-and-beauty.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+08cce2ac7863ad5361cf9cb7d6468bb8
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4960
+
+emacs-standard.css
+file
+
+
+
+
+2012-01-23T13:07:10.457354Z
+d0ac8f9f4cc9c7ea231d34d2950ab504
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4240
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-andreas.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-andreas.css.svn-base
new file mode 100644
index 0000000..8208622
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-andreas.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-andreas .Ymacs_Frame { color: #000000; background-color: #ffffff; }
+.Ymacs-Theme-andreas .Ymacs_Frame .type { color: #681fab; }
+.Ymacs-Theme-andreas .Ymacs_Frame .builtin { color: #da70d6; }
+.Ymacs-Theme-andreas .Ymacs_Frame .function-name { color: #0000cd; }
+.Ymacs-Theme-andreas .Ymacs_Frame .variable-name { color: #0000cd; }
+.Ymacs-Theme-andreas .Ymacs_Frame .constant { color: #5f9ea0; }
+.Ymacs-Theme-andreas .Ymacs_Frame .string { color: #008b00; }
+.Ymacs-Theme-andreas .Ymacs_Frame .string-starter { color: #008b00; }
+.Ymacs-Theme-andreas .Ymacs_Frame .string-stopper { color: #008b00; }
+.Ymacs-Theme-andreas .Ymacs_Frame .regexp { color: #008b00; }
+.Ymacs-Theme-andreas .Ymacs_Frame .regexp-starter { color: #008b00; }
+.Ymacs-Theme-andreas .Ymacs_Frame .regexp-stopper { color: #008b00; }
+.Ymacs-Theme-andreas .Ymacs_Frame .regexp-modifier { color: #008b00; }
+.Ymacs-Theme-andreas .Ymacs_Frame .keyword { color: #ff0000; }
+.Ymacs-Theme-andreas .Ymacs_Frame .comment { color: #ffa500; }
+.Ymacs-Theme-andreas .Ymacs_Frame .mcomment { color: #ffa500; }
+.Ymacs-Theme-andreas .Ymacs_Frame .comment-starter { color: #b22222; }
+.Ymacs-Theme-andreas .Ymacs_Frame .mcomment-starter { color: #b22222; }
+.Ymacs-Theme-andreas .Ymacs_Frame .mcomment-stopper { color: #b22222; }
+.Ymacs-Theme-andreas .Ymacs_Frame .number { color: #5f9ea0; }
+.Ymacs-Theme-andreas .Ymacs_Frame .operator { }
+.Ymacs-Theme-andreas .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-open-tag { color: #0000cd; }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-close-tag { color: #0000cd; }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-attribute { color: #0000cd; }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-entity-starter { color: #5f9ea0; }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-entity-stopper { color: #5f9ea0; }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-entity { color: #5f9ea0; }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-cdata { color: #ffa500; }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs-Theme-andreas .Ymacs_Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs-Theme-andreas .Ymacs_Frame .lisp-keyword { color: #5f9ea0; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-blockquote { color: #ffa500; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-blockquote1 { color: #ffa500; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-blockquote2 { color: #ffa500; }
+.Ymacs-Theme-andreas .Ymacs_Frame .markdown-blockquote3 { color: #ffa500; }
+
+/* Org Mode */
+.Ymacs-Theme-andreas .Ymacs_Frame .org-bold { font-weight: bold; color: #da70d6; }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-italic { font-style: italic; color: #da70d6; }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-underline { text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-strike { text-decoration: line-through; color: #da70d6; }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-link-text {text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-heading1 { color: #da70d6; }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-andreas .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-bharadwaj.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-bharadwaj.css.svn-base
new file mode 100644
index 0000000..d154472
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-bharadwaj.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-bharadwaj .Ymacs_Frame { color: #000000; background-color: #dcdcdc; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .type { color: #36648b; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .builtin { color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .function-name { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .variable-name { color: #b8860b; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .constant { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .string { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .string-starter { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .string-stopper { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .regexp { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .regexp-starter { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .regexp-stopper { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .regexp-modifier { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .keyword { color: #00008b; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .comment { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .mcomment { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .comment-starter { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .mcomment-starter { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .mcomment-stopper { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .number { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .operator { }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .error { color: #d02090; font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-open-tag { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-close-tag { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-attribute { color: #b8860b; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-entity-starter { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-entity-stopper { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-entity { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-cdata { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .lisp-keyword { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.207em; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 1.768em; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 2.110em; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.646em; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-blockquote { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-blockquote1 { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-blockquote2 { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-blockquote3 { color: #8c8c8c; }
+
+/* Org Mode */
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-bold { font-weight: bold; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-italic { font-style: italic; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-underline { text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-strike { text-decoration: line-through; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-link-text {text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading1 { color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-billw.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-billw.css.svn-base
new file mode 100644
index 0000000..13ac882
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-billw.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-billw .Ymacs_Frame { color: #fff8dc; background-color: #000000; }
+.Ymacs-Theme-billw .Ymacs_Frame .type { color: #ffff00; }
+.Ymacs-Theme-billw .Ymacs_Frame .builtin { color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .function-name { color: #00fa9a; }
+.Ymacs-Theme-billw .Ymacs_Frame .variable-name { color: #ffa07a; }
+.Ymacs-Theme-billw .Ymacs_Frame .constant { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .string { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .string-starter { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .string-stopper { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .regexp { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .regexp-starter { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .regexp-stopper { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .regexp-modifier { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .keyword { color: #00ffff; }
+.Ymacs-Theme-billw .Ymacs_Frame .comment { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .mcomment { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .comment-starter { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .mcomment-starter { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .mcomment-stopper { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .number { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .operator { }
+.Ymacs-Theme-billw .Ymacs_Frame .error { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-open-tag { color: #00fa9a; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-close-tag { color: #00fa9a; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-attribute { color: #ffa07a; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-entity-starter { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-entity-stopper { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-entity { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-cdata { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-cdata-starter { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-cdata-stopper { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .lisp-keyword { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-blockquote { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-blockquote1 { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-blockquote2 { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-blockquote3 { color: #ffd700; }
+
+/* Org Mode */
+.Ymacs-Theme-billw .Ymacs_Frame .org-bold { font-weight: bold; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-italic { font-style: italic; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-underline { text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-strike { text-decoration: line-through; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-link-text {text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading1 { color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-blue-mood.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-blue-mood.css.svn-base
new file mode 100644
index 0000000..18a65bf
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-blue-mood.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-blue-mood .Ymacs_Frame { color: #f5f5f5; background-color: #104e8b; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .type { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .builtin { color: #f5deb3; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .function-name { color: #7fff00; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .variable-name { color: #ffffe0; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .constant { color: #00cdcd; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .string { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .string-starter { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .string-stopper { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .regexp { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .regexp-starter { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .regexp-stopper { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .regexp-modifier { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .keyword { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .comment { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .mcomment { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .comment-starter { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .mcomment-starter { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .mcomment-stopper { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .number { color: #00cdcd; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .operator { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .error { color: #ff6347; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-open-tag { color: #7fff00; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-close-tag { color: #7fff00; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-attribute { color: #ffffe0; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-entity-starter { color: #00cdcd; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-entity-stopper { color: #00cdcd; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-entity { color: #00cdcd; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-cdata { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-cdata-starter { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-cdata-stopper { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .lisp-keyword { color: #00cdcd; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading1 { font-size: 2.050em; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading2 { font-size: 2.050em; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading3 { font-size: 1.508em; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading5 { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-blockquote { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-blockquote1 { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-blockquote2 { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-blockquote3 { color: #b8b8b8; font-weight: bold; }
+
+/* Org Mode */
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-bold { font-weight: bold; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-italic { font-style: italic; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-underline { text-decoration: underline; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-strike { text-decoration: line-through; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-link-text {text-decoration: underline; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading1 { color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-calm-forest.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-calm-forest.css.svn-base
new file mode 100644
index 0000000..9d285e0
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-calm-forest.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-calm-forest .Ymacs_Frame { color: #00ff00; background-color: #1f1f1f; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .type { color: #98fb98; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .builtin { color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .function-name { color: #87cefa; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .variable-name { color: #eedd82; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .string { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .string-starter { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .string-stopper { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .regexp { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .regexp-starter { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .regexp-stopper { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .regexp-modifier { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .keyword { color: #00ffff; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .comment { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .mcomment { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .comment-starter { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .mcomment-starter { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .mcomment-stopper { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .operator { }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .error { color: #ffc0cb; font-weight: bold; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-open-tag { color: #87cefa; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-close-tag { color: #87cefa; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-attribute { color: #eedd82; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-cdata { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-cdata-starter { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-cdata-stopper { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .lisp-keyword { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading1 { font-size: 2.050em; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading2 { font-size: 2.050em; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading3 { font-size: 1.508em; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-blockquote { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-blockquote1 { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-blockquote2 { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-blockquote3 { color: #ff7f24; }
+
+/* Org Mode */
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-bold { font-weight: bold; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-italic { font-style: italic; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-underline { text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-strike { text-decoration: line-through; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-link-text {text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading1 { color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-charcoal-black.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-charcoal-black.css.svn-base
new file mode 100644
index 0000000..72fab37
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-charcoal-black.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-charcoal-black .Ymacs_Frame { color: #bebebe; background-color: #262626; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .type { color: #87ceeb; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .builtin { color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .function-name { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .variable-name { color: #40e0d0; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .constant { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .string { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .string-starter { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .string-stopper { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .regexp { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .regexp-starter { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .regexp-stopper { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .regexp-modifier { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .keyword { color: #afeeee; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .comment { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .mcomment { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .comment-starter { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .mcomment-starter { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .mcomment-stopper { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .number { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .operator { }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-open-tag { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-close-tag { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-attribute { color: #40e0d0; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-entity-starter { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-entity-stopper { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-entity { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-cdata { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-cdata-starter { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-cdata-stopper { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .lisp-keyword { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading5 { color: #f5f5dc; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-blockquote { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-blockquote1 { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-blockquote2 { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-blockquote3 { color: #add8e6; }
+
+/* Org Mode */
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-bold { font-weight: bold; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-italic { font-style: italic; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-underline { text-decoration: underline; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-strike { text-decoration: line-through; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-link-text {text-decoration: underline; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading1 { color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-clarity-and-beauty.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-clarity-and-beauty.css.svn-base
new file mode 100644
index 0000000..4d6be89
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-clarity-and-beauty.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame { color: #ffffff; background-color: #000000; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .type { color: #98fb98; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .builtin { color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .function-name { color: #87cefa; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .variable-name { color: #eedd82; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .string { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .string-starter { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .string-stopper { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .regexp { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .regexp-starter { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .regexp-stopper { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .regexp-modifier { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .keyword { color: #00ffff; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .comment { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .mcomment { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .comment-starter { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .mcomment-starter { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .mcomment-stopper { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .operator { }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .error { color: #ffc0cb; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-open-tag { color: #87cefa; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-close-tag { color: #87cefa; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-attribute { color: #eedd82; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-cdata { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-cdata-starter { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-cdata-stopper { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .lisp-keyword { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading1 { font-size: 2.050em; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading2 { font-size: 2.050em; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading3 { font-size: 1.508em; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading5 { color: #e6e6fa; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-blockquote { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-blockquote1 { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-blockquote2 { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-blockquote3 { color: #ff4500; }
+
+/* Org Mode */
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-bold { font-weight: bold; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-italic { font-style: italic; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-underline { text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-strike { text-decoration: line-through; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-link-text {text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading1 { color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-classic.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-classic.css.svn-base
new file mode 100644
index 0000000..2fb5773
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-classic.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-classic .Ymacs_Frame { color: #faebd7; background-color: #2f4f4f; }
+.Ymacs-Theme-classic .Ymacs_Frame .type { color: #7ccd7c; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .builtin { color: #98fb98; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .function-name { color: #63b8ff; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .variable-name { color: #fff68f; }
+.Ymacs-Theme-classic .Ymacs_Frame .constant { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .string { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .string-starter { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .string-stopper { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .regexp { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .regexp-starter { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .regexp-stopper { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .regexp-modifier { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .keyword { color: #00ffff; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .comment { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .mcomment { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .comment-starter { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .mcomment-starter { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .mcomment-stopper { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .number { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .operator { }
+.Ymacs-Theme-classic .Ymacs_Frame .error { color: #cd5c5c; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-open-tag { color: #63b8ff; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-close-tag { color: #63b8ff; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-attribute { color: #fff68f; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-cdata { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-cdata-starter { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-cdata-stopper { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .lisp-keyword { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading5 { color: #f5f5dc; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading6 { color: #f5deb3; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-blockquote { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-blockquote1 { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-blockquote2 { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-blockquote3 { color: #cd4f39; }
+
+/* Org Mode */
+.Ymacs-Theme-classic .Ymacs_Frame .org-bold { font-weight: bold; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-italic { font-style: italic; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-underline { text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-strike { text-decoration: line-through; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-link-text {text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading1 { color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-gnome2.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-gnome2.css.svn-base
new file mode 100644
index 0000000..271e7ce
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-gnome2.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-gnome2 .Ymacs_Frame { color: #f5deb3; background-color: #2f4f4f; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .type { color: #9acd32; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .builtin { color: #98fb98; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .function-name { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .variable-name { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .string { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .string-starter { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .string-stopper { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .regexp { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .regexp-starter { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .regexp-stopper { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .regexp-modifier { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .keyword { color: #fa8072; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .comment { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .mcomment { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .comment-starter { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .mcomment-starter { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .mcomment-stopper { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .operator { }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-open-tag { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-close-tag { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-attribute { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-cdata { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-cdata-starter { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-cdata-stopper { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .lisp-keyword { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading5 { color: #f5f5dc; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-blockquote { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-blockquote1 { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-blockquote2 { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-blockquote3 { color: #add8e6; }
+
+/* Org Mode */
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-bold { font-weight: bold; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-italic { font-style: italic; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-underline { text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-strike { text-decoration: line-through; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-link-text {text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading1 { color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-gtk-ide.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-gtk-ide.css.svn-base
new file mode 100644
index 0000000..940993c
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-gtk-ide.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-gtk-ide .Ymacs_Frame { color: #000000; background-color: #ffffff; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .type { color: #36648b; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .builtin { color: #228b22; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .function-name { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .variable-name { color: #b8860b; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .constant { color: #6b8e23; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .string { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .string-starter { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .string-stopper { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .regexp { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .regexp-starter { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .regexp-stopper { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .regexp-modifier { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .keyword { color: #00008b; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .comment { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .mcomment { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .comment-starter { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .mcomment-starter { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .mcomment-stopper { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .number { color: #6b8e23; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .operator { }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .error { color: #d02090; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-open-tag { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-close-tag { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-attribute { color: #b8860b; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-entity-starter { color: #6b8e23; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-entity-stopper { color: #6b8e23; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-entity { color: #6b8e23; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-cdata { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-cdata-starter { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-cdata-stopper { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .lisp-keyword { color: #6b8e23; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-blockquote { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-blockquote1 { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-blockquote2 { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-blockquote3 { color: #8c8c8c; font-weight: bold; }
+
+/* Org Mode */
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-bold { font-weight: bold; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-italic { font-style: italic; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-underline { text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-strike { text-decoration: line-through; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-link-text {text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading1 { color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-high-contrast.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-high-contrast.css.svn-base
new file mode 100644
index 0000000..2e39c6f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-high-contrast.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-high-contrast .Ymacs_Frame { color: #000000; background-color: #ffffff; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .type { color: #228b22; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .builtin { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .function-name { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .variable-name { color: #b8860b; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .constant { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .string { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .string-starter { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .string-stopper { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .regexp { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .regexp-starter { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .regexp-stopper { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .regexp-modifier { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .keyword { color: #a020f0; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .comment { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .mcomment { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .comment-starter { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .mcomment-starter { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .mcomment-stopper { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .number { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .operator { }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-open-tag { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-close-tag { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-attribute { color: #b8860b; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-entity-starter { color: #0000ff; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-entity-stopper { color: #0000ff; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-entity { color: #0000ff; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-cdata { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .lisp-keyword { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-blockquote { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-blockquote1 { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-blockquote2 { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-blockquote3 { color: #b22222; font-weight: bold; }
+
+/* Org Mode */
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-bold { font-weight: bold; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-italic { font-style: italic; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-underline { text-decoration: underline; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-strike { text-decoration: line-through; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-link-text {text-decoration: underline; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading1 { color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-linh-dang-dark.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-linh-dang-dark.css.svn-base
new file mode 100644
index 0000000..4d5f2da
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-linh-dang-dark.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame { color: #ffffff; background-color: #000000; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .type { color: #98fb98; font-weight: bold; font-size: 0.908em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .builtin { color: #4682b4; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .function-name { color: #87cefa; font-weight: bold; font-size: 0.908em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .variable-name { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .constant { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .string { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .string-starter { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .string-stopper { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .regexp { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .regexp-starter { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .regexp-stopper { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .regexp-modifier { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .keyword { color: #87cefa; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .comment { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .mcomment { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .comment-starter { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .mcomment-starter { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .mcomment-stopper { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .number { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .operator { }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .error { color: #d2691e; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-open-tag { color: #87cefa; font-weight: bold; font-size: 0.908em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-close-tag { color: #87cefa; font-weight: bold; font-size: 0.908em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-attribute { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-entity-starter { color: #ffd700; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-entity-stopper { color: #ffd700; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-entity { color: #ffd700; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-cdata { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-cdata-starter { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-cdata-stopper { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .lisp-keyword { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading5 { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-blockquote { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-blockquote1 { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-blockquote2 { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-blockquote3 { color: #cdc0b0; }
+
+/* Org Mode */
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-bold { font-weight: bold; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-italic { font-style: italic; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-underline { text-decoration: underline; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-strike { text-decoration: line-through; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-link-text {text-decoration: underline; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading1 { color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-mishoo.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-mishoo.css.svn-base
new file mode 100644
index 0000000..c2d877d
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-mishoo.css.svn-base
@@ -0,0 +1,45 @@
+.Ymacs-Theme-mishoo .Ymacs_Frame { color: #faebd7; background-color: #1e2e2e; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .type { color: #7ccd7c; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .builtin { color: #98fb98; font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .function-name { color: #63b8ff; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .variable-name { color: #fff68f; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .string { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .string-starter { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .string-stopper { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .regexp { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .regexp-starter { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .regexp-stopper { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .regexp-modifier { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .keyword { color: #00ffff; font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .comment { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .mcomment { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .comment-starter { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .mcomment-starter { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .mcomment-stopper { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .operator { }
+.Ymacs-Theme-mishoo .Ymacs_Frame .error { color: #ffff00; font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-open-tag { color: #63b8ff; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-close-tag { color: #63b8ff; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-attribute { color: #fff68f; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-cdata { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-cdata-starter { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-cdata-stopper { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .lisp-keyword { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 1.090em; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 0.924em; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 0.752em; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 0.628em; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading5 { color: #f5f5dc; font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-blockquote { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-blockquote1 { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-blockquote2 { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-blockquote3 { color: #32cd32; }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-scintilla.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-scintilla.css.svn-base
new file mode 100644
index 0000000..4d207a2
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-scintilla.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-scintilla .Ymacs_Frame { color: #000000; background-color: #ffffff; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .type { color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .builtin { color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .function-name { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .variable-name { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .constant { color: #0000ff; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .string { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .string-starter { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .string-stopper { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .regexp { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .regexp-starter { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .regexp-stopper { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .regexp-modifier { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .keyword { color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .comment { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .mcomment { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .comment-starter { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .mcomment-starter { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .mcomment-stopper { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .number { color: #0000ff; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .operator { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .error { color: #d02090; font-weight: bold; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-open-tag { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-close-tag { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-attribute { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-entity-starter { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-entity-stopper { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-entity { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-cdata { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .lisp-keyword { color: #0000ff; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.207em; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 1.768em; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 2.110em; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.646em; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading5 { color: #9acd32; font-weight: bold; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading6 { color: #ffff00; background-color: #666666; font-weight: bold; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-blockquote { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-blockquote1 { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-blockquote2 { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-blockquote3 { color: #228b22; }
+
+/* Org Mode */
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-bold { font-weight: bold; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-italic { font-style: italic; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-underline { text-decoration: underline; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-strike { text-decoration: line-through; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-link-text {text-decoration: underline; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading1 { color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard-dark.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard-dark.css.svn-base
new file mode 100644
index 0000000..53e293f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard-dark.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-standard-dark .Ymacs_Frame { color: #bebebe; background-color: #262626; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .type { color: #98fb98; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .builtin { color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .function-name { color: #87cefa; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .variable-name { color: #eedd82; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .string { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .string-starter { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .string-stopper { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .regexp { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .regexp-starter { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .regexp-stopper { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .regexp-modifier { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .keyword { color: #00ffff; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .comment { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .mcomment { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .comment-starter { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .mcomment-starter { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .mcomment-stopper { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .operator { }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .error { color: #ffc0cb; font-weight: bold; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-open-tag { color: #87cefa; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-close-tag { color: #87cefa; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-attribute { color: #eedd82; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-cdata { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-cdata-starter { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-cdata-stopper { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .lisp-keyword { color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading1 { font-size: 1.711em; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading2 { font-size: 1.434em; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading3 { font-size: 1.211em; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-blockquote { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-blockquote1 { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-blockquote2 { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-blockquote3 { color: #ff7f24; }
+
+/* Org Mode */
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-bold { font-weight: bold; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-italic { font-style: italic; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-underline { text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-strike { text-decoration: line-through; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-link-text {text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading1 { color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard-xemacs.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard-xemacs.css.svn-base
new file mode 100644
index 0000000..b6a30fb
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard-xemacs.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame { color: #000000; background-color: #cccccc; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .type { color: #4682b4; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .builtin { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .function-name { color: #8b2323; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .variable-name { color: #8b008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .constant { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .string { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .string-starter { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .string-stopper { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .regexp { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .regexp-starter { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .regexp-stopper { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .regexp-modifier { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .keyword { color: #8b0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .comment { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .mcomment { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .comment-starter { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .mcomment-starter { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .mcomment-stopper { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .number { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .operator { }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-open-tag { color: #8b2323; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-close-tag { color: #8b2323; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-attribute { color: #8b008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-entity-starter { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-entity-stopper { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-entity { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-cdata { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-cdata-starter { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-cdata-stopper { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .lisp-keyword { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-blockquote { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-blockquote1 { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-blockquote2 { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-blockquote3 { color: #00008b; }
+
+/* Org Mode */
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-bold { font-weight: bold; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-italic { font-style: italic; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-underline { text-decoration: underline; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-strike { text-decoration: line-through; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-link-text {text-decoration: underline; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading1 { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard.css.svn-base
new file mode 100644
index 0000000..2373592
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-standard.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-standard .Ymacs_Frame { color: #000000; background-color: #ffffff; }
+.Ymacs-Theme-standard .Ymacs_Frame .type { color: #228b22; }
+.Ymacs-Theme-standard .Ymacs_Frame .builtin { color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .function-name { color: #0000ff; }
+.Ymacs-Theme-standard .Ymacs_Frame .variable-name { color: #b8860b; }
+.Ymacs-Theme-standard .Ymacs_Frame .constant { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .string { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .string-starter { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .string-stopper { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .regexp { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .regexp-starter { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .regexp-stopper { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .regexp-modifier { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .keyword { color: #a020f0; }
+.Ymacs-Theme-standard .Ymacs_Frame .comment { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .mcomment { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .comment-starter { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .mcomment-starter { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .mcomment-stopper { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .number { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .operator { }
+.Ymacs-Theme-standard .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-open-tag { color: #0000ff; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-close-tag { color: #0000ff; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-attribute { color: #b8860b; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-entity-starter { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-entity-stopper { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-entity { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-cdata { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .lisp-keyword { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-blockquote { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-blockquote1 { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-blockquote2 { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-blockquote3 { color: #b22222; }
+
+/* Org Mode */
+.Ymacs-Theme-standard .Ymacs_Frame .org-bold { font-weight: bold; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-italic { font-style: italic; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-underline { text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-strike { text-decoration: line-through; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-link-text {text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading1 { color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-vim-colors.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-vim-colors.css.svn-base
new file mode 100644
index 0000000..f11d863
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-vim-colors.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-vim-colors .Ymacs_Frame { color: #000000; background-color: #fefefe; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .type { color: #228b22; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .builtin { color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .function-name { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .variable-name { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .constant { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .string { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .string-starter { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .string-stopper { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .regexp { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .regexp-starter { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .regexp-stopper { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .regexp-modifier { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .keyword { color: #a42929; font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .comment { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .mcomment { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .comment-starter { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .mcomment-starter { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .mcomment-stopper { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .number { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .operator { }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-open-tag { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-close-tag { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-attribute { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-entity-starter { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-entity-stopper { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-entity { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-cdata { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-cdata-starter { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-cdata-stopper { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .lisp-keyword { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-blockquote { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-blockquote1 { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-blockquote2 { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-blockquote3 { color: #0000ff; }
+
+/* Org Mode */
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-bold { font-weight: bold; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-italic { font-style: italic; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-underline { text-decoration: underline; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-strike { text-decoration: line-through; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-link-text {text-decoration: underline; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading1 { color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-zenburn.css.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-zenburn.css.svn-base
new file mode 100644
index 0000000..134d7c2
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/.svn/text-base/emacs-zenburn.css.svn-base
@@ -0,0 +1,59 @@
+.Ymacs-Theme-zenburn .Ymacs_Frame { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .type { color: #dedebe; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .builtin { color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .function-name { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .variable-name { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .constant { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .string { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .string-starter { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .string-stopper { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .regexp { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .regexp-starter { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .regexp-stopper { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .regexp-modifier { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .keyword { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .comment { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .mcomment { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .comment-starter { color: #6f7f6f; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .mcomment-starter { color: #6f7f6f; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .mcomment-stopper { color: #6f7f6f; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .number { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .operator { }
+.Ymacs-Theme-zenburn .Ymacs_Frame .error { color: #e2706f; background-color: #322222; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-open-tag { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-close-tag { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-attribute { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-entity-starter { color: #93bef2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-entity-stopper { color: #93bef2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-entity { color: #93bef2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-open-bracket { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-close-bracket { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-closetag-slash { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-cdata { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-cdata-starter { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-cdata-stopper { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .lisp-keyword { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-blockquote { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-blockquote1 { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-blockquote2 { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-blockquote3 { color: #7e9e7e; }
+
+/* Org Mode */
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-bold { font-weight: bold; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-italic { font-style: italic; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-underline { text-decoration: underline; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-strike { text-decoration: line-through; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-link-text {text-decoration: underline; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading1 { color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-andreas.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-andreas.css
new file mode 100644
index 0000000..cea5b2d
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-andreas.css
@@ -0,0 +1,59 @@
+.Ymacs -Theme-andreas .Ymacs _Frame { color: #000000; background-color: #ffffff; }
+.Ymacs -Theme-andreas .Ymacs _Frame .type { color: #681fab; }
+.Ymacs -Theme-andreas .Ymacs _Frame .builtin { color: #da70d6; }
+.Ymacs -Theme-andreas .Ymacs _Frame .function-name { color: #0000cd; }
+.Ymacs -Theme-andreas .Ymacs _Frame .variable-name { color: #0000cd; }
+.Ymacs -Theme-andreas .Ymacs _Frame .constant { color: #5f9ea0; }
+.Ymacs -Theme-andreas .Ymacs _Frame .string { color: #008b00; }
+.Ymacs -Theme-andreas .Ymacs _Frame .string-starter { color: #008b00; }
+.Ymacs -Theme-andreas .Ymacs _Frame .string-stopper { color: #008b00; }
+.Ymacs -Theme-andreas .Ymacs _Frame .regexp { color: #008b00; }
+.Ymacs -Theme-andreas .Ymacs _Frame .regexp-starter { color: #008b00; }
+.Ymacs -Theme-andreas .Ymacs _Frame .regexp-stopper { color: #008b00; }
+.Ymacs -Theme-andreas .Ymacs _Frame .regexp-modifier { color: #008b00; }
+.Ymacs -Theme-andreas .Ymacs _Frame .keyword { color: #ff0000; }
+.Ymacs -Theme-andreas .Ymacs _Frame .comment { color: #ffa500; }
+.Ymacs -Theme-andreas .Ymacs _Frame .mcomment { color: #ffa500; }
+.Ymacs -Theme-andreas .Ymacs _Frame .comment-starter { color: #b22222; }
+.Ymacs -Theme-andreas .Ymacs _Frame .mcomment-starter { color: #b22222; }
+.Ymacs -Theme-andreas .Ymacs _Frame .mcomment-stopper { color: #b22222; }
+.Ymacs -Theme-andreas .Ymacs _Frame .number { color: #5f9ea0; }
+.Ymacs -Theme-andreas .Ymacs _Frame .operator { }
+.Ymacs -Theme-andreas .Ymacs _Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-open-tag { color: #0000cd; }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-close-tag { color: #0000cd; }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-attribute { color: #0000cd; }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-entity-starter { color: #5f9ea0; }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-entity-stopper { color: #5f9ea0; }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-entity { color: #5f9ea0; }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-open-bracket { }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-close-bracket { }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-closetag-slash { }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-cdata { color: #ffa500; }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs -Theme-andreas .Ymacs _Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs -Theme-andreas .Ymacs _Frame .lisp-keyword { color: #5f9ea0; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-blockquote { color: #ffa500; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-blockquote1 { color: #ffa500; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-blockquote2 { color: #ffa500; }
+.Ymacs -Theme-andreas .Ymacs _Frame .markdown-blockquote3 { color: #ffa500; }
+
+/* Org Mode */
+.Ymacs -Theme-andreas .Ymacs _Frame .org-bold { font-weight: bold; color: #da70d6; }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-italic { font-style: italic; color: #da70d6; }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-underline { text-decoration: underline; color: #da70d6; }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-strike { text-decoration: line-through; color: #da70d6; }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-link-url {display: none; text-decoration: underline; color: #da70d6; }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-link-text {text-decoration: underline; color: #da70d6; }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-link-close {display:none; text-decoration: underline; color: #da70d6; }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-heading1 { color: #da70d6; }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs -Theme-andreas .Ymacs _Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-bharadwaj.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-bharadwaj.css
new file mode 100644
index 0000000..d154472
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-bharadwaj.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-bharadwaj .Ymacs_Frame { color: #000000; background-color: #dcdcdc; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .type { color: #36648b; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .builtin { color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .function-name { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .variable-name { color: #b8860b; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .constant { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .string { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .string-starter { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .string-stopper { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .regexp { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .regexp-starter { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .regexp-stopper { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .regexp-modifier { color: #8b0000; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .keyword { color: #00008b; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .comment { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .mcomment { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .comment-starter { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .mcomment-starter { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .mcomment-stopper { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .number { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .operator { }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .error { color: #d02090; font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-open-tag { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-close-tag { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-attribute { color: #b8860b; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-entity-starter { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-entity-stopper { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-entity { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-cdata { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .lisp-keyword { color: #6b8e23; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.207em; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 1.768em; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 2.110em; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.646em; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-blockquote { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-blockquote1 { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-blockquote2 { color: #8c8c8c; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .markdown-blockquote3 { color: #8c8c8c; }
+
+/* Org Mode */
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-bold { font-weight: bold; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-italic { font-style: italic; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-underline { text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-strike { text-decoration: line-through; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-link-text {text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading1 { color: #228b22; }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-bharadwaj .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-billw.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-billw.css
new file mode 100644
index 0000000..13ac882
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-billw.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-billw .Ymacs_Frame { color: #fff8dc; background-color: #000000; }
+.Ymacs-Theme-billw .Ymacs_Frame .type { color: #ffff00; }
+.Ymacs-Theme-billw .Ymacs_Frame .builtin { color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .function-name { color: #00fa9a; }
+.Ymacs-Theme-billw .Ymacs_Frame .variable-name { color: #ffa07a; }
+.Ymacs-Theme-billw .Ymacs_Frame .constant { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .string { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .string-starter { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .string-stopper { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .regexp { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .regexp-starter { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .regexp-stopper { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .regexp-modifier { color: #ffa500; }
+.Ymacs-Theme-billw .Ymacs_Frame .keyword { color: #00ffff; }
+.Ymacs-Theme-billw .Ymacs_Frame .comment { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .mcomment { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .comment-starter { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .mcomment-starter { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .mcomment-stopper { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .number { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .operator { }
+.Ymacs-Theme-billw .Ymacs_Frame .error { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-open-tag { color: #00fa9a; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-close-tag { color: #00fa9a; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-attribute { color: #ffa07a; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-entity-starter { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-entity-stopper { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-entity { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-cdata { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-cdata-starter { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .xml-cdata-stopper { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .lisp-keyword { color: #fa8072; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-blockquote { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-blockquote1 { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-blockquote2 { color: #ffd700; }
+.Ymacs-Theme-billw .Ymacs_Frame .markdown-blockquote3 { color: #ffd700; }
+
+/* Org Mode */
+.Ymacs-Theme-billw .Ymacs_Frame .org-bold { font-weight: bold; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-italic { font-style: italic; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-underline { text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-strike { text-decoration: line-through; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-link-text {text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading1 { color: #b0c4de; }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-billw .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-blue-mood.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-blue-mood.css
new file mode 100644
index 0000000..18a65bf
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-blue-mood.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-blue-mood .Ymacs_Frame { color: #f5f5f5; background-color: #104e8b; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .type { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .builtin { color: #f5deb3; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .function-name { color: #7fff00; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .variable-name { color: #ffffe0; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .constant { color: #00cdcd; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .string { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .string-starter { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .string-stopper { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .regexp { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .regexp-starter { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .regexp-stopper { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .regexp-modifier { color: #ff6347; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .keyword { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .comment { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .mcomment { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .comment-starter { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .mcomment-starter { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .mcomment-stopper { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .number { color: #00cdcd; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .operator { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .error { color: #ff6347; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-open-tag { color: #7fff00; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-close-tag { color: #7fff00; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-attribute { color: #ffffe0; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-entity-starter { color: #00cdcd; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-entity-stopper { color: #00cdcd; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-entity { color: #00cdcd; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-cdata { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-cdata-starter { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .xml-cdata-stopper { color: #b8b8b8; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .lisp-keyword { color: #00cdcd; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading1 { font-size: 2.050em; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading2 { font-size: 2.050em; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading3 { font-size: 1.508em; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading5 { }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-blockquote { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-blockquote1 { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-blockquote2 { color: #b8b8b8; font-weight: bold; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .markdown-blockquote3 { color: #b8b8b8; font-weight: bold; }
+
+/* Org Mode */
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-bold { font-weight: bold; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-italic { font-style: italic; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-underline { text-decoration: underline; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-strike { text-decoration: line-through; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-link-text {text-decoration: underline; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading1 { color: #f5deb3; }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-blue-mood .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-calm-forest.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-calm-forest.css
new file mode 100644
index 0000000..9d285e0
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-calm-forest.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-calm-forest .Ymacs_Frame { color: #00ff00; background-color: #1f1f1f; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .type { color: #98fb98; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .builtin { color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .function-name { color: #87cefa; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .variable-name { color: #eedd82; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .string { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .string-starter { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .string-stopper { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .regexp { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .regexp-starter { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .regexp-stopper { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .regexp-modifier { color: #ffa07a; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .keyword { color: #00ffff; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .comment { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .mcomment { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .comment-starter { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .mcomment-starter { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .mcomment-stopper { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .operator { }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .error { color: #ffc0cb; font-weight: bold; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-open-tag { color: #87cefa; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-close-tag { color: #87cefa; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-attribute { color: #eedd82; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-cdata { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-cdata-starter { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .xml-cdata-stopper { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .lisp-keyword { color: #7fffd4; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading1 { font-size: 2.050em; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading2 { font-size: 2.050em; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading3 { font-size: 1.508em; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-blockquote { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-blockquote1 { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-blockquote2 { color: #ff7f24; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .markdown-blockquote3 { color: #ff7f24; }
+
+/* Org Mode */
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-bold { font-weight: bold; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-italic { font-style: italic; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-underline { text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-strike { text-decoration: line-through; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-link-text {text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading1 { color: #b0c4de; }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-calm-forest .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-charcoal-black.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-charcoal-black.css
new file mode 100644
index 0000000..72fab37
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-charcoal-black.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-charcoal-black .Ymacs_Frame { color: #bebebe; background-color: #262626; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .type { color: #87ceeb; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .builtin { color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .function-name { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .variable-name { color: #40e0d0; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .constant { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .string { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .string-starter { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .string-stopper { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .regexp { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .regexp-starter { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .regexp-stopper { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .regexp-modifier { color: #87cefa; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .keyword { color: #afeeee; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .comment { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .mcomment { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .comment-starter { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .mcomment-starter { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .mcomment-stopper { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .number { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .operator { }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-open-tag { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-close-tag { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-attribute { color: #40e0d0; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-entity-starter { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-entity-stopper { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-entity { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-cdata { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-cdata-starter { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .xml-cdata-stopper { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .lisp-keyword { color: #98fb98; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading5 { color: #f5f5dc; font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-blockquote { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-blockquote1 { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-blockquote2 { color: #add8e6; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .markdown-blockquote3 { color: #add8e6; }
+
+/* Org Mode */
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-bold { font-weight: bold; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-italic { font-style: italic; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-underline { text-decoration: underline; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-strike { text-decoration: line-through; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-link-text {text-decoration: underline; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading1 { color: #7fffd4; }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-charcoal-black .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-clarity-and-beauty.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-clarity-and-beauty.css
new file mode 100644
index 0000000..4d6be89
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-clarity-and-beauty.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame { color: #ffffff; background-color: #000000; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .type { color: #98fb98; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .builtin { color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .function-name { color: #87cefa; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .variable-name { color: #eedd82; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .string { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .string-starter { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .string-stopper { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .regexp { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .regexp-starter { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .regexp-stopper { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .regexp-modifier { color: #ffa07a; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .keyword { color: #00ffff; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .comment { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .mcomment { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .comment-starter { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .mcomment-starter { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .mcomment-stopper { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .operator { }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .error { color: #ffc0cb; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-open-tag { color: #87cefa; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-close-tag { color: #87cefa; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-attribute { color: #eedd82; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-cdata { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-cdata-starter { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .xml-cdata-stopper { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .lisp-keyword { color: #7fffd4; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading1 { font-size: 2.050em; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading2 { font-size: 2.050em; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading3 { font-size: 1.508em; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading5 { color: #e6e6fa; font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-blockquote { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-blockquote1 { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-blockquote2 { color: #ff4500; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .markdown-blockquote3 { color: #ff4500; }
+
+/* Org Mode */
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-bold { font-weight: bold; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-italic { font-style: italic; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-underline { text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-strike { text-decoration: line-through; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-link-text {text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading1 { color: #b0c4de; }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-clarity-and-beauty .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-classic.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-classic.css
new file mode 100644
index 0000000..2fb5773
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-classic.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-classic .Ymacs_Frame { color: #faebd7; background-color: #2f4f4f; }
+.Ymacs-Theme-classic .Ymacs_Frame .type { color: #7ccd7c; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .builtin { color: #98fb98; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .function-name { color: #63b8ff; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .variable-name { color: #fff68f; }
+.Ymacs-Theme-classic .Ymacs_Frame .constant { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .string { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .string-starter { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .string-stopper { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .regexp { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .regexp-starter { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .regexp-stopper { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .regexp-modifier { color: #cd8162; }
+.Ymacs-Theme-classic .Ymacs_Frame .keyword { color: #00ffff; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .comment { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .mcomment { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .comment-starter { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .mcomment-starter { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .mcomment-stopper { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .number { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .operator { }
+.Ymacs-Theme-classic .Ymacs_Frame .error { color: #cd5c5c; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-open-tag { color: #63b8ff; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-close-tag { color: #63b8ff; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-attribute { color: #fff68f; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-cdata { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-cdata-starter { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .xml-cdata-stopper { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .lisp-keyword { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading5 { color: #f5f5dc; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-heading6 { color: #f5deb3; font-weight: bold; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-blockquote { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-blockquote1 { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-blockquote2 { color: #cd4f39; }
+.Ymacs-Theme-classic .Ymacs_Frame .markdown-blockquote3 { color: #cd4f39; }
+
+/* Org Mode */
+.Ymacs-Theme-classic .Ymacs_Frame .org-bold { font-weight: bold; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-italic { font-style: italic; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-underline { text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-strike { text-decoration: line-through; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-link-text {text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading1 { color: #98fb98; }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-classic .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-gnome2.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-gnome2.css
new file mode 100644
index 0000000..271e7ce
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-gnome2.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-gnome2 .Ymacs_Frame { color: #f5deb3; background-color: #2f4f4f; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .type { color: #9acd32; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .builtin { color: #98fb98; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .function-name { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .variable-name { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .string { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .string-starter { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .string-stopper { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .regexp { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .regexp-starter { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .regexp-stopper { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .regexp-modifier { color: #ffa07a; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .keyword { color: #fa8072; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .comment { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .mcomment { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .comment-starter { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .mcomment-starter { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .mcomment-stopper { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .operator { }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-open-tag { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-close-tag { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-attribute { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-cdata { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-cdata-starter { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .xml-cdata-stopper { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .lisp-keyword { color: #7fffd4; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading5 { color: #f5f5dc; font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-blockquote { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-blockquote1 { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-blockquote2 { color: #add8e6; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .markdown-blockquote3 { color: #add8e6; }
+
+/* Org Mode */
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-bold { font-weight: bold; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-italic { font-style: italic; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-underline { text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-strike { text-decoration: line-through; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-link-text {text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading1 { color: #98fb98; }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-gnome2 .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-gtk-ide.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-gtk-ide.css
new file mode 100644
index 0000000..940993c
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-gtk-ide.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-gtk-ide .Ymacs_Frame { color: #000000; background-color: #ffffff; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .type { color: #36648b; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .builtin { color: #228b22; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .function-name { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .variable-name { color: #b8860b; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .constant { color: #6b8e23; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .string { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .string-starter { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .string-stopper { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .regexp { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .regexp-starter { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .regexp-stopper { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .regexp-modifier { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .keyword { color: #00008b; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .comment { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .mcomment { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .comment-starter { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .mcomment-starter { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .mcomment-stopper { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .number { color: #6b8e23; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .operator { }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .error { color: #d02090; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-open-tag { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-close-tag { color: #6a5acd; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-attribute { color: #b8860b; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-entity-starter { color: #6b8e23; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-entity-stopper { color: #6b8e23; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-entity { color: #6b8e23; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-cdata { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-cdata-starter { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .xml-cdata-stopper { color: #8c8c8c; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .lisp-keyword { color: #6b8e23; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-blockquote { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-blockquote1 { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-blockquote2 { color: #8c8c8c; font-weight: bold; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .markdown-blockquote3 { color: #8c8c8c; font-weight: bold; }
+
+/* Org Mode */
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-bold { font-weight: bold; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-italic { font-style: italic; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-underline { text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-strike { text-decoration: line-through; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-link-text {text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading1 { color: #228b22; }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-gtk-ide .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-high-contrast.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-high-contrast.css
new file mode 100644
index 0000000..2e39c6f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-high-contrast.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-high-contrast .Ymacs_Frame { color: #000000; background-color: #ffffff; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .type { color: #228b22; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .builtin { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .function-name { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .variable-name { color: #b8860b; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .constant { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .string { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .string-starter { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .string-stopper { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .regexp { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .regexp-starter { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .regexp-stopper { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .regexp-modifier { color: #006400; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .keyword { color: #a020f0; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .comment { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .mcomment { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .comment-starter { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .mcomment-starter { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .mcomment-stopper { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .number { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .operator { }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-open-tag { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-close-tag { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-attribute { color: #b8860b; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-entity-starter { color: #0000ff; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-entity-stopper { color: #0000ff; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-entity { color: #0000ff; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-cdata { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .lisp-keyword { color: #0000ff; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-blockquote { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-blockquote1 { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-blockquote2 { color: #b22222; font-weight: bold; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .markdown-blockquote3 { color: #b22222; font-weight: bold; }
+
+/* Org Mode */
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-bold { font-weight: bold; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-italic { font-style: italic; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-underline { text-decoration: underline; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-strike { text-decoration: line-through; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-link-text {text-decoration: underline; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading1 { color: #ff0000; }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-high-contrast .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-linh-dang-dark.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-linh-dang-dark.css
new file mode 100644
index 0000000..4d5f2da
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-linh-dang-dark.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame { color: #ffffff; background-color: #000000; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .type { color: #98fb98; font-weight: bold; font-size: 0.908em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .builtin { color: #4682b4; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .function-name { color: #87cefa; font-weight: bold; font-size: 0.908em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .variable-name { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .constant { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .string { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .string-starter { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .string-stopper { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .regexp { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .regexp-starter { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .regexp-stopper { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .regexp-modifier { color: #deb887; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .keyword { color: #87cefa; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .comment { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .mcomment { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .comment-starter { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .mcomment-starter { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .mcomment-stopper { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .number { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .operator { }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .error { color: #d2691e; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-open-tag { color: #87cefa; font-weight: bold; font-size: 0.908em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-close-tag { color: #87cefa; font-weight: bold; font-size: 0.908em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-attribute { color: #7fffd4; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-entity-starter { color: #ffd700; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-entity-stopper { color: #ffd700; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-entity { color: #ffd700; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-cdata { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-cdata-starter { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .xml-cdata-stopper { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .lisp-keyword { color: #ffd700; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading5 { color: #8b0000; font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-blockquote { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-blockquote1 { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-blockquote2 { color: #cdc0b0; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .markdown-blockquote3 { color: #cdc0b0; }
+
+/* Org Mode */
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-bold { font-weight: bold; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-italic { font-style: italic; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-underline { text-decoration: underline; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-strike { text-decoration: line-through; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-link-text {text-decoration: underline; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading1 { color: #4682b4; }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-linh-dang-dark .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-mishoo.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-mishoo.css
new file mode 100644
index 0000000..c2d877d
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-mishoo.css
@@ -0,0 +1,45 @@
+.Ymacs-Theme-mishoo .Ymacs_Frame { color: #faebd7; background-color: #1e2e2e; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .type { color: #7ccd7c; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .builtin { color: #98fb98; font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .function-name { color: #63b8ff; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .variable-name { color: #fff68f; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .string { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .string-starter { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .string-stopper { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .regexp { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .regexp-starter { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .regexp-stopper { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .regexp-modifier { color: #ffa500; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .keyword { color: #00ffff; font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .comment { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .mcomment { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .comment-starter { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .mcomment-starter { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .mcomment-stopper { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .operator { }
+.Ymacs-Theme-mishoo .Ymacs_Frame .error { color: #ffff00; font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-open-tag { color: #63b8ff; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-close-tag { color: #63b8ff; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-attribute { color: #fff68f; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-cdata { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-cdata-starter { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .xml-cdata-stopper { color: #daa520; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .lisp-keyword { color: #7fffd4; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 1.090em; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 0.924em; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 0.752em; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 0.628em; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading5 { color: #f5f5dc; font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-blockquote { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-blockquote1 { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-blockquote2 { color: #32cd32; }
+.Ymacs-Theme-mishoo .Ymacs_Frame .markdown-blockquote3 { color: #32cd32; }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-scintilla.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-scintilla.css
new file mode 100644
index 0000000..4d207a2
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-scintilla.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-scintilla .Ymacs_Frame { color: #000000; background-color: #ffffff; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .type { color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .builtin { color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .function-name { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .variable-name { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .constant { color: #0000ff; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .string { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .string-starter { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .string-stopper { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .regexp { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .regexp-starter { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .regexp-stopper { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .regexp-modifier { color: #8b008b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .keyword { color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .comment { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .mcomment { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .comment-starter { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .mcomment-starter { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .mcomment-stopper { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .number { color: #0000ff; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .operator { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .error { color: #d02090; font-weight: bold; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-open-tag { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-close-tag { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-attribute { color: #008b8b; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-entity-starter { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-entity-stopper { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-entity { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-cdata { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .lisp-keyword { color: #0000ff; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.207em; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 1.768em; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 2.110em; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.646em; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading5 { color: #9acd32; font-weight: bold; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-heading6 { color: #ffff00; background-color: #666666; font-weight: bold; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-blockquote { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-blockquote1 { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-blockquote2 { color: #228b22; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .markdown-blockquote3 { color: #228b22; }
+
+/* Org Mode */
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-bold { font-weight: bold; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-italic { font-style: italic; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-underline { text-decoration: underline; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-strike { text-decoration: line-through; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-link-text {text-decoration: underline; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading1 { color: #000080; }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-scintilla .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard-dark.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard-dark.css
new file mode 100644
index 0000000..53e293f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard-dark.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-standard-dark .Ymacs_Frame { color: #bebebe; background-color: #262626; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .type { color: #98fb98; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .builtin { color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .function-name { color: #87cefa; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .variable-name { color: #eedd82; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .constant { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .string { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .string-starter { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .string-stopper { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .regexp { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .regexp-starter { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .regexp-stopper { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .regexp-modifier { color: #ffa07a; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .keyword { color: #00ffff; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .comment { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .mcomment { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .comment-starter { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .mcomment-starter { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .mcomment-stopper { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .number { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .operator { }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .error { color: #ffc0cb; font-weight: bold; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-open-tag { color: #87cefa; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-close-tag { color: #87cefa; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-attribute { color: #eedd82; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-entity-starter { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-entity-stopper { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-entity { color: #7fffd4; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-cdata { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-cdata-starter { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .xml-cdata-stopper { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .lisp-keyword { color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading1 { font-size: 1.711em; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading2 { font-size: 1.434em; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading3 { font-size: 1.211em; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-blockquote { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-blockquote1 { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-blockquote2 { color: #ff7f24; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .markdown-blockquote3 { color: #ff7f24; }
+
+/* Org Mode */
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-bold { font-weight: bold; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-italic { font-style: italic; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-underline { text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-strike { text-decoration: line-through; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-link-text {text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading1 { color: #b0c4de; }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-standard-dark .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard-xemacs.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard-xemacs.css
new file mode 100644
index 0000000..b6a30fb
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard-xemacs.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame { color: #000000; background-color: #cccccc; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .type { color: #4682b4; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .builtin { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .function-name { color: #8b2323; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .variable-name { color: #8b008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .constant { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .string { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .string-starter { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .string-stopper { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .regexp { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .regexp-starter { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .regexp-stopper { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .regexp-modifier { color: #008b00; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .keyword { color: #8b0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .comment { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .mcomment { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .comment-starter { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .mcomment-starter { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .mcomment-stopper { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .number { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .operator { }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-open-tag { color: #8b2323; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-close-tag { color: #8b2323; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-attribute { color: #8b008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-entity-starter { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-entity-stopper { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-entity { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-cdata { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-cdata-starter { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .xml-cdata-stopper { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .lisp-keyword { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading1 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading2 { font-weight: bold; font-size: 2.050em; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading3 { font-weight: bold; font-size: 1.508em; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading4 { font-weight: bold; font-size: 1.925em; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-blockquote { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-blockquote1 { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-blockquote2 { color: #00008b; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .markdown-blockquote3 { color: #00008b; }
+
+/* Org Mode */
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-bold { font-weight: bold; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-italic { font-style: italic; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-underline { text-decoration: underline; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-strike { text-decoration: line-through; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-link-text {text-decoration: underline; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading1 { color: #cd0000; }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-standard-xemacs .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard.css
new file mode 100644
index 0000000..2373592
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-standard.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-standard .Ymacs_Frame { color: #000000; background-color: #ffffff; }
+.Ymacs-Theme-standard .Ymacs_Frame .type { color: #228b22; }
+.Ymacs-Theme-standard .Ymacs_Frame .builtin { color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .function-name { color: #0000ff; }
+.Ymacs-Theme-standard .Ymacs_Frame .variable-name { color: #b8860b; }
+.Ymacs-Theme-standard .Ymacs_Frame .constant { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .string { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .string-starter { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .string-stopper { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .regexp { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .regexp-starter { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .regexp-stopper { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .regexp-modifier { color: #bc8f8f; }
+.Ymacs-Theme-standard .Ymacs_Frame .keyword { color: #a020f0; }
+.Ymacs-Theme-standard .Ymacs_Frame .comment { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .mcomment { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .comment-starter { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .mcomment-starter { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .mcomment-stopper { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .number { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .operator { }
+.Ymacs-Theme-standard .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-open-tag { color: #0000ff; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-close-tag { color: #0000ff; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-attribute { color: #b8860b; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-entity-starter { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-entity-stopper { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-entity { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-cdata { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-cdata-starter { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .xml-cdata-stopper { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .lisp-keyword { color: #5f9ea0; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-blockquote { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-blockquote1 { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-blockquote2 { color: #b22222; }
+.Ymacs-Theme-standard .Ymacs_Frame .markdown-blockquote3 { color: #b22222; }
+
+/* Org Mode */
+.Ymacs-Theme-standard .Ymacs_Frame .org-bold { font-weight: bold; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-italic { font-style: italic; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-underline { text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-strike { text-decoration: line-through; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-link-text {text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading1 { color: #da70d6; }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-standard .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-vim-colors.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-vim-colors.css
new file mode 100644
index 0000000..f11d863
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-vim-colors.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-vim-colors .Ymacs_Frame { color: #000000; background-color: #fefefe; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .type { color: #228b22; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .builtin { color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .function-name { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .variable-name { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .constant { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .string { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .string-starter { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .string-stopper { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .regexp { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .regexp-starter { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .regexp-stopper { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .regexp-modifier { color: #fe00fe; background-color: #f1f1f1; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .keyword { color: #a42929; font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .comment { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .mcomment { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .comment-starter { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .mcomment-starter { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .mcomment-stopper { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .number { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .operator { }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .error { color: #ff0000; font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-open-tag { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-close-tag { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-attribute { color: #008a8a; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-entity-starter { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-entity-stopper { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-entity { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-open-bracket { }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-close-bracket { }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-closetag-slash { }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-cdata { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-cdata-starter { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .xml-cdata-stopper { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .lisp-keyword { color: #008b00; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-blockquote { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-blockquote1 { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-blockquote2 { color: #0000ff; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .markdown-blockquote3 { color: #0000ff; }
+
+/* Org Mode */
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-bold { font-weight: bold; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-italic { font-style: italic; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-underline { text-decoration: underline; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-strike { text-decoration: line-through; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-link-text {text-decoration: underline; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading1 { color: #a020f0; }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-vim-colors .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-zenburn.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-zenburn.css
new file mode 100644
index 0000000..134d7c2
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/themes/emacs-zenburn.css
@@ -0,0 +1,59 @@
+.Ymacs-Theme-zenburn .Ymacs_Frame { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .type { color: #dedebe; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .builtin { color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .function-name { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .variable-name { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .constant { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .string { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .string-starter { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .string-stopper { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .regexp { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .regexp-starter { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .regexp-stopper { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .regexp-modifier { color: #cb9292; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .keyword { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .comment { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .mcomment { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .comment-starter { color: #6f7f6f; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .mcomment-starter { color: #6f7f6f; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .mcomment-stopper { color: #6f7f6f; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .number { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .operator { }
+.Ymacs-Theme-zenburn .Ymacs_Frame .error { color: #e2706f; background-color: #322222; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-open-tag { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-close-tag { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-attribute { color: #efdeae; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-entity-starter { color: #93bef2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-entity-stopper { color: #93bef2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-entity { color: #93bef2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-open-bracket { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-close-bracket { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-closetag-slash { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-cdata { color: #dbdbcb; background-color: #3e3e3e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-cdata-starter { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .xml-cdata-stopper { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .lisp-keyword { color: #dba2a2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading1 { font-size: 1.717em; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading2 { font-size: 1.400em; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading3 { font-size: 1.175em; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading4 { font-weight: bold; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading5 { font-weight: bold; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-heading6 { font-weight: bold; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-blockquote { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-blockquote1 { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-blockquote2 { color: #7e9e7e; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .markdown-blockquote3 { color: #7e9e7e; }
+
+/* Org Mode */
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-bold { font-weight: bold; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-italic { font-style: italic; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-underline { text-decoration: underline; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-strike { text-decoration: line-through; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-link-text {text-decoration: underline; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading1 { color: #8bcfd2; }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-zenburn .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-dark.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-dark.css
new file mode 100644
index 0000000..cbb9336
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-dark.css
@@ -0,0 +1,59 @@
+@import url("ymacs-syntax-dark.css");
+@import url("themes/emacs-mishoo.css");
+@import url("themes/emacs-billw.css");
+@import url("themes/emacs-charcoal-black.css");
+@import url("themes/emacs-clarity-and-beauty.css");
+@import url("themes/emacs-classic.css");
+@import url("themes/emacs-gnome2.css");
+@import url("themes/emacs-calm-forest.css");
+@import url("themes/emacs-linh-dang-dark.css");
+@import url("themes/emacs-blue-mood.css");
+@import url("themes/emacs-zenburn.css");
+@import url("themes/emacs-standard-dark.css");
+
+.Ymacs-Theme-dark .Ymacs-caret {
+ background-color: #aaa;
+ /* outline: 1px solid #f83; */
+}
+
+.Ymacs-Theme-dark .Ymacs_Frame-focus .Ymacs-caret {
+ background-color: #f83;
+ color: #324 !important;
+ /* outline: none; */
+}
+
+.Ymacs-Theme-dark .Ymacs_Frame-focus .Ymacs-current-line {
+ background-color: #000;
+}
+
+.Ymacs-Theme-dark .Ymacs-overwrite-mode .Ymacs-caret {
+ background-color: #97f;
+ color: #fff;
+}
+
+.Ymacs-Theme-dark .Ymacs_Overlay .match-paren { background: #8f8; }
+.Ymacs-Theme-dark .Ymacs_Overlay .selection { background: #ccf; }
+.Ymacs-Theme-dark .Ymacs_Overlay .isearch { background: #ffc; }
+
+.Ymacs-Theme-dark .Ymacs_Modeline {
+ background-color: #777;
+ color: #111;
+ border-top: 1px solid #999;
+ border-bottom: 1px solid #000;
+}
+
+.Ymacs-Theme-dark .Ymacs_Frame-active .Ymacs_Modeline {
+ background-color: #bbb;
+ color: #000;
+ border-top: 1px solid #fff;
+}
+
+.Ymacs-Theme-dark .Ymacs-line-numbers .Ymacs-frame-content div.line:before {
+ border-right: 1px dotted #888;
+ background-color: #112;
+}
+
+.Ymacs-Theme-dark .Ymacs-line-numbers .Ymacs-frame-content div.Ymacs-current-line:before {
+ background-color: #000;
+ color: #f51;
+}
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-light.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-light.css
new file mode 100644
index 0000000..7fdf73b
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-light.css
@@ -0,0 +1,55 @@
+@import url("ymacs-syntax-light.css");
+@import url("themes/emacs-andreas.css");
+@import url("themes/emacs-high-contrast.css");
+@import url("themes/emacs-gtk-ide.css");
+@import url("themes/emacs-standard-xemacs.css");
+@import url("themes/emacs-bharadwaj.css");
+@import url("themes/emacs-scintilla.css");
+@import url("themes/emacs-vim-colors.css");
+@import url("themes/emacs-standard.css");
+
+.Ymacs-Theme-light .Ymacs-caret {
+ background-color: #888;
+}
+
+.Ymacs-Theme-light .Ymacs_Frame-focus .Ymacs-caret {
+ background-color: #f51;
+ color: #324;
+}
+
+.Ymacs-Theme-light .Ymacs_Frame-focus .Ymacs-current-line {
+ background-color: #fdb;
+}
+
+.Ymacs-Theme-light .Ymacs-overwrite-mode .Ymacs-caret {
+ background-color: #97f;
+ color: #fff;
+}
+
+
+.Ymacs-Theme-light .Ymacs_Overlay .match-paren { background: #080; }
+.Ymacs-Theme-light .Ymacs_Overlay .selection { background: #88f; opacity: 0.8; }
+.Ymacs-Theme-light .Ymacs_Overlay .isearch { background: #a22; }
+
+.Ymacs-Theme-light .Ymacs_Modeline {
+ background-color: #777;
+ color: #111;
+ border-top: 1px solid #999;
+ border-bottom: 1px solid #000;
+}
+
+.Ymacs-Theme-light .Ymacs_Frame-active .Ymacs_Modeline {
+ background-color: #bbb;
+ color: #000;
+ border-top: 1px solid #fff;
+}
+
+.Ymacs-Theme-light .Ymacs-line-numbers .Ymacs-frame-content div.line:before {
+ border-right: 1px dotted #888;
+ background-color: #edc;
+}
+
+.Ymacs-Theme-light .Ymacs-line-numbers .Ymacs-frame-content div.Ymacs-current-line:before {
+ background-color: #fdb;
+ color: #000;
+}
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-syntax-dark.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-syntax-dark.css
new file mode 100644
index 0000000..4a5d8e8
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-syntax-dark.css
@@ -0,0 +1,73 @@
+/* general stuff */
+
+.Ymacs-Theme-dark .Ymacs_Frame { color: wheat; background-color: #262626; }
+
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .type { color: #87ceeb; font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .builtin { color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .function-name { color: rgb(135, 206, 250); font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .variable-name { color: rgb(238, 221, 130); font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .constant { color: rgb(127, 255, 212); font-style: normal; }
+
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .string { color: rgb(250, 200, 80); font-style: normal; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .string-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .string-stopper { color: #c59500; }
+
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .regexp { color: #d9f; font-style: normal; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .regexp-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .regexp-stopper,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .regexp-modifier { color: #e4f; font-weight: bold; }
+
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .keyword { color: rgb(0, 255, 255); font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .comment,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .mcomment { color: #45cc00; font-style: normal; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .comment-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .mcomment-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .mcomment-stopper { color: #999; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .number { color: yellow; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .operator { color: #fff; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .error { color: #ff0; background-color: #a00; font-weight: bold; }
+/* .Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .trailing-whitespace { text-decoration: underline; color: #777; } */
+
+/* XML mode */
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-open-tag,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-close-tag { color: rgb(0, 255, 255); font-weight: bold; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-attribute { color: rgb(106, 176, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-entity-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-entity-stopper { color: #f4c; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-entity { color: #e4f; font-style: normal; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-closetag-slash { color: #f51; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-open-bracket,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-close-bracket { color: #a56500; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-cdata { color: #bbb; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-starter,
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-stopper { color: #888; }
+
+/* Lisp mode */
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .lisp-keyword { color: #8f8; font-weight: bold; }
+
+/* Markdown mode */
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading1 { color: #8df; font-weight: bold; font-size: 200%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading2 { color: #8df; font-weight: bold; font-size: 170%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading3 { color: #8df; font-weight: bold; font-size: 150%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading4 { color: #8df; font-weight: bold; font-size: 130%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading5 { color: #8df; font-weight: bold; font-size: 110%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-heading6 { color: #8df; font-weight: bold; font-size: 100%; font-family: "Lucida Grande","Trebuchet MS",Verdana,Tahoma,sans-serif;; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-blockquote1 { color: #8f8; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-blockquote2 { color: #88f; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-blockquote3 { color: #f8f; }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .markdown-blockquote { color: #aaa; }
+
+/* Org Mode */
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-bold { font-weight: bold; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-italic { font-style: italic; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-underline { text-decoration: underline; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-strike { text-decoration: line-through; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-link-text {text-decoration: underline; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading1 { color: rgb(176, 196, 222); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-dark.Ymacs-Theme-y .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-syntax-light.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-syntax-light.css
new file mode 100644
index 0000000..e52c77c
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs-syntax-light.css
@@ -0,0 +1,58 @@
+/* general stuff */
+
+.Ymacs-Theme-light .Ymacs_Frame { color: #222; background-color: wheat;}
+
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .type { color: #6b8e23; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .builtin { color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .function-name { color: #5f5fff; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .variable-name { color: #ba8912; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .constant { color: #53868b; font-style: normal; }
+
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .string { color: #8b6969; font-style: normal; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .string-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .string-stopper { color: #6b4949; }
+
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .regexp { color: #8b008b; font-style: normal; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .regexp-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .regexp-stopper,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .regexp-modifier { color: #6b006b; font-weight: bold; }
+
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .keyword { color: #4020f0; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .comment,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .mcomment { color: #080; font-style: italic; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .comment-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .mcomment-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .mcomment-stopper { color: #333; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .number { color: #c00; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .operator { color: #000; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .error { color: #f00; background-color: #faa; font-weight: bold; }
+/* .Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .trailing-whitespace { text-decoration: underline; color: #777; } */
+
+/* XML mode */
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-open-tag,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-close-tag { color: #4020f0; font-weight: bold; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-attribute { color: #6b8e23; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-entity-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-entity-stopper { color: #d4a; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-entity { color: #c4d; font-style: normal; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-closetag-slash { color: #f51; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-open-bracket,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-close-bracket { color: #a56500; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-cdata { color: #555; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-starter,
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-stopper { color: #888; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .xml-cdata-stopper { font-weight: bold; color: #9932cc; }
+
+/* Org Mode */
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-bold { font-weight: bold; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-italic { font-style: italic; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-underline { text-decoration: underline; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-strike { text-decoration: line-through; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-link-url {display: none; text-decoration: underline; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-link-text {text-decoration: underline; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-link-close {display:none; text-decoration: underline; color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading1 { color: #9932cc; }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading2 { color: rgb(255, 255, 0); }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading3 { color: rgb(0, 255, 0); }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading4 { color: rgb(0, 255, 255); }
+.Ymacs-Theme-light.Ymacs-Theme-y .Ymacs_Frame .org-heading5 { color: rgb(255, 0, 0); }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs.css b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs.css
new file mode 100644
index 0000000..37fc096
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/css/ymacs.css
@@ -0,0 +1,92 @@
+@import url("ymacs-dark.css");
+@import url("ymacs-light.css");
+
+.Ymacs_Frame {
+ font-family: "DejaVu Sans Mono","Lucida Sans Typewriter",monospace;
+ overflow: hidden;
+}
+
+/* .Ymacs_Frame { */
+/* opacity: 0.8; */
+/* } */
+/* .Ymacs_Frame-active { */
+/* opacity: 1; */
+/* } */
+
+.Ymacs-frame-overlays {
+ overflow: hidden;
+ position: relative;
+}
+
+.Ymacs-frame-content {
+ white-space: pre;
+ padding-bottom: 1000px;
+}
+
+.Ymacs-caret {
+ margin: 0;
+ padding: 0;
+}
+
+.Ymacs_Frame-focus .Ymacs-caret {
+ opacity: 1;
+}
+
+.Ymacs_Minibuffer .Ymacs-caret { background-color: inherit; color: inherit; }
+
+.Ymacs_Minibuffer .Ymacs_Modeline { display: none; }
+
+.Ymacs_Minibuffer .Ymacs-frame-content {
+ padding-bottom: 0;
+}
+
+/* .Ymacs_Frame-hasOverlays .Ymacs-current-line { */
+/* background: transparent !important; */
+/* } */
+
+.Ymacs-overwrite-mode .Ymacs-caret {
+ -moz-border-radius: 15px;
+}
+
+.Ymacs_Overlay { position: absolute; right: 0; opacity: 0.5; filter: alpha(opacity=50); }
+.Ymacs_Overlay .match-paren { opacity: 0.4; filter: alpha(opacity=40); }
+.Ymacs_Overlay .selection { opacity: 0.7; filter: alpha(opacity=70); }
+
+.Ymacs_Message_Popup {
+ background-color: wheat;
+ padding: 10px;
+}
+
+.Ymacs_Modeline {
+ font-family: "Lucida Sans Typewriter",monospace;
+ white-space: pre;
+ padding-bottom: 1px;
+ overflow: hidden;
+}
+
+.Ymacs_Modeline:after {
+ content: "-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------";
+}
+
+.Ymacs_Message_Popup {
+ background-color: wheat;
+ color: #000;
+ padding: 10px;
+}
+
+.Ymacs_Completion_Popup .DlMenuItem .div2 { font-size: 100%; }
+
+.Ymacs-line-numbers .Ymacs-frame-content { counter-reset: ymacs-line 0; }
+.Ymacs-line-numbers .Ymacs-frame-content div.line { counter-increment: ymacs-line; }
+.Ymacs-line-numbers .Ymacs-frame-content div.line:before {
+ color: #888;
+ display: inline-block;
+ width: 3em;
+ padding-right: 0.5em;
+ margin-right: 0.5em;
+ content: counter(ymacs-line, decimal);
+ text-align: right;
+}
+
+.Ymacs-splitbar-horiz { border-bottom: 1px solid #000; }
+.Ymacs-splitbar-vert { border-left: 1px solid #000; border-right: 1px solid #000; border-bottom: 1px solid #000; }
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/all-wcprops b/gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/all-wcprops
new file mode 100644
index 0000000..d97414e
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/all-wcprops
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 36
+/svn/labcode/!svn/ver/2/Ymacs/src/el
+END
+ymacs-color-theme.el
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/labcode/!svn/ver/2/Ymacs/src/el/ymacs-color-theme.el
+END
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/entries b/gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/entries
new file mode 100644
index 0000000..fbf1d09
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+60
+https://svn.gnowledge.org/svn/labcode/Ymacs/src/el
+https://svn.gnowledge.org/svn/labcode
+
+
+
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15bf0492-30b5-4620-9f24-ebed40bad4e9
+
+ymacs-color-theme.el
+file
+
+
+
+
+2012-01-23T13:07:10.349353Z
+6b3f86816dcb60067a3647f17b8ba319
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6265
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/text-base/ymacs-color-theme.el.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/text-base/ymacs-color-theme.el.svn-base
new file mode 100644
index 0000000..7d2607f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/el/.svn/text-base/ymacs-color-theme.el.svn-base
@@ -0,0 +1,103 @@
+(require 'cl)
+(require 'nxml-mode)
+(require 'info)
+
+(defvar *ymacs-faces*) ; XXX: defparameter for Elisp?
+
+(defvar *ymacs-default-font-size*)
+
+(setq *ymacs-faces*
+ '(
+ ( "type" font-lock-type-face )
+ ( "builtin" font-lock-builtin-face )
+ ( "function-name" font-lock-function-name-face )
+ ( "variable-name" font-lock-variable-name-face )
+ ( "constant" font-lock-constant-face )
+ ( "string" font-lock-string-face )
+ ( "string-starter" font-lock-string-face )
+ ( "string-stopper" font-lock-string-face )
+ ( "regexp" font-lock-string-face )
+ ( "regexp-starter" font-lock-string-face )
+ ( "regexp-stopper" font-lock-string-face )
+ ( "regexp-modifier" font-lock-string-face )
+ ( "keyword" font-lock-keyword-face )
+ ( "comment" font-lock-comment-face )
+ ( "mcomment" font-lock-comment-face )
+ ( "comment-starter" font-lock-comment-delimiter-face )
+ ( "mcomment-starter" font-lock-comment-delimiter-face )
+ ( "mcomment-stopper" font-lock-comment-delimiter-face )
+ ( "number" font-lock-constant-face )
+ ( "operator" )
+ ( "error" font-lock-warning-face )
+ ( "xml-open-tag" font-lock-function-name-face )
+ ( "xml-close-tag" font-lock-function-name-face )
+ ( "xml-attribute" font-lock-variable-name-face )
+ ( "xml-entity-starter" nxml-entity-ref-delimiter )
+ ( "xml-entity-stopper" nxml-entity-ref-delimiter )
+ ( "xml-entity" nxml-entity-ref-name )
+ ( "xml-open-bracket" nxml-tag-delimiter )
+ ( "xml-close-bracket" nxml-tag-delimiter )
+ ( "xml-closetag-slash" nxml-tag-slash )
+ ( "xml-cdata" nxml-cdata-section-content font-lock-comment-face )
+ ( "xml-cdata-starter" nxml-cdata-section-delimiter font-lock-comment-delimiter-face )
+ ( "xml-cdata-stopper" nxml-cdata-section-delimiter font-lock-comment-delimiter-face )
+ ( "lisp-keyword" font-lock-constant-face )
+ ( "markdown-heading1" Info-title-1-face )
+ ( "markdown-heading2" Info-title-2-face )
+ ( "markdown-heading3" Info-title-3-face )
+ ( "markdown-heading4" Info-title-4-face )
+ ( "markdown-heading5" bold-italic )
+ ( "markdown-heading6" bold )
+ ( "markdown-blockquote" font-lock-comment-face )
+ ( "markdown-blockquote1" font-lock-comment-face )
+ ( "markdown-blockquote2" font-lock-comment-face )
+ ( "markdown-blockquote3" font-lock-comment-face )
+ ))
+
+(defun ymacs-color-css (color)
+ (let ((rgb (color-values color)))
+ (apply 'format "#%02x%02x%02x"
+ (mapcar (lambda (x)
+ (* 255 (/ x 65535.0))) rgb))))
+
+(defun ymacs-make-font-size (size)
+ (if (= size *ymacs-default-font-size*)
+ nil
+ (progn
+ (format "%.3fem" (/ size *ymacs-default-font-size*)))))
+
+(defun ymacs-face-css (faces &optional no-font)
+ (let* ((fg (find-if (lambda (f) (face-foreground f nil t)) faces))
+ (bg (find-if (lambda (f) (face-background f nil t)) faces))
+ (bold (find-if #'face-bold-p faces))
+ (face (first faces))
+ (font-size (and face
+ (not no-font)
+ (ymacs-make-font-size
+ (plist-get (font-face-attributes (face-font face)) :height)))))
+ (when fg
+ (insert " color: " (ymacs-color-css (face-foreground fg nil t)) ";"))
+ (when bg
+ (insert " background-color: " (ymacs-color-css (face-background bg nil t)) ";"))
+ (when bold
+ (insert " font-weight: bold;"))
+ (when font-size
+ (insert " font-size: " font-size ";"))))
+
+(defun ymacs-color-theme-print ()
+ (interactive)
+ (let ((*ymacs-default-font-size* (+ 0.0 ; force float :-/
+ (plist-get (font-face-attributes (face-font 'default)) :height))))
+ (interactive)
+ (switch-to-buffer (get-buffer-create "*Ymacs Theme*"))
+ (erase-buffer)
+ (insert ".Ymacs-Theme-NONAME .Ymacs_Frame {")
+ (ymacs-face-css '(default) t)
+ (insert " }\n")
+ (loop for i in *ymacs-faces*
+ for class = (car i)
+ for faces = (cdr i)
+ do
+ (insert ".Ymacs-Theme-NONAME .Ymacs_Frame ." class " {")
+ (ymacs-face-css faces)
+ (insert " }\n"))))
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/el/ymacs-color-theme.el b/gstudio/static/gstudio/js/Gnowmacs/src/el/ymacs-color-theme.el
new file mode 100644
index 0000000..7d2607f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/el/ymacs-color-theme.el
@@ -0,0 +1,103 @@
+(require 'cl)
+(require 'nxml-mode)
+(require 'info)
+
+(defvar *ymacs-faces*) ; XXX: defparameter for Elisp?
+
+(defvar *ymacs-default-font-size*)
+
+(setq *ymacs-faces*
+ '(
+ ( "type" font-lock-type-face )
+ ( "builtin" font-lock-builtin-face )
+ ( "function-name" font-lock-function-name-face )
+ ( "variable-name" font-lock-variable-name-face )
+ ( "constant" font-lock-constant-face )
+ ( "string" font-lock-string-face )
+ ( "string-starter" font-lock-string-face )
+ ( "string-stopper" font-lock-string-face )
+ ( "regexp" font-lock-string-face )
+ ( "regexp-starter" font-lock-string-face )
+ ( "regexp-stopper" font-lock-string-face )
+ ( "regexp-modifier" font-lock-string-face )
+ ( "keyword" font-lock-keyword-face )
+ ( "comment" font-lock-comment-face )
+ ( "mcomment" font-lock-comment-face )
+ ( "comment-starter" font-lock-comment-delimiter-face )
+ ( "mcomment-starter" font-lock-comment-delimiter-face )
+ ( "mcomment-stopper" font-lock-comment-delimiter-face )
+ ( "number" font-lock-constant-face )
+ ( "operator" )
+ ( "error" font-lock-warning-face )
+ ( "xml-open-tag" font-lock-function-name-face )
+ ( "xml-close-tag" font-lock-function-name-face )
+ ( "xml-attribute" font-lock-variable-name-face )
+ ( "xml-entity-starter" nxml-entity-ref-delimiter )
+ ( "xml-entity-stopper" nxml-entity-ref-delimiter )
+ ( "xml-entity" nxml-entity-ref-name )
+ ( "xml-open-bracket" nxml-tag-delimiter )
+ ( "xml-close-bracket" nxml-tag-delimiter )
+ ( "xml-closetag-slash" nxml-tag-slash )
+ ( "xml-cdata" nxml-cdata-section-content font-lock-comment-face )
+ ( "xml-cdata-starter" nxml-cdata-section-delimiter font-lock-comment-delimiter-face )
+ ( "xml-cdata-stopper" nxml-cdata-section-delimiter font-lock-comment-delimiter-face )
+ ( "lisp-keyword" font-lock-constant-face )
+ ( "markdown-heading1" Info-title-1-face )
+ ( "markdown-heading2" Info-title-2-face )
+ ( "markdown-heading3" Info-title-3-face )
+ ( "markdown-heading4" Info-title-4-face )
+ ( "markdown-heading5" bold-italic )
+ ( "markdown-heading6" bold )
+ ( "markdown-blockquote" font-lock-comment-face )
+ ( "markdown-blockquote1" font-lock-comment-face )
+ ( "markdown-blockquote2" font-lock-comment-face )
+ ( "markdown-blockquote3" font-lock-comment-face )
+ ))
+
+(defun ymacs-color-css (color)
+ (let ((rgb (color-values color)))
+ (apply 'format "#%02x%02x%02x"
+ (mapcar (lambda (x)
+ (* 255 (/ x 65535.0))) rgb))))
+
+(defun ymacs-make-font-size (size)
+ (if (= size *ymacs-default-font-size*)
+ nil
+ (progn
+ (format "%.3fem" (/ size *ymacs-default-font-size*)))))
+
+(defun ymacs-face-css (faces &optional no-font)
+ (let* ((fg (find-if (lambda (f) (face-foreground f nil t)) faces))
+ (bg (find-if (lambda (f) (face-background f nil t)) faces))
+ (bold (find-if #'face-bold-p faces))
+ (face (first faces))
+ (font-size (and face
+ (not no-font)
+ (ymacs-make-font-size
+ (plist-get (font-face-attributes (face-font face)) :height)))))
+ (when fg
+ (insert " color: " (ymacs-color-css (face-foreground fg nil t)) ";"))
+ (when bg
+ (insert " background-color: " (ymacs-color-css (face-background bg nil t)) ";"))
+ (when bold
+ (insert " font-weight: bold;"))
+ (when font-size
+ (insert " font-size: " font-size ";"))))
+
+(defun ymacs-color-theme-print ()
+ (interactive)
+ (let ((*ymacs-default-font-size* (+ 0.0 ; force float :-/
+ (plist-get (font-face-attributes (face-font 'default)) :height))))
+ (interactive)
+ (switch-to-buffer (get-buffer-create "*Ymacs Theme*"))
+ (erase-buffer)
+ (insert ".Ymacs-Theme-NONAME .Ymacs_Frame {")
+ (ymacs-face-css '(default) t)
+ (insert " }\n")
+ (loop for i in *ymacs-faces*
+ for class = (car i)
+ for faces = (cdr i)
+ do
+ (insert ".Ymacs-Theme-NONAME .Ymacs_Frame ." class " {")
+ (ymacs-face-css faces)
+ (insert " }\n"))))
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/gnow-server/gnow-server.el b/gstudio/static/gstudio/js/Gnowmacs/src/gnow-server/gnow-server.el
new file mode 100644
index 0000000..bffbc6c
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/gnow-server/gnow-server.el
@@ -0,0 +1,361 @@
+;; This file is part of Ymacs for GNOWSYS: Gnowledge Networking
+;; and Organizing System.
+
+;; Ymacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU Affero General Public License as
+;; published by the Free Software Foundation; either version 3 of
+;; the License, or (at your option) any later version.
+
+;; Ymacs 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 Affero General Public
+;; License along with Ymacs (agpl.txt); if not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301 USA59 Temple Place, Suite 330,
+
+;; Author: Divya <divyas15@gmail.com>
+
+
+(defcustom gnow-server-port 9292
+ "Local port the gnow server listens to."
+ :group 'gnow-server
+ :type 'integer)
+
+(defcustom gnow-server-host nil
+ "If not nil, accept connections from HOST address rather than just
+localhost. This may present a security issue."
+ :group 'gnow-server
+ :type 'boolean)
+
+(defcustom gnow-server-verbose nil
+ "If not nil, log connections and progress also to the echo area."
+ :group 'gnow-server
+ :type 'boolean)
+
+(defcustom gnow-server-done-hook nil
+ "Hook run when done gnowing a buffer for the Emacs HTTP gnow-server.
+Current buffer holds the text that is about to be sent back to the client."
+ :group 'gnow-server
+ :type 'hook)
+
+; frame options
+(defcustom gnow-server-new-frame t
+ "If not nil, gnow each buffer in a new frame (and raise it)."
+ :group 'gnow-server
+ :type 'boolean)
+
+(defcustom gnow-server-new-frame-minibuffer t
+ "Show the emacs frame's minibuffer if set to t; hide if nil."
+ :group 'gnow-server
+ :type 'boolean)
+
+(defcustom gnow-server-new-frame-menu-bar t
+ "Show the emacs frame's menu-bar if set to t; hide if nil."
+ :group 'gnow-server
+ :type 'boolean)
+
+(defcustom gnow-server-new-frame-mode-line t
+ "Show the emacs frame's mode-line if set to t; hide if nil."
+ :group 'gnow-server
+ :type 'boolean)
+
+;; Vars
+(defconst gnow-server-process-buffer-name " *gnow-server*"
+ "Template name of the gnow-server process buffers.")
+
+(defconst gnow-server-log-buffer-name "*gnow-server-log*"
+ "Template name of the gnow-server process buffers.")
+
+(defconst gnow-server-gnow-buffer-name "TEXTAREA"
+ "Template name of the gnow-server text editing buffers.")
+
+(defconst gnow-server-new-frame-title "Emacs TEXTAREA"
+ "Template name of the emacs frame's title.")
+
+(defconst gnow-server-new-frame-width 80
+ "The emacs frame's width.")
+
+(defconst gnow-server-new-frame-height 25
+ "The emacs frame's height.")
+
+(defvar gnow-server-proc 'nil
+ "Network process associated with the current edit, made local when
+ the edit buffer is created")
+
+(defvar gnow-server-frame 'nil
+ "The frame created for a new gnow-server process, made local when
+ then gnow buffer is created")
+
+(defvar gnow-server-clients '()
+ "List of all client processes associated with the server process.")
+
+(defvar gnow-server-phase nil
+ "Symbol indicating the state of the HTTP request parsing.")
+
+(defvar gnow-server-received nil
+ "Number of bytes received so far in the client buffer.
+Depending on the character encoding, may be different from the buffer length.")
+
+(defvar gnow-server-request nil
+ "The HTTP request (GET, HEAD, POST) received.")
+
+(defvar gnow-server-content-length nil
+ "The value gotten from the HTTP `Content-Length' header.")
+
+(defvar gnow-server-url nil
+ "The value gotten from the HTTP `x-url' header.")
+
+
+;; Gnow Server socket code
+;
+
+(defun gnow-server-start (&optional verbose)
+ "Start the gnow server.
+
+If argument VERBOSE is non-nil, logs all server activity to buffer `*gnow-server-log*'.
+When called interactivity, a prefix argument will cause it to be verbose.
+"
+ (interactive "P")
+ (if (process-status "gnow-server")
+ (message "An gnow-server process is already running")
+ (make-network-process
+ :name "gnow-server"
+ :buffer gnow-server-process-buffer-name
+ :family 'ipv4
+ :host (if gnow-server-host
+ gnow-server-host
+ 'local)
+ :service gnow-server-port
+ :log 'gnow-server-accept
+ :server 't)
+ (setq gnow-server-clients '())
+ (if verbose (get-buffer-create gnow-server-log-buffer-name))
+ (gnow-server-log nil "Created a new gnow-server process")))
+
+(defun gnow-server-stop nil
+ "Stop the gnow server"
+ (interactive)
+ (while gnow-server-clients
+ (gnow-server-kill-client (car gnow-server-clients))
+ (setq gnow-server-clients (cdr gnow-server-clients)))
+ (if (process-status "gnow-server")
+ (delete-process "gnow-server")
+ (message "No gnow server running"))
+ (if (get-buffer gnow-server-process-buffer-name)
+ (kill-buffer gnow-server-process-buffer-name)))
+
+(defun gnow-server-log (proc fmt &rest args)
+ "If a `*gnow-server-log*' buffer exists, write STRING to it for logging purposes.
+If `gnow-server-verbose' is non-nil, then STRING is also echoed to the message line."
+ (let ((string (apply 'format fmt args)))
+ (if gnow-server-verbose
+ (message string))
+ (if (get-buffer gnow-server-log-buffer-name)
+ (with-current-buffer gnow-server-log-buffer-name
+ (goto-char (point-max))
+ (insert (current-time-string)
+ " "
+ (if (processp proc)
+ (concat
+ (buffer-name (process-buffer proc))
+ ": ")
+ "") ; nil is not acceptable to 'insert
+ string)
+ (or (bolp) (newline))))))
+
+(defun gnow-server-accept (server client msg)
+ "Accept a new client connection."
+ (let ((buffer (generate-new-buffer gnow-server-process-buffer-name)))
+ (buffer-disable-undo buffer)
+ (set-process-buffer client buffer)
+ (set-process-filter client 'gnow-server-filter)
+ (set-process-query-on-exit-flag client nil) ; kill-buffer kills the associated process
+ (with-current-buffer buffer
+ (set (make-local-variable 'gnow-server-phase) 'wait)
+ (set (make-local-variable 'gnow-server-received) 0)
+ (set (make-local-variable 'gnow-server-request) nil))
+ (set (make-local-variable 'gnow-server-content-length) nil)
+ (set (make-local-variable 'gnow-server-url) nil))
+ (add-to-list 'gnow-server-clients client)
+ (gnow-server-log client msg))
+
+(defun gnow-server-filter (proc string)
+ "Process data received from the client."
+ ;; there is no guarantee that data belonging to the same client
+ ;; request will arrive all in one go; therefore, we must accumulate
+ ;; data in the buffer and process it in different phases, which
+ ;; requires us to keep track of the processing state.
+ (with-current-buffer (process-buffer proc)
+ (insert string)
+ (setq gnow-server-received
+ (+ gnow-server-received (string-bytes string)))
+ (when (eq gnow-server-phase 'wait)
+ ;; look for a complete HTTP request string
+ (save-excursion
+ (goto-char (point-min))
+ (when (re-search-forward "^\\([A-Z]+\\)\\s-+\\(\\S-+\\)\\s-+\\(HTTP/[0-9\.]+\\)\r?\n" nil t)
+ (gnow-server-log proc
+ "Got HTTP `%s' request, processing in buffer `%s'..."
+ (match-string 1) (current-buffer))
+ (setq gnow-server-request (match-string 1))
+ (setq gnow-server-content-length nil)
+ (setq gnow-server-phase 'head))))
+
+ (when (eq gnow-server-phase 'head)
+ ;; look for "Content-length" header
+ (save-excursion
+ (goto-char (point-min))
+ (when (re-search-forward "^Content-Length:\\s-+\\([0-9]+\\)" nil t)
+ (setq gnow-server-content-length (string-to-number (match-string 1)))))
+ (save-excursion
+ (goto-char (point-min))
+ (when (re-search-forward "\\(\r?\n\\)\\{2\\}" nil t)
+ ;; HTTP headers are pure ASCII (1 char = 1 byte), so we can subtract
+ ;; the buffer position from the count of received bytes
+ (setq gnow-server-received
+ (- gnow-server-received (- (match-end 0) (point-min))))
+ ;; discard headers - keep only HTTP content in buffer
+ (delete-region (point-min) (match-end 0))
+ (setq gnow-server-phase 'body))))
+
+ (when (eq gnow-server-phase 'body)
+ (if (and gnow-server-content-length
+ (> gnow-server-content-length gnow-server-received))
+ (gnow-server-log proc
+ "Received %d bytes of %d ..."
+ gnow-server-received gnow-server-content-length)
+ ;; all content transferred - process request now
+ (cond
+ ((string= gnow-server-request "POST")
+ ;; create gnowing buffer, and move content to it
+ (gnow-server-create-gnow-buffer proc)
+ )
+ (t
+ ;; send 200 OK response to any other request
+ (gnow-server-send-response proc "gnow-server is running.\n" t)))
+ ;; wait for another connection to arrive
+ (setq gnow-server-received 0)
+ (setq gnow-server-phase 'wait)))))
+
+
+(defun gnow-server-create-gnow-buffer(proc)
+ "Create an gnow buffer, place content in it and save the network
+ process for the final call back"
+
+ (let ((buffer (generate-new-buffer gnow-server-gnow-buffer-name)))
+ (copy-to-buffer buffer (point-min) (point-max))
+ (with-current-buffer (process-buffer proc)
+
+ (save-excursion
+ (goto-char (point-min))
+ (when (re-search-forward "^gnow-select:\\s-+\\([a-zA-Z]+\\)" nil t)
+ (setq gnow-server-url (match-string 1))
+ (delete-region (point-min) (match-end 0))
+ ))
+
+ (setq buffer-file-name (concat (expand-file-name "~") "/gnowmacs.org"))
+ (cond ((equal gnow-server-url "HTML")
+ (org-mode)
+ (org-export-as-html 3))
+ ((equal gnow-server-url "PDF")
+ (org-mode)
+ (org-export-as-pdf 3))
+ ((equal gnow-server-url "LaTeX")
+ (org-mode)
+ (org-export-as-latex 3))
+ ((equal gnow-server-url "DocBook")
+ (org-mode)
+ (org-export-as-docbook))
+ ((equal gnow-server-url "XOXO")
+ (org-mode)
+ (org-export-as-xoxo))
+ )
+
+ )))
+
+
+(defun gnow-server-send-response (proc &optional body close)
+ "Send an HTTP 200 OK response back to process PROC.
+Optional second argument BODY specifies the response content:
+ - If nil, the HTTP response will have null content.
+ - If a string, the string is sent as response content.
+ - Any other value will cause the contents of the current
+ buffer to be sent.
+If optional third argument CLOSE is non-nil, then process PROC
+and its buffer are killed with `gnow-server-kill-client'."
+ (interactive)
+rqxbk (if (processp proc)
+ (let ((response-header (concat
+ "HTTP/1.0 200 OK\n"
+ (format "Server: Emacs/%s\n" emacs-version)
+ "Date: "
+ (format-time-string
+ "%a, %d %b %Y %H:%M:%S GMT\n"
+ (current-time)))))
+ (process-send-string proc response-header)
+ (process-send-string proc "\n")
+ (cond
+ ((stringp body) (process-send-string proc body))
+ ((not body) nil)
+ (t (process-send-region proc (point-min) (point-max))))
+ (process-send-eof proc)
+ (if close
+ (gnow-server-kill-client proc))
+ (gnow-server-log proc "Gnowing done, sent HTTP OK response."))
+ (message "gnow-server-send-response: invalid proc (bug?)")))
+
+(defun gnow-server-kill-client (proc)
+ "Kill client process PROC and remove it from the list."
+ (let ((procbuf (process-buffer proc)))
+ (delete-process proc)
+ (kill-buffer procbuf)
+ (setq gnow-server-clients (delq proc gnow-server-clients))))
+
+(defun gnow-server-done (&optional abort nokill)
+ "Finish gnowing: send HTTP response back, close client and gnowing buffers.
+
+The current contents of the buffer are sent back to the HTTP
+client, unless argument ABORT is non-nil, in which case then the
+original text is sent back.
+If optional second argument NOKILL is non-nil, then the gnowing
+buffer is not killed.
+
+When called interactively, use prefix arg to abort gnowing."
+ (interactive "P")
+ ;; Do nothing if the connection is closed by the browser (tab killed, etc.)
+ (unless (eq (process-status gnow-server-proc) 'closed)
+ (let ((buffer (current-buffer))
+ (proc gnow-server-proc)
+ (procbuf (process-buffer gnow-server-proc)))
+ ;; gnow-server-* vars are buffer-local, so they must be used before issuing kill-buffer
+ (if abort
+ ;; send back original content
+ (with-current-buffer procbuf
+ (run-hooks 'gnow-server-done-hook)
+ (gnow-server-send-response proc t))
+ ;; send back gnowed content
+ (save-restriction
+ (widen)
+ (buffer-disable-undo)
+ ;; ensure any format encoding is done (like longlines)
+ (dolist (format buffer-file-format)
+ (format-encode-region (point-min) (point-max) format))
+ ;; send back
+ (run-hooks 'gnow-server-done-hook)
+ (gnow-server-send-response gnow-server-proc t)
+ ;; restore formats (only useful if we keep the buffer)
+ (dolist (format buffer-file-format)
+ (format-decode-region (point-min) (point-max) format))
+ (buffer-enable-undo)))
+ (if gnow-server-frame (delete-frame gnow-server-frame))
+ ;; delete-frame may change the current buffer
+ (unless nokill (kill-buffer buffer))
+ (gnow-server-kill-client proc))))
+
+
+(provide 'gnow-server)
+
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/all-wcprops b/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/all-wcprops
new file mode 100644
index 0000000..e677b1e
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/all-wcprops
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 45
+/svn/labcode/!svn/ver/2/Ymacs/src/js-minified
+END
+ymacs-min.js
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/labcode/!svn/ver/2/Ymacs/src/js-minified/ymacs-min.js
+END
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/entries b/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/entries
new file mode 100644
index 0000000..78dafd8
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+60
+https://svn.gnowledge.org/svn/labcode/Ymacs/src/js-minified
+https://svn.gnowledge.org/svn/labcode
+
+
+
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15bf0492-30b5-4620-9f24-ebed40bad4e9
+
+ymacs-min.js
+file
+
+
+
+
+2012-01-23T13:07:10.509354Z
+0ce4f2c6aa84e6a62aeb021fdf4a3747
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+114040
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/text-base/ymacs-min.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/text-base/ymacs-min.js.svn-base
new file mode 100644
index 0000000..f912886
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/.svn/text-base/ymacs-min.js.svn-base
@@ -0,0 +1,33 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+DEFINE_CLASS("Ymacs",DlLayout,function(a,b,c){a.DEFAULT_EVENTS=["onBufferSwitch","onCreateBuffer","onDeleteBuffer"],a.DEFAULT_ARGS={buffers:["buffers",null],frames:["frames",null],cf_lineNumbers:["lineNumbers",false],_focusable:["focusable",true]},a.FIXARGS=function(a){a.buffers||(a.buffers=[]),a.frames||(a.frames=[])},a.CONSTRUCT=function(){this.buffers.foreach(function(a){a.ymacs=this},this),this.killRing=[],this.killMasterOfRings=[],this.progress={},this.minibuffer=this.createBuffer({hidden:true,isMinibuffer:true}),this.minibuffer.cmd("minibuffer_mode"),this.minibuffer_frame=this.createFrame({isMinibuffer:true,buffer:this.minibuffer,hidden:true,highlightCurrentLine:false,className:"Ymacs_Minibuffer"}),this.buffers.length==0&&this.createBuffer();var a=this.createFrame({buffer:this.buffers[0]});this.packWidget(this.minibuffer_frame,{pos:"bottom"}),this.packWidget(a,{pos:"top",fill:"*"}),this.setActiveFrame(a),a._redrawCaret()},b.pushToKillRing=function(a,b){b?this.killRing.unshift(a):this.killRing.push(a)},b.killRingToMaster=function(){this.killRing.length&&(this.killMasterOfRings.length==0||this.killMasterOfRings.peek().join("")!=this.killRing.join(""))&&this.killMasterOfRings.push(this.killRing),this.killRing=[]},b.killRingText=function(){return this.killRing.join("")},b.rotateKillRing=function(a){a?(this.killMasterOfRings.push(this.killRing),this.killRing=this.killMasterOfRings.shift()):(this.killMasterOfRings.unshift(this.killRing),this.killRing=this.killMasterOfRings.pop())},b.getBuffer=function(a){a instanceof Ymacs_Buffer||(a=this.buffers.grep_first(function(b){return b.name==a}));return a},b.killBuffer=function(a){a=this.getBuffer(a),this.callHooks("onDeleteBuffer",a),this.buffers.length>1?this.getActiveBuffer()===a&&this.switchToNextBuffer():this.switchToBuffer(this.createBuffer()),this.buffers.remove(a),a.destroy()},b.renameBuffer=function(a,b){a=this.getBuffer(a),a.name=b,a.callHooks("onProgressChange")},b._do_switchToBuffer=function(a){this.getActiveFrame().setBuffer(a),this.callHooks("onBufferSwitch",a)},b.switchToBuffer=function(a){var b=this.getBuffer(a),c=this.buffers;b||(b=this.createBuffer({name:a})),c.remove(b),c.unshift(b),this._do_switchToBuffer(b);return b},b.switchToNextBuffer=function(a){var b=this.buffers;if(b.length>1){var c=b.shift();b.push(c),this._do_switchToBuffer(b[0])}},b.switchToPreviousBuffer=function(a){var b=this.buffers;if(b.length>1){var c=b.pop();b.unshift(c),this._do_switchToBuffer(c)}},b.getNextBuffer=function(a,b){b==null&&(b=1);var c=this.buffers;return c[c.rotateIndex(c.find(a)+b)]},b.getPrevBuffer=function(a,b){b==null&&(b=1);var c=this.buffers;return c[c.rotateIndex(c.find(a)-b)]},b.getBufferFrames=function(a){a=this.getBuffer(a);return this.frames.grep(function(b){return b.buffer===a})},b.createBuffer=function(a){a||(a={}),Object.merge(a,{ymacs:this});var b=new Ymacs_Buffer(a);a.hidden||this.buffers.push(b),this.callHooks("onCreateBuffer",b);return b},b.createFrame=function(a){a||(a={}),Object.merge(a,{ymacs:this});var b=new Ymacs_Frame(a);a.hidden||this.frames.unshift(b),b.addEventListener("onDestroy",function(a){this.frames.remove(a)}.$(this,b));return b},b.keepOnlyFrame=function(a){if(this.frames.length>1){var b=a.parent;while(b.parent!=this)b=b.parent;this.replaceWidget(b,a),b.destroy(),this.setActiveFrame(a),this.doLayout()}},b.deleteFrame=function(a){if(this.frames.length>1){var b=a.parent,d=b.children().grep_first(function(b){return b instanceof DlLayout||b instanceof Ymacs_Frame&&b!==a});b.parent.replaceWidget(b,d),b.destroy();try{c.walk(d.getElement(),function(a){if((a=DlWidget.getFromElement(a))&&a instanceof Ymacs_Frame)throw a})}catch(a){if(!(a instanceof Ymacs_Frame))throw a;d=a}this.setActiveFrame(d),this.doLayout()}},b.focusOtherFrame=function(){this.setActiveFrame(this.frames[0])},b.focus=function(){a.BASE.focus.apply(this,arguments),this.frames.peek().focus()},b.setActiveFrame=function(a,b){if(!a.isMinibuffer){var c=this.getActiveFrame();c&&c.delClass("Ymacs_Frame-active"),this.frames.remove(a),this.frames.push(a)}b||a.focus()},b.getActiveFrame=function(){return this.frames.peek()},b.getActiveBuffer=function(){var a=this.getActiveFrame();return a?a.buffer:this.buffers.peek()},b.setColorTheme=function(a){this.delClass(/Ymacs-Theme-[^\s]*/g),a instanceof Array||(a=[a]),a.foreach(function(a){this.addClass("Ymacs-Theme-"+a)},this)},b.getFrameInDirection=function(a,b,d){d||(d=this.getActiveFrame());var e=d.getCaretElement();b||(b=c.getPos(e)),b.sz||(b.sz=c.getOuterSize(e));var f=this.frames.mergeSort(function(a,b){return a.getPos().x-b.getPos().x}),g=this.frames.mergeSort(function(a,b){return a.getPos().y-b.getPos().y});return this["_get_frameInDir_"+a](f,g,b,d)};function d(a,b){if(a.length>0){var c=a.peek().getPos().x,d=[a.pop()];while(a.length>0&&a.peek().getPos().x==c)d.push(a.pop());return d.minElement(function(a){return Math.abs(b.y-a.getPos().y-a.getSize().y/2)})}}function e(a,b){if(a.length>0){var c=a.peek().getPos().y,d=[a.pop()];while(a.length>0&&a.peek().getPos().y==c)d.push(a.pop());return d.minElement(function(a){return Math.abs(b.x-a.getPos().x-a.getSize().x/2)})}}b._get_frameInDir_left=function(a,b,c,e){a=a.grep(function(a){var b=a.getPos(),d=a.getSize();return a!==e&&b.x<c.x&&b.y-c.sz.y<=c.y&&b.y+d.y>c.y});return d(a,c)},b._get_frameInDir_right=function(a,b,c,e){a.reverse(),a=a.grep(function(a){var b=a.getPos(),d=a.getSize();return a!==e&&b.x>c.x&&b.y-c.sz.y<=c.y&&b.y+d.y>c.y});return d(a,c)},b._get_frameInDir_up=function(a,b,c,d){b=b.grep(function(a){var b=a.getPos(),e=a.getSize();return a!==d&&b.y<c.y&&b.x-c.sz.x<=c.x&&b.x+e.x>c.x});return e(b,c)},b._get_frameInDir_down=function(a,b,c,d){b.reverse(),b=b.grep(function(a){var b=a.getPos(),e=a.getSize();return a!==d&&b.y>c.y&&b.x-c.sz.x<=c.x&&b.x+e.x>c.x});return e(b,c)};function f(){if(!(window.localStorage&&window.localStorage.getItem))throw new Ymacs_Exception("Local storage facility not available in this browser")}b.ls_get=function(){f();return DlJSON.decode(localStorage.getItem(".ymacs")||"{}",true)},b.ls_set=function(a){f(),localStorage.setItem(".ymacs",DlJSON.encode(a))},b.ls_getFileContents=function(a,b){var c=this.ls_getFileDirectory(a),d=c.other,e;d.length==1&&(e=c.dir[d[0]]);if(e==null&&!b)throw new Ymacs_Exception("File not found");return e},b.ls_getFileDirectory=function(a,b){var c,d=c=this.ls_get();a=a.replace(/^[~\x2f]+/,"").split(/\x2f+/);var e=[],f=[];while(a.length>0){var g=a.shift();d.hasOwnProperty(g)&&typeof d[g]!="string"?(d=d[g],e.push(g)):f.push(g)}if(b){var h=b=="file"?1:0;while(f.length>h)d=d[f.shift()]={};this.ls_set(c)}return{store:c,dir:d,path:e,other:f}}}),function(){for(var a={},b=65;b<=90;++b)a[b]=[b,b+32];a[32]=[32,32];var c=[16,17,18,20,144].toHash(true),d=[[49,33],[50,64],[51,35],[52,36],[53,37],[54,94],[55,38],[56,42],[57,40],[48,41]],e=[48,49,50,51,52,53,54,55,56,57].toHash(function(a,b){return d[b]}),f=[[59,58],[61,43],[44,60],[45,95],[46,62],[47,63],[96,126],[91,123],[92,124],[93,125],[39,34]],g=(is_gecko?[59,61,188,109,190,191,192,219,220,221,222]:is_opera?[59,61,44,45,46,47,96,91,92,93,39]:[186,187,188,189,190,191,192,219,220,221,222]).toHash(function(a,b){return f[b]}),h=[37,38,39,40].toHash(true),i=[45,46,36,35,33,34,112,113,114,115,116,117,118,119,120,121,122,123].toHash(true);function j(b,c){var d=a[b]||e[b]||g[b];return d?c?d[1]:d[0]:null}window.KEYBOARD_INSANITY={letters:a,modifiers:c,digits:e,symbols:g,arrows:h,specials:i,getCharCode:j}}(),window.Ymacs_Regexp=function(){var a={};function b(a){a instanceof RegExp&&(a=a.toString());var b=a.lastIndexOf("/"),c="";c=a.substr(b+1),a=a.substring(1,b);return{pattern:a,flags:c}}return{search_backward:function(c){var d=c.toString(),e=a[d];e||(c=b(d),c.flags=c.flags.replace(/g/g,"")+"g",a[d]=e=new RegExp("([^]*)("+c.pattern+")",c.flags)),e.lastIndex=0;return e}}}(),DEFINE_CLASS("Ymacs_Frame",DlContainer,function(a,b,c){var d=300,e=DlException.stopEventBubbling,f=c.createElement("div",null,{className:"line",innerHTML:"<br/>"}),g=225;a.DEFAULT_EVENTS=["onPointChange"],a.DEFAULT_ARGS={highlightCurrentLine:["highlightCurrentLine",true],buffer:["buffer",null],ymacs:["ymacs",null],isMinibuffer:["isMinibuffer",false],_focusable:["focusable",true],_fillParent:["fillParent",true]},a.CONSTRUCT=function(){this.__blinkCaret=this.__blinkCaret.$(this),this.__caretId=Dynarch.ID(),this.redrawModelineWithTimer=this.redrawModeline.clearingTimeout(0,this),this.getElement().innerHTML=h,this.addEventListener({onDestroy:this._on_destroy,onFocus:this._on_focus,onBlur:this._on_blur,onMouseDown:this._on_mouseDown,onKeyDown:this._on_keyDown,onKeyPress:this._on_keyPress,onKeyUp:this._on_keyUp,onResize:this._on_resize}),this._dragSelectCaptures={onMouseOver:e,onMouseOut:e,onMouseEnter:e,onMouseLeave:e,onMouseMove:n.$(this),onMouseUp:o.$(this)},this._bufferEvents={onLineChange:this._on_bufferLineChange.$(this),onInsertLine:this._on_bufferInsertLine.$(this),onDeleteLine:this._on_bufferDeleteLine.$(this),onPointChange:this._on_bufferPointChange.$(this),onResetCode:this._on_bufferResetCode.$(this),onOverwriteMode:this._on_bufferOverwriteMode.$(this),onProgressChange:this._on_bufferProgressChange.$(this),beforeInteractiveCommand:this._on_bufferBeforeInteractiveCommand.$(this),afterInteractiveCommand:this._on_bufferAfterInteractiveCommand.$(this),onOverlayDelete:this._on_bufferOverlayDelete.$(this)},this._moreBufferEvents={onMessage:this._on_bufferMessage.$(this),onOverlayChange:this._on_bufferOverlayChange.$(this),afterInteractiveCommand:this.ensureCaretVisible.$(this)};var a=this.buffer;this.buffer=null,a&&this.setBuffer(a),!this.isMinibuffer&&this.ymacs.cf_lineNumbers&&this.toggleLineNumbers()};var h=String.buffer("<div class='Ymacs-frame-overlays'>","<div class='Ymacs-frame-content'></div>","</div>","<div class='Ymacs_Modeline'></div>").get();b.focus=function(b){a.BASE.focus.call(this),b instanceof Function&&(this.removeEventListener("onBlur",this.__exitFocusHandler),this.addEventListener("onBlur",this.__exitFocusHandler=function(){b.call(this.buffer)?this.removeEventListener("onBlur",this.__exitFocusHandler):this.focus.delayed(2,this,null)}))},b.blur=function(b){b&&this.removeEventListener("onBlur",this.__exitFocusHandler),a.BASE.blur.call(this)},b.getOverlaysContainer=function(){return this.getElement().firstChild},b.getModelineElement=function(){return this.getElement().childNodes[1]},b.getContentElement=function(){return this.getElement().firstChild.firstChild},b.getCaretElement=function(){return document.getElementById(this.__caretId)},b.getLineDivElement=function(a){return this.getContentElement().childNodes[a]||null},b.ensureCaretVisible=function(){this._redrawCaret();var a=this.getCaretElement();if(a){var b=this.getOverlaysContainer(),c=this.getLineDivElement(this.buffer._rowcol.row),d=c.offsetTop+c.offsetHeight-(b.scrollTop+b.clientHeight);d>0?b.scrollTop+=d:(d=c.offsetTop-b.scrollTop)<0&&(b.scrollTop+=d),(d=a.offsetLeft+a.offsetWidth-(b.scrollLeft+b.clientWidth))>0?b.scrollLeft+=d:(d=a.offsetLeft-b.scrollLeft)<0&&(b.scrollLeft+=d)}},b.setBuffer=function(a){this.buffer&&(this.caretMarker&&!this.isMinibuffer&&(this.caretMarker.destroy(),this.caretMarker=null),this.buffer.removeEventListener(this._bufferEvents),this.buffer.removeEventListener(this._moreBufferEvents)),(this.buffer=a)&&(this.buffer.addEventListener(this._bufferEvents),this.focusInside()&&a.addEventListener(this._moreBufferEvents),this.isMinibuffer?this.caretMarker=a.caretMarker:this.caretMarker=a.createMarker(a.caretMarker.getPosition()),this._redrawBuffer(),this._redrawCaret(true),this.centerOnCaret())},b.centerOnCaret=function(){this.centerOnLine(this.buffer._rowcol.row)},b.centerOnLine=function(a){var b=this.getLineDivElement(a),c=this.getOverlaysContainer();c.scrollTop=Math.round(b.offsetTop-c.clientHeight/2+b.offsetHeight/2)},b.setModelineContent=function(a){this.getModelineElement().innerHTML=a},b.deleteOtherFrames=function(){this.ymacs.keepOnlyFrame(this)},b.deleteFrame=function(){this.ymacs.deleteFrame(this)},b.vsplit=function(a){a==null&&(a="50%");var b=this.parent,c=this.ymacs.createFrame({buffer:this.buffer}),d=new DlLayout,e=new DlResizeBar({widget:this,keepPercent:true,horiz:true,className:"Ymacs-splitbar-horiz"});this._resizeBar&&(this._resizeBar._widget=d),this._resizeBar=e,b.replaceWidget(this,d),d.packWidget(this,{pos:"top",fill:a}),d.packWidget(e,{pos:"top"}),d.packWidget(c,{pos:"top",fill:"*"}),b.__doLayout(),c.centerOnCaret()},b.hsplit=function(a){a==null&&(a="50%");var b=this.parent,c=this.ymacs.createFrame({buffer:this.buffer}),d=new DlLayout,e=new DlResizeBar({widget:this,keepPercent:true,className:"Ymacs-splitbar-vert"});this._resizeBar&&(this._resizeBar._widget=d),this._resizeBar=e,b.replaceWidget(this,d),d.packWidget(this,{pos:"left",fill:a}),d.packWidget(e,{pos:"left"}),d.packWidget(c,{pos:"left",fill:"*"}),b.__doLayout(),c.centerOnCaret()},b.toggleLineNumbers=function(){this.condClass(this.__lineNumbers=!this.__lineNumbers,"Ymacs-line-numbers")};function i(a,b,c){if(/^br$/i.test(a.firstChild.tagName)){a.insertBefore(c,a.firstChild);return c}var d=0,e={};function f(a){for(var g=a.firstChild;g;g=g.nextSibling)if(g.nodeType==3){var h=g.length;if(d+h>b){var i=b-d,j=g.splitText(i);a.insertBefore(c,j);throw e}if(d+h==b){a.insertBefore(c,g.nextSibling);throw e}d+=h}else g.nodeType==1&&f(g)}try{f(a)}catch(a){if(a===e)return c;throw a}}b.setMarkerAtPos=function(a,b){a.tagName||(a=this.getLineDivElement(a));if(a)return i(a,b,c.createElement("span"))},b.__restartBlinking=function(){this.__stopBlinking(),this.focusInside()&&(this.__caretTimer=setTimeout(this.__blinkCaret,2*g))},b.__stopBlinking=function(){clearTimeout(this.__caretTimer),this.__showCaret()},b.__blinkCaret=function(){c.condClass(this.getCaretElement(),this.BLINKING=!this.BLINKING,"Ymacs-caret"),this.__caretTimer=setTimeout(this.__blinkCaret,g)},b.__showCaret=function(){c.addClass(this.getCaretElement(),"Ymacs-caret")},b._unhoverLine=function(){this.__hoverLine!=null&&(c.delClass(this.getLineDivElement(this.__hoverLine),"Ymacs-current-line"),this.__hoverLine=null)},b._redrawCaret=function(a){var b=this.ymacs.getActiveFrame()===this;if(!(!a&&!b)){b&&!this.isMinibuffer&&this.caretMarker.setPosition(this.buffer.caretMarker.getPosition());var d=this.buffer._rowcol;this.highlightCurrentLine&&(this._unhoverLine(),c.addClass(this.getLineDivElement(d.row),"Ymacs-current-line"),this.__hoverLine=d.row),this.__prevCaretLine!=null&&this._on_bufferLineChange(this.__prevCaretLine),this.__prevCaretLine!=d.row&&(this.__prevCaretLine=d.row,this._on_bufferLineChange(d.row)),b&&this.__restartBlinking(),this.callHooks("onPointChange",d.row,d.col),this.redrawModelineWithTimer(d)}},b._getLineHTML=function(a){var b=this.buffer.formatLineHTML(a,this.caretMarker),c=b.indexOf("Ymacs-caret'>");c>=0&&(b=b.substr(0,c+12)+" id='"+this.__caretId+"'"+b.substr(c+12));return b},b._redrawBuffer=function(){this.setContent(this.buffer.code.map(function(a,b){return this._getLineHTML(b).htmlEmbed("div","line")},this).join(""))},b.coordinatesToRowCol=function(a,b){function c(a,d){if(a==d)return a;var f=Math.floor((a+d)/2),g=e.getLineDivElement(f),h=g.offsetTop,i=h+g.offsetHeight-1;if(i<b)return c(f+1,d);if(b<h)return c(a,f-1);return f}function d(b,c){if(b==c)return b;var g=Math.floor((b+c)/2),h=e.coordinates(f,g),i=e.coordinates(f,g+1);if(i.x<a)return d(g+1,c);if(a<h.x)return d(b,g-1);return g}var e=this,f=c(0,this.buffer.code.length-1),g=d(0,this.buffer.code[f].length);return{row:f,col:g}},b.coordinates=function(a,b){var d=this.getLineDivElement(a),e=this.setMarkerAtPos(d,b),f={x:e.offsetLeft,y:d.offsetTop,h:d.offsetHeight};c.trash(e);return f},b.heightInLines=function(){return Math.floor(this.getOverlaysContainer().clientHeight/this.getContentElement().firstChild.offsetHeight)},b.setOuterSize=b.setSize=function(b){a.BASE.setOuterSize.apply(this,arguments),c.setOuterSize(this.getOverlaysContainer(),b.x,b.y-this.getModelineElement().offsetHeight),c.setOuterSize(this.getModelineElement(),b.x)},b.redrawModeline=function(a){this.setModelineContent(this.buffer.renderModelineContent(a||this.caretMarker.getRowCol()))},b._on_bufferLineChange=function(a){var b=this.getLineDivElement(a);b&&(b.innerHTML=this._getLineHTML(a))},b._on_bufferInsertLine=function(a,b){var c=f.cloneNode(true);this.getContentElement().insertBefore(c,this.getLineDivElement(a)),b&&(c.innerHTML=this._getLineHTML(a))},b._on_bufferDeleteLine=function(a){c.trash(this.getLineDivElement(a))},b._on_bufferPointChange=function(a,b){this._redrawCaret()},b._on_bufferResetCode=function(){this._redrawBuffer()},b._on_bufferOverwriteMode=function(a){this.condClass(a,"Ymacs-overwrite-mode")},b._on_bufferMessage=function(a,b,c,d){var e=this.isMinibuffer?this.ymacs:this,f=Ymacs_Message_Popup.get(0);f.popup({content:c?b:b.htmlEscape(),widget:e,anchor:e.getElement(),align:{prefer:"CC",fallX1:"CC",fallX2:"CC",fallY1:"CC",fallY2:"CC"}}),f.hide(d||5e3)},b._on_bufferBeforeInteractiveCommand=function(){this._unhoverLine(),Ymacs_Message_Popup.clearAll()},b._on_bufferAfterInteractiveCommand=function(){},b._on_bufferProgressChange=function(){this.redrawModelineWithTimer(null)},b.getOverlayId=function(a){return this.id+"-ovl-"+a},b.getOverlayHTML=function(a,b){if(b.line1==b.line2&&b.col1==b.col2){this._on_bufferOverlayDelete(a,b);return null}var c=this.coordinates(b.line1,b.col1),d=this.coordinates(b.line2,b.col2),e=this.__lineNumbers?this.coordinates(b.line1,0):{x:0,y:0};c.x-=e.x,d.x-=e.x;var f=String.buffer("<div id='",this.getOverlayId(a),"' class='Ymacs_Overlay ",a,"' style='top:",c.y,"px;left:",e.x,"px'>");b.line1==b.line2?f("<div class='",a,"' style='margin-left:",c.x,"px; width:",d.x-c.x,"px;height:",d.h,"px;'>&nbsp;</div>"):(f("<div class='",a,"' style='margin-left:",c.x,"px;height:",c.h,"px;'>&nbsp;</div>"),b.line2-b.line1>1&&f("<div class='",a,"' style='height:",d.y-c.y-c.h,"px'></div>"),f("<div class='",a,"' style='width:",d.x,"px;height:",d.h,"px;'>&nbsp;</div>")),f("</div>");return f.get()},b.getOverlaysCount=function(){return this.getOverlaysContainer().childNodes.length-1},b._on_bufferOverlayChange=function(a,b,d){var e=this.getOverlayHTML(a,b);if(e){e=c.createFromHtml(e);var f=this.getOverlaysContainer(),g=!d&&$(this.getOverlayId(a));g?f.replaceChild(e,g):f.appendChild(e)}},b._on_bufferOverlayDelete=function(a,b,d){c.trash($(this.getOverlayId(a)))},b._on_destroy=function(){this.setBuffer(null),this.__stopBlinking()},b._on_focus=function(){window.focus(),this.ymacs.setActiveFrame(this,true),this.addClass("Ymacs_Frame-active"),this.isMinibuffer||this.buffer.cmd("goto_char",this.caretMarker.getPosition()),this.buffer.addEventListener(this._moreBufferEvents),this.__restartBlinking()},b._on_blur=function(){this.isMinibuffer||this.caretMarker.setPosition(this.buffer.caretMarker.getPosition()),this.buffer.removeEventListener(this._moreBufferEvents),this.__stopBlinking()};var j=0,k=null,l=null;function m(){j=null}b._on_mouseDown=function(a){clearTimeout(k),j++,k=m.delayed(d),this.__restartBlinking();var b=a.computePos(this.getContentElement()),c=this.coordinatesToRowCol(b.x,b.y),f=this.buffer;f.clearTransientMark(),f.cmd("goto_char",f._rowColToPosition(c.row,c.col)),f.callInteractively("keyboard_quit"),j==1?(f.ensureTransientMark(),DlEvent.captureGlobals(this._dragSelectCaptures)):j==2?(f.cmd("backward_word"),f.cmd("forward_word_mark")):j==3?(f.cmd("beginning_of_line"),f.cmd("end_of_line_mark")):j==4&&(f.cmd("backward_paragraph"),f.cmd("forward_whitespace"),f.cmd("beginning_of_line"),f.cmd("forward_paragraph_mark")),e()};function n(a){var b=a.computePos(this.getContentElement()),c=this.coordinatesToRowCol(b.x,b.y);this.buffer.cmd("goto_char",this.buffer._rowColToPosition(c.row,c.col)),this.buffer.ensureTransientMark(),this.ensureCaretVisible()}function o(a){DlEvent.releaseGlobals(this._dragSelectCaptures)}b._on_keyDown=function(a){if(!is_gecko){var b=window.KEYBOARD_INSANITY,c=a.keyCode;c in b.modifiers&&e();if((c in b.letters||c in b.digits||c in b.symbols)&&!(a.ctrlKey||a.altKey))return;a.charCode=b.getCharCode(c,a.shiftKey),a.charCode&&(a.keyCode=0),this.buffer._handleKeyEvent(a)&&e()}},b._on_keyPress=function(a){is_gecko||(a.keyCode=0),this.buffer._handleKeyEvent(a)&&e()},b._on_keyUp=function(a){},b._on_resize=function(){this.centerOnCaret.delayed(1,this)}}),DEFINE_CLASS("Ymacs_Message_Popup",DlPopup,function(a,b){a.FIXARGS=function(a){a.autolink=a.focusable=false,a.zIndex=5e3}}),DEFINE_CLASS("Ymacs_Text_Properties",DlEventProxy,function(a,b){a.DEFAULT_EVENTS=["onChange"],a.DEFAULT_ARGS={buffer:["buffer",null]},a.CONSTRUCT=b.reset=function(){this.props=[]},b.insertLine=function(a){this.props.length<a?this.props[a]=null:this.props.splice(a,0,null)},b.deleteLine=function(a){this.props.splice(a,1)},b.replaceLine=function(a,b){var c=this.props[a];c&&c.length>b.length&&c.splice(b.length,c.length)},b.addLineProps=function(a,b,c,d,e){var f=this.props,g,h=false;if(b<c){f=f[a]||(f[a]=[]);while(b<c)g=f[b]||(f[b]={}),g[d]!=e&&(h=true),g[d]=e,++b;h&&this.callHooks("onChange",a)}return h},b.removeLineProps=function(a,b,c,d){var e=this.props[a],f,g=false;if(e&&b<c){while(b<c)f=e[b],f&&d in f&&(g=true,delete f[d]),++b;g&&this.callHooks("onChange",a)}return g},b.getLineHTML=function(a,b,c){var d=this.props[a];if(c===null){if(b=="")return"<br/>";if(!d||d.length==0)return b.htmlEscape()}else{if(b=="")return"<span class='Ymacs-caret'>&nbsp;</span>";if(!d||d.length==0){if(c===b.length)return b.htmlEscape()+"<span class='Ymacs-caret'>&nbsp;</span>";return b.substr(0,c).htmlEscape()+"<span class='Ymacs-caret'>"+b.charAt(c).htmlEscape()+"</span>"+b.substr(c+1).htmlEscape()}}var e=0,f=b.length,g=null,h,i="",j;while(e<f){h=d[e],h=h&&h.css,e===c&&(h=h?h+" Ymacs-caret":"Ymacs-caret"),h&&h!=g?(g&&(i+="</span>"),i+="<span class='"+h+"'>"):!h&&g&&(i+="</span>"),g=h;switch(j=b.charAt(e)){case"<":i+="&lt;";break;case">":i+="&gt;";break;case"&":i+="&amp;";break;default:i+=j}++e}g&&(i+="</span>"),e===c&&(i+="<span class='Ymacs-caret'>&nbsp;</span>");return i}});function Ymacs_Exception(a){this.message=a}(function(){window.Ymacs_Interactive=function(a,b){if(arguments.length==1)b=a,a=null;else{var c;b instanceof Function||(c=b,b=arguments[2],b.ymacsDoc=c)}b.ymacsInteractive=true;if(a instanceof Function)b.ymacsGetArgs=a;else if(a!=null){if(!(a instanceof Array)){var d=/^[\^\@\*]+/.exec(a);d&&(d=d[0],a=a.substr(d.length),d.indexOf("^")>=0&&(b.ymacsMarkExtend=true),d.indexOf("*")>=0&&(b.ymacsWarnReadonly=true),d.indexOf("@")>=0&&(b.ymacsSelectFrame=true)),a&&(a=a.split(/\n+/))}if(a){var e,f=function(){e.append(Array.$(arguments));return this.callInteractively(b,e,true)};while(a.length>0)f=A(a.pop(),function(a){e.append(Array.$(arguments,1)),a.call(this)}.$(null,f));b.ymacsCallInteractively=function(){e=[];return f.call(this)}}}return b},window.Ymacs_Interactive_X=function(a){return Ymacs_Interactive("p",function(b){b==null&&(b=1),b.times(a,this)})};var a=function(){};a.toString=function(){return""},a.empty=true;function b(a){var b=this.getPrefixArg(true);b&&(a=b+" "+a),this.cmd("minibuffer_prompt",a)}function c(a,c){b.call(this,a),this.cmd("minibuffer_read_function",c)}function d(a,c){b.call(this,a),this.cmd("minibuffer_read_buffer",c)}function e(a,c){b.call(this,a),this.cmd("minibuffer_read_buffer",c)}function f(a,b){}function g(a,c){b.call(this,a),this.cmd("minibuffer_read_command",c)}function h(a,b){b.call(this,this.point())}function i(a,b){}function j(a,b){b.call(this,null)}function k(a,b){}function l(a,b){}function m(a,b){b.call(this,this.markMarker.getPosition())}function n(a,c){b.call(this,a),this.cmd("minibuffer_read_string",null,c)}function o(a,c){b.call(this,a),this.cmd("minibuffer_read_number",c)}function p(a,b){var c=parseInt(this.getPrefixArg(),10);isNaN(c)?o.call(this,a,b):b.call(this,c)}function q(a,b){var c=parseInt(this.getPrefixArg(),10);isNaN(c)&&(c=null),b.call(this,c)}function r(b,c){(b=this.getPrefixArg())===""&&(b=a),c.call(this,b)}function s(a,b){var c=this.getRegion();b.call(this,c.begin,c.end)}function t(a,b){}function u(a,c){b.call(this,a),this.cmd("minibuffer_read_variable",c)}function v(a,c){b.call(this,a),this.cmd("minibuffer_read_existing_file",c)}function w(a,c){b.call(this,a),this.cmd("minibuffer_read_file",c)}function x(a,c){b.call(this,a),this.cmd("minibuffer_read_file_or_directory",c)}function y(a,c){b.call(this,a),this.cmd("minibuffer_read_directory",c)}var z={a:c,b:d,B:e,c:f,C:g,d:h,e:i,i:j,k:k,K:l,m:m,M:n,n:o,N:p,p:q,P:r,r:s,s:n,U:t,v:u,f:v,F:w,G:x,D:y};function A(a,b){var c=a.charAt(0);a=a.substr(1);return z[c].$(null,a,b)}})(),DEFINE_CLASS("Ymacs_Buffer",DlEventProxy,function(a,b){a.DEFAULT_EVENTS=["onLineChange","onInsertLine","onDeleteLine","onPointChange","onResetCode","onMessage","onOverwriteMode","onOverlayChange","onOverlayDelete","beforeInteractiveCommand","afterInteractiveCommand","beforeRedraw","afterRedraw","finishedEvent","onProgressChange","onTextInsert","onTextDelete"],a.DEFAULT_ARGS={name:["name","*scratch*"],_code:["code",null],ymacs:["ymacs",null],tokenizer:["tokenizer",null],isMinibuffer:["isMinibuffer",false]};var c={case_fold_search:true,line_movement_requested_col:0,fill_column:78,tab_width:8,indent_level:8,syntax_word:{test:g},syntax_word_dabbrev:{test:h},syntax_paragraph_sep:/\n\s*\n/g};function d(a,b){if(typeof a=="string"){b===undefined?delete this[a]:this[a]=b,b instanceof Function&&(b.ymacsCommand=a);return b}var c={};for(var e in a)c[e]=this[e],d.call(this,e,a[e]);return c}var e=5e4;function f(a){return a instanceof Ymacs_Marker?a.getPosition():a}function g(a){if(a){var b=a.charCodeAt(0);return b>=48&&b<=57||a.toUpperCase()!=a.toLowerCase()}}function h(a){if(a){var b=a.charCodeAt(0);return b>=48&&b<=57||a=="_"||a.toUpperCase()!=a.toLowerCase()}}b.lastIndexOfRegexp=function(a,b,c,d){a=a.substring(0,c),b=Ymacs_Regexp.search_backward(b),b.lastIndex=d||0;var e=b.exec(a);if(e){var f=Array.$(e,2);f.index=e.index+e[1].length,f.after=e.index+e[0].length,f[0]=a.substring(f.index,f.after);return this.matchData=f}},a.COMMANDS=b.COMMANDS={},a.newCommands=b.newCommands=function(){return d.apply(this.COMMANDS,arguments)},a.newMode=b.newMode=function(b,c){var d="*"+b+"*",e=d+"hooks";a.setGlobal(e,[]),this.COMMANDS[b]=Ymacs_Interactive("P",function(a){var f=this.getq(d);if(f)a!==true&&(this.getq(e).foreach(function(a){a.call(this,false)},this),f instanceof Function&&f.call(this),this.setq(d,null),this.modes.remove(b));else if(a!==false){var g=c.apply(this,arguments);g instanceof Function||(g=true),this.setq(d,g),this.modes.push(b),this.getq(e).foreach(function(a){a.call(this,true)},this)}return f})},a.addModeHook=b.addModeHook=function(a,b){typeof b=="string"&&(b=this.COMMANDS[b]);var c="*"+a+"*hooks";this.getq(c).pushUnique(b)},a.removeModeHook=b.removeModeHook=function(a,b){typeof b=="string"&&(b=this.COMMANDS[b]);var c="*"+a+"*hooks";this.getq(c).remove(b)},a.FIXARGS=function(a){a.code==null&&(a.code="")},a.CONSTRUCT=function(){this.__undoInProgress=this.__preventUndo=this.__preventUpdates=this.__savingExcursion=0,this.__dirtyLines=[],this.__undoQueue=[],this.__redoQueue=[],this.__overlays={},this.markers=[],this.caretMarker=this.createMarker(0,false,"point"),this.markMarker=this.createMarker(0,true,"mark"),this.matchData=[],this.currentCommand=this.previousCommand=null,this.currentKeys=[],this.progress={},this.variables={},this.globalVariables=c,this.modes=[],this.caretMarker.onChange.push(function(a){this._rowcol=this.caretMarker.getRowCol(),this.__preventUpdates==0&&this.callHooks("onPointChange",this._rowcol,this.point())}),this._tokenizerEvents={onFoundToken:this._on_tokenizerFoundToken.$(this)},this._textProperties=new Ymacs_Text_Properties({buffer:this}),this._textProperties.addEventListener("onChange",this._on_textPropertiesChange.$(this)),this.keymap=[],this.pushKeymap(this.makeDefaultKeymap()),this.setCode(this._code),this._lastCommandWasKill=0,delete this._code},b.withVariables=function(a,b){var c={},d,e;for(d in a)c[d]=this.variables[d],this.variables[d]=a[d];try{return b instanceof Function?b.apply(this,Array.$(arguments,2)):this.cmdApply(b,Array.$(arguments,2))}finally{for(d in c)c[d]===undefined?delete this.variables[d]:this.variables[d]=c[d]}},b.withCommands=function(a,b){var c=this.COMMANDS;this.COMMANDS=Object.makeCopy(c),Object.merge(this.COMMANDS,a);try{return b instanceof Function?b.apply(this,Array.$(arguments,2)):this.cmdApply(b,Array.$(arguments,2))}finally{this.COMMANDS=c}},b.getVariable=function(a){return a in this.variables?this.variables[a]:c[a]},b.setVariable=function(){return d.apply(this.variables,arguments)},a.setq=a.setVariable=a.setGlobal=b.setGlobal=function(){return d.apply(c,arguments)},b.setq=b.setVariable,b.getq=b.getVariable,a.getq=a.getVariable=function(a){return c[a]},b.pushKeymap=function(a){a instanceof Array?a.foreach(this.pushKeymap,this):(this.popKeymap(a),this.keymap.push(a),a.attached(this))},b.popKeymap=function(a){this.keymap.remove(a),a.detached(this)},b.makeDefaultKeymap=function(){return Ymacs_Keymap_Emacs()},b.signalError=function(a,b,c){this.callHooks("onMessage","error",a,b,c)},b.signalInfo=function(a,b,c){this.callHooks("onMessage","info",a,b,c)},b.createMarker=function(a,b,c){a==null&&(a=this.point());return new Ymacs_Marker({editor:this,pos:a,name:c,before:b})},b.point=function(){return this.caretMarker.getPosition()},b.setCode=function(a){this.__code=a,this.__size=a.length,this.__undoQueue=[],this.__redoQueue=[],this.__overlays={},this.markers.map("setPosition",0,true,true),this.code=a.split(/\n/),this._textProperties.reset(),this.tokenizer&&this.tokenizer.reset(),this.callHooks("onResetCode",this.code),this.caretMarker.setPosition(0,false,true),this.markMarker.setPosition(0,true)},b.setTokenizer=function(a){this.tokenizer!=null&&this.tokenizer.removeEventListener(this._tokenizerEvents),(this.tokenizer=a)?a.addEventListener(this._tokenizerEvents):(this._textProperties.reset(),this.callHooks("onResetCode",this.code))},b.getCode=function(){return this.__code||(this.__code=this.code.join("\n"))},b.getCodeSize=function(){if(this.__size)return this.__size;var a=this.code.length,b=a>0?-1:0;while(--a>=0)b+=this.code[a].length+1;return this.__size=b},b.getLine=function(a){a==null&&(a=this._rowcol.row);return this.code[a]},b.charAtRowCol=function(a,b){var c=this.code.length;if(a>=c--)return null;var d=this.code[a];if(b==d.length)return a==c&&d.charAt(b)||"\n";return d.charAt(b)},b.charAt=function(a){a==null?a=this.point():(a=f(a))<0&&(a+=this.point());var b=this._positionToRowCol(a);return this.charAtRowCol(b.row,b.col)},b.callInteractively=function(a,b,c){b||(b=[]);var d;a instanceof Function?d=a.ymacsCommand||null:(d=a,a=this.COMMANDS[a]);if(a.ymacsCallInteractively&&!c)return a.ymacsCallInteractively.apply(this,b);(this.currentCommand=d)!="undo"&&(this.__undoQueue=this.__undoQueue.concat(this.__redoQueue),this.__redoQueue=[]);if(this.previousCommand!=d)this.sameCommandCount(0),d!="undo"&&this._placeUndoBoundary();else if(d!="self_insert_command"||this.sameCommandCount()%20==0)d!="undo"&&this._placeUndoBoundary();this.preventUpdates();try{this.callHooks("beforeInteractiveCommand",d,a),a.ymacsMarkExtend||this.clearTransientMark();return a.apply(this,b)}catch(a){if(a instanceof Ymacs_Exception)this.signalError(a.message);else throw a}finally{this.resumeUpdates(),this.callHooks("afterInteractiveCommand",d,a),this.previousCommand=d,this.sameCommandCount(+1)}},b.resetOverwriteMode=function(a){arguments.length==0&&(a=this.overwriteMode),this.callHooks("onOverwriteMode",this.overwriteMode=!a),this.signalInfo(a?"Insert mode":"Overwrite mode")},b.getMinibuffer=function(){return this.whenYmacs(function(a){return a.minibuffer})},b.getMinibufferFrame=function(){return this.whenYmacs(function(a){return a.minibuffer_frame})},b.setMinibuffer=function(a){this.whenMinibuffer(function(b){b.setCode(a),b.cmd("end_of_buffer")})},b.cmd=function(a){return this.COMMANDS[a].apply(this,Array.$(arguments,1))},b.cmdApply=function(a,b){return this.COMMANDS[a].apply(this,b)},b.createDialog=function(a){a.parent||(a.parent=this.getActiveFrame()&&this.getActiveFrame().getParentDialog(),"noShadows"in a||(a.noShadows=true));var b=new DlDialog(a);this.whenActiveFrame(function(a){b.addEventListener("onDestroy",a.focus.clearingTimeout(0,a))});return b},b.getActiveFrame=function(){return this.whenYmacs("getActiveFrame")},b.when=function(a,b){if((a=this[a]||this.getq(a))!=null)return b instanceof Function?b.call(this,a):a[b].apply(a,Array.$(arguments,2))},b.whenActiveFrame=function(){var a=this.getActiveFrame();if(a.buffer===this){this.activeFrame=a;var b=Array.$(arguments);b.unshift("activeFrame");return this.when.apply(this,b)}this.activeFrame=null},b.forAllFrames=function(a){this.ymacs.getBufferFrames(this).foreach(a)},b.whenYmacs=function(){var a=Array.$(arguments);a.unshift("ymacs");return this.when.apply(this,a)},b.whenMinibuffer=function(a){return this.whenYmacs(function(b){if(b.minibuffer)return a.call(this,b.minibuffer)})},b.preventUpdates=function(){++this.__preventUpdates},b.resumeUpdates=function(){(this.__preventUpdates=Math.max(this.__preventUpdates-1,0))==0&&this.redrawDirtyLines()},b.getRegion=function(a,b){a==null&&(a=this.caretMarker),b==null&&(b=this.markMarker),a=f(a);if((b=f(b))<a){var c=a;a=b,b=c}return{begin:a,end:b}},b.redrawDirtyLines=function(){this.callHooks("beforeRedraw"),this.__dirtyLines.foreach(function(a,b){a&&this.callHooks("onLineChange",b)},this),this.__dirtyLines=[],this.callHooks("afterRedraw")},b.getOverlays=function(){return this.__overlays},b.getOverlay=function(a){return this.__overlays[a]},b.setOverlay=function(a,b){var c=this.__overlays[a],d=!c,e;d?c=this.__overlays[a]=b:Object.merge(c,b),c.line2<c.line1?(e=c.line2,c.line2=c.line1,c.line1=e,e=c.col2,c.col2=c.col1,c.col1=e):c.line2==c.line1&&c.col2<c.col1&&(e=c.col2,c.col2=c.col1,c.col1=e),this.callHooks("onOverlayChange",a,c,d)},b.deleteOverlay=function(a){delete this.__overlays[a],this.callHooks("onOverlayDelete",a)},b.ensureTransientMark=function(){var a=this._rowcol,b;this.transientMarker||(this.transientMarker=this.createMarker(),this.markMarker.setPosition(this.point()),b=a),b||(b=this.transientMarker.getRowCol()),this.setOverlay("selection",{line1:b.row,col1:b.col,line2:a.row,col2:a.col})},b.clearTransientMark=function(){this.transientMarker&&(this.transientMarker.destroy(),this.transientMarker=null,this.deleteOverlay("selection"))},b.deleteTransientRegion=function(){if(this.transientMarker){this._deleteText(this.caretMarker,this.transientMarker),this.clearTransientMark(),this._placeUndoBoundary();return true}};var i=0;b.sameCommandCount=function(a){if(a==null)return i;return i+=a};var j;b.interactiveEvent=function(a){if(arguments.length==0)return j;return j=a},b.getPrefixArg=function(a){var b=this.getq("universal_prefix");a||(this.setq("universal_prefix",undefined),this.isMinibuffer||this.setMinibuffer(""));return b},b.setPrefixArg=function(a){return this.setq("universal_prefix",a)},b.updateProgress=function(a,b){b==null?delete this.progress[a]:this.progress[a]=b,this.callHooks("onProgressChange")},b.renderModelineContent=function(a){var b=String.buffer("-- <b>",this.name.htmlEscape(),"</b> (",a.row+1,",",a.col,") "),c=[];for(var d in this.progress)c.push(d+": "+this.progress[d]);c.length>0&&b("[",c.join(", "),"]");return b.get()},b._recordChange=function(a,b,c,d){if(c>0){var f=this.__undoQueue;f.push({type:a,pos:b,len:c,text:d}),f.length>e&&f.shift()}},b._placeUndoBoundary=function(a){a=a||this.__undoQueue;var b=this.markers.map(function(a){return[a,a.getPosition()]}),c=a.peek();!c||c.type!=3?a.push({type:3,markers:b}):c.markers=b},b._playbackUndo=function(a){++this.__undoInProgress;var b=false,c;while(a.length>0&&a.peek().type==3)c=a.pop();while(a.length>0){c=a.pop();if(c.type==3){c.markers.foreach(function(a){a[0].setPosition(a[1])});break}b=true;var d=c.pos;switch(c.type){case 1:this._deleteText(d,d+c.len);break;case 2:this._insertText(c.text,d)}}--this.__undoInProgress;return b},b._replaceLine=function(a,b){this.code[a]=b,this._textProperties.replaceLine(a,b),this.__preventUpdates==0?this.callHooks("onLineChange",a):this.__dirtyLines[a]=true},b._deleteLine=function(a){this.code.splice(a,1),this._textProperties.deleteLine(a),this.tokenizer&&this.tokenizer.quickDeleteLine(a),this.__dirtyLines.splice(a,1),this.callHooks("onDeleteLine",a)},b._insertLine=function(a,b){this.code.splice(a,0,b),this._textProperties.insertLine(a),this.tokenizer&&this.tokenizer.quickInsertLine(a);var c=this.__preventUpdates==0;this.callHooks("onInsertLine",a,c),c||(this.__dirtyLines.length<=a?this.__dirtyLines[a]=true:this.__dirtyLines.splice(a,0,true))},b._insertText=function(a,b){if(!(a.length==0)){b==null&&(b=this.caretMarker.getPosition()),b=f(b),this.__preventUndo==0&&this._recordChange(1,b,a.length);var c=b==this.point()?this._rowcol:this._positionToRowCol(b),d=c.row;if(/^\n+$/.test(a)&&c.col==0)a.length.times(function(a){this._insertLine(d+a,"")},this);else{var e=a.split("\n"),g=this.code[d],h=g.substr(c.col);e.length>1?(this._replaceLine(d,g.substr(0,c.col)+e.shift()),e.foreach(function(a){this._insertLine(++d,a)},this),this._replaceLine(d,this.code[d]+h)):this._replaceLine(d,g.substr(0,c.col)+e[0]+g.substr(c.col))}this._updateMarkers(b,a.length),this.callHooks("onTextInsert",b,a)}},b._deleteText=function(a,b){a=this._boundPosition(f(a)),b=this._boundPosition(f(b));if(!(a==b)){if(b<a){var c=a;a=b,b=c}this.__preventUndo==0&&this._recordChange(2,a,b-a,this._bufferSubstring(a,b));var d=this._positionToRowCol(a),e=this._positionToRowCol(b),g=this.code[d.row];d.row==e.row?(g=g.substr(0,d.col)+g.substr(e.col),this._replaceLine(d.row,g)):(g=g.substr(0,d.col)+this.code[e.row].substr(e.col),this._replaceLine(d.row,g),g=d.row+1,(e.row-d.row).times(this._deleteLine.$(this,g))),this._updateMarkers(a,a-b,a),this.callHooks("onTextDelete",a,b)}},b._replaceText=function(a,b,c){this._deleteText(a,b),this._insertText(c,a)},b._swapAreas=function(a){a=a.map(f).mergeSort();var b=a[0],c=a[1],d=a[2],e=a[3],g=this._bufferSubstring(b,c),h=this._bufferSubstring(d,e);this._replaceText(d,e,g),this._replaceText(b,c,h);return e},b._bufferSubstring=function(a,b){a==null?a=this.point():a=f(a),b==null?b=this.getCodeSize():b=f(b);if(b<a){var c=a;a=b,b=c}return this.getCode().substring(a,b)},b._killingAction=function(a,b,c,d){a=f(a),b=f(b);var e=this._bufferSubstring(a,b);this._saveKilledText(e,c),d||this._deleteText(a,b)},b._saveKilledText=function(a,b){this._lastCommandWasKill||this.ymacs.killRingToMaster(),this.ymacs.pushToKillRing(a,b),this._lastCommandWasKill++},b._positionToRowCol=function(a){var b=0,c=this.code,d=c.length;while(a>0&&b<d){var e=c[b].length;if(e>=a)break;a-=e+1,b++}return{row:b,col:a}},b._rowColToPosition=function(a,b){var c=0,d=this.code,e=Math.min(a,d.length-1),f=e;if(e<0)return 0;while(--e>=0)c+=d[e].length+1;return c+Math.min(b,d[f].length)},b._boundPosition=function(a){if(a<0)return 0;return Math.min(a,this.getCodeSize())},b._repositionCaret=function(a){var b=this.caretMarker.getPosition();a==null&&(a=b),a=f(a),a=this._boundPosition(a),this.caretMarker.setPosition(a);return a!=b},b._updateMarkers=function(a,b,c){this.__code=this.__size=null,this.markers.map("editorChange",a,b,c||0),this.tokenizer&&this.tokenizer.quickUpdate(Math.min(a,a+b))},b._saveExcursion=function(a,b){var c=this.createMarker(null,b);++this.__savingExcursion;try{return a.call(this)}finally{--this.__savingExcursion,this.caretMarker.swap(c,false,true),c.destroy()}},b._disableUndo=function(a){++this.__preventUndo;try{return a.call(this)}finally{--this.__preventUndo}},b._handleKeyEvent=function(a){var b=false;this.interactiveEvent(a);var c=this._lastCommandWasKill;this.__nextIsMeta&&(a.altKey=true),this.__nextIsMeta=false;var d=Ymacs_Keymap.unparseKey(a),e=this.currentKeys,f=false;e.push(d),this.keymap.r_foreach(function(a){var c=a.getHandler(e);c instanceof Array?(this.callInteractively(c[0],c[1]),b=true):c?b=f=true:d==="ESCAPE"?b=this.__nextIsMeta=true:a.defaultHandler&&e.length==1&&(b=this.callInteractively(a.defaultHandler[0],a.defaultHandler[1])),b&&$BREAK()},this),f||(b||e.length>1&&(this.signalError(e.join(" ").bold()+" is undefined",true),b=true),e.splice(0,e.length)),this._lastCommandWasKill==c&&typeof b!="object"&&(this._lastCommandWasKill=0),this.callHooks("finishedEvent",b),this.interactiveEvent(null);return b},b._on_tokenizerFoundToken=function(a,b,c,d){d?this._textProperties.addLineProps(a,b,c,"css",d):this._textProperties.removeLineProps(a,b,c,"css")},b._on_textPropertiesChange=function(a){this.__preventUpdates==0?this.callHooks("onLineChange",a):this.__dirtyLines[a]=true},b.formatLineHTML=function(a,b){var c=this._rowcol;b instanceof Ymacs_Marker&&(c=b.getRowCol()),b=a==c.row?c.col:null;return this._textProperties.getLineHTML(a,this.code[a],b)}}),DEFINE_CLASS("Ymacs_Marker",null,function(a,b){a.DEFAULT_ARGS={position:["pos",null],editor:["editor",null],before:["before",false],name:["name",null]},a.CONSTRUCT=function(){this.editor.markers.push(this),this.rowcol=null,this.onChange=[]},b.destroy=function(){this.editor.markers.remove(this),this.editor=null},b.editorChange=function(a,b,c){var d=this.position;this.before&&--d,b!=0&&a<=d&&(this.rowcol=null,this.position+=b,this.position<c&&(this.position=c),this.callHooks(this.onChange,this.position))},b.callHooks=function(a,b){for(var c=a.length;--c>=0;)a[c].call(this.editor,b)},b.getPosition=function(){return this.position},b.setPosition=function(a,b,c){if(c||this.position!=a)this.rowcol=null,this.position=a,b||this.callHooks(this.onChange,this.position)},b.getRowCol=function(){return this.rowcol||(this.rowcol=this.editor._positionToRowCol(this.position))},b.updateMarkers=function(a){this.editor._updateMarkers(this.getPosition(),a)},b.swap=function(a,b,c){var d=this.getPosition();this.setPosition(a.getPosition(),b,c),a.setPosition(d,b,c)}}),Ymacs_Buffer.newCommands({forward_char:Ymacs_Interactive("p",function(a){a==null&&(a=1);return this.cmd("goto_char",this.point()+a)}),backward_char:Ymacs_Interactive("p",function(a){a==null&&(a=1);return this.cmd("forward_char",-a)}),forward_line:Ymacs_Interactive("p",function(a){a==null&&(a=1);var b=this._rowcol;/^(forward|backward)_line$/.test(this.previousCommand)||this.setq("line_movement_requested_col",b.col);var c=this.cmd("goto_char",this._rowColToPosition(b.row+a,Math.max(b.col,this.getq("line_movement_requested_col"))));c||this.setq("line_movement_requested_col",b.col);return c}),backward_line:Ymacs_Interactive("p",function(a){a==null&&(a=1);return this.cmd("forward_line",-a)}),forward_whitespace:Ymacs_Interactive("P",function(a){var b=a?/[^\x20\t\xA0]/g:/[^\s]/g;if(this.cmd("search_forward_regexp",b)){this.cmd("backward_char");return true}if(!a)return this.cmd("end_of_buffer")}),backward_whitespace:Ymacs_Interactive("P",function(a){var b=a?/[^\x20\t\xA0]/g:/[^\s]/g;if(this.cmd("search_backward_regexp",b)){this.cmd("forward_char");return true}if(!a)return this.cmd("beginning_of_buffer")}),beginning_of_line:Ymacs_Interactive(function(){return this.cmd("goto_char",this._rowColToPosition(this._rowcol.row,0))}),back_to_indentation:Ymacs_Interactive(function(){var a=this._rowcol,b=this.code[a.row],c=/\S/.exec(b);if(c)return this.cmd("goto_char",this._rowColToPosition(a.row,c.index))}),beginning_of_indentation_or_line:Ymacs_Interactive(function(){return this.cmd("back_to_indentation")||this.cmd("beginning_of_line")}),end_of_line:Ymacs_Interactive(function(){var a=this._rowcol;return this.cmd("goto_char",this._rowColToPosition(a.row,this.code[a.row].length))}),beginning_of_buffer:Ymacs_Interactive(function(){return this.cmd("goto_char",0)}),end_of_buffer:Ymacs_Interactive(function(){return this.cmd("goto_char",this.getCodeSize())}),eob_p:function(){return this.point()==this.getCodeSize()},bob_p:function(){return this.point()==0},eol_p:function(){var a=this._positionToRowCol(this.point());return a.col==this.code[a.line].length},bol_p:function(){return this._positionToRowCol(this.point()).col==0},backward_delete_char:Ymacs_Interactive("^p",function(a){if(!this.deleteTransientRegion()){a==null&&(a=1);var b=this.point();b>0&&this._deleteText(b-a,b)}}),delete_char:Ymacs_Interactive("^p",function(a){if(!this.deleteTransientRegion()){a==null&&(a=1);var b=this.point();this._deleteText(b,b+a)}}),delete_whitespace:Ymacs_Interactive("^P",function(a){if(!this.deleteTransientRegion()){var b=this.point();if(this.cmd("forward_whitespace",a)){this._deleteText(b,this.point());return true}}}),backward_delete_whitespace:Ymacs_Interactive("^P",function(a){if(!this.deleteTransientRegion()){var b=this.point();if(this.cmd("backward_whitespace",a)){this._deleteText(this.point(),b);return true}}}),universal_argument:Ymacs_Interactive("^",function(){this.pushKeymap(Ymacs_Keymap_UniversalArgument()),this.isMinibuffer||this.setMinibuffer("C-u")}),overwrite_mode:Ymacs_Interactive(function(){this.resetOverwriteMode()}),self_insert_command:Ymacs_Interactive("^p",function(a){var b=this.interactiveEvent(),c=String.fromCharCode(b.charCode),d=this._rowcol;if(b.charCode&&c&&!b.altKey&&!b.ctrlKey){this.deleteTransientRegion(),a!=null&&(c=c.x(a));if(this.overwriteMode){var e=this.code[d.row],f=e.length-d.col;f>0&&this.cmd("delete_char",Math.min(f,a||1))}this.cmd("insert",c);return b.domStop=true}return false}),newline:Ymacs_Interactive("^p",function(a){a==null&&(a=1),this.deleteTransientRegion(),this.cmd("insert","\n".x(a))}),newline_and_indent:Ymacs_Interactive("^p",function(a){a?this.cmd("newline",a):(this.cmd("backward_delete_whitespace",true),this.cmd("newline"),this.cmd("indent_line"))}),indent_line:Ymacs_Interactive("P",function(a){if(this.tokenizer){var b=this.tokenizer.getIndentation(this._rowcol.row,this);if(b!=null){if(!a||/\S/.test(this.getLine())){var c=this.cmd("save_excursion",function(){this.cmd("back_to_indentation"),this._rowcol.col!=b&&(this.cmd("beginning_of_line"),this.cmd("delete_whitespace",true),this.cmd("insert"," ".x(b)));return this.point()});this.point()<c&&this.cmd("goto_char",c)}return}}this.cmd("insert"," ".x(this.getq("indent_line")))}),indent_region:Ymacs_Interactive("r",function(a,b){if(b<a){var c=a;a=b,b=c}this.cmd("save_excursion",function(){var c=this.createMarker(b);this.cmd("goto_char",a);while(this.point()<c.getPosition()){this.cmd("indent_line",true),this.cmd("beginning_of_line");if(!this.cmd("forward_line"))break}c.destroy()})}),make_marker:function(a){return this.createMarker(a)},looking_at:function(a){var b=a.lastIndex=this.point(),c=this.matchData=a.exec(this.getCode());c&&(c.after=a.lastIndex);return c&&c.index==b},looking_back:function(a){var b=this.lastIndexOfRegexp(this.getCode(),a,this.point());return b&&b.after==this.point()},search_forward:Ymacs_Interactive("sSearch: ",function(a,b){var c=this.getCode(),d=this.point();this.getq("case_fold_search")&&(c=c.toLowerCase(),a=a.toLowerCase());var e=c.indexOf(a,d);if(e>=0&&(b==null||e<=b)){this.cmd("goto_char",e+a.length);return true}}),search_backward:Ymacs_Interactive("sSearch backward: ",function(a,b){var c=this.getCode(),d=this.point();this.getq("case_fold_search")&&(c=c.toLowerCase(),a=a.toLowerCase());var e=c.lastIndexOf(a,d);e==d&&(e=c.lastIndexOf(a,d-1));if(e>=0&&e!=d&&(b==null||e>=b)){this.cmd("goto_char",e);return true}}),make_regexp:function(a){if(!(a instanceof RegExp)){var b=a.toLowerCase()!=a.toUpperCase();try{a=new RegExp(a,b?"ig":"g")}catch(a){throw new Ymacs_Exception("Invalid regexp")}}return a},search_forward_regexp:Ymacs_Interactive("sRegExp search: ",function(a){a=this.cmd("make_regexp",a);var b=this.getCode(),c=a.lastIndex=this.point(),d=this.matchData=a.exec(b);if(d&&a.lastIndex!=c){d.after=a.lastIndex,this.cmd("goto_char",a.lastIndex);return true}}),search_backward_regexp:Ymacs_Interactive("sBackward RegExp search: ",function(a){a=this.cmd("make_regexp",a);var b=this.lastIndexOfRegexp(this.getCode(),a,this.point());if(b&&b.index!=this.point()){this.cmd("goto_char",b.index);return true}}),forward_word:Ymacs_Interactive_X(function(){var a=this.getq("syntax_word"),b=false;while(!b&&!a.test(this.charAt()))this.cmd("forward_char")||(b=true);while(!b&&a.test(this.charAt()))this.cmd("forward_char")||(b=true)}),backward_word:Ymacs_Interactive_X(function(){var a=this.getq("syntax_word"),b=false;while(!b&&!a.test(this.charAt(-1)))this.cmd("backward_char")||(b=true);while(!b&&a.test(this.charAt(-1)))this.cmd("backward_char")||(b=true)}),forward_paragraph:Ymacs_Interactive_X(function(){this.cmd("forward_whitespace"),this.cmd("search_forward_regexp",this.getq("syntax_paragraph_sep"))?this.cmd("goto_char",this.cmd("match_beginning")+1):this.cmd("end_of_buffer")}),backward_paragraph:Ymacs_Interactive_X(function(){this.cmd("backward_whitespace"),this.cmd("search_backward_regexp",this.getq("syntax_paragraph_sep"))?this.cmd("goto_char",this.cmd("match_end")-1):this.cmd("beginning_of_buffer")}),transpose_words:Ymacs_Interactive_X(function(){this.cmd("backward_char"),this.getq("syntax_word").test(this.charAt())&&this.cmd("forward_word");var a=[];this.cmd("forward_word"),a.push(this.point()),this.cmd("backward_word"),a.push(this.point()),this.cmd("backward_word"),a.push(this.point()),this.cmd("forward_word"),a.push(this.point()),this.cmd("goto_char",this._swapAreas(a))}),transpose_lines:Ymacs_Interactive_X(function(){var a=[];this.cmd("backward_line"),this.cmd("beginning_of_line"),a.push(this.point()),this.cmd("end_of_line"),a.push(this.point()),this.cmd("forward_char"),a.push(this.point()),this.cmd("end_of_line"),a.push(this.point()),this.cmd("goto_char",this._swapAreas(a)+1)}),transpose_chars:Ymacs_Interactive_X(function(){var a=this.point();this.cmd("backward_char")&&this.cmd("goto_char",this._swapAreas([a-1,a,a,a+1]))}),kill_word:Ymacs_Interactive_X(function(){var a=this.point();this.cmd("forward_word");var b=this.point();this._killingAction(a,b,false)}),backward_kill_word:Ymacs_Interactive_X(function(){var a=this.point();this.cmd("backward_word");var b=this.point();this._killingAction(a,b,true)}),_apply_operation_on_word:function(a,b){var c=this.point();if(this.getq("syntax_word").test(this.charAt())){var d=this.cmd("save_excursion",function(){this.cmd("forward_word");return this.point()}),e=a.call(this._bufferSubstring(c,d));this._deleteText(c,d),this._insertText(e)}else this.cmd("forward_word"),this.cmd("backward_word"),c!=this.point()&&this.cmd(b)},capitalize_word:Ymacs_Interactive_X(function(){this.cmd("_apply_operation_on_word",function(){return this.charAt(0).toUpperCase()+this.substr(1).toLowerCase()},"capitalize_word")}),downcase_word:Ymacs_Interactive_X(function(){this.cmd("_apply_operation_on_word",String.prototype.toLowerCase,"downcase_word")}),upcase_word:Ymacs_Interactive_X(function(){this.cmd("_apply_operation_on_word",String.prototype.toUpperCase,"upcase_word")}),goto_char:Ymacs_Interactive("NGoto char: ",function(a){return this._repositionCaret(a)}),goto_line:Ymacs_Interactive("NGoto line: ",function(a){var b=this._rowColToPosition(a-1,0);return this.cmd("goto_char",b)}),move_to_column:Ymacs_Interactive("NMove to column: ",function(a,b){var c=this._positionToRowCol(this.point()),d=this.code[c.row];d.length<a?b?(this.cmd("end_of_line"),this.cmd("insert"," ".x(a-d.length))):this.cmd("end_of_line"):this.cmd("goto_char",this._rowColToPosition(c.row,a))}),delete_region:Ymacs_Interactive("r",function(a,b){this._deleteText(a,b)}),insert:Ymacs_Interactive("sInsert text: ",function(){return this._insertText(Array.$(arguments).join(""))}),keyboard_quit:Ymacs_Interactive("^p",Function.noop),buffer_substring:function(a,b){if(arguments.length==0){var c=this.getRegion();a=c.begin,b=c.end}return this._bufferSubstring(a,b)},kill_line:Ymacs_Interactive_X(function(){var a=this.point(),b=this._rowcol,c=this.code[b.row],d=a+c.length-b.col;b.row<this.code.length-1&&this.cmd("looking_at",/\s*$/mg)&&d++,this._killingAction(a,d)}),save_excursion:function(){return this._saveExcursion.apply(this,arguments)},prevent_undo:function(){return this._disableUndo.apply(this,arguments)},point:function(){return this.caretMarker.getPosition()},kill_region:Ymacs_Interactive("r",function(a,b){this._killingAction(a,b)}),copy_region_as_kill:Ymacs_Interactive("r",function(a,b){this._killingAction(a,b,false,true)}),yank:Ymacs_Interactive("^P",function(a){this.deleteTransientRegion();var b=this.point();this._insertText(this.ymacs.killRingText()),this.cmd("set_mark_command",b),a&&this.cmd("exchange_point_and_mark")}),yank_pop:Ymacs_Interactive(function(){/^yank/.test(this.previousCommand)?(this.ymacs.rotateKillRing(false),this._deleteText(this.caretMarker,this.markMarker),this.cmd("yank")):this.signalError("Previous command was not a yank")}),yank_shift:Ymacs_Interactive(function(){/^yank/.test(this.previousCommand)?(this.ymacs.rotateKillRing(true),this._deleteText(this.caretMarker,this.markMarker),this.cmd("yank")):this.signalError("Previous command was not a yank")}),mark:function(){return this.markMarker.getPosition()},set_mark_command:Ymacs_Interactive("d",function(a){this.currentCommand=="set_mark_command"&&this.signalInfo("Mark set",null,1e3),this.markMarker.setPosition(a)}),exchange_point_and_mark:Ymacs_Interactive("^",function(){this.caretMarker.swap(this.markMarker)}),mark_whole_buffer:Ymacs_Interactive(function(){this.clearTransientMark(),this.cmd("end_of_buffer"),this.ensureTransientMark(),this.cmd("beginning_of_buffer"),this.ensureTransientMark()}),recenter_top_bottom:Ymacs_Interactive(function(){this.whenActiveFrame(function(a){a.ensureCaretVisible(true),a.centerOnCaret()})}),ensure_caret_visible:Ymacs_Interactive(function(){this.whenActiveFrame(function(a){a.ensureCaretVisible(true),a.centerOnCaret()})}),fill_paragraph:Ymacs_Interactive("P",function(a){this.cmd("save_excursion",function(){this.cmd("looking_at",this.getq("syntax_paragraph_sep"))||this.cmd("forward_paragraph");var b=this.createMarker(this.point()-1);this.cmd("backward_paragraph"),this.point()>0&&this.cmd("forward_char");var c="",d=false;this.cmd("looking_at",/\s*([-]|[0-9]+\.|\(?[a-z][\).])?\s+/ig)?(c=" ".x(this.matchData[0].length),d=/\s*[#>;\s]*\s*/g):this.cmd("looking_at",/\s*[#>;*\s]+\s*/g)&&(c=this.matchData[0],d=/\s*[#>;\s]*\s*/g),a&&(this._deleteText(this.point(),this.point()+this.matchData[0].length),c="");while(true){this.cmd("end_of_line"),this.cmd("backward_delete_whitespace");if(this.point()>=b.getPosition())break;this._replaceText(this.point(),this.point()+1," "),d&&this.cmd("looking_at",d)&&this._deleteText(this.point(),this.point()+this.matchData[0].length)}this.cmd("beginning_of_line");while(this.point()<b.getPosition()){var e=this.point();if(!this.cmd("search_forward_regexp",/\s/g))break;this.point()>b.getPosition()&&this.cmd("goto_char",b),this._rowcol.col>this.getq("fill_column")&&(this.cmd("goto_char",e),this.cmd("backward_delete_whitespace"),this.cmd("newline"),this.cmd("insert",c))}b.destroy(),this.cmd("recenter_top_bottom")})}),fill_paragraph_no_prefix:Ymacs_Interactive(function(){return this.cmd("fill_paragraph",true)}),start_next_paragraph:Ymacs_Interactive(function(){this.cmd("backward_paragraph"),this.point()>0&&this.cmd("forward_char");var a="";this.cmd("looking_at",/(\s*)([0-9]+)(\.\s+)/g)?a=this.matchData[1]+(parseInt(this.matchData[2],10)+1)+this.matchData[3]:this.cmd("looking_at",/(\s*\(?)([a-z])([\.\)]\s+)/ig)?a=this.matchData[1]+String.fromCharCode(this.matchData[2].charCodeAt(0)+1)+this.matchData[3]:this.cmd("looking_at",/\s*[#>;*\s-]+\s*/g)&&(a=this.matchData[0]),this.cmd("forward_paragraph"),this.cmd("eob_p")&&this.cmd("newline"),this.cmd("insert","\n",a),this.cmd("looking_at",/\n\n/g)||(this.cmd("newline"),this.cmd("backward_char"))}),scroll_down:Ymacs_Interactive_X(function(){this.whenActiveFrame(function(a){var b=a.heightInLines();this.cmd("forward_line",Math.round(b/1.33)),this.cmd("recenter_top_bottom")})}),scroll_up:Ymacs_Interactive_X(function(){this.whenActiveFrame(function(a){var b=a.heightInLines();this.cmd("backward_line",Math.round(b/1.33)),this.cmd("recenter_top_bottom")})}),nuke_trailing_whitespace:Ymacs_Interactive(function(){this.cmd("save_excursion",function(){this.cmd("goto_char",0);while(this._rowcol.row<this.code.length){var a=this.code[this._rowcol.row],b=/\s+$/.exec(a);b&&(this.cmd("beginning_of_line"),this._deleteText(this.point()+b.index,this.point()+a.length));if(!this.cmd("forward_line"))break}})}),match_string:function(a){return this.matchData[a]},match_beginning:function(){return this.matchData.index},match_end:function(){return this.matchData.index+this.matchData[0].length},undo:Ymacs_Interactive_X(function(){var a=this.__undoQueue;this.__undoQueue=this.__redoQueue,this._placeUndoBoundary(),this._playbackUndo(a)||this.signalError("No further undo information"),this.__undoQueue=a}),center_line:Ymacs_Interactive("p",function(a){a==null&&(a=1),a.times(function(a){a>0&&this.cmd("forward_line"),this.cmd("save_excursion",function(){this.cmd("end_of_line"),this.cmd("backward_delete_whitespace",true),this.cmd("beginning_of_line"),this.cmd("delete_whitespace",true);var a=this.code[this._rowcol.row],b=Math.floor((this.getq("fill_column")-a.length)/2);this.cmd("insert"," ".x(b))})},this)}),dabbrev_expand:Ymacs_Interactive_X(function(){this.previousCommand!="dabbrev_expand"&&this.setq("dabbrev_context",null);var a=this.getq("dabbrev_context");if(!a){a=this.setq("dabbrev_context",{});var b=this.cmd("save_excursion",function(){this.cmd("bind_variables",{syntax_word:this.getq("syntax_word_dabbrev")},"backward_word");return this.point()});if(b==this.point())return this.signalError("Nothing to expand");a.search=this.cmd("buffer_substring",b,this.point()),a.point=b,a.length=this.point()-b,a.lastSearch=b,a.encountered={},a.forward=false,a.startBuffer=a.buffer=this}var c;a.buffer.cmd("save_excursion",function d(){var b=this.getq("syntax_word_dabbrev"),e,f=false;this.cmd("goto_char",a.lastSearch);if(a.forward){while(this.cmd("search_forward",a.search))if(!b.test(this.charAt(-a.search.length-1))){f=true;break}if(f)a.lastSearch=this.point(),e=this.point()-a.search.length;else{a.buffer=this.whenYmacs("getNextBuffer",this);if(a.buffer===a.startBuffer){c=a.search,a.startBuffer.signalError("No more completions"),a.lastSearch=a.point+a.length,a.startBuffer.setq("dabbrev_context",null);return}a.lastSearch=0,a.buffer.cmd("save_excursion",d);return}}else{while(this.cmd("search_backward",a.search))if(!b.test(this.charAt(-1))){f=true;break}if(f)a.lastSearch=e=this.point(),this.cmd("goto_char",e+a.search.length);else{a.forward=true,a.lastSearch=a.point+a.length,d.call(this);return}}e!=null&&(this.cmd("bind_variables",{syntax_word:this.getq("syntax_word_dabbrev")},"forward_word"),c=this.cmd("buffer_substring",e,this.point()),Object.HOP(a.encountered,c)&&d.call(this))}),c!=null&&(this._replaceText(a.point,a.point+a.length,c),a.length=c.length,a.encountered[c]=true)}),split_frame_vertically:Ymacs_Interactive("p",function(a){a==null?a="50%":a+="%",this.whenActiveFrame("vsplit",a)}),split_frame_horizontally:Ymacs_Interactive("p",function(a){a==null?a="50%":a+="%",this.whenActiveFrame("hsplit",a)}),delete_other_frames:Ymacs_Interactive(function(){this.whenActiveFrame("deleteOtherFrames")}),delete_frame:Ymacs_Interactive(function(){this.whenActiveFrame("deleteFrame")}),other_frame:Ymacs_Interactive(function(){this.whenYmacs("focusOtherFrame")}),windmove:function(a){this.whenYmacs(function(b){var c=b.getFrameInDirection(a);c&&c.focus()})},next_buffer:Ymacs_Interactive(function(){this.whenYmacs("switchToNextBuffer",this.sameCommandCount()+1)}),previous_buffer:Ymacs_Interactive(function(){this.whenYmacs("switchToPreviousBuffer",this.sameCommandCount()+1)}),switch_to_buffer:Ymacs_Interactive("BSwitch to buffer: ",function(a){this.whenYmacs(function(b){b.switchToBuffer(a)})}),kill_buffer:Ymacs_Interactive(function(){this.whenYmacs(function(a){a.killBuffer(this)})}),rename_buffer:Ymacs_Interactive("sRename current buffer to: ",function(a){this.whenYmacs(function(b){b.renameBuffer(this,a)})}),delete_region_or_line:Ymacs_Interactive("^",function(){if(!this.deleteTransientRegion()){this.cmd("beginning_of_line");var a=this.point();if(this.cmd("forward_line")||this.cmd("end_of_line")){this._deleteText(a,this.point());return true}}}),close_last_xml_tag:Ymacs_Interactive_X(function(){var a,b;this.cmd("save_excursion",function(){var b=1;while(b!=0&&this.cmd("search_backward_regexp",/<\x2f?([a-zA-Z0-9:_-]+)/g))a=this.cmd("match_string",1),this.cmd("looking_at",/<\x2f/g)?++b:this.cmd("looking_at",/<[^\x2f][^>]*?\x2f>/g)||--b;b!=0&&(a=null)});if(a)this.cmd("insert","</",a,">");else throw new Ymacs_Exception("Couldn't find a tag to close")}),bind_variables:function(){return this.withVariables.apply(this,arguments)},for_region:Ymacs_Interactive("^r\nCExecute command within region: ",function(a,b,c){if(b<a){var d=a;a=b,b=d}c instanceof Function||(c=this.COMMANDS[c]),this.clearTransientMark(),this.cmd("goto_char",a),a=this.createMarker(a,true),b=this.createMarker(b),this.withCommands({goto_char:function(c){if(c>=a.getPosition()&&c<=b.getPosition())return this._repositionCaret(c);throw"YMACS_RESTRICT"}},function(){try{while(true){var d=this.point();c.call(this);if(this.point()==d&&!this.cmd("forward_line"))break}}catch(a){if(a!=="YMACS_RESTRICT")throw a}finally{a.destroy(),b.destroy()}})})}),function(){function a(a,b,c,d){a.cmd("save_excursion",function(){for(var a=this._positionToRowCol(b),e=this._positionToRowCol(c),f=Math.abs(e.col-a.col),g=a.row;g<=e.row;++g){this.cmd("goto_char",this._rowColToPosition(g,0));var h=this.code[g],i=a.col,j=e.col,k=this.point(),l=0;if(i>j){var m=i;i=j,j=m}i>h.length&&(l=i-h.length,i=h.length),j>h.length&&(j=h.length),d.call(this,k+i,k+j,l,f)}},b==a.point())}Ymacs_Buffer.newCommands({string_rectangle:Ymacs_Interactive("r\nsString rectangle: ",function(b,c,d){a(this,b,c,function(a,b,c){c>0?this._insertText(" ".x(c),a):this._deleteText(a,b),this._insertText(d,a+c)})}),kill_rectangle:Ymacs_Interactive("r",function(b,c){var d=[];a(this,b,c,function(a,b,c,e){var f=this._bufferSubstring(a,b);b-a<e&&(f+=" ".x(e-b+a)),d.push(f),this._deleteText(a,b)}),this.setq("killed_rectangle",d)}),clear_rectangle:Ymacs_Interactive("r",function(a,b){this.cmd("string_rectangle",a,b," ".x(Math.abs(this._positionToRowCol(b).col-this._positionToRowCol(a).col)))}),insert_rectangle:function(a,b){var c=this._positionToRowCol(a).col;this.cmd("set_mark_command",a),b.foreach(function(a,b){b>0&&(this.cmd("forward_line")||(this.cmd("end_of_line"),this.cmd("newline")),this.cmd("move_to_column",c,true)),this.cmd("insert",a)},this)},yank_rectangle:Ymacs_Interactive("d",function(a){var b=this.getq("killed_rectangle");if(b==null)throw new Ymacs_Exception("No killed rectangle");this.cmd("insert_rectangle",a,b)})})}(),function(){function a(a,b,c){var d=this.createDialog({title:a,quitBtn:"destroy",modal:true}),e=new DlEntry({parent:d,type:"textarea",fillParent:true,value:b});d._focusedWidget=e,d.setSize({x:350,y:250}),e.addEventListener("onKeyPress",function(a){if(a.keyCode!=DlKeyboard.ESCAPE){var b=e.getValue();d.destroy(),c.delayed(0,this,b)}}.clearingTimeout(0,this)),d.show(true),e.select()}Ymacs_Buffer.newCommands({yank_from_operating_system:Ymacs_Interactive(function(){a.call(this,"Paste below (press CTRL-V)",null,function(a){this._saveKilledText(a),this.cmd("yank"),this.cmd("recenter_top_bottom")})}),copy_for_operating_system:Ymacs_Interactive("r",function(b,c){a.call(this,"Press CTRL-C",this.cmd("buffer_substring"),function(){this.cmd("copy_region_as_kill",b,c)})}),kill_for_operating_system:Ymacs_Interactive("r",function(b,c){a.call(this,"Press CTRL-C or CTRL-X",this.cmd("buffer_substring"),function(){this.cmd("kill_region",b,c)})})})}(),["forward_char","forward_word","forward_line","forward_paragraph","forward_sexp","beginning_of_line","beginning_of_indentation_or_line","beginning_of_buffer","backward_char","backward_word","backward_line","backward_paragraph","backward_sexp","end_of_line","end_of_buffer"].foreach(function(a){Ymacs_Buffer.COMMANDS[a+"_mark"]=Ymacs_Interactive("^",function(){this.ensureTransientMark(),this.cmdApply(a,arguments),this.ensureTransientMark()})}),Ymacs_Buffer.newCommands({get_region:function(){return this.getRegion()},cperl_lineup:Ymacs_Interactive("r",function(a,b){this.cmd("save_excursion",function(){var c=this._positionToRowCol(b),d=0,e=[];this.cmd("goto_char",a),this.cmd("forward_whitespace",true);var f=this.charAt();if(f.toLowerCase()!=f.toUpperCase()){this.signalError("Cannot lineup here");return}while(this._rowcol.row<=c.row){var g=this.getLine().indexOf(f);g>=0&&(g>d&&(d=g),e.push([this._rowcol.row,g]));if(!this.cmd("forward_line"))break}++d,e.foreach(function(a){this.cmd("goto_char",this._rowColToPosition(a[0],a[1])),this.cmd("insert"," ".x(d-a[1]))},this)})}),htmlize_region:Ymacs_Interactive("r\nP",function(a,b,c){this.tokenizer.finishParsing();var d=this._positionToRowCol(a).row,e=String.buffer(),f=d,g;c&&!c.empty&&(f=parseInt(c,10)),b=this._positionToRowCol(b).row,g=String(b).length;while(d<=b)e("<div class='line'>"),c&&e("<span class='line-number'>",f.zeroPad(g," "),"</span>"),++f,e(this._textProperties.getLineHTML(d,this.code[d],null),"</div>\n"),++d;e=e.get();var h=this.ymacs.switchToBuffer("*Htmlize*");h.setCode(e),h.cmd("xml_mode",true)}),execute_extended_command:Ymacs_Interactive("^CM-x ",function(a){this.callInteractively(a)}),set_variable:Ymacs_Interactive("vSet variable: \nsTo value: ",function(a,b){var c=parseFloat(b);isNaN(c)||(b=c),this.setq(a,b)}),eval_string:Ymacs_Interactive("^MEval string: ",function(a){try{var b=[this,this.ymacs];a=new Function("buffer","ymacs",a),a.apply(this,b),this.clearTransientMark()}catch(a){this.signalError(a.type+": "+a.message),window.console&&console.log(a)}}),eval_region:Ymacs_Interactive("^r",function(a,b){this.cmd("eval_string",this.cmd("buffer_substring",a,b))}),eval_buffer:Ymacs_Interactive(function(){this.cmd("eval_string",this.getCode())}),toggle_line_numbers:Ymacs_Interactive("^",function(){this.whenActiveFrame("toggleLineNumbers")}),save_file:Ymacs_Interactive("FWrite file: ",function(a){var b=this.ymacs.ls_getFileDirectory(a,"file");b.dir[b.other[0]]=this.getCode(),this.ymacs.ls_set(b.store),this.signalInfo("Saved in local storage")}),load_file:Ymacs_Interactive("fFind file: ",function(a){var b=this.ymacs.ls_getFileContents(a),c=this.ymacs.createBuffer({name:a});c.setCode(b),this.cmd("switch_to_buffer",a)}),delete_file:Ymacs_Interactive("fDelete file: ",function(a){this.ymacs.ls_getFileContents(a);var b=this.ymacs.ls_get();delete b[a],this.ymacs.ls_set(b)}),eval_file:Ymacs_Interactive("fEval file: ",function(a){this.cmd("eval_string",this.ymacs.ls_getFileContents(a))})}),DEFINE_CLASS("Ymacs_Keymap",null,function(a,b){var c={};Object.foreach(DlKeyboard,function(a,b){typeof a=="number"&&(c[a]=b)}),a.CONSTRUCT=function(){this.definitions=Object.makeCopy(this.__originalDefs)},b.FINISH_OBJECT_DEF=function(){this.__originalDefs={};var a=this.constructor.KEYS;a&&this.defineKeys(a)},b.parseKey=function(a){var b={},c=a.split(/-/);c.reverse(),c.foreach(function(a,d){if(d==0)typeof DlKeyboard[a]=="number"?b.keyCode=DlKeyboard[a]:(c[d]=a.toLowerCase(),b.charCode=c[d].charCodeAt(0));else switch(a){case"C":b.ctrlKey=true;break;case"M":b.metaKey=true;break;case"S":b.shiftKey=true}}),c.reverse();var d=c.pop();b.str=c.sort().join("-"),b.str&&(b.str+="-"),b.str+=d;return b},a.unparseKey=function(a){var b,d=[];a.keyCode in c?b=c[a.keyCode]:a.charCode&&(a.charCode==32?b="SPACE":a.charCode==45?b="DASH":b=String.fromCharCode(a.charCode).toLowerCase()),a.ctrlKey&&d.push("C"),a.altKey&&d.push("M"),a.shiftKey&&(a.charCode&&/^[a-zA-Z0-9]$/.test(b)||a.keyCode)&&d.push("S"),d.sort(),(d=d.join("-"))&&(d+="-");return d+b},b.defineKey=function(a,b,c){b instanceof Array&&(c=b.slice(1),b=b[0]),a=a.trim().split(/\s*&&\s*/);if(a.length>1)a.foreach(function(a){this.defineKey(a,b,c)},this);else{a=a[0].trim();var d=this.definitions||this.__originalDefs;if(a.indexOf(" ")>=0){var e=a.split(/\s+/);a=e.pop(),e.foreach(function(a){a=this.parseKey(a).str,d[a]||(d[a]={}),d=d[a]},this)}a=this.parseKey(a),d[a.str]=[b,c]}},b.defineKeys=function(a){Object.foreach(a,function(a,b){this.defineKey(b,a)},this)},b.getHandler=function(a){var b=null,c=this.definitions;a.foreach(function(a){var d=b?b[a]:c[a];d?(b=d)instanceof Array&&$BREAK():b&&(b=null,$BREAK())});return b},b.attached=Function.noop,b.detached=Function.noop}),DEFINE_SINGLETON("Ymacs_Keymap_Emacs",Ymacs_Keymap,function(a,b){var c=String.template("<table>","<tr><td style='text-align: right; font-weight: bold'>Char:</td><td><tt> $ch </tt></td></tr>","<tr><td style='text-align: right; font-weight: bold'>Char code:</td><td> $code / 0x$codeHex </td></tr>","<tr><td style='text-align: right; font-weight: bold'>Position:</td><td> $point </td></tr>","<tr><td style='text-align: right; font-weight: bold'>Mark:</td><td> $mark </td></tr>","<tr><td style='text-align: right; font-weight: bold'>Buffer size:</td><td> $sizeKB </td></tr>","</table>");a.KEYS={"ARROW_UP && C-p":"backward_line","ARROW_DOWN && C-n":"forward_line","ARROW_LEFT && C-b":"backward_char","ARROW_RIGHT && C-f":"forward_char",HOME:"beginning_of_indentation_or_line","END && C-e":"end_of_line","C-a":"beginning_of_line","C-HOME && M-<":"beginning_of_buffer","C-END && M->":"end_of_buffer","C-ARROW_RIGHT && M-f":"forward_word","C-ARROW_LEFT && M-b":"backward_word","C-ARROW_DOWN":"forward_paragraph","C-ARROW_UP":"backward_paragraph","C-l":"recenter_top_bottom","PAGE_UP && M-v":"scroll_up","PAGE_DOWN && C-v":"scroll_down","S-ARROW_UP && S-C-p":"backward_line_mark","S-ARROW_DOWN && S-C-n":"forward_line_mark","S-ARROW_LEFT && S-C-b":"backward_char_mark","S-ARROW_RIGHT && S-C-f":"forward_char_mark","S-C-ARROW_RIGHT && S-M-f":"forward_word_mark","S-C-ARROW_LEFT && S-M-b":"backward_word_mark","S-C-ARROW_DOWN":"forward_paragraph_mark","S-C-ARROW_UP":"backward_paragraph_mark","S-HOME":"beginning_of_indentation_or_line_mark","S-C-a":"beginning_of_line_mark","S-END":"end_of_line_mark","S-C-HOME":"beginning_of_buffer_mark","S-C-END":"end_of_buffer_mark",BACKSPACE:"backward_delete_char","DELETE && C-d":"delete_char","ENTER && C-m":"newline","M-d && C-DELETE":"kill_word","C-BACKSPACE && M-BACKSPACE && M-DELETE":"backward_kill_word","C-k":"kill_line","C-y && S-INSERT":"yank","M-y":"yank_pop","C-SPACE":"set_mark_command","C-x C-x":"exchange_point_and_mark","C-w":"kill_region","M-t":"transpose_words","C-t":"transpose_chars","C-x C-t":"transpose_lines","M-w":"copy_region_as_kill","M-c":"capitalize_word","M-u":"upcase_word","M-l":"downcase_word",F11:"nuke_trailing_whitespace",TAB:"indent_line","C-M-\\":"indent_region","M-q":"fill_paragraph","C-/ && C-x u && C-_ && C-z":"undo",INSERT:"overwrite_mode","M-s":"center_line","M-/":"dabbrev_expand","C-s":"isearch_forward","C-r":"isearch_backward","M-C-s":"isearch_forward_regexp","M-C-r":"isearch_backward_regexp","C-u":"universal_argument","M-g":"goto_line","C-x h":"mark_whole_buffer","C-g":"keyboard_quit","C-x r t":"string_rectangle","C-x r c":"clear_rectangle","C-x r k":"kill_rectangle","C-x r y":"yank_rectangle","C-x C-ARROW_RIGHT && C-x ARROW_RIGHT && C-TAB":"next_buffer","C-x C-ARROW_LEFT && C-x ARROW_LEFT && C-S-TAB":"previous_buffer","C-x b":"switch_to_buffer","C-x k":"kill_buffer","C-x 0":"delete_frame","C-x 1":"delete_other_frames","C-x 2":"split_frame_vertically","C-x 3":"split_frame_horizontally","C-x o":"other_frame","C-x l":"toggle_line_numbers","M-x":"execute_extended_command","C-S-y":"yank_from_operating_system","M-S-w":"copy_for_operating_system","C-S-w":"kill_for_operating_system","M-S-y":"yank_shift","C-c /":"close_last_xml_tag","S-BACKSPACE":"backward_delete_whitespace","S-DELETE":"delete_whitespace","C-M-d":"delete_region_or_line","M-ENTER":"start_next_paragraph","M-S-q":"fill_paragraph_no_prefix","C-M-|":"cperl_lineup","C-F4":"kill_buffer","M-ARROW_LEFT":["windmove","left"],"M-ARROW_RIGHT":["windmove","right"],"M-ARROW_UP":["windmove","up"],"M-ARROW_DOWN":["windmove","down"],"C-x =":function(){var a=this.charAt(),b=a;a==" "?b="<SPACE>":a=="\n"?b="<NEWLINE>":a=="-"&&(b="<DASH>"),this.signalInfo(c({ch:b.htmlEscape(),code:a.charCodeAt(0),codeHex:a.charCodeAt().hex(),point:this.point(),mark:this.markMarker.getPosition(),size:this.getCodeSize(),sizeKB:this.getCodeSize().formatBytes(2)}),true)}},b.defaultHandler=["self_insert_command"]}),DEFINE_SINGLETON("Ymacs_Keymap_UniversalArgument",Ymacs_Keymap,function(a,b){b.defaultHandler=[Ymacs_Interactive("^",function(){var a=this.interactiveEvent(),b=String.fromCharCode(a.charCode),c=this.getPrefixArg(true);if(a.charCode&&(/^[0-9]$/.test(b)||b==="-"&&c==="")&&!a.altKey&&!a.ctrlKey){c+=b,this.setPrefixArg(c),this.isMinibuffer||this.whenMinibuffer(function(a){a.cmd("insert"," ",b)});return true}this.popKeymap(Ymacs_Keymap_UniversalArgument());return false})],b.attached=function(a){a.setPrefixArg("")}}),DEFINE_SINGLETON("Ymacs_Keymap_ISearch",Ymacs_Keymap,function(a,b){a.KEYS={"C-g && ESCAPE":["isearch_abort",true],"C-w":"isearch_yank_word_or_char","C-s":"isearch_forward","C-r":"isearch_backward",BACKSPACE:function(){this.getMinibuffer().point()>this._isearchContext.mbMark.getPosition()&&(this.getMinibuffer().cmd("backward_delete_char"),this.cmd("goto_char",this._isearchContext.point),d.call(this,this._isearchContext.forward))},ENTER:"isearch_abort"},a.CONSTRUCT=function(){this.defaultHandler=["isearch_printing_char"]};function c(a){if(!this._isearchContext){this.pushKeymap(Ymacs_Keymap_ISearch()),this.cmd("set_mark_command",this.point()),this.setMinibuffer(a?"I-Search: ":"I-Search backward: "),this._isearchContext={forward:a,point:this.point(),mbMark:this.getMinibuffer().createMarker(null,true)};return true}}function d(a){this._isearchContext.forward=a,this._isearchContext.point=this.point();var b=f(this);!/\S/.test(b)&&this._isearchLastText&&(this.getMinibuffer()._placeUndoBoundary(),this.getMinibuffer().cmd("insert",this._isearchLastText),b=this._isearchLastText);return e.call(this,b)}function e(a){a==null&&(a=f(this));var b=this.cmd("bind_variables",{case_fold_search:a==a.toLowerCase()},this.cmd,this._isearchContext.forward?"search_forward":"search_backward",a);if(b){this.cmd("ensure_caret_visible");var c=this._positionToRowCol(this.point()+(this._isearchContext.forward?-1:1)*a.length);this.setOverlay("isearch",{line1:c.row,line2:this._rowcol.row,col1:c.col,col2:this._rowcol.col})}return b}function f(a){return a.cmd("isearch_get_search_text")}Ymacs_Buffer.newCommands({isearch_get_search_text:Ymacs_Interactive(function(){if(this._isearchContext)return this.getMinibuffer()._bufferSubstring(this._isearchContext.mbMark)}),isearch_forward:Ymacs_Interactive(function(){c.call(this,true)||(d.call(this,true)||this.signalError("No more forward occurrences of the search text"))}),isearch_forward_regexp:Ymacs_Interactive(function(){this.signalError("Not implemented, but should be easy. Volunteers?")}),isearch_backward_regexp:Ymacs_Interactive(function(){this.signalError("Not implemented, but should be easy. Volunteers?")}),isearch_backward:Ymacs_Interactive(function(){c.call(this,false)||(d.call(this,false)||this.signalError("No more backward occurrences of the search text"))}),isearch_yank_word_or_char:Ymacs_Interactive(function(){var a=this.point(),b=this.cmd("save_excursion",function(){this.cmd("forward_word");return this.point()});if(b!=a){var c=this._bufferSubstring(a,b);this.getMinibuffer()._placeUndoBoundary(),this.getMinibuffer().cmd("insert",c.toLowerCase()),c=f(this),this._isearchContext.forward&&this.cmd("goto_char",b-c.length),e.call(this,c)}}),isearch_printing_char:Ymacs_Interactive(function(){var a=this.interactiveEvent();if(a.charCode&&!a.ctrlKey&&!a.altKey){this.getMinibuffer().cmd("self_insert_command"),this.cmd("goto_char",this._isearchContext.point),e.call(this,f(this));return a.domStop=true}if(a.keyCode!=0||a.ctrlKey||a.altKey){this.cmd("isearch_abort");return false}}),isearch_abort:Ymacs_Interactive(function(a){a||(this._isearchLastText=f(this)),this.setMinibuffer(""),this.popKeymap(Ymacs_Keymap_ISearch()),this._isearchContext.mbMark.destroy(),this._isearchContext=null,a&&this.cmd("exchange_point_and_mark"),this.deleteOverlay("isearch"),this.deleteOverlay("isearch-lazy");return true})})}),Ymacs_Buffer.newMode("minibuffer_mode",function(){var a=this.createMarker(0,true),b=this.setq({minibuffer_end_marker:a}),c=Ymacs_Keymap_Minibuffer();this.pushKeymap(c);return function(){this.setq(b),a.destroy(),this.popKeymap(c)}}),function(){var a=false,b=null,c=null;function d(d,e){b&&b.destroy(),b=new DlVMenu({}),e.foreach(function(a){var c=a;typeof a!="string"&&(c=a.completion,a=a.label),new DlMenuItem({parent:b,label:a.htmlEscape(),data:c})});var f=Ymacs_Completion_Popup.get();f.popup({timeout:0,content:b,align:{prefer:"Tr",fallX1:"_r",fallX2:"_L",fallY1:"B_",fallY2:"T_"},anchor:d.getCaretElement(),widget:d,onHide:function(){a=false,b=c=null},isContext:true}),a=true}function e(a,b,c){this.whenMinibuffer(function(d){var e=d.setq({completion_list:a,minibuffer_validation:function(a){a==null&&(a=d.cmd("minibuffer_contents"));if(c)return c.call(this,d,a);return true}.$(this),minibuffer_continuation:function(a){d.setq(e),b&&b.call(this,a)}.$(this)})})}function f(a,b){var c=this.ymacs.ls_getFileDirectory(b),e=c.dir,f=c.other,g=c.path,h=f[0];if(f.length!=1)throw new Ymacs_Exception("Not found");if(typeof e[h]=="string")return[g.concat([h]).join("/")];var i=[];for(var j in e)j.indexOf(h)==0&&i.push(j);var k=i.common_prefix();if(k!=h)i.length==1&&typeof e[k]!="string"&&(k+="/"),a.cmd("minibuffer_replace_input",g.concat([k]).join("/"));else{if(i.length==1)throw new Ymacs_Exception("Single completion");if(i.length==0)throw new Ymacs_Exception("No completions");i=i.map(function(a){typeof e[a]!="string"&&(a+="/");return{label:a,completion:g.concat([a]).join("/")}}),d(this.getMinibufferFrame(),i)}return null}Ymacs_Buffer.newCommands({minibuffer_prompt:function(a,b){this.whenMinibuffer(function(c){var d=this.getMinibufferFrame();c.setCode(""),c.cmd("prevent_undo",function(){c.cmd("insert",a)}),c.getq("minibuffer_end_marker").setPosition(c.point()),d._redrawCaret(true),b||d.focus()})},minibuffer_read_number:function(a){e.call(this,null,a,function(a,b){var c=parseInt(b,10);isNaN(c)&&a.signalError("Please enter a number");return!isNaN(c)})},minibuffer_read_command:function(a){var b=Array.hashKeys(this.COMMANDS).grep(function(a){return this.COMMANDS[a].ymacsInteractive},this).sort();e.call(this,b,a,function(a,b){var c=this.COMMANDS[b],d=c&&c.ymacsInteractive;d||a.signalError("No such command: "+b);return d})},minibuffer_read_function:function(a){var b=Array.hashKeys(this.COMMANDS).sort();e.call(this,b,a,function(a,b){var c=this.COMMANDS[b],d=!!c;d||a.signalError("No such function: "+b);return d})},minibuffer_read_buffer:function(a){this.whenYmacs(function(b){var c=b.buffers.map("name");c.push(c.shift()),e.call(this,c,a),k.call(this)})},minibuffer_read_string:function(a,b){e.call(this,a,b)},minibuffer_read_variable:function(a){var b=this.globalVariables;Object.merge(b,this.variables);var c=Array.hashKeys(b).grep(function(a){return!/^\*/.test(a)}).sort();e.call(this,c,a)},minibuffer_read_existing_file:function(a){var b=this.ymacs.ls_getFileDirectory(this.name).path.join("/");b&&(b+="/"),this.cmd("minibuffer_replace_input",b),e.call(this,f,a,function(a,b){var c=this.ymacs.ls_getFileContents(b,true);c||a.signalError("No such file: "+b);return c})},minibuffer_read_file:function(a){var b=this.ymacs.ls_getFileDirectory(this.name).path.join("/");b&&(b+="/"),e.call(this,f,a)},minibuffer_read_file_or_directory:function(a){var b=this.ymacs.ls_getFileDirectory(this.name).path.join("/");b&&(b+="/"),e.call(this,f,a)},minibuffer_read_directory:function(a){var b=this.ymacs.ls_getFileDirectory(this.name).path.join("/");b&&(b+="/"),e.call(this,f,a)},minibuffer_prompt_end:function(){return this.whenMinibuffer(function(a){return a.getq("minibuffer_end_marker").getPosition()})},minibuffer_contents:function(){return this.whenMinibuffer(function(a){return a._bufferSubstring(a.getq("minibuffer_end_marker"))})},minibuffer_replace_input:function(a){this.whenMinibuffer(function(b){b._replaceText(b.getq("minibuffer_end_marker"),b.getCodeSize(),a),this.getMinibufferFrame()._redrawCaret(true)})},minibuffer_complete:function(){this.whenMinibuffer(function(a){var b=a.getq("completion_list"),c=a.cmd("minibuffer_contents"),e=c.replace(/([\[\]\(\)\{\}\.\*\+\?\|\\])/g,"\\$1").replace(/([_-])/g,"[^_-]*[_-]");e=new RegExp("^"+e,"i");if(b instanceof Function){b=b.call(this,a,c,e);if(!b)return}else b&&b.length>0&&(b=b.grep(function(a){return e.test(a)}));if(!b||b.length==0)a.signalError("No completions");else{var f=b.common_prefix();f!=c?a.cmd("minibuffer_replace_input",f):b.length==1?a.signalError("Sole completion"):d(this.getMinibufferFrame(),b)}})},minibuffer_complete_and_exit:function(){this.whenMinibuffer(function(a){a.getq("minibuffer_validation").call(a)&&a.cmd("minibuffer_keyboard_quit",this.getq("minibuffer_continuation"))})},minibuffer_keyboard_quit:function(a){this.whenMinibuffer(function(b){var c=this.cmd("minibuffer_contents");b.setCode(""),this.ymacs.getActiveFrame().focus(),function(b){a&&a.call(this,b),this.getPrefixArg()}.delayed(1,this,c)}),DlPopup.clearAllPopups()}});function g(a){var d=c,e;switch(a){case"next":c==null&&(c=-1),c=b.children().rotateIndex(++c);break;case"prev":c==null&&(c=0),c=b.children().rotateIndex(--c)}d!=null&&(e=b.children(d),e.callHooks("onMouseLeave")),d=c,e=b.children(c),e.callHooks("onMouseEnter")}function h(){if(a)return g.call(this,"next")}function i(){if(a)return g.call(this,"prev")}function j(){a?c!=null?(this.cmd("minibuffer_replace_input",b.children()[c].userData),DlPopup.clearAllPopups()):this.signalError("Select something..."):this.cmd("minibuffer_complete_and_exit")}function k(){a||this.cmd("minibuffer_complete"),h.call(this)}function l(){i.call(this)}function m(){a?DlPopup.clearAllPopups():this.cmd("minibuffer_keyboard_quit")}DEFINE_SINGLETON("Ymacs_Keymap_Minibuffer",Ymacs_Keymap,function(a,b){a.KEYS={"C-g":"minibuffer_keyboard_quit",TAB:k,"S-TAB":l,ARROW_DOWN:h,ARROW_UP:i,ENTER:j,ESCAPE:m},b.defaultHandler=[function(){DlPopup.clearAllPopups();return false}]})}(),DEFINE_CLASS("Ymacs_Completion_Popup",DlCompletionPopup),DEFINE_CLASS("Ymacs_Stream",null,function(a,b){a.DEFAULT_ARGS={buffer:["buffer",null],line:["line",0],col:["col",0]},b.nextCol=function(){++this.col},b.prevCol=function(){--this.col},b.nextLine=function(){++this.line,this.col=0},b.prevLine=function(){--this.line,this.col=0},b.peek=function(a){a==null&&(a=0);return this.buffer.code[this.line].charAt(this.col+a)},b.get=function(){var a=this.peek();this.nextCol();return a},b.lineText=function(a){a==null&&(a=this.line);return this.buffer.code[a]},b.lineIndentation=function(a){return/^\s*/.exec(this.lineText(a))[0].length},b.lookingAt=function(a){var b=this.buffer.code[this.line];return a instanceof RegExp?a.exec(b.substr(this.col)):b.substr(this.col,a.length)==a},b.textBefore=function(a){a==null&&(a=this.buffer._rowColToPosition(this.line,this.col));return this.buffer.getCode().substr(0,a)},b.textAfter=function(a){a==null&&(a=this.buffer._rowColToPosition(this.line,this.col));return this.buffer.getCode().substr(a)},b.substring=function(a,b){return this.buffer.getCode().substring(a,b)},b.substr=function(a,b){return this.buffer.getCode().substr(a,b)},b.eol=function(){return this.col==this.buffer.code[this.line].length},b.eof=function(){var a=this.buffer.code.length,b=this.line;return b>=a||b==a-1&&this.eol()},b.length=function(){return this.buffer.code.length},b.lineLength=function(a){a==null&&(a=this.line);return this.buffer.code[a].length},b.save=function(){return{buffer:this.buffer,line:this.line,col:this.col}},b.restore=function(a){this.buffer=a.buffer,this.line=a.line,this.col=a.col},b.checkStop=function(){if(this.eof())throw this.EOF;if(this.eol())throw this.EOL},b.EOL=new function(){},b.EOF=new function(){}}),DEFINE_CLASS("Ymacs_Tokenizer",DlEventProxy,function(a,b){var c={};a.define=function(a,b){c[a.toLowerCase()]=b},a.DEFAULT_EVENTS=["onFoundToken"],a.DEFAULT_ARGS={buffer:["buffer",null],type:["type",null]},a.FIXARGS=function(a){typeof a.type=="string"&&(a.type=c[a.type.toLowerCase()])},a.CONSTRUCT=function(){var a=null,b=null;this.quickUpdate=function(c){var d=this.buffer._positionToRowCol(c).row;this.parsers.splice(d-1,this.parsers.length+1),a!=null?a=Math.min(d,a):a=d,clearTimeout(b),b=function(){this._do_quickUpdate(a),a=null}.delayed(1,this)},this._stopQuickUpdate=function(){clearTimeout(b),clearTimeout(this.timerUpdate)},this.reset()},b.reset=function(){this.stream=new Ymacs_Stream({buffer:this.buffer}),this.theParser=this.type(this.stream,this),this.parsers=[],this.parsers[-1]=this.theParser.copy(),this.timerUpdate=null,this.quickUpdate(0)},b.getLanguage=function(a){return c[a](this.stream,this)},b.showProgress=function(a){a!=null&&(a=Math.round(a/this.stream.length()*100)+"%"),this.buffer.updateProgress("Syntax highlighting",a)},b._do_quickUpdate=function(a){this._stopQuickUpdate();var b=this.stream,c,d=this.parsers,e;b.line=a-1;while(!(c=d[b.line]))b.prevLine();b.nextLine(),c=c();var f=0,g=true,h=function(){this.buffer.preventUpdates(),e=g?3:20,++f>10&&this.showProgress(this.stream.line);while(true)try{while(true)c.next()}catch(a){if(a===b.EOL){d[b.line]=c.copy(),b.nextLine();if(--e==0){this.buffer.resumeUpdates(),this.timerUpdate=setTimeout(h,g?500:50),g=false;return}}else{if(a===b.EOF){d[b.line]=c.copy(),this.buffer.resumeUpdates(),c.on_EOF&&c.on_EOF();break}throw a}}this.showProgress()}.$(this);h()},b.quickInsertLine=function(a){this.parsers.splice(a,this.parsers.length+1)},b.quickDeleteLine=function(a){this.parsers.splice(a,this.parsers.length+1)},b.onToken=function(a,b,c,d){this.callHooks("onFoundToken",a,b,c,d)},b.getParserForLine=function(a){this._stopQuickUpdate();var b=this.stream,c,d=this.parsers,e,f=b.line;b.line=a-1;while(!(c=d[b.line]))b.prevLine();b.nextLine(),c=c();try{this.buffer.preventUpdates();while(true){if(b.line==a)return c;try{while(true)c.next()}catch(a){if(a===b.EOL)d[b.line]=c.copy(),b.nextLine();else{if(a===b.EOF)break;throw a}}}}finally{this.buffer.resumeUpdates(),b.line<b.length()&&(this.timerUpdate=this._do_quickUpdate.delayed(50,this,b.line))}},b.reparseAll=function(){this.parsers.splice(0,this.parsers.length);return this.finishParsing()},b.finishParsing=function(){this.getParserForLine(this.stream.length());return this.getLastParser()},b.getLastParser=function(){return this.parsers.peek()},b.getIndentation=function(a,b){var c=this.getParserForLine(a);if(c&&c.indentation instanceof Function)return c.indentation(b)}}),DEFINE_SINGLETON("Ymacs_Keymap_ParenMatch",Ymacs_Keymap,function(a,b){a.KEYS={"C-c \\":"goto_matching_paren","C-M-q":"indent_sexp","C-M-f && C-M-n":"forward_sexp","C-M-b && C-M-p":"backward_sexp","C-M-u && M-a":"backward_up_list","M-e && C-M-ARROW_UP":"up_list","C-M-ARROW_DOWN":"down_list","M-C-k":"kill_sexp","M-C-SPACE":"mark_sexp","M-C-t":"transpose_sexps","M-(":["paredit_wrap_round","("],"M-[":["paredit_wrap_round","["],"M-{":["paredit_wrap_round","{"],"M-\"":["paredit_wrap_round","\"",true],"M-'":["paredit_wrap_round","'",true]};function c(a,b){return a.line<b.line?-1:a.line>b.line?1:a.col-b.col}var d={"(":")","[":"]","{":"}","\"":{close:"\"",backslash:/[\x22\\]/g},"'":{close:"'",backslash:/[\x27\\]/g}};function e(a){throw new Ymacs_Exception("Balanced expression not found")}function f(a){var b=a.context.passedParens;return b instanceof Function?b():b}Ymacs_Buffer.newCommands({matching_paren:function(){var a=this.tokenizer.getLastParser(),b=this._rowcol;if(a){var c=f(a);return c.foreach(function(a){var c=a.closed;a.line==b.row&&a.col==b.col?$RETURN(this._rowColToPosition(c.line,c.col+1)):c.line==b.row&&c.col==b.col-1&&$RETURN(this._rowColToPosition(a.line,a.col))},this)}},indent_sexp:Ymacs_Interactive(function(){var a=this.cmd("matching_paren");a!=null?this.cmd("indent_region",this.point(),a):e(this)}),goto_matching_paren:Ymacs_Interactive(function(){var a=this.cmd("matching_paren");if(a!=null){this.cmd("goto_char",a);return true}}),forward_sexp:Ymacs_Interactive(function(){var a=this._rowcol,b=this.tokenizer.finishParsing();if(b){var d=f(b).mergeSort(c),g=d.foreach(function(b){(b.line>a.row||b.line==a.row&&b.col>=a.col)&&$RETURN(b)});if(!g||!g.closed){e(this);return}var h=this._rowColToPosition(g.line,g.col);this._rowcol.row==g.line&&this._rowcol.col==g.col||!/\S/.test(this._bufferSubstring(null,h))?this.cmd("goto_char",this._rowColToPosition(g.closed.line,g.closed.col)+1):this.cmd("goto_char",h);return true}}),backward_sexp:Ymacs_Interactive(function(){var a=this._rowcol,b=this.tokenizer.finishParsing();if(b){var d=f(b).grep("closed").map("closed").mergeSort(c),g=d.r_foreach(function(b){(b.line<a.row||b.line==a.row&&b.col<a.col)&&$RETURN(b)});if(!g){e(this);return}this.cmd("goto_char",this._rowColToPosition(g.opened.line,g.opened.col));return true}}),mark_sexp:Ymacs_Interactive("^r",function(a,b){this.cmd("save_excursion",function(){this.transientMarker&&this.cmd("goto_char",b),this.ensureTransientMark(),this.cmd("forward_sexp"),this.cmd("set_mark_command",this.point()),this.transientMarker.swap(this.caretMarker)}),this.ensureTransientMark()}),kill_sexp:Ymacs_Interactive(function(){this._killingAction(this.point(),this.cmd("save_excursion",function(){this.cmd("forward_sexp");return this.point()}))}),transpose_sexps:Ymacs_Interactive(function(){var a=[];this.cmd("forward_sexp"),a.push(this.point()),this.cmd("backward_sexp"),a.push(this.point()),this.cmd("backward_sexp"),a.push(this.point()),this.cmd("forward_sexp"),a.push(this.point()),this.cmd("goto_char",this._swapAreas(a))}),paredit_wrap_round:Ymacs_Interactive("^",function(a,b){a||(a="(");var c=d[a],e=this.transientMarker?this.getRegion():this.cmd("save_excursion",function(){var a=this.point();b||this.cmd("forward_sexp");return{begin:a,end:this.point()}}),f=this._bufferSubstring(e.begin,e.end),g=this.point()<e.end;typeof c!="string"&&(f=f.replace(c.backslash,function(a){return"\\"+a}),c=c.close);var h=this.createMarker(e.end);this.cmd("save_excursion",function(){this._replaceText(e.begin,e.end,a+f+c)},g),this.cmd("forward_char",g?1:-1),this.clearTransientMark(),this.cmd("indent_region",e.begin,h.getPosition()),h.destroy()}),down_list:Ymacs_Interactive(function(){var a=this._rowcol,b=this.tokenizer.finishParsing();if(b){var d={line:a.row,col:a.col};b=f(b).grep("closed").mergeSort(c).grep_first(function(a){return c(a,d)>=0}),b!=null?this.cmd("goto_char",this._rowColToPosition(b.line,b.col)+1):e(this)}}),backward_up_list:Ymacs_Interactive(function(){var a=this._rowcol,b=this.tokenizer.finishParsing();if(b){var d={line:a.row,col:a.col};b=f(b).grep("closed").mergeSort(c).grep_last(function(a){return c(a,d)<0&&c(a.closed,d)>=0}),b!=null?this.cmd("goto_char",this._rowColToPosition(b.line,b.col)):e(this)}}),up_list:Ymacs_Interactive(function(){this.cmd("backward_up_list"),this.cmd("forward_sexp")})}),Ymacs_Buffer.newMode("paren_match_mode",function(){var a=Ymacs_Keymap_ParenMatch();this.pushKeymap(a);var b=false,c=function(){b&&this.deleteOverlay("match-paren")}.clearingTimeout(500,this),d={beforeInteractiveCommand:function(){c.doItNow()},afterInteractiveCommand:function(){var a=this.tokenizer.getLastParser(),d=this._rowcol;a&&f(a).foreach(function(a){var e=a.closed;if(a.line==d.row&&a.col==d.col||e.line==d.row&&e.col==d.col-1)b=true,this.setOverlay("match-paren",{line1:a.line,line2:e.line,col1:a.col,col2:e.col+1}),c()},this)}.clearingTimeout(100)};this.addEventListener(d);return function(){c.doItNow(),this.popKeymap(a),this.removeEventListener(d)}})}),function(){Ymacs_Buffer.newCommands({lisp_open_paren:Ymacs_Interactive(function(a){a==null&&(a="("),a+=i(a),this.cmd("insert",a),this.cmd("backward_char")}),lisp_close_paren:Ymacs_Interactive(function(a){var b=new RegExp("\\s*\\"+a,"ig");this.cmd("looking_at",b)&&this._deleteText(this.point(),this.matchData.after),this.cmd("insert",a)}),lisp_close_all_parens:Ymacs_Interactive(function(){var a=this.tokenizer.getParserForLine(this._rowcol.row);if(a){var b=this.tokenizer.stream;b.line=this._rowcol.row,b.col=0;try{while(b.col<this._rowcol.col)a.next()}catch(a){}a=a.copy().context.parens,a.r_foreach(function(a){this.cmd("lisp_close_paren",i(a.type))},this)}})});var a="\ndeftype defstruct defclass \ndefmacro defun defmethod defgeneric defpackage in-package defreadtable in-readtable \nwhen cond unless etypecase typecase ctypecase \nlambda let load-time-value quote macrolet \nprogn prog1 prog2 progv go flet the \nif throw eval-when multiple-value-prog1 unwind-protect let* \nignore-errors handler-case case \nlabels function symbol-macrolet block tagbody catch locally \nreturn return-from setq multiple-value-call".qw().toHash(),b="loop do while".qw().toHash(),c="t nil".qw().toHash(),d={"(":")","{":"}","[":"]"},e={")":"(","}":"{","]":"["},f="defun defgeneric defmethod".qw().toHash(),g="deftype defclass defstruct".qw().toHash(),h={"if":"3+",when:"1*",lambda:"1*",unless:"1*",defun:"2*",defgeneric:"2*",defmethod:"2*",defclass:"2*",defmacro:"2*",progn:"0*",prog1:"0*",prog2:"0*",let:"1*"};function i(a){return d[a]}function j(a){return e[a]}function k(a){return a.toLowerCase()!=a.toUpperCase()||/^[-0-9!#$%&*+./:<=>?@\[\]\^_\{\}~]$/i.test(a)}function l(a){return a!="#"&&k(a)}Ymacs_Tokenizer.define("lisp",function(d,e){var m=[],n=false,o=false,p=null,q=[],r=[],s=[],t=[],u={next:D,copy:v,indentation:E};function v(){var a=b.context={cont:m.slice(0),quote:p,inString:n,inComment:o,parens:q.slice(0),passedParens:r.slice(0),backList:s.slice(0),list:t.slice(0)};function b(){m=a.cont.slice(0),n=a.inString,p=a.quote,o=a.inComment,q=a.parens.slice(0),r=a.passedParens.slice(0),s=a.backList.slice(0),t=a.list.slice(0);return u}return b}function w(a,b,c){e.onToken(d.line,a,b,c)}function x(a){a==null&&(a={c1:d.col}),t.push(a)}function y(){return d.buffer.getq("indent_level")}function z(){var a=d.col,b=d.get(),c=b;while(!d.eol()){b=d.peek();if(!k(b))break;c+=b,d.nextCol()}return b&&{line:d.line,c1:a,c2:d.col,id:c.toLowerCase()}}function A(a,b){var c,e=false,f=d.col;while(!d.eol()){if((c=d.peek())===a&&!e){m.pop(),n=null,w(f,d.col,b),w(d.col,++d.col,b+"-stopper");return true}e=!e&&c==="\\",d.nextCol()}w(f,d.col,b)}function B(){var a=d.lineText(),b=a.indexOf("|#",d.col),c=/^\s*\|+/.exec(a.substr(d.col));c&&w(d.col,d.col+=c[0].length,"mcomment-starter"),b>=0?(m.pop(),o=null,w(d.col,b,"mcomment"),w(b,b+=2,"mcomment-stopper"),d.col=b):(w(d.col,a.length,"mcomment"),d.col=a.length)}function C(a){var b=t&&t.length>0&&t[0].id;if(b){b=b.toLowerCase();if(a==null)return b;return typeof a=="string"?b==a:b in a}}function D(){d.checkStop();if(m.length>0)return m.peek()();var e=d.peek(),h;if(h=d.lookingAt(/^#\\(Space|Newline|.?)/i))x(),w(d.col,d.col+=h[0].length,"constant");else if(d.lookingAt(/^#\x27[^(]/))x(),d.col+=2,h=z(),w(h.c1,h.c2,"function-name");else if(d.lookingAt("#|"))o={line:d.line,c1:d.col},w(d.col,d.col+=2,"mcomment-starter"),m.push(B);else if(h=d.lookingAt(/^;+/))w(d.col,d.col+=h[0].length,"comment-starter"),w(d.col,d.col=d.lineLength(),"comment");else if(e==="\"")x(),n={line:d.line,c1:d.col},w(d.col,++d.col,"string-starter"),m.push(A.$C(e,"string"));else if(h=d.lookingAt(/^[+-]?(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*)(\x2f(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*))?/))x(),w(d.col,d.col+=h[0].length,"number");else if(h=i(e))x(),s.push(t),t=[],q.push({line:d.line,col:d.col,type:e}),w(d.col,++d.col,"open-paren");else if(h=j(e)){var k=q.pop();!k||k.type!=h?w(d.col,++d.col,"error"):(k.closed={line:d.line,col:d.col,opened:k},r.push(k),t=s.pop(),w(d.col,++d.col,"close-paren"))}else if(l(e)&&(h=z())){var p=e==":"?"lisp-keyword":h.id in a?"keyword":h.id in b?"builtin":h.id in c?"constant":null;p||(C(f)&&t.length==1?p="function-name":C(g)&&t.length==1?p="type":/^with-/i.test(h.id)&&(p="builtin")),x(h),w(h.c1,h.c2,p)}else w(d.col,++d.col,null)}function E(){if(n)return 0;var a=d.lineText(),b=0,c=q.peek();if(c){var e=d.lineText(c.line);b=c.col+1;var f;if(l(e.charAt(b))){b=c.col+y();var g=/\s\S/g;g.lastIndex=c.col,(f=g.exec(e))&&(f=f.index+1)}if(t&&t.length){var i=C();if(i){i=i.replace(/\*$/,"");var j=h[i];!j&&/^with/.test(i)&&(j="1*"),j||(j="1+");if(j){var k=parseInt(j,10),m=/\+$/.test(j),o=/\*$/.test(j);if(t.length-1<k||m)f?b=f:b+=y()}}}}return b}return u})}(),DEFINE_SINGLETON("Ymacs_Keymap_LispMode",Ymacs_Keymap,function(a,b){a.KEYS={ENTER:"newline_and_indent","(":["lisp_open_paren","("],")":["lisp_close_paren",")"],"C-c ] && C-c C-]":"lisp_close_all_parens"}}),Ymacs_Buffer.newMode("lisp_mode",function(){var a=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"lisp"}));var b=this.setq({indent_level:2}),c=Ymacs_Keymap_LispMode();this.pushKeymap(c);var d=this.cmd("paren_match_mode",true);return function(){this.setTokenizer(a),this.setq(b),this.popKeymap(c),d||this.cmd("paren_match_mode",false)}}),function(){var a="abstract break case catch class const \ncontinue debugger default delete do else \nenum export extends final finally for \nfunction goto if implements import in \ninstanceof interface native new package \nprivate protected public return static \nsuper switch synchronized throw \nthrows transient try typeof var void let \nyield volatile while with".qw(),b="boolean byte char double float int long short void \nArray Date Function Math Number Object RegExp String".qw(),c="false null undefined Infinity NaN true arguments this".qw(),d="Infinity NaN \nPackages decodeURI decodeURIComponent \nencodeURI encodeURIComponent eval isFinite isNaN parseFloat \nparseInt undefined window document alert prototype constructor".qw(),e=/[\[({,;+\-*=?&|!:][\x20\t\n\xa0]*$|return\s+$|typeof\s+$/;function f(a){return a.toLowerCase()!=a.toUpperCase()}function g(a){return a&&(f(a)||/^[_$]$/.test(a))}function h(a){return a&&(f(a)||/^[0-9_$]$/.test(a))}var i={"(":")","{":"}","[":"]"},j={")":"(","}":"{","]":"["};function k(a){return i[a]}function l(a){return j[a]}function m(a,b,c,d,f,j){var m=[],n=[],o=[],p=null,q=null,r={next:z,copy:t,indentation:A};function s(){return f.buffer.getq("indent_level")}function t(){var a=b.context={cont:m.slice(0),inComment:p,inString:q,parens:n.slice(0),passedParens:o.slice(0)};function b(){m=a.cont.slice(0),p=a.inComment,q=a.inString,n=a.parens.slice(0),o=a.passedParens.slice(0);return r}return b}function u(a,b,c){j.onToken(f.line,a,b,c)}function v(){var a=f.col,b=f.get(),c=b;while(!f.eol()){b=f.peek();if(!h(b))break;c+=b,f.nextCol()}return b&&{line:f.line,c1:a,c2:f.col,id:c}}function w(){var a=f.lineText(),b=a.indexOf("*/",f.col),c=/^\s*\*+/.exec(a.substr(f.col));c&&u(f.col,f.col+=c[0].length,"mcomment-starter"),b>=0?(m.pop(),p=null,u(f.col,b,"mcomment"),u(b,b+=2,"mcomment-stopper"),f.col=b):(u(f.col,a.length,"mcomment"),f.col=a.length)}function x(a,b){var c,d=false,e=f.col;while(!f.eol()){if((c=f.peek())===a&&!d){m.pop(),q=null,u(e,f.col,b),u(f.col,++f.col,b+"-stopper");return true}d=!d&&c==="\\",f.nextCol()}u(e,f.col,b)}function y(){var a,b=false,c=0,d=f.col;while(!f.eol()){a=f.peek(),k(a)&&!b&&!c&&c++,l(a)&&!b&&(c--,c<0&&(c=0));if(a==="/"&&!b&&!c){m.pop(),q=null,u(d,f.col,"regexp"),u(f.col,++f.col,"regexp-stopper");var e=f.lookingAt(/^[gmsiy]+/);e&&u(f.col,f.col+=e[0].length,"regexp-modifier");return true}b=!b&&a==="\\",f.nextCol()}u(d,f.col,"regexp")}function z(){f.checkStop();if(m.length>0)return m.peek()();var h=f.peek(),i,j;if(f.lookingAt("/*"))p={line:f.line,c1:f.col},u(f.col,f.col+=2,"mcomment-starter"),m.push(w);else if(f.lookingAt("//"))u(f.col,f.col+=2,"comment-starter"),u(f.col,f.col=f.lineLength(),"comment");else if(h==="\""||h==="'")q={line:f.line,c1:f.col},u(f.col,++f.col,"string-starter"),m.push(x.$C(h,"string"));else if(i=f.lookingAt(/^0x[0-9a-f]+|^[0-9]*\.?[0-9]+/))u(f.col,f.col+=i[0].length,"number");else if(g(h)&&(j=v())){var r=j.id in a?"keyword":j.id in b?"type":j.id in c?"constant":j.id in d?"builtin":null;u(j.c1,j.c2,r)}else if(j=k(h))n.push({line:f.line,col:f.col,type:h}),u(f.col,++f.col,"open-paren");else if(j=l(h)){var s=n.pop();!s||s.type!=j?u(f.col,++f.col,"error"):(s.closed={line:f.line,col:f.col,opened:s},o.push(s),u(f.col,++f.col,"close-paren"))}else h==="/"&&e.test(f.textBefore())?(u(f.col,++f.col,"regexp-starter"),m.push(y)):(i=f.lookingAt(/^\s+$/))?u(f.col,f.col+=i[0].length,"trailing-whitespace"):u(f.col,++f.col,null)}function A(){if(q)return 0;var a=f.line,b=f.lineText(),c=0;if(p){var d=f.lineText(p.line);c=p.c1+1;if(!/^\s*\*/.test(b)){var e=/[^\s*]/g;e.lastIndex=p.c1+1;var g=e.exec(d);g&&(c=g.index)}return c}var h=n.peek();if(h){var e=new RegExp("^\\s*\\"+i[h.type]),j=e.test(b),k=f.lineText(h.line);e=/\S/g,e.lastIndex=h.col+1;var g=e.exec(k);g?c=j?h.col:g.index:(c=f.lineIndentation(h.line)+s(),j&&(c-=s()))}if(a>0){var l=f.textBefore();if(/\)\s*$/.test(l)&&o.length>0){h=o.peek();var m=f.lineText(h.line);/^\s*(if|for|while)\W/.test(m)&&(c+=s())}else/\Welse\s*$/.test(l)&&(c+=s())}/^\s*(case|default)\W/.test(b)&&(c-=s()/2);return c}return r}Ymacs_Tokenizer.define("js",m.$C(a.toHash(true),b.toHash(true),c.toHash(true),d.toHash(true)));var n=d.concat("\nDEFINE_CLASS DEFINE_SINGLETON DEFINE_HIDDEN_CLASS \nDEFAULT_ARGS DEFAULT_EVENTS \nFIXARGS CONSTRUCT BEFORE_BASE FINISH_OBJECT_DEF \nD P $".qw());Ymacs_Tokenizer.define("js-dynarchlib",m.$C(a.toHash(true),b.toHash(true),c.toHash(true),n.toHash(true)))}(),DEFINE_SINGLETON("Ymacs_Keymap_CLanguages",Ymacs_Keymap,function(a,b){a.KEYS={ENTER:"newline_and_indent","} && ) && ] && : && ; && { && ( && [ && *":"c_insert_and_indent"}}),Ymacs_Buffer.newMode("javascript_mode",function(a){var b=this.tokenizer,c=Ymacs_Keymap_CLanguages();this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:a?"js-dynarchlib":"js"})),this.pushKeymap(c);var d=this.cmd("paren_match_mode",true);return function(){this.setTokenizer(b),this.popKeymap(c),d||this.cmd("paren_match_mode",false)}}),Ymacs_Buffer.newCommands({javascript_dl_mode:Ymacs_Interactive(function(){return this.cmd("javascript_mode",true)}),c_electric_block:Ymacs_Interactive(function(){this.cmd("indent_line"),this.cmd("insert","{\n\n}"),this.cmd("indent_line"),this.cmd("backward_line",1),this.cmd("indent_line")}),c_insert_and_indent:Ymacs_Interactive(function(){var a;if(a=this.cmd("self_insert_command")){this.cmd("indent_line");return a}})}),Ymacs_Tokenizer.define("xml",function(a,b){var c=[],d=[],e=null,f=null,g={next:s,copy:h,indentation:t};function h(){var a=c.slice(0),b=d.slice(0),h=e,i=f;function j(){d=b.slice(0),c=a.slice(0),e=h,f=i;return g}return j}function i(){return a.buffer.getq("indent_level")}function j(c,d,e){b.onToken(a.line,c,d,e)}function k(a){return a.toLowerCase()!=a.toUpperCase()}function l(a){return a&&(k(a)||/^[:_-]$/.test(a))}function m(a){return a&&(k(a)||/^[0-9_-]$/.test(a))}function n(){var b=a.col,c=a.get(),d=c;while(!a.eol()){c=a.peek();if(!m(c))break;d+=c,a.nextCol()}return c&&{line:a.line,c1:b,c2:a.col,id:d}}function o(b){var c,e=false,f=a.col;while(!a.eol()){if((c=a.peek())===b&&!e){d.pop(),j(f,a.col,"string"),j(a.col,++a.col,"string-stopper");return}e=!e&&c==="\\",a.nextCol()}j(f,a.col,"string")}function p(){var b=a.peek(),f;a.lookingAt(/^\x2f>/)?(d.pop(),e=null,j(a.col,++a.col,"xml-closetag-slash"),j(a.col,++a.col,"xml-close-bracket")):b===">"?(d.pop(),c.push(e),e=null,j(a.col,++a.col,"xml-close-bracket")):l(b)&&(f=n())?j(f.c1,f.c2,"xml-attribute"):b==="\""||b==="'"?(j(a.col,++a.col,"string-starter"),d.push(o.$C(b))):j(a.col,++a.col,null)}function q(b,c){var e=a.lineText(),g=e.indexOf(c,a.col);g>=0?(d.pop(),j(a.col,g,b),f=null,j(g,g+=c.length,b+"-stopper"),a.col=g):(j(a.col,e.length,b),a.col=e.length)}function r(){var b=a.lookingAt(/^([\s\xA0]*)(>?)/);b&&b[0]?(b[1]&&j(a.col,a.col+=b[1].length,null),b[2]&&(j(a.col,a.col+=b[2].length,"xml-close-bracket"),d.pop())):j(a.col,++a.col,"error")}function s(){a.checkStop();if(d.length>0)return d.peek()();var b=a.peek(),g;if(a.lookingAt("<![CDATA["))j(a.col,a.col+=9,"xml-cdata-starter"),f={line:a.line,c1:a.col},d.push(q.$C("xml-cdata","]]>"));else if(a.lookingAt("<!--"))j(a.col,a.col+=4,"mcomment-starter"),f={line:a.line,c1:a.col},d.push(q.$C("mcomment","-->"));else if(a.lookingAt(/^<\x2f/)&&l(a.peek(+2))){j(a.col,++a.col,"xml-open-bracket"),j(a.col,++a.col,"xml-closetag-slash");var h=n(),i=c.pop();j(h.c1,h.c2,i&&i.id==h.id?"xml-close-tag":"error"),d.push(r)}else if(b==="<"&&l(a.peek(+1))){j(a.col,++a.col,"xml-open-bracket");var h=n();j(h.c1,h.c2,"xml-open-tag"),e=h,d.push(p)}else(g=a.lookingAt(/^&.*?;/))?(j(a.col,++a.col,"xml-entity-starter"),j(a.col,a.col+=g[0].length-2,"xml-entity"),j(a.col,++a.col,"xml-entity-stopper")):b==="&"?j(a.col,++a.col,"error"):j(a.col,++a.col,null)}function t(){var b,d;if(f)b=a.lineIndentation(f.line)+i();else if(e)b=e.c1+e.id.length+1;else if(d=c.peek())b=a.lineIndentation(d.line)+i(),/^\s*<\x2f/.test(a.lineText())&&(b-=i());return b}return g}),DEFINE_SINGLETON("Ymacs_Keymap_XML",Ymacs_Keymap,function(a,b){a.KEYS={"C-c /":"xml_close_tag","C-ENTER":"xml_zen_expand",ENTER:"newline_and_indent"}}),Ymacs_Buffer.newMode("xml_mode",function(){var a=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"xml"}));var b=Ymacs_Keymap_XML();this.pushKeymap(b);var c=this.setq({indent_level:2});return function(){this.setTokenizer(a),this.popKeymap(b),this.setq(c)}}),function(){DEFINE_SINGLETON("Ymacs_Keymap_XML_Zen",Ymacs_Keymap,function(a,b){a.KEYS={TAB:"xml_zen_next_poi","S-TAB":"xml_zen_prev_poi","C-g":"xml_zen_stop"}});var a=1,b=2,c=3,d=4,e=5;function f(a,b){for(var c=a.repeat||1,d=1;d<=c;++d)d>1&&b("\n"),b("<",a.type),a.id&&b(" id=\"",a.id.replace(/\$/g,d),"\""),a.klass&&b(" class=\"",a.klass.replace(/\$/g,d),"\""),a.attributes&&a.attributes.foreach(function(a){b(" ",a,"=\"|\"")}),b(">"),a.child?(b("\n"),f(a.child,b),b("\n")):b("|"),b("</",a.type,">"),a.next&&(b("\n"),f(a.next,b))}function g(f,h){var i={type:""},j=a;OUTER:while(h<f.length){var k=f.charAt(h++);switch(k){case"#":j=c,i.id="";break;case".":j=b,i.klass!=null?i.klass+=" ":i.klass="";break;case":":j=e,i.attributes==null&&(i.attributes=[]),i.attributes.push("");break;case"*":j=d,i.repeat="";break;case">":i.child=g(f,h),h=i.child.i;break OUTER;case"(":i.child=g(f,h),h=i.child.i;break;case")":break OUTER;case"+":i.next=g(f,h),h=i.next.i;break OUTER;default:switch(j){case a:i.type+=k;break;case b:i.klass+=k;break;case c:i.id+=k;break;case d:i.repeat=parseInt(String(i.repeat)+k,10);break;case e:i.attributes.push(i.attributes.pop()+k)}}}i.i=h;return i}function h(){var a=this.point(),b=this.getq("xml_zen_markers"),c=b[0],d=b.peek();(a<c.getPosition()||a>d.getPosition()||d.getPosition()==b.peek(1).getPosition())&&this.cmd("xml_zen_stop")}Ymacs_Buffer.newCommands({xml_close_tag:Ymacs_Interactive(function(){this.cmd("close_last_xml_tag"),this.cmd("indent_line")}),xml_zen_expand:Ymacs_Interactive(function(){this.cmd("xml_zen_stop");var a=String.buffer(),b=this.cmd("save_excursion",function(){this.cmd("backward_whitespace");while(!this.cmd("looking_back",/[\x20\xa0\s\t\n;&]/))if(!this.cmd("backward_char"))break;return this.point()}),c=this.point();try{f(g(this.cmd("buffer_substring",b,c).trim(),0),a)}catch(a){throw new Ymacs_Exception("The Zen is not strong today :-/")}a=a.get(),this.cmd("delete_region",b,c),this.cmd("insert",a),b=this.createMarker(b,false,"xml_zen");var d=this.createMarker(this.point(),true,"xml_zen"),e=[];this.cmd("goto_char",b.getPosition());while(this.cmd("search_forward","|",d.getPosition()))this.cmd("backward_delete_char"),e.push(this.createMarker(this.point(),true,"xml_zen_start")),e.push(this.createMarker(this.point(),false,"xml_zen_end"));this.cmd("indent_region",b.getPosition(),d.getPosition());var i=e.length;i>0?(this.cmd("goto_char",e[0]),e.unshift(b),e.push(d),this.setq("xml_zen_markers",e),this.pushKeymap(Ymacs_Keymap_XML_Zen()),this.addEventListener("afterInteractiveCommand",h)):(b.destroy(),d.destroy())}),xml_zen_stop:Ymacs_Interactive(function(){var a=this.getq("xml_zen_markers");a&&(a.map("destroy"),this.setq("xml_zen_markers",null)),this.popKeymap(Ymacs_Keymap_XML_Zen()),this.removeEventListener("afterInteractiveCommand",h)}),xml_zen_next_poi:Ymacs_Interactive(function(){var a=this.getq("xml_zen_markers"),b=this.point();a.foreach(function(a){a.getPosition()>b&&(this.cmd("goto_char",a.getPosition()),$BREAK())},this)}),xml_zen_prev_poi:Ymacs_Interactive(function(){var a=this.getq("xml_zen_markers"),b=this.point();a.r_foreach(function(a){a.getPosition()<b&&(this.cmd("goto_char",a.getPosition()),$BREAK())},this)})})}(),Ymacs_Tokenizer.define("css",function(a,b){var c={next:r,copy:i,indentation:s},d=[],e=[],f=[],g=null,h=null;function i(){var a=b.context={parens:d.slice(0),passedParens:e.slice(0),cont:f.slice(0),inString:g,inComment:h};function b(){d=a.parens.slice(0),e=a.passedParens.slice(0),f=a.cont.slice(0),g=a.inString,h=a.inComment;return c}return b}function j(){return b.buffer.getq("indent_level")}var k={"(":")","{":"}","[":"]"},l={")":"(","}":"{","]":"["};function m(a){return k[a]}function n(a){return l[a]}function o(c,d,e){b.onToken(a.line,c,d,e)}function p(){var b=a.lineText(),c=b.indexOf("*/",a.col),d=/^\s*\*+/.exec(b.substr(a.col));d&&o(a.col,a.col+=d[0].length,"mcomment-starter"),c>=0?(f.pop(),h=null,o(a.col,c,"mcomment"),o(c,c+=2,"mcomment-stopper"),a.col=c):(o(a.col,b.length,"mcomment"),a.col=b.length)}function q(b,c){var d,e=false,h=a.col;while(!a.eol()){if((d=a.peek())===b&&!e){f.pop(),g=null,o(h,a.col,c),o(a.col,++a.col,c+"-stopper");return true}e=!e&&d==="\\",a.nextCol()}o(h,a.col,c)}function r(){a.checkStop();if(f.length>0)return f.peek()();var b=a.peek(),c;if(a.lookingAt("/*"))h={line:a.line,c1:a.col},o(a.col,a.col+=2,"mcomment-starter"),f.push(p);else if(b==="\""||b==="'")g={line:a.line,c1:a.col},o(a.col,++a.col,"string-starter"),f.push(q.$C(b,"string"));else if(c=m(b))d.push({line:a.line,col:a.col,type:b}),o(a.col,++a.col,"open-paren");else if(c=n(b)){var i=d.pop();!i||i.type!=c?o(a.col,++a.col,"error"):(i.closed={line:a.line,col:a.col,opened:i},e.push(i),o(a.col,++a.col,"close-paren"))}else(c=a.lookingAt(/^([a-zA-z-]+):/))?(o(a.col,a.col+=c[1].length,"keyword"),o(a.col,++a.col,"operator")):(c=a.lookingAt(/^([0-9.]+)(px|pt|em|ex|in|cm|mm|%)/))?(o(a.col,a.col+=c[1].length,"number"),o(a.col,a.col+=c[2].length,"type")):(c=a.lookingAt(/^(\.[a-zA-Z0-9_:-]+)/))?o(a.col,a.col+=c[1].length,"function-name"):(c=a.lookingAt(/^(#[a-zA-Z0-9_:-]+)/))?o(a.col,a.col+=c[1].length,"constant"):(c=a.lookingAt(/^(@[a-zA-Z0-9_:-]+)/))?o(a.col,a.col+=c[1].length,"builtin"):(c=a.lookingAt(/^(url|none|auto|bold|italic|normal|inherit|print|screen|all)/))?o(a.col,a.col+=c[1].length,"builtin"):o(a.col,++a.col,null)}function s(){if(g)return 0;var b=a.line,c=a.lineText(),e=0;if(h){var f=a.lineText(h.line);e=h.c1+1;if(!/^\s*\*/.test(c)){var i=/[^\s*]/g;i.lastIndex=h.c1+1;var l=i.exec(f);l&&(e=l.index)}return e}var m=d.peek();if(m){var i=new RegExp("^\\s*\\"+k[m.type]),n=i.test(c),o=a.lineText(m.line);i=/\S/g,i.lastIndex=m.col+1;var l=i.exec(o);l?e=n?m.col:l.index:(e=a.lineIndentation(m.line)+j(),n&&(e-=j()))}return e}return c}),DEFINE_SINGLETON("Ymacs_Keymap_CSS",Ymacs_Keymap),Ymacs_Keymap_CSS().defineKeys({ENTER:"newline_and_indent",": && } && )":"c_insert_and_indent"}),Ymacs_Buffer.newMode("css_mode",function(){var a=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"css"}));var b=this.cmd("paren_match_mode",true);this.pushKeymap(Ymacs_Keymap_CSS());return function(){this.setTokenizer(a),b||this.cmd("paren_match_mode",false),this.popKeymap(Ymacs_Keymap_CSS())}}),Ymacs_Tokenizer.define("markdown",function(a,b){var c={next:f,copy:d};function d(){var a=b.context={};function b(){return c}return b}function e(c,d,e){b.onToken(a.line,c,d,e)}function f(){a.checkStop();var c;a.col==0&&(c=a.lookingAt(/^(#+)/))?e(0,a.col=a.lineLength(),"markdown-heading"+c[0].length):a.line>0&&a.col==0&&(c=a.lookingAt(/^[=-]+$/))&&/\S/.test(a.lineText(a.line-1))?(c=c[0].charAt(0)=="="?1:2,c="markdown-heading"+c,b.onToken(a.line-1,0,a.lineLength(a.line-1),c),e(0,a.col=a.lineLength(),c)):a.col==0&&(c=a.lookingAt(/^[>\s]*/))?((c=c[0].replace(/\s+/g,"").length)>3&&(c=""),c="markdown-blockquote"+c,e(0,a.col=a.lineLength(),c)):e(a.col,++a.col,null)}return c}),Ymacs_Buffer.newMode("markdown_mode",function(){var a=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"markdown"}));return function(){this.setTokenizer(a)}}) \ No newline at end of file
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/ymacs-min.js b/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/ymacs-min.js
new file mode 100644
index 0000000..f912886
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js-minified/ymacs-min.js
@@ -0,0 +1,33 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+DEFINE_CLASS("Ymacs",DlLayout,function(a,b,c){a.DEFAULT_EVENTS=["onBufferSwitch","onCreateBuffer","onDeleteBuffer"],a.DEFAULT_ARGS={buffers:["buffers",null],frames:["frames",null],cf_lineNumbers:["lineNumbers",false],_focusable:["focusable",true]},a.FIXARGS=function(a){a.buffers||(a.buffers=[]),a.frames||(a.frames=[])},a.CONSTRUCT=function(){this.buffers.foreach(function(a){a.ymacs=this},this),this.killRing=[],this.killMasterOfRings=[],this.progress={},this.minibuffer=this.createBuffer({hidden:true,isMinibuffer:true}),this.minibuffer.cmd("minibuffer_mode"),this.minibuffer_frame=this.createFrame({isMinibuffer:true,buffer:this.minibuffer,hidden:true,highlightCurrentLine:false,className:"Ymacs_Minibuffer"}),this.buffers.length==0&&this.createBuffer();var a=this.createFrame({buffer:this.buffers[0]});this.packWidget(this.minibuffer_frame,{pos:"bottom"}),this.packWidget(a,{pos:"top",fill:"*"}),this.setActiveFrame(a),a._redrawCaret()},b.pushToKillRing=function(a,b){b?this.killRing.unshift(a):this.killRing.push(a)},b.killRingToMaster=function(){this.killRing.length&&(this.killMasterOfRings.length==0||this.killMasterOfRings.peek().join("")!=this.killRing.join(""))&&this.killMasterOfRings.push(this.killRing),this.killRing=[]},b.killRingText=function(){return this.killRing.join("")},b.rotateKillRing=function(a){a?(this.killMasterOfRings.push(this.killRing),this.killRing=this.killMasterOfRings.shift()):(this.killMasterOfRings.unshift(this.killRing),this.killRing=this.killMasterOfRings.pop())},b.getBuffer=function(a){a instanceof Ymacs_Buffer||(a=this.buffers.grep_first(function(b){return b.name==a}));return a},b.killBuffer=function(a){a=this.getBuffer(a),this.callHooks("onDeleteBuffer",a),this.buffers.length>1?this.getActiveBuffer()===a&&this.switchToNextBuffer():this.switchToBuffer(this.createBuffer()),this.buffers.remove(a),a.destroy()},b.renameBuffer=function(a,b){a=this.getBuffer(a),a.name=b,a.callHooks("onProgressChange")},b._do_switchToBuffer=function(a){this.getActiveFrame().setBuffer(a),this.callHooks("onBufferSwitch",a)},b.switchToBuffer=function(a){var b=this.getBuffer(a),c=this.buffers;b||(b=this.createBuffer({name:a})),c.remove(b),c.unshift(b),this._do_switchToBuffer(b);return b},b.switchToNextBuffer=function(a){var b=this.buffers;if(b.length>1){var c=b.shift();b.push(c),this._do_switchToBuffer(b[0])}},b.switchToPreviousBuffer=function(a){var b=this.buffers;if(b.length>1){var c=b.pop();b.unshift(c),this._do_switchToBuffer(c)}},b.getNextBuffer=function(a,b){b==null&&(b=1);var c=this.buffers;return c[c.rotateIndex(c.find(a)+b)]},b.getPrevBuffer=function(a,b){b==null&&(b=1);var c=this.buffers;return c[c.rotateIndex(c.find(a)-b)]},b.getBufferFrames=function(a){a=this.getBuffer(a);return this.frames.grep(function(b){return b.buffer===a})},b.createBuffer=function(a){a||(a={}),Object.merge(a,{ymacs:this});var b=new Ymacs_Buffer(a);a.hidden||this.buffers.push(b),this.callHooks("onCreateBuffer",b);return b},b.createFrame=function(a){a||(a={}),Object.merge(a,{ymacs:this});var b=new Ymacs_Frame(a);a.hidden||this.frames.unshift(b),b.addEventListener("onDestroy",function(a){this.frames.remove(a)}.$(this,b));return b},b.keepOnlyFrame=function(a){if(this.frames.length>1){var b=a.parent;while(b.parent!=this)b=b.parent;this.replaceWidget(b,a),b.destroy(),this.setActiveFrame(a),this.doLayout()}},b.deleteFrame=function(a){if(this.frames.length>1){var b=a.parent,d=b.children().grep_first(function(b){return b instanceof DlLayout||b instanceof Ymacs_Frame&&b!==a});b.parent.replaceWidget(b,d),b.destroy();try{c.walk(d.getElement(),function(a){if((a=DlWidget.getFromElement(a))&&a instanceof Ymacs_Frame)throw a})}catch(a){if(!(a instanceof Ymacs_Frame))throw a;d=a}this.setActiveFrame(d),this.doLayout()}},b.focusOtherFrame=function(){this.setActiveFrame(this.frames[0])},b.focus=function(){a.BASE.focus.apply(this,arguments),this.frames.peek().focus()},b.setActiveFrame=function(a,b){if(!a.isMinibuffer){var c=this.getActiveFrame();c&&c.delClass("Ymacs_Frame-active"),this.frames.remove(a),this.frames.push(a)}b||a.focus()},b.getActiveFrame=function(){return this.frames.peek()},b.getActiveBuffer=function(){var a=this.getActiveFrame();return a?a.buffer:this.buffers.peek()},b.setColorTheme=function(a){this.delClass(/Ymacs-Theme-[^\s]*/g),a instanceof Array||(a=[a]),a.foreach(function(a){this.addClass("Ymacs-Theme-"+a)},this)},b.getFrameInDirection=function(a,b,d){d||(d=this.getActiveFrame());var e=d.getCaretElement();b||(b=c.getPos(e)),b.sz||(b.sz=c.getOuterSize(e));var f=this.frames.mergeSort(function(a,b){return a.getPos().x-b.getPos().x}),g=this.frames.mergeSort(function(a,b){return a.getPos().y-b.getPos().y});return this["_get_frameInDir_"+a](f,g,b,d)};function d(a,b){if(a.length>0){var c=a.peek().getPos().x,d=[a.pop()];while(a.length>0&&a.peek().getPos().x==c)d.push(a.pop());return d.minElement(function(a){return Math.abs(b.y-a.getPos().y-a.getSize().y/2)})}}function e(a,b){if(a.length>0){var c=a.peek().getPos().y,d=[a.pop()];while(a.length>0&&a.peek().getPos().y==c)d.push(a.pop());return d.minElement(function(a){return Math.abs(b.x-a.getPos().x-a.getSize().x/2)})}}b._get_frameInDir_left=function(a,b,c,e){a=a.grep(function(a){var b=a.getPos(),d=a.getSize();return a!==e&&b.x<c.x&&b.y-c.sz.y<=c.y&&b.y+d.y>c.y});return d(a,c)},b._get_frameInDir_right=function(a,b,c,e){a.reverse(),a=a.grep(function(a){var b=a.getPos(),d=a.getSize();return a!==e&&b.x>c.x&&b.y-c.sz.y<=c.y&&b.y+d.y>c.y});return d(a,c)},b._get_frameInDir_up=function(a,b,c,d){b=b.grep(function(a){var b=a.getPos(),e=a.getSize();return a!==d&&b.y<c.y&&b.x-c.sz.x<=c.x&&b.x+e.x>c.x});return e(b,c)},b._get_frameInDir_down=function(a,b,c,d){b.reverse(),b=b.grep(function(a){var b=a.getPos(),e=a.getSize();return a!==d&&b.y>c.y&&b.x-c.sz.x<=c.x&&b.x+e.x>c.x});return e(b,c)};function f(){if(!(window.localStorage&&window.localStorage.getItem))throw new Ymacs_Exception("Local storage facility not available in this browser")}b.ls_get=function(){f();return DlJSON.decode(localStorage.getItem(".ymacs")||"{}",true)},b.ls_set=function(a){f(),localStorage.setItem(".ymacs",DlJSON.encode(a))},b.ls_getFileContents=function(a,b){var c=this.ls_getFileDirectory(a),d=c.other,e;d.length==1&&(e=c.dir[d[0]]);if(e==null&&!b)throw new Ymacs_Exception("File not found");return e},b.ls_getFileDirectory=function(a,b){var c,d=c=this.ls_get();a=a.replace(/^[~\x2f]+/,"").split(/\x2f+/);var e=[],f=[];while(a.length>0){var g=a.shift();d.hasOwnProperty(g)&&typeof d[g]!="string"?(d=d[g],e.push(g)):f.push(g)}if(b){var h=b=="file"?1:0;while(f.length>h)d=d[f.shift()]={};this.ls_set(c)}return{store:c,dir:d,path:e,other:f}}}),function(){for(var a={},b=65;b<=90;++b)a[b]=[b,b+32];a[32]=[32,32];var c=[16,17,18,20,144].toHash(true),d=[[49,33],[50,64],[51,35],[52,36],[53,37],[54,94],[55,38],[56,42],[57,40],[48,41]],e=[48,49,50,51,52,53,54,55,56,57].toHash(function(a,b){return d[b]}),f=[[59,58],[61,43],[44,60],[45,95],[46,62],[47,63],[96,126],[91,123],[92,124],[93,125],[39,34]],g=(is_gecko?[59,61,188,109,190,191,192,219,220,221,222]:is_opera?[59,61,44,45,46,47,96,91,92,93,39]:[186,187,188,189,190,191,192,219,220,221,222]).toHash(function(a,b){return f[b]}),h=[37,38,39,40].toHash(true),i=[45,46,36,35,33,34,112,113,114,115,116,117,118,119,120,121,122,123].toHash(true);function j(b,c){var d=a[b]||e[b]||g[b];return d?c?d[1]:d[0]:null}window.KEYBOARD_INSANITY={letters:a,modifiers:c,digits:e,symbols:g,arrows:h,specials:i,getCharCode:j}}(),window.Ymacs_Regexp=function(){var a={};function b(a){a instanceof RegExp&&(a=a.toString());var b=a.lastIndexOf("/"),c="";c=a.substr(b+1),a=a.substring(1,b);return{pattern:a,flags:c}}return{search_backward:function(c){var d=c.toString(),e=a[d];e||(c=b(d),c.flags=c.flags.replace(/g/g,"")+"g",a[d]=e=new RegExp("([^]*)("+c.pattern+")",c.flags)),e.lastIndex=0;return e}}}(),DEFINE_CLASS("Ymacs_Frame",DlContainer,function(a,b,c){var d=300,e=DlException.stopEventBubbling,f=c.createElement("div",null,{className:"line",innerHTML:"<br/>"}),g=225;a.DEFAULT_EVENTS=["onPointChange"],a.DEFAULT_ARGS={highlightCurrentLine:["highlightCurrentLine",true],buffer:["buffer",null],ymacs:["ymacs",null],isMinibuffer:["isMinibuffer",false],_focusable:["focusable",true],_fillParent:["fillParent",true]},a.CONSTRUCT=function(){this.__blinkCaret=this.__blinkCaret.$(this),this.__caretId=Dynarch.ID(),this.redrawModelineWithTimer=this.redrawModeline.clearingTimeout(0,this),this.getElement().innerHTML=h,this.addEventListener({onDestroy:this._on_destroy,onFocus:this._on_focus,onBlur:this._on_blur,onMouseDown:this._on_mouseDown,onKeyDown:this._on_keyDown,onKeyPress:this._on_keyPress,onKeyUp:this._on_keyUp,onResize:this._on_resize}),this._dragSelectCaptures={onMouseOver:e,onMouseOut:e,onMouseEnter:e,onMouseLeave:e,onMouseMove:n.$(this),onMouseUp:o.$(this)},this._bufferEvents={onLineChange:this._on_bufferLineChange.$(this),onInsertLine:this._on_bufferInsertLine.$(this),onDeleteLine:this._on_bufferDeleteLine.$(this),onPointChange:this._on_bufferPointChange.$(this),onResetCode:this._on_bufferResetCode.$(this),onOverwriteMode:this._on_bufferOverwriteMode.$(this),onProgressChange:this._on_bufferProgressChange.$(this),beforeInteractiveCommand:this._on_bufferBeforeInteractiveCommand.$(this),afterInteractiveCommand:this._on_bufferAfterInteractiveCommand.$(this),onOverlayDelete:this._on_bufferOverlayDelete.$(this)},this._moreBufferEvents={onMessage:this._on_bufferMessage.$(this),onOverlayChange:this._on_bufferOverlayChange.$(this),afterInteractiveCommand:this.ensureCaretVisible.$(this)};var a=this.buffer;this.buffer=null,a&&this.setBuffer(a),!this.isMinibuffer&&this.ymacs.cf_lineNumbers&&this.toggleLineNumbers()};var h=String.buffer("<div class='Ymacs-frame-overlays'>","<div class='Ymacs-frame-content'></div>","</div>","<div class='Ymacs_Modeline'></div>").get();b.focus=function(b){a.BASE.focus.call(this),b instanceof Function&&(this.removeEventListener("onBlur",this.__exitFocusHandler),this.addEventListener("onBlur",this.__exitFocusHandler=function(){b.call(this.buffer)?this.removeEventListener("onBlur",this.__exitFocusHandler):this.focus.delayed(2,this,null)}))},b.blur=function(b){b&&this.removeEventListener("onBlur",this.__exitFocusHandler),a.BASE.blur.call(this)},b.getOverlaysContainer=function(){return this.getElement().firstChild},b.getModelineElement=function(){return this.getElement().childNodes[1]},b.getContentElement=function(){return this.getElement().firstChild.firstChild},b.getCaretElement=function(){return document.getElementById(this.__caretId)},b.getLineDivElement=function(a){return this.getContentElement().childNodes[a]||null},b.ensureCaretVisible=function(){this._redrawCaret();var a=this.getCaretElement();if(a){var b=this.getOverlaysContainer(),c=this.getLineDivElement(this.buffer._rowcol.row),d=c.offsetTop+c.offsetHeight-(b.scrollTop+b.clientHeight);d>0?b.scrollTop+=d:(d=c.offsetTop-b.scrollTop)<0&&(b.scrollTop+=d),(d=a.offsetLeft+a.offsetWidth-(b.scrollLeft+b.clientWidth))>0?b.scrollLeft+=d:(d=a.offsetLeft-b.scrollLeft)<0&&(b.scrollLeft+=d)}},b.setBuffer=function(a){this.buffer&&(this.caretMarker&&!this.isMinibuffer&&(this.caretMarker.destroy(),this.caretMarker=null),this.buffer.removeEventListener(this._bufferEvents),this.buffer.removeEventListener(this._moreBufferEvents)),(this.buffer=a)&&(this.buffer.addEventListener(this._bufferEvents),this.focusInside()&&a.addEventListener(this._moreBufferEvents),this.isMinibuffer?this.caretMarker=a.caretMarker:this.caretMarker=a.createMarker(a.caretMarker.getPosition()),this._redrawBuffer(),this._redrawCaret(true),this.centerOnCaret())},b.centerOnCaret=function(){this.centerOnLine(this.buffer._rowcol.row)},b.centerOnLine=function(a){var b=this.getLineDivElement(a),c=this.getOverlaysContainer();c.scrollTop=Math.round(b.offsetTop-c.clientHeight/2+b.offsetHeight/2)},b.setModelineContent=function(a){this.getModelineElement().innerHTML=a},b.deleteOtherFrames=function(){this.ymacs.keepOnlyFrame(this)},b.deleteFrame=function(){this.ymacs.deleteFrame(this)},b.vsplit=function(a){a==null&&(a="50%");var b=this.parent,c=this.ymacs.createFrame({buffer:this.buffer}),d=new DlLayout,e=new DlResizeBar({widget:this,keepPercent:true,horiz:true,className:"Ymacs-splitbar-horiz"});this._resizeBar&&(this._resizeBar._widget=d),this._resizeBar=e,b.replaceWidget(this,d),d.packWidget(this,{pos:"top",fill:a}),d.packWidget(e,{pos:"top"}),d.packWidget(c,{pos:"top",fill:"*"}),b.__doLayout(),c.centerOnCaret()},b.hsplit=function(a){a==null&&(a="50%");var b=this.parent,c=this.ymacs.createFrame({buffer:this.buffer}),d=new DlLayout,e=new DlResizeBar({widget:this,keepPercent:true,className:"Ymacs-splitbar-vert"});this._resizeBar&&(this._resizeBar._widget=d),this._resizeBar=e,b.replaceWidget(this,d),d.packWidget(this,{pos:"left",fill:a}),d.packWidget(e,{pos:"left"}),d.packWidget(c,{pos:"left",fill:"*"}),b.__doLayout(),c.centerOnCaret()},b.toggleLineNumbers=function(){this.condClass(this.__lineNumbers=!this.__lineNumbers,"Ymacs-line-numbers")};function i(a,b,c){if(/^br$/i.test(a.firstChild.tagName)){a.insertBefore(c,a.firstChild);return c}var d=0,e={};function f(a){for(var g=a.firstChild;g;g=g.nextSibling)if(g.nodeType==3){var h=g.length;if(d+h>b){var i=b-d,j=g.splitText(i);a.insertBefore(c,j);throw e}if(d+h==b){a.insertBefore(c,g.nextSibling);throw e}d+=h}else g.nodeType==1&&f(g)}try{f(a)}catch(a){if(a===e)return c;throw a}}b.setMarkerAtPos=function(a,b){a.tagName||(a=this.getLineDivElement(a));if(a)return i(a,b,c.createElement("span"))},b.__restartBlinking=function(){this.__stopBlinking(),this.focusInside()&&(this.__caretTimer=setTimeout(this.__blinkCaret,2*g))},b.__stopBlinking=function(){clearTimeout(this.__caretTimer),this.__showCaret()},b.__blinkCaret=function(){c.condClass(this.getCaretElement(),this.BLINKING=!this.BLINKING,"Ymacs-caret"),this.__caretTimer=setTimeout(this.__blinkCaret,g)},b.__showCaret=function(){c.addClass(this.getCaretElement(),"Ymacs-caret")},b._unhoverLine=function(){this.__hoverLine!=null&&(c.delClass(this.getLineDivElement(this.__hoverLine),"Ymacs-current-line"),this.__hoverLine=null)},b._redrawCaret=function(a){var b=this.ymacs.getActiveFrame()===this;if(!(!a&&!b)){b&&!this.isMinibuffer&&this.caretMarker.setPosition(this.buffer.caretMarker.getPosition());var d=this.buffer._rowcol;this.highlightCurrentLine&&(this._unhoverLine(),c.addClass(this.getLineDivElement(d.row),"Ymacs-current-line"),this.__hoverLine=d.row),this.__prevCaretLine!=null&&this._on_bufferLineChange(this.__prevCaretLine),this.__prevCaretLine!=d.row&&(this.__prevCaretLine=d.row,this._on_bufferLineChange(d.row)),b&&this.__restartBlinking(),this.callHooks("onPointChange",d.row,d.col),this.redrawModelineWithTimer(d)}},b._getLineHTML=function(a){var b=this.buffer.formatLineHTML(a,this.caretMarker),c=b.indexOf("Ymacs-caret'>");c>=0&&(b=b.substr(0,c+12)+" id='"+this.__caretId+"'"+b.substr(c+12));return b},b._redrawBuffer=function(){this.setContent(this.buffer.code.map(function(a,b){return this._getLineHTML(b).htmlEmbed("div","line")},this).join(""))},b.coordinatesToRowCol=function(a,b){function c(a,d){if(a==d)return a;var f=Math.floor((a+d)/2),g=e.getLineDivElement(f),h=g.offsetTop,i=h+g.offsetHeight-1;if(i<b)return c(f+1,d);if(b<h)return c(a,f-1);return f}function d(b,c){if(b==c)return b;var g=Math.floor((b+c)/2),h=e.coordinates(f,g),i=e.coordinates(f,g+1);if(i.x<a)return d(g+1,c);if(a<h.x)return d(b,g-1);return g}var e=this,f=c(0,this.buffer.code.length-1),g=d(0,this.buffer.code[f].length);return{row:f,col:g}},b.coordinates=function(a,b){var d=this.getLineDivElement(a),e=this.setMarkerAtPos(d,b),f={x:e.offsetLeft,y:d.offsetTop,h:d.offsetHeight};c.trash(e);return f},b.heightInLines=function(){return Math.floor(this.getOverlaysContainer().clientHeight/this.getContentElement().firstChild.offsetHeight)},b.setOuterSize=b.setSize=function(b){a.BASE.setOuterSize.apply(this,arguments),c.setOuterSize(this.getOverlaysContainer(),b.x,b.y-this.getModelineElement().offsetHeight),c.setOuterSize(this.getModelineElement(),b.x)},b.redrawModeline=function(a){this.setModelineContent(this.buffer.renderModelineContent(a||this.caretMarker.getRowCol()))},b._on_bufferLineChange=function(a){var b=this.getLineDivElement(a);b&&(b.innerHTML=this._getLineHTML(a))},b._on_bufferInsertLine=function(a,b){var c=f.cloneNode(true);this.getContentElement().insertBefore(c,this.getLineDivElement(a)),b&&(c.innerHTML=this._getLineHTML(a))},b._on_bufferDeleteLine=function(a){c.trash(this.getLineDivElement(a))},b._on_bufferPointChange=function(a,b){this._redrawCaret()},b._on_bufferResetCode=function(){this._redrawBuffer()},b._on_bufferOverwriteMode=function(a){this.condClass(a,"Ymacs-overwrite-mode")},b._on_bufferMessage=function(a,b,c,d){var e=this.isMinibuffer?this.ymacs:this,f=Ymacs_Message_Popup.get(0);f.popup({content:c?b:b.htmlEscape(),widget:e,anchor:e.getElement(),align:{prefer:"CC",fallX1:"CC",fallX2:"CC",fallY1:"CC",fallY2:"CC"}}),f.hide(d||5e3)},b._on_bufferBeforeInteractiveCommand=function(){this._unhoverLine(),Ymacs_Message_Popup.clearAll()},b._on_bufferAfterInteractiveCommand=function(){},b._on_bufferProgressChange=function(){this.redrawModelineWithTimer(null)},b.getOverlayId=function(a){return this.id+"-ovl-"+a},b.getOverlayHTML=function(a,b){if(b.line1==b.line2&&b.col1==b.col2){this._on_bufferOverlayDelete(a,b);return null}var c=this.coordinates(b.line1,b.col1),d=this.coordinates(b.line2,b.col2),e=this.__lineNumbers?this.coordinates(b.line1,0):{x:0,y:0};c.x-=e.x,d.x-=e.x;var f=String.buffer("<div id='",this.getOverlayId(a),"' class='Ymacs_Overlay ",a,"' style='top:",c.y,"px;left:",e.x,"px'>");b.line1==b.line2?f("<div class='",a,"' style='margin-left:",c.x,"px; width:",d.x-c.x,"px;height:",d.h,"px;'>&nbsp;</div>"):(f("<div class='",a,"' style='margin-left:",c.x,"px;height:",c.h,"px;'>&nbsp;</div>"),b.line2-b.line1>1&&f("<div class='",a,"' style='height:",d.y-c.y-c.h,"px'></div>"),f("<div class='",a,"' style='width:",d.x,"px;height:",d.h,"px;'>&nbsp;</div>")),f("</div>");return f.get()},b.getOverlaysCount=function(){return this.getOverlaysContainer().childNodes.length-1},b._on_bufferOverlayChange=function(a,b,d){var e=this.getOverlayHTML(a,b);if(e){e=c.createFromHtml(e);var f=this.getOverlaysContainer(),g=!d&&$(this.getOverlayId(a));g?f.replaceChild(e,g):f.appendChild(e)}},b._on_bufferOverlayDelete=function(a,b,d){c.trash($(this.getOverlayId(a)))},b._on_destroy=function(){this.setBuffer(null),this.__stopBlinking()},b._on_focus=function(){window.focus(),this.ymacs.setActiveFrame(this,true),this.addClass("Ymacs_Frame-active"),this.isMinibuffer||this.buffer.cmd("goto_char",this.caretMarker.getPosition()),this.buffer.addEventListener(this._moreBufferEvents),this.__restartBlinking()},b._on_blur=function(){this.isMinibuffer||this.caretMarker.setPosition(this.buffer.caretMarker.getPosition()),this.buffer.removeEventListener(this._moreBufferEvents),this.__stopBlinking()};var j=0,k=null,l=null;function m(){j=null}b._on_mouseDown=function(a){clearTimeout(k),j++,k=m.delayed(d),this.__restartBlinking();var b=a.computePos(this.getContentElement()),c=this.coordinatesToRowCol(b.x,b.y),f=this.buffer;f.clearTransientMark(),f.cmd("goto_char",f._rowColToPosition(c.row,c.col)),f.callInteractively("keyboard_quit"),j==1?(f.ensureTransientMark(),DlEvent.captureGlobals(this._dragSelectCaptures)):j==2?(f.cmd("backward_word"),f.cmd("forward_word_mark")):j==3?(f.cmd("beginning_of_line"),f.cmd("end_of_line_mark")):j==4&&(f.cmd("backward_paragraph"),f.cmd("forward_whitespace"),f.cmd("beginning_of_line"),f.cmd("forward_paragraph_mark")),e()};function n(a){var b=a.computePos(this.getContentElement()),c=this.coordinatesToRowCol(b.x,b.y);this.buffer.cmd("goto_char",this.buffer._rowColToPosition(c.row,c.col)),this.buffer.ensureTransientMark(),this.ensureCaretVisible()}function o(a){DlEvent.releaseGlobals(this._dragSelectCaptures)}b._on_keyDown=function(a){if(!is_gecko){var b=window.KEYBOARD_INSANITY,c=a.keyCode;c in b.modifiers&&e();if((c in b.letters||c in b.digits||c in b.symbols)&&!(a.ctrlKey||a.altKey))return;a.charCode=b.getCharCode(c,a.shiftKey),a.charCode&&(a.keyCode=0),this.buffer._handleKeyEvent(a)&&e()}},b._on_keyPress=function(a){is_gecko||(a.keyCode=0),this.buffer._handleKeyEvent(a)&&e()},b._on_keyUp=function(a){},b._on_resize=function(){this.centerOnCaret.delayed(1,this)}}),DEFINE_CLASS("Ymacs_Message_Popup",DlPopup,function(a,b){a.FIXARGS=function(a){a.autolink=a.focusable=false,a.zIndex=5e3}}),DEFINE_CLASS("Ymacs_Text_Properties",DlEventProxy,function(a,b){a.DEFAULT_EVENTS=["onChange"],a.DEFAULT_ARGS={buffer:["buffer",null]},a.CONSTRUCT=b.reset=function(){this.props=[]},b.insertLine=function(a){this.props.length<a?this.props[a]=null:this.props.splice(a,0,null)},b.deleteLine=function(a){this.props.splice(a,1)},b.replaceLine=function(a,b){var c=this.props[a];c&&c.length>b.length&&c.splice(b.length,c.length)},b.addLineProps=function(a,b,c,d,e){var f=this.props,g,h=false;if(b<c){f=f[a]||(f[a]=[]);while(b<c)g=f[b]||(f[b]={}),g[d]!=e&&(h=true),g[d]=e,++b;h&&this.callHooks("onChange",a)}return h},b.removeLineProps=function(a,b,c,d){var e=this.props[a],f,g=false;if(e&&b<c){while(b<c)f=e[b],f&&d in f&&(g=true,delete f[d]),++b;g&&this.callHooks("onChange",a)}return g},b.getLineHTML=function(a,b,c){var d=this.props[a];if(c===null){if(b=="")return"<br/>";if(!d||d.length==0)return b.htmlEscape()}else{if(b=="")return"<span class='Ymacs-caret'>&nbsp;</span>";if(!d||d.length==0){if(c===b.length)return b.htmlEscape()+"<span class='Ymacs-caret'>&nbsp;</span>";return b.substr(0,c).htmlEscape()+"<span class='Ymacs-caret'>"+b.charAt(c).htmlEscape()+"</span>"+b.substr(c+1).htmlEscape()}}var e=0,f=b.length,g=null,h,i="",j;while(e<f){h=d[e],h=h&&h.css,e===c&&(h=h?h+" Ymacs-caret":"Ymacs-caret"),h&&h!=g?(g&&(i+="</span>"),i+="<span class='"+h+"'>"):!h&&g&&(i+="</span>"),g=h;switch(j=b.charAt(e)){case"<":i+="&lt;";break;case">":i+="&gt;";break;case"&":i+="&amp;";break;default:i+=j}++e}g&&(i+="</span>"),e===c&&(i+="<span class='Ymacs-caret'>&nbsp;</span>");return i}});function Ymacs_Exception(a){this.message=a}(function(){window.Ymacs_Interactive=function(a,b){if(arguments.length==1)b=a,a=null;else{var c;b instanceof Function||(c=b,b=arguments[2],b.ymacsDoc=c)}b.ymacsInteractive=true;if(a instanceof Function)b.ymacsGetArgs=a;else if(a!=null){if(!(a instanceof Array)){var d=/^[\^\@\*]+/.exec(a);d&&(d=d[0],a=a.substr(d.length),d.indexOf("^")>=0&&(b.ymacsMarkExtend=true),d.indexOf("*")>=0&&(b.ymacsWarnReadonly=true),d.indexOf("@")>=0&&(b.ymacsSelectFrame=true)),a&&(a=a.split(/\n+/))}if(a){var e,f=function(){e.append(Array.$(arguments));return this.callInteractively(b,e,true)};while(a.length>0)f=A(a.pop(),function(a){e.append(Array.$(arguments,1)),a.call(this)}.$(null,f));b.ymacsCallInteractively=function(){e=[];return f.call(this)}}}return b},window.Ymacs_Interactive_X=function(a){return Ymacs_Interactive("p",function(b){b==null&&(b=1),b.times(a,this)})};var a=function(){};a.toString=function(){return""},a.empty=true;function b(a){var b=this.getPrefixArg(true);b&&(a=b+" "+a),this.cmd("minibuffer_prompt",a)}function c(a,c){b.call(this,a),this.cmd("minibuffer_read_function",c)}function d(a,c){b.call(this,a),this.cmd("minibuffer_read_buffer",c)}function e(a,c){b.call(this,a),this.cmd("minibuffer_read_buffer",c)}function f(a,b){}function g(a,c){b.call(this,a),this.cmd("minibuffer_read_command",c)}function h(a,b){b.call(this,this.point())}function i(a,b){}function j(a,b){b.call(this,null)}function k(a,b){}function l(a,b){}function m(a,b){b.call(this,this.markMarker.getPosition())}function n(a,c){b.call(this,a),this.cmd("minibuffer_read_string",null,c)}function o(a,c){b.call(this,a),this.cmd("minibuffer_read_number",c)}function p(a,b){var c=parseInt(this.getPrefixArg(),10);isNaN(c)?o.call(this,a,b):b.call(this,c)}function q(a,b){var c=parseInt(this.getPrefixArg(),10);isNaN(c)&&(c=null),b.call(this,c)}function r(b,c){(b=this.getPrefixArg())===""&&(b=a),c.call(this,b)}function s(a,b){var c=this.getRegion();b.call(this,c.begin,c.end)}function t(a,b){}function u(a,c){b.call(this,a),this.cmd("minibuffer_read_variable",c)}function v(a,c){b.call(this,a),this.cmd("minibuffer_read_existing_file",c)}function w(a,c){b.call(this,a),this.cmd("minibuffer_read_file",c)}function x(a,c){b.call(this,a),this.cmd("minibuffer_read_file_or_directory",c)}function y(a,c){b.call(this,a),this.cmd("minibuffer_read_directory",c)}var z={a:c,b:d,B:e,c:f,C:g,d:h,e:i,i:j,k:k,K:l,m:m,M:n,n:o,N:p,p:q,P:r,r:s,s:n,U:t,v:u,f:v,F:w,G:x,D:y};function A(a,b){var c=a.charAt(0);a=a.substr(1);return z[c].$(null,a,b)}})(),DEFINE_CLASS("Ymacs_Buffer",DlEventProxy,function(a,b){a.DEFAULT_EVENTS=["onLineChange","onInsertLine","onDeleteLine","onPointChange","onResetCode","onMessage","onOverwriteMode","onOverlayChange","onOverlayDelete","beforeInteractiveCommand","afterInteractiveCommand","beforeRedraw","afterRedraw","finishedEvent","onProgressChange","onTextInsert","onTextDelete"],a.DEFAULT_ARGS={name:["name","*scratch*"],_code:["code",null],ymacs:["ymacs",null],tokenizer:["tokenizer",null],isMinibuffer:["isMinibuffer",false]};var c={case_fold_search:true,line_movement_requested_col:0,fill_column:78,tab_width:8,indent_level:8,syntax_word:{test:g},syntax_word_dabbrev:{test:h},syntax_paragraph_sep:/\n\s*\n/g};function d(a,b){if(typeof a=="string"){b===undefined?delete this[a]:this[a]=b,b instanceof Function&&(b.ymacsCommand=a);return b}var c={};for(var e in a)c[e]=this[e],d.call(this,e,a[e]);return c}var e=5e4;function f(a){return a instanceof Ymacs_Marker?a.getPosition():a}function g(a){if(a){var b=a.charCodeAt(0);return b>=48&&b<=57||a.toUpperCase()!=a.toLowerCase()}}function h(a){if(a){var b=a.charCodeAt(0);return b>=48&&b<=57||a=="_"||a.toUpperCase()!=a.toLowerCase()}}b.lastIndexOfRegexp=function(a,b,c,d){a=a.substring(0,c),b=Ymacs_Regexp.search_backward(b),b.lastIndex=d||0;var e=b.exec(a);if(e){var f=Array.$(e,2);f.index=e.index+e[1].length,f.after=e.index+e[0].length,f[0]=a.substring(f.index,f.after);return this.matchData=f}},a.COMMANDS=b.COMMANDS={},a.newCommands=b.newCommands=function(){return d.apply(this.COMMANDS,arguments)},a.newMode=b.newMode=function(b,c){var d="*"+b+"*",e=d+"hooks";a.setGlobal(e,[]),this.COMMANDS[b]=Ymacs_Interactive("P",function(a){var f=this.getq(d);if(f)a!==true&&(this.getq(e).foreach(function(a){a.call(this,false)},this),f instanceof Function&&f.call(this),this.setq(d,null),this.modes.remove(b));else if(a!==false){var g=c.apply(this,arguments);g instanceof Function||(g=true),this.setq(d,g),this.modes.push(b),this.getq(e).foreach(function(a){a.call(this,true)},this)}return f})},a.addModeHook=b.addModeHook=function(a,b){typeof b=="string"&&(b=this.COMMANDS[b]);var c="*"+a+"*hooks";this.getq(c).pushUnique(b)},a.removeModeHook=b.removeModeHook=function(a,b){typeof b=="string"&&(b=this.COMMANDS[b]);var c="*"+a+"*hooks";this.getq(c).remove(b)},a.FIXARGS=function(a){a.code==null&&(a.code="")},a.CONSTRUCT=function(){this.__undoInProgress=this.__preventUndo=this.__preventUpdates=this.__savingExcursion=0,this.__dirtyLines=[],this.__undoQueue=[],this.__redoQueue=[],this.__overlays={},this.markers=[],this.caretMarker=this.createMarker(0,false,"point"),this.markMarker=this.createMarker(0,true,"mark"),this.matchData=[],this.currentCommand=this.previousCommand=null,this.currentKeys=[],this.progress={},this.variables={},this.globalVariables=c,this.modes=[],this.caretMarker.onChange.push(function(a){this._rowcol=this.caretMarker.getRowCol(),this.__preventUpdates==0&&this.callHooks("onPointChange",this._rowcol,this.point())}),this._tokenizerEvents={onFoundToken:this._on_tokenizerFoundToken.$(this)},this._textProperties=new Ymacs_Text_Properties({buffer:this}),this._textProperties.addEventListener("onChange",this._on_textPropertiesChange.$(this)),this.keymap=[],this.pushKeymap(this.makeDefaultKeymap()),this.setCode(this._code),this._lastCommandWasKill=0,delete this._code},b.withVariables=function(a,b){var c={},d,e;for(d in a)c[d]=this.variables[d],this.variables[d]=a[d];try{return b instanceof Function?b.apply(this,Array.$(arguments,2)):this.cmdApply(b,Array.$(arguments,2))}finally{for(d in c)c[d]===undefined?delete this.variables[d]:this.variables[d]=c[d]}},b.withCommands=function(a,b){var c=this.COMMANDS;this.COMMANDS=Object.makeCopy(c),Object.merge(this.COMMANDS,a);try{return b instanceof Function?b.apply(this,Array.$(arguments,2)):this.cmdApply(b,Array.$(arguments,2))}finally{this.COMMANDS=c}},b.getVariable=function(a){return a in this.variables?this.variables[a]:c[a]},b.setVariable=function(){return d.apply(this.variables,arguments)},a.setq=a.setVariable=a.setGlobal=b.setGlobal=function(){return d.apply(c,arguments)},b.setq=b.setVariable,b.getq=b.getVariable,a.getq=a.getVariable=function(a){return c[a]},b.pushKeymap=function(a){a instanceof Array?a.foreach(this.pushKeymap,this):(this.popKeymap(a),this.keymap.push(a),a.attached(this))},b.popKeymap=function(a){this.keymap.remove(a),a.detached(this)},b.makeDefaultKeymap=function(){return Ymacs_Keymap_Emacs()},b.signalError=function(a,b,c){this.callHooks("onMessage","error",a,b,c)},b.signalInfo=function(a,b,c){this.callHooks("onMessage","info",a,b,c)},b.createMarker=function(a,b,c){a==null&&(a=this.point());return new Ymacs_Marker({editor:this,pos:a,name:c,before:b})},b.point=function(){return this.caretMarker.getPosition()},b.setCode=function(a){this.__code=a,this.__size=a.length,this.__undoQueue=[],this.__redoQueue=[],this.__overlays={},this.markers.map("setPosition",0,true,true),this.code=a.split(/\n/),this._textProperties.reset(),this.tokenizer&&this.tokenizer.reset(),this.callHooks("onResetCode",this.code),this.caretMarker.setPosition(0,false,true),this.markMarker.setPosition(0,true)},b.setTokenizer=function(a){this.tokenizer!=null&&this.tokenizer.removeEventListener(this._tokenizerEvents),(this.tokenizer=a)?a.addEventListener(this._tokenizerEvents):(this._textProperties.reset(),this.callHooks("onResetCode",this.code))},b.getCode=function(){return this.__code||(this.__code=this.code.join("\n"))},b.getCodeSize=function(){if(this.__size)return this.__size;var a=this.code.length,b=a>0?-1:0;while(--a>=0)b+=this.code[a].length+1;return this.__size=b},b.getLine=function(a){a==null&&(a=this._rowcol.row);return this.code[a]},b.charAtRowCol=function(a,b){var c=this.code.length;if(a>=c--)return null;var d=this.code[a];if(b==d.length)return a==c&&d.charAt(b)||"\n";return d.charAt(b)},b.charAt=function(a){a==null?a=this.point():(a=f(a))<0&&(a+=this.point());var b=this._positionToRowCol(a);return this.charAtRowCol(b.row,b.col)},b.callInteractively=function(a,b,c){b||(b=[]);var d;a instanceof Function?d=a.ymacsCommand||null:(d=a,a=this.COMMANDS[a]);if(a.ymacsCallInteractively&&!c)return a.ymacsCallInteractively.apply(this,b);(this.currentCommand=d)!="undo"&&(this.__undoQueue=this.__undoQueue.concat(this.__redoQueue),this.__redoQueue=[]);if(this.previousCommand!=d)this.sameCommandCount(0),d!="undo"&&this._placeUndoBoundary();else if(d!="self_insert_command"||this.sameCommandCount()%20==0)d!="undo"&&this._placeUndoBoundary();this.preventUpdates();try{this.callHooks("beforeInteractiveCommand",d,a),a.ymacsMarkExtend||this.clearTransientMark();return a.apply(this,b)}catch(a){if(a instanceof Ymacs_Exception)this.signalError(a.message);else throw a}finally{this.resumeUpdates(),this.callHooks("afterInteractiveCommand",d,a),this.previousCommand=d,this.sameCommandCount(+1)}},b.resetOverwriteMode=function(a){arguments.length==0&&(a=this.overwriteMode),this.callHooks("onOverwriteMode",this.overwriteMode=!a),this.signalInfo(a?"Insert mode":"Overwrite mode")},b.getMinibuffer=function(){return this.whenYmacs(function(a){return a.minibuffer})},b.getMinibufferFrame=function(){return this.whenYmacs(function(a){return a.minibuffer_frame})},b.setMinibuffer=function(a){this.whenMinibuffer(function(b){b.setCode(a),b.cmd("end_of_buffer")})},b.cmd=function(a){return this.COMMANDS[a].apply(this,Array.$(arguments,1))},b.cmdApply=function(a,b){return this.COMMANDS[a].apply(this,b)},b.createDialog=function(a){a.parent||(a.parent=this.getActiveFrame()&&this.getActiveFrame().getParentDialog(),"noShadows"in a||(a.noShadows=true));var b=new DlDialog(a);this.whenActiveFrame(function(a){b.addEventListener("onDestroy",a.focus.clearingTimeout(0,a))});return b},b.getActiveFrame=function(){return this.whenYmacs("getActiveFrame")},b.when=function(a,b){if((a=this[a]||this.getq(a))!=null)return b instanceof Function?b.call(this,a):a[b].apply(a,Array.$(arguments,2))},b.whenActiveFrame=function(){var a=this.getActiveFrame();if(a.buffer===this){this.activeFrame=a;var b=Array.$(arguments);b.unshift("activeFrame");return this.when.apply(this,b)}this.activeFrame=null},b.forAllFrames=function(a){this.ymacs.getBufferFrames(this).foreach(a)},b.whenYmacs=function(){var a=Array.$(arguments);a.unshift("ymacs");return this.when.apply(this,a)},b.whenMinibuffer=function(a){return this.whenYmacs(function(b){if(b.minibuffer)return a.call(this,b.minibuffer)})},b.preventUpdates=function(){++this.__preventUpdates},b.resumeUpdates=function(){(this.__preventUpdates=Math.max(this.__preventUpdates-1,0))==0&&this.redrawDirtyLines()},b.getRegion=function(a,b){a==null&&(a=this.caretMarker),b==null&&(b=this.markMarker),a=f(a);if((b=f(b))<a){var c=a;a=b,b=c}return{begin:a,end:b}},b.redrawDirtyLines=function(){this.callHooks("beforeRedraw"),this.__dirtyLines.foreach(function(a,b){a&&this.callHooks("onLineChange",b)},this),this.__dirtyLines=[],this.callHooks("afterRedraw")},b.getOverlays=function(){return this.__overlays},b.getOverlay=function(a){return this.__overlays[a]},b.setOverlay=function(a,b){var c=this.__overlays[a],d=!c,e;d?c=this.__overlays[a]=b:Object.merge(c,b),c.line2<c.line1?(e=c.line2,c.line2=c.line1,c.line1=e,e=c.col2,c.col2=c.col1,c.col1=e):c.line2==c.line1&&c.col2<c.col1&&(e=c.col2,c.col2=c.col1,c.col1=e),this.callHooks("onOverlayChange",a,c,d)},b.deleteOverlay=function(a){delete this.__overlays[a],this.callHooks("onOverlayDelete",a)},b.ensureTransientMark=function(){var a=this._rowcol,b;this.transientMarker||(this.transientMarker=this.createMarker(),this.markMarker.setPosition(this.point()),b=a),b||(b=this.transientMarker.getRowCol()),this.setOverlay("selection",{line1:b.row,col1:b.col,line2:a.row,col2:a.col})},b.clearTransientMark=function(){this.transientMarker&&(this.transientMarker.destroy(),this.transientMarker=null,this.deleteOverlay("selection"))},b.deleteTransientRegion=function(){if(this.transientMarker){this._deleteText(this.caretMarker,this.transientMarker),this.clearTransientMark(),this._placeUndoBoundary();return true}};var i=0;b.sameCommandCount=function(a){if(a==null)return i;return i+=a};var j;b.interactiveEvent=function(a){if(arguments.length==0)return j;return j=a},b.getPrefixArg=function(a){var b=this.getq("universal_prefix");a||(this.setq("universal_prefix",undefined),this.isMinibuffer||this.setMinibuffer(""));return b},b.setPrefixArg=function(a){return this.setq("universal_prefix",a)},b.updateProgress=function(a,b){b==null?delete this.progress[a]:this.progress[a]=b,this.callHooks("onProgressChange")},b.renderModelineContent=function(a){var b=String.buffer("-- <b>",this.name.htmlEscape(),"</b> (",a.row+1,",",a.col,") "),c=[];for(var d in this.progress)c.push(d+": "+this.progress[d]);c.length>0&&b("[",c.join(", "),"]");return b.get()},b._recordChange=function(a,b,c,d){if(c>0){var f=this.__undoQueue;f.push({type:a,pos:b,len:c,text:d}),f.length>e&&f.shift()}},b._placeUndoBoundary=function(a){a=a||this.__undoQueue;var b=this.markers.map(function(a){return[a,a.getPosition()]}),c=a.peek();!c||c.type!=3?a.push({type:3,markers:b}):c.markers=b},b._playbackUndo=function(a){++this.__undoInProgress;var b=false,c;while(a.length>0&&a.peek().type==3)c=a.pop();while(a.length>0){c=a.pop();if(c.type==3){c.markers.foreach(function(a){a[0].setPosition(a[1])});break}b=true;var d=c.pos;switch(c.type){case 1:this._deleteText(d,d+c.len);break;case 2:this._insertText(c.text,d)}}--this.__undoInProgress;return b},b._replaceLine=function(a,b){this.code[a]=b,this._textProperties.replaceLine(a,b),this.__preventUpdates==0?this.callHooks("onLineChange",a):this.__dirtyLines[a]=true},b._deleteLine=function(a){this.code.splice(a,1),this._textProperties.deleteLine(a),this.tokenizer&&this.tokenizer.quickDeleteLine(a),this.__dirtyLines.splice(a,1),this.callHooks("onDeleteLine",a)},b._insertLine=function(a,b){this.code.splice(a,0,b),this._textProperties.insertLine(a),this.tokenizer&&this.tokenizer.quickInsertLine(a);var c=this.__preventUpdates==0;this.callHooks("onInsertLine",a,c),c||(this.__dirtyLines.length<=a?this.__dirtyLines[a]=true:this.__dirtyLines.splice(a,0,true))},b._insertText=function(a,b){if(!(a.length==0)){b==null&&(b=this.caretMarker.getPosition()),b=f(b),this.__preventUndo==0&&this._recordChange(1,b,a.length);var c=b==this.point()?this._rowcol:this._positionToRowCol(b),d=c.row;if(/^\n+$/.test(a)&&c.col==0)a.length.times(function(a){this._insertLine(d+a,"")},this);else{var e=a.split("\n"),g=this.code[d],h=g.substr(c.col);e.length>1?(this._replaceLine(d,g.substr(0,c.col)+e.shift()),e.foreach(function(a){this._insertLine(++d,a)},this),this._replaceLine(d,this.code[d]+h)):this._replaceLine(d,g.substr(0,c.col)+e[0]+g.substr(c.col))}this._updateMarkers(b,a.length),this.callHooks("onTextInsert",b,a)}},b._deleteText=function(a,b){a=this._boundPosition(f(a)),b=this._boundPosition(f(b));if(!(a==b)){if(b<a){var c=a;a=b,b=c}this.__preventUndo==0&&this._recordChange(2,a,b-a,this._bufferSubstring(a,b));var d=this._positionToRowCol(a),e=this._positionToRowCol(b),g=this.code[d.row];d.row==e.row?(g=g.substr(0,d.col)+g.substr(e.col),this._replaceLine(d.row,g)):(g=g.substr(0,d.col)+this.code[e.row].substr(e.col),this._replaceLine(d.row,g),g=d.row+1,(e.row-d.row).times(this._deleteLine.$(this,g))),this._updateMarkers(a,a-b,a),this.callHooks("onTextDelete",a,b)}},b._replaceText=function(a,b,c){this._deleteText(a,b),this._insertText(c,a)},b._swapAreas=function(a){a=a.map(f).mergeSort();var b=a[0],c=a[1],d=a[2],e=a[3],g=this._bufferSubstring(b,c),h=this._bufferSubstring(d,e);this._replaceText(d,e,g),this._replaceText(b,c,h);return e},b._bufferSubstring=function(a,b){a==null?a=this.point():a=f(a),b==null?b=this.getCodeSize():b=f(b);if(b<a){var c=a;a=b,b=c}return this.getCode().substring(a,b)},b._killingAction=function(a,b,c,d){a=f(a),b=f(b);var e=this._bufferSubstring(a,b);this._saveKilledText(e,c),d||this._deleteText(a,b)},b._saveKilledText=function(a,b){this._lastCommandWasKill||this.ymacs.killRingToMaster(),this.ymacs.pushToKillRing(a,b),this._lastCommandWasKill++},b._positionToRowCol=function(a){var b=0,c=this.code,d=c.length;while(a>0&&b<d){var e=c[b].length;if(e>=a)break;a-=e+1,b++}return{row:b,col:a}},b._rowColToPosition=function(a,b){var c=0,d=this.code,e=Math.min(a,d.length-1),f=e;if(e<0)return 0;while(--e>=0)c+=d[e].length+1;return c+Math.min(b,d[f].length)},b._boundPosition=function(a){if(a<0)return 0;return Math.min(a,this.getCodeSize())},b._repositionCaret=function(a){var b=this.caretMarker.getPosition();a==null&&(a=b),a=f(a),a=this._boundPosition(a),this.caretMarker.setPosition(a);return a!=b},b._updateMarkers=function(a,b,c){this.__code=this.__size=null,this.markers.map("editorChange",a,b,c||0),this.tokenizer&&this.tokenizer.quickUpdate(Math.min(a,a+b))},b._saveExcursion=function(a,b){var c=this.createMarker(null,b);++this.__savingExcursion;try{return a.call(this)}finally{--this.__savingExcursion,this.caretMarker.swap(c,false,true),c.destroy()}},b._disableUndo=function(a){++this.__preventUndo;try{return a.call(this)}finally{--this.__preventUndo}},b._handleKeyEvent=function(a){var b=false;this.interactiveEvent(a);var c=this._lastCommandWasKill;this.__nextIsMeta&&(a.altKey=true),this.__nextIsMeta=false;var d=Ymacs_Keymap.unparseKey(a),e=this.currentKeys,f=false;e.push(d),this.keymap.r_foreach(function(a){var c=a.getHandler(e);c instanceof Array?(this.callInteractively(c[0],c[1]),b=true):c?b=f=true:d==="ESCAPE"?b=this.__nextIsMeta=true:a.defaultHandler&&e.length==1&&(b=this.callInteractively(a.defaultHandler[0],a.defaultHandler[1])),b&&$BREAK()},this),f||(b||e.length>1&&(this.signalError(e.join(" ").bold()+" is undefined",true),b=true),e.splice(0,e.length)),this._lastCommandWasKill==c&&typeof b!="object"&&(this._lastCommandWasKill=0),this.callHooks("finishedEvent",b),this.interactiveEvent(null);return b},b._on_tokenizerFoundToken=function(a,b,c,d){d?this._textProperties.addLineProps(a,b,c,"css",d):this._textProperties.removeLineProps(a,b,c,"css")},b._on_textPropertiesChange=function(a){this.__preventUpdates==0?this.callHooks("onLineChange",a):this.__dirtyLines[a]=true},b.formatLineHTML=function(a,b){var c=this._rowcol;b instanceof Ymacs_Marker&&(c=b.getRowCol()),b=a==c.row?c.col:null;return this._textProperties.getLineHTML(a,this.code[a],b)}}),DEFINE_CLASS("Ymacs_Marker",null,function(a,b){a.DEFAULT_ARGS={position:["pos",null],editor:["editor",null],before:["before",false],name:["name",null]},a.CONSTRUCT=function(){this.editor.markers.push(this),this.rowcol=null,this.onChange=[]},b.destroy=function(){this.editor.markers.remove(this),this.editor=null},b.editorChange=function(a,b,c){var d=this.position;this.before&&--d,b!=0&&a<=d&&(this.rowcol=null,this.position+=b,this.position<c&&(this.position=c),this.callHooks(this.onChange,this.position))},b.callHooks=function(a,b){for(var c=a.length;--c>=0;)a[c].call(this.editor,b)},b.getPosition=function(){return this.position},b.setPosition=function(a,b,c){if(c||this.position!=a)this.rowcol=null,this.position=a,b||this.callHooks(this.onChange,this.position)},b.getRowCol=function(){return this.rowcol||(this.rowcol=this.editor._positionToRowCol(this.position))},b.updateMarkers=function(a){this.editor._updateMarkers(this.getPosition(),a)},b.swap=function(a,b,c){var d=this.getPosition();this.setPosition(a.getPosition(),b,c),a.setPosition(d,b,c)}}),Ymacs_Buffer.newCommands({forward_char:Ymacs_Interactive("p",function(a){a==null&&(a=1);return this.cmd("goto_char",this.point()+a)}),backward_char:Ymacs_Interactive("p",function(a){a==null&&(a=1);return this.cmd("forward_char",-a)}),forward_line:Ymacs_Interactive("p",function(a){a==null&&(a=1);var b=this._rowcol;/^(forward|backward)_line$/.test(this.previousCommand)||this.setq("line_movement_requested_col",b.col);var c=this.cmd("goto_char",this._rowColToPosition(b.row+a,Math.max(b.col,this.getq("line_movement_requested_col"))));c||this.setq("line_movement_requested_col",b.col);return c}),backward_line:Ymacs_Interactive("p",function(a){a==null&&(a=1);return this.cmd("forward_line",-a)}),forward_whitespace:Ymacs_Interactive("P",function(a){var b=a?/[^\x20\t\xA0]/g:/[^\s]/g;if(this.cmd("search_forward_regexp",b)){this.cmd("backward_char");return true}if(!a)return this.cmd("end_of_buffer")}),backward_whitespace:Ymacs_Interactive("P",function(a){var b=a?/[^\x20\t\xA0]/g:/[^\s]/g;if(this.cmd("search_backward_regexp",b)){this.cmd("forward_char");return true}if(!a)return this.cmd("beginning_of_buffer")}),beginning_of_line:Ymacs_Interactive(function(){return this.cmd("goto_char",this._rowColToPosition(this._rowcol.row,0))}),back_to_indentation:Ymacs_Interactive(function(){var a=this._rowcol,b=this.code[a.row],c=/\S/.exec(b);if(c)return this.cmd("goto_char",this._rowColToPosition(a.row,c.index))}),beginning_of_indentation_or_line:Ymacs_Interactive(function(){return this.cmd("back_to_indentation")||this.cmd("beginning_of_line")}),end_of_line:Ymacs_Interactive(function(){var a=this._rowcol;return this.cmd("goto_char",this._rowColToPosition(a.row,this.code[a.row].length))}),beginning_of_buffer:Ymacs_Interactive(function(){return this.cmd("goto_char",0)}),end_of_buffer:Ymacs_Interactive(function(){return this.cmd("goto_char",this.getCodeSize())}),eob_p:function(){return this.point()==this.getCodeSize()},bob_p:function(){return this.point()==0},eol_p:function(){var a=this._positionToRowCol(this.point());return a.col==this.code[a.line].length},bol_p:function(){return this._positionToRowCol(this.point()).col==0},backward_delete_char:Ymacs_Interactive("^p",function(a){if(!this.deleteTransientRegion()){a==null&&(a=1);var b=this.point();b>0&&this._deleteText(b-a,b)}}),delete_char:Ymacs_Interactive("^p",function(a){if(!this.deleteTransientRegion()){a==null&&(a=1);var b=this.point();this._deleteText(b,b+a)}}),delete_whitespace:Ymacs_Interactive("^P",function(a){if(!this.deleteTransientRegion()){var b=this.point();if(this.cmd("forward_whitespace",a)){this._deleteText(b,this.point());return true}}}),backward_delete_whitespace:Ymacs_Interactive("^P",function(a){if(!this.deleteTransientRegion()){var b=this.point();if(this.cmd("backward_whitespace",a)){this._deleteText(this.point(),b);return true}}}),universal_argument:Ymacs_Interactive("^",function(){this.pushKeymap(Ymacs_Keymap_UniversalArgument()),this.isMinibuffer||this.setMinibuffer("C-u")}),overwrite_mode:Ymacs_Interactive(function(){this.resetOverwriteMode()}),self_insert_command:Ymacs_Interactive("^p",function(a){var b=this.interactiveEvent(),c=String.fromCharCode(b.charCode),d=this._rowcol;if(b.charCode&&c&&!b.altKey&&!b.ctrlKey){this.deleteTransientRegion(),a!=null&&(c=c.x(a));if(this.overwriteMode){var e=this.code[d.row],f=e.length-d.col;f>0&&this.cmd("delete_char",Math.min(f,a||1))}this.cmd("insert",c);return b.domStop=true}return false}),newline:Ymacs_Interactive("^p",function(a){a==null&&(a=1),this.deleteTransientRegion(),this.cmd("insert","\n".x(a))}),newline_and_indent:Ymacs_Interactive("^p",function(a){a?this.cmd("newline",a):(this.cmd("backward_delete_whitespace",true),this.cmd("newline"),this.cmd("indent_line"))}),indent_line:Ymacs_Interactive("P",function(a){if(this.tokenizer){var b=this.tokenizer.getIndentation(this._rowcol.row,this);if(b!=null){if(!a||/\S/.test(this.getLine())){var c=this.cmd("save_excursion",function(){this.cmd("back_to_indentation"),this._rowcol.col!=b&&(this.cmd("beginning_of_line"),this.cmd("delete_whitespace",true),this.cmd("insert"," ".x(b)));return this.point()});this.point()<c&&this.cmd("goto_char",c)}return}}this.cmd("insert"," ".x(this.getq("indent_line")))}),indent_region:Ymacs_Interactive("r",function(a,b){if(b<a){var c=a;a=b,b=c}this.cmd("save_excursion",function(){var c=this.createMarker(b);this.cmd("goto_char",a);while(this.point()<c.getPosition()){this.cmd("indent_line",true),this.cmd("beginning_of_line");if(!this.cmd("forward_line"))break}c.destroy()})}),make_marker:function(a){return this.createMarker(a)},looking_at:function(a){var b=a.lastIndex=this.point(),c=this.matchData=a.exec(this.getCode());c&&(c.after=a.lastIndex);return c&&c.index==b},looking_back:function(a){var b=this.lastIndexOfRegexp(this.getCode(),a,this.point());return b&&b.after==this.point()},search_forward:Ymacs_Interactive("sSearch: ",function(a,b){var c=this.getCode(),d=this.point();this.getq("case_fold_search")&&(c=c.toLowerCase(),a=a.toLowerCase());var e=c.indexOf(a,d);if(e>=0&&(b==null||e<=b)){this.cmd("goto_char",e+a.length);return true}}),search_backward:Ymacs_Interactive("sSearch backward: ",function(a,b){var c=this.getCode(),d=this.point();this.getq("case_fold_search")&&(c=c.toLowerCase(),a=a.toLowerCase());var e=c.lastIndexOf(a,d);e==d&&(e=c.lastIndexOf(a,d-1));if(e>=0&&e!=d&&(b==null||e>=b)){this.cmd("goto_char",e);return true}}),make_regexp:function(a){if(!(a instanceof RegExp)){var b=a.toLowerCase()!=a.toUpperCase();try{a=new RegExp(a,b?"ig":"g")}catch(a){throw new Ymacs_Exception("Invalid regexp")}}return a},search_forward_regexp:Ymacs_Interactive("sRegExp search: ",function(a){a=this.cmd("make_regexp",a);var b=this.getCode(),c=a.lastIndex=this.point(),d=this.matchData=a.exec(b);if(d&&a.lastIndex!=c){d.after=a.lastIndex,this.cmd("goto_char",a.lastIndex);return true}}),search_backward_regexp:Ymacs_Interactive("sBackward RegExp search: ",function(a){a=this.cmd("make_regexp",a);var b=this.lastIndexOfRegexp(this.getCode(),a,this.point());if(b&&b.index!=this.point()){this.cmd("goto_char",b.index);return true}}),forward_word:Ymacs_Interactive_X(function(){var a=this.getq("syntax_word"),b=false;while(!b&&!a.test(this.charAt()))this.cmd("forward_char")||(b=true);while(!b&&a.test(this.charAt()))this.cmd("forward_char")||(b=true)}),backward_word:Ymacs_Interactive_X(function(){var a=this.getq("syntax_word"),b=false;while(!b&&!a.test(this.charAt(-1)))this.cmd("backward_char")||(b=true);while(!b&&a.test(this.charAt(-1)))this.cmd("backward_char")||(b=true)}),forward_paragraph:Ymacs_Interactive_X(function(){this.cmd("forward_whitespace"),this.cmd("search_forward_regexp",this.getq("syntax_paragraph_sep"))?this.cmd("goto_char",this.cmd("match_beginning")+1):this.cmd("end_of_buffer")}),backward_paragraph:Ymacs_Interactive_X(function(){this.cmd("backward_whitespace"),this.cmd("search_backward_regexp",this.getq("syntax_paragraph_sep"))?this.cmd("goto_char",this.cmd("match_end")-1):this.cmd("beginning_of_buffer")}),transpose_words:Ymacs_Interactive_X(function(){this.cmd("backward_char"),this.getq("syntax_word").test(this.charAt())&&this.cmd("forward_word");var a=[];this.cmd("forward_word"),a.push(this.point()),this.cmd("backward_word"),a.push(this.point()),this.cmd("backward_word"),a.push(this.point()),this.cmd("forward_word"),a.push(this.point()),this.cmd("goto_char",this._swapAreas(a))}),transpose_lines:Ymacs_Interactive_X(function(){var a=[];this.cmd("backward_line"),this.cmd("beginning_of_line"),a.push(this.point()),this.cmd("end_of_line"),a.push(this.point()),this.cmd("forward_char"),a.push(this.point()),this.cmd("end_of_line"),a.push(this.point()),this.cmd("goto_char",this._swapAreas(a)+1)}),transpose_chars:Ymacs_Interactive_X(function(){var a=this.point();this.cmd("backward_char")&&this.cmd("goto_char",this._swapAreas([a-1,a,a,a+1]))}),kill_word:Ymacs_Interactive_X(function(){var a=this.point();this.cmd("forward_word");var b=this.point();this._killingAction(a,b,false)}),backward_kill_word:Ymacs_Interactive_X(function(){var a=this.point();this.cmd("backward_word");var b=this.point();this._killingAction(a,b,true)}),_apply_operation_on_word:function(a,b){var c=this.point();if(this.getq("syntax_word").test(this.charAt())){var d=this.cmd("save_excursion",function(){this.cmd("forward_word");return this.point()}),e=a.call(this._bufferSubstring(c,d));this._deleteText(c,d),this._insertText(e)}else this.cmd("forward_word"),this.cmd("backward_word"),c!=this.point()&&this.cmd(b)},capitalize_word:Ymacs_Interactive_X(function(){this.cmd("_apply_operation_on_word",function(){return this.charAt(0).toUpperCase()+this.substr(1).toLowerCase()},"capitalize_word")}),downcase_word:Ymacs_Interactive_X(function(){this.cmd("_apply_operation_on_word",String.prototype.toLowerCase,"downcase_word")}),upcase_word:Ymacs_Interactive_X(function(){this.cmd("_apply_operation_on_word",String.prototype.toUpperCase,"upcase_word")}),goto_char:Ymacs_Interactive("NGoto char: ",function(a){return this._repositionCaret(a)}),goto_line:Ymacs_Interactive("NGoto line: ",function(a){var b=this._rowColToPosition(a-1,0);return this.cmd("goto_char",b)}),move_to_column:Ymacs_Interactive("NMove to column: ",function(a,b){var c=this._positionToRowCol(this.point()),d=this.code[c.row];d.length<a?b?(this.cmd("end_of_line"),this.cmd("insert"," ".x(a-d.length))):this.cmd("end_of_line"):this.cmd("goto_char",this._rowColToPosition(c.row,a))}),delete_region:Ymacs_Interactive("r",function(a,b){this._deleteText(a,b)}),insert:Ymacs_Interactive("sInsert text: ",function(){return this._insertText(Array.$(arguments).join(""))}),keyboard_quit:Ymacs_Interactive("^p",Function.noop),buffer_substring:function(a,b){if(arguments.length==0){var c=this.getRegion();a=c.begin,b=c.end}return this._bufferSubstring(a,b)},kill_line:Ymacs_Interactive_X(function(){var a=this.point(),b=this._rowcol,c=this.code[b.row],d=a+c.length-b.col;b.row<this.code.length-1&&this.cmd("looking_at",/\s*$/mg)&&d++,this._killingAction(a,d)}),save_excursion:function(){return this._saveExcursion.apply(this,arguments)},prevent_undo:function(){return this._disableUndo.apply(this,arguments)},point:function(){return this.caretMarker.getPosition()},kill_region:Ymacs_Interactive("r",function(a,b){this._killingAction(a,b)}),copy_region_as_kill:Ymacs_Interactive("r",function(a,b){this._killingAction(a,b,false,true)}),yank:Ymacs_Interactive("^P",function(a){this.deleteTransientRegion();var b=this.point();this._insertText(this.ymacs.killRingText()),this.cmd("set_mark_command",b),a&&this.cmd("exchange_point_and_mark")}),yank_pop:Ymacs_Interactive(function(){/^yank/.test(this.previousCommand)?(this.ymacs.rotateKillRing(false),this._deleteText(this.caretMarker,this.markMarker),this.cmd("yank")):this.signalError("Previous command was not a yank")}),yank_shift:Ymacs_Interactive(function(){/^yank/.test(this.previousCommand)?(this.ymacs.rotateKillRing(true),this._deleteText(this.caretMarker,this.markMarker),this.cmd("yank")):this.signalError("Previous command was not a yank")}),mark:function(){return this.markMarker.getPosition()},set_mark_command:Ymacs_Interactive("d",function(a){this.currentCommand=="set_mark_command"&&this.signalInfo("Mark set",null,1e3),this.markMarker.setPosition(a)}),exchange_point_and_mark:Ymacs_Interactive("^",function(){this.caretMarker.swap(this.markMarker)}),mark_whole_buffer:Ymacs_Interactive(function(){this.clearTransientMark(),this.cmd("end_of_buffer"),this.ensureTransientMark(),this.cmd("beginning_of_buffer"),this.ensureTransientMark()}),recenter_top_bottom:Ymacs_Interactive(function(){this.whenActiveFrame(function(a){a.ensureCaretVisible(true),a.centerOnCaret()})}),ensure_caret_visible:Ymacs_Interactive(function(){this.whenActiveFrame(function(a){a.ensureCaretVisible(true),a.centerOnCaret()})}),fill_paragraph:Ymacs_Interactive("P",function(a){this.cmd("save_excursion",function(){this.cmd("looking_at",this.getq("syntax_paragraph_sep"))||this.cmd("forward_paragraph");var b=this.createMarker(this.point()-1);this.cmd("backward_paragraph"),this.point()>0&&this.cmd("forward_char");var c="",d=false;this.cmd("looking_at",/\s*([-]|[0-9]+\.|\(?[a-z][\).])?\s+/ig)?(c=" ".x(this.matchData[0].length),d=/\s*[#>;\s]*\s*/g):this.cmd("looking_at",/\s*[#>;*\s]+\s*/g)&&(c=this.matchData[0],d=/\s*[#>;\s]*\s*/g),a&&(this._deleteText(this.point(),this.point()+this.matchData[0].length),c="");while(true){this.cmd("end_of_line"),this.cmd("backward_delete_whitespace");if(this.point()>=b.getPosition())break;this._replaceText(this.point(),this.point()+1," "),d&&this.cmd("looking_at",d)&&this._deleteText(this.point(),this.point()+this.matchData[0].length)}this.cmd("beginning_of_line");while(this.point()<b.getPosition()){var e=this.point();if(!this.cmd("search_forward_regexp",/\s/g))break;this.point()>b.getPosition()&&this.cmd("goto_char",b),this._rowcol.col>this.getq("fill_column")&&(this.cmd("goto_char",e),this.cmd("backward_delete_whitespace"),this.cmd("newline"),this.cmd("insert",c))}b.destroy(),this.cmd("recenter_top_bottom")})}),fill_paragraph_no_prefix:Ymacs_Interactive(function(){return this.cmd("fill_paragraph",true)}),start_next_paragraph:Ymacs_Interactive(function(){this.cmd("backward_paragraph"),this.point()>0&&this.cmd("forward_char");var a="";this.cmd("looking_at",/(\s*)([0-9]+)(\.\s+)/g)?a=this.matchData[1]+(parseInt(this.matchData[2],10)+1)+this.matchData[3]:this.cmd("looking_at",/(\s*\(?)([a-z])([\.\)]\s+)/ig)?a=this.matchData[1]+String.fromCharCode(this.matchData[2].charCodeAt(0)+1)+this.matchData[3]:this.cmd("looking_at",/\s*[#>;*\s-]+\s*/g)&&(a=this.matchData[0]),this.cmd("forward_paragraph"),this.cmd("eob_p")&&this.cmd("newline"),this.cmd("insert","\n",a),this.cmd("looking_at",/\n\n/g)||(this.cmd("newline"),this.cmd("backward_char"))}),scroll_down:Ymacs_Interactive_X(function(){this.whenActiveFrame(function(a){var b=a.heightInLines();this.cmd("forward_line",Math.round(b/1.33)),this.cmd("recenter_top_bottom")})}),scroll_up:Ymacs_Interactive_X(function(){this.whenActiveFrame(function(a){var b=a.heightInLines();this.cmd("backward_line",Math.round(b/1.33)),this.cmd("recenter_top_bottom")})}),nuke_trailing_whitespace:Ymacs_Interactive(function(){this.cmd("save_excursion",function(){this.cmd("goto_char",0);while(this._rowcol.row<this.code.length){var a=this.code[this._rowcol.row],b=/\s+$/.exec(a);b&&(this.cmd("beginning_of_line"),this._deleteText(this.point()+b.index,this.point()+a.length));if(!this.cmd("forward_line"))break}})}),match_string:function(a){return this.matchData[a]},match_beginning:function(){return this.matchData.index},match_end:function(){return this.matchData.index+this.matchData[0].length},undo:Ymacs_Interactive_X(function(){var a=this.__undoQueue;this.__undoQueue=this.__redoQueue,this._placeUndoBoundary(),this._playbackUndo(a)||this.signalError("No further undo information"),this.__undoQueue=a}),center_line:Ymacs_Interactive("p",function(a){a==null&&(a=1),a.times(function(a){a>0&&this.cmd("forward_line"),this.cmd("save_excursion",function(){this.cmd("end_of_line"),this.cmd("backward_delete_whitespace",true),this.cmd("beginning_of_line"),this.cmd("delete_whitespace",true);var a=this.code[this._rowcol.row],b=Math.floor((this.getq("fill_column")-a.length)/2);this.cmd("insert"," ".x(b))})},this)}),dabbrev_expand:Ymacs_Interactive_X(function(){this.previousCommand!="dabbrev_expand"&&this.setq("dabbrev_context",null);var a=this.getq("dabbrev_context");if(!a){a=this.setq("dabbrev_context",{});var b=this.cmd("save_excursion",function(){this.cmd("bind_variables",{syntax_word:this.getq("syntax_word_dabbrev")},"backward_word");return this.point()});if(b==this.point())return this.signalError("Nothing to expand");a.search=this.cmd("buffer_substring",b,this.point()),a.point=b,a.length=this.point()-b,a.lastSearch=b,a.encountered={},a.forward=false,a.startBuffer=a.buffer=this}var c;a.buffer.cmd("save_excursion",function d(){var b=this.getq("syntax_word_dabbrev"),e,f=false;this.cmd("goto_char",a.lastSearch);if(a.forward){while(this.cmd("search_forward",a.search))if(!b.test(this.charAt(-a.search.length-1))){f=true;break}if(f)a.lastSearch=this.point(),e=this.point()-a.search.length;else{a.buffer=this.whenYmacs("getNextBuffer",this);if(a.buffer===a.startBuffer){c=a.search,a.startBuffer.signalError("No more completions"),a.lastSearch=a.point+a.length,a.startBuffer.setq("dabbrev_context",null);return}a.lastSearch=0,a.buffer.cmd("save_excursion",d);return}}else{while(this.cmd("search_backward",a.search))if(!b.test(this.charAt(-1))){f=true;break}if(f)a.lastSearch=e=this.point(),this.cmd("goto_char",e+a.search.length);else{a.forward=true,a.lastSearch=a.point+a.length,d.call(this);return}}e!=null&&(this.cmd("bind_variables",{syntax_word:this.getq("syntax_word_dabbrev")},"forward_word"),c=this.cmd("buffer_substring",e,this.point()),Object.HOP(a.encountered,c)&&d.call(this))}),c!=null&&(this._replaceText(a.point,a.point+a.length,c),a.length=c.length,a.encountered[c]=true)}),split_frame_vertically:Ymacs_Interactive("p",function(a){a==null?a="50%":a+="%",this.whenActiveFrame("vsplit",a)}),split_frame_horizontally:Ymacs_Interactive("p",function(a){a==null?a="50%":a+="%",this.whenActiveFrame("hsplit",a)}),delete_other_frames:Ymacs_Interactive(function(){this.whenActiveFrame("deleteOtherFrames")}),delete_frame:Ymacs_Interactive(function(){this.whenActiveFrame("deleteFrame")}),other_frame:Ymacs_Interactive(function(){this.whenYmacs("focusOtherFrame")}),windmove:function(a){this.whenYmacs(function(b){var c=b.getFrameInDirection(a);c&&c.focus()})},next_buffer:Ymacs_Interactive(function(){this.whenYmacs("switchToNextBuffer",this.sameCommandCount()+1)}),previous_buffer:Ymacs_Interactive(function(){this.whenYmacs("switchToPreviousBuffer",this.sameCommandCount()+1)}),switch_to_buffer:Ymacs_Interactive("BSwitch to buffer: ",function(a){this.whenYmacs(function(b){b.switchToBuffer(a)})}),kill_buffer:Ymacs_Interactive(function(){this.whenYmacs(function(a){a.killBuffer(this)})}),rename_buffer:Ymacs_Interactive("sRename current buffer to: ",function(a){this.whenYmacs(function(b){b.renameBuffer(this,a)})}),delete_region_or_line:Ymacs_Interactive("^",function(){if(!this.deleteTransientRegion()){this.cmd("beginning_of_line");var a=this.point();if(this.cmd("forward_line")||this.cmd("end_of_line")){this._deleteText(a,this.point());return true}}}),close_last_xml_tag:Ymacs_Interactive_X(function(){var a,b;this.cmd("save_excursion",function(){var b=1;while(b!=0&&this.cmd("search_backward_regexp",/<\x2f?([a-zA-Z0-9:_-]+)/g))a=this.cmd("match_string",1),this.cmd("looking_at",/<\x2f/g)?++b:this.cmd("looking_at",/<[^\x2f][^>]*?\x2f>/g)||--b;b!=0&&(a=null)});if(a)this.cmd("insert","</",a,">");else throw new Ymacs_Exception("Couldn't find a tag to close")}),bind_variables:function(){return this.withVariables.apply(this,arguments)},for_region:Ymacs_Interactive("^r\nCExecute command within region: ",function(a,b,c){if(b<a){var d=a;a=b,b=d}c instanceof Function||(c=this.COMMANDS[c]),this.clearTransientMark(),this.cmd("goto_char",a),a=this.createMarker(a,true),b=this.createMarker(b),this.withCommands({goto_char:function(c){if(c>=a.getPosition()&&c<=b.getPosition())return this._repositionCaret(c);throw"YMACS_RESTRICT"}},function(){try{while(true){var d=this.point();c.call(this);if(this.point()==d&&!this.cmd("forward_line"))break}}catch(a){if(a!=="YMACS_RESTRICT")throw a}finally{a.destroy(),b.destroy()}})})}),function(){function a(a,b,c,d){a.cmd("save_excursion",function(){for(var a=this._positionToRowCol(b),e=this._positionToRowCol(c),f=Math.abs(e.col-a.col),g=a.row;g<=e.row;++g){this.cmd("goto_char",this._rowColToPosition(g,0));var h=this.code[g],i=a.col,j=e.col,k=this.point(),l=0;if(i>j){var m=i;i=j,j=m}i>h.length&&(l=i-h.length,i=h.length),j>h.length&&(j=h.length),d.call(this,k+i,k+j,l,f)}},b==a.point())}Ymacs_Buffer.newCommands({string_rectangle:Ymacs_Interactive("r\nsString rectangle: ",function(b,c,d){a(this,b,c,function(a,b,c){c>0?this._insertText(" ".x(c),a):this._deleteText(a,b),this._insertText(d,a+c)})}),kill_rectangle:Ymacs_Interactive("r",function(b,c){var d=[];a(this,b,c,function(a,b,c,e){var f=this._bufferSubstring(a,b);b-a<e&&(f+=" ".x(e-b+a)),d.push(f),this._deleteText(a,b)}),this.setq("killed_rectangle",d)}),clear_rectangle:Ymacs_Interactive("r",function(a,b){this.cmd("string_rectangle",a,b," ".x(Math.abs(this._positionToRowCol(b).col-this._positionToRowCol(a).col)))}),insert_rectangle:function(a,b){var c=this._positionToRowCol(a).col;this.cmd("set_mark_command",a),b.foreach(function(a,b){b>0&&(this.cmd("forward_line")||(this.cmd("end_of_line"),this.cmd("newline")),this.cmd("move_to_column",c,true)),this.cmd("insert",a)},this)},yank_rectangle:Ymacs_Interactive("d",function(a){var b=this.getq("killed_rectangle");if(b==null)throw new Ymacs_Exception("No killed rectangle");this.cmd("insert_rectangle",a,b)})})}(),function(){function a(a,b,c){var d=this.createDialog({title:a,quitBtn:"destroy",modal:true}),e=new DlEntry({parent:d,type:"textarea",fillParent:true,value:b});d._focusedWidget=e,d.setSize({x:350,y:250}),e.addEventListener("onKeyPress",function(a){if(a.keyCode!=DlKeyboard.ESCAPE){var b=e.getValue();d.destroy(),c.delayed(0,this,b)}}.clearingTimeout(0,this)),d.show(true),e.select()}Ymacs_Buffer.newCommands({yank_from_operating_system:Ymacs_Interactive(function(){a.call(this,"Paste below (press CTRL-V)",null,function(a){this._saveKilledText(a),this.cmd("yank"),this.cmd("recenter_top_bottom")})}),copy_for_operating_system:Ymacs_Interactive("r",function(b,c){a.call(this,"Press CTRL-C",this.cmd("buffer_substring"),function(){this.cmd("copy_region_as_kill",b,c)})}),kill_for_operating_system:Ymacs_Interactive("r",function(b,c){a.call(this,"Press CTRL-C or CTRL-X",this.cmd("buffer_substring"),function(){this.cmd("kill_region",b,c)})})})}(),["forward_char","forward_word","forward_line","forward_paragraph","forward_sexp","beginning_of_line","beginning_of_indentation_or_line","beginning_of_buffer","backward_char","backward_word","backward_line","backward_paragraph","backward_sexp","end_of_line","end_of_buffer"].foreach(function(a){Ymacs_Buffer.COMMANDS[a+"_mark"]=Ymacs_Interactive("^",function(){this.ensureTransientMark(),this.cmdApply(a,arguments),this.ensureTransientMark()})}),Ymacs_Buffer.newCommands({get_region:function(){return this.getRegion()},cperl_lineup:Ymacs_Interactive("r",function(a,b){this.cmd("save_excursion",function(){var c=this._positionToRowCol(b),d=0,e=[];this.cmd("goto_char",a),this.cmd("forward_whitespace",true);var f=this.charAt();if(f.toLowerCase()!=f.toUpperCase()){this.signalError("Cannot lineup here");return}while(this._rowcol.row<=c.row){var g=this.getLine().indexOf(f);g>=0&&(g>d&&(d=g),e.push([this._rowcol.row,g]));if(!this.cmd("forward_line"))break}++d,e.foreach(function(a){this.cmd("goto_char",this._rowColToPosition(a[0],a[1])),this.cmd("insert"," ".x(d-a[1]))},this)})}),htmlize_region:Ymacs_Interactive("r\nP",function(a,b,c){this.tokenizer.finishParsing();var d=this._positionToRowCol(a).row,e=String.buffer(),f=d,g;c&&!c.empty&&(f=parseInt(c,10)),b=this._positionToRowCol(b).row,g=String(b).length;while(d<=b)e("<div class='line'>"),c&&e("<span class='line-number'>",f.zeroPad(g," "),"</span>"),++f,e(this._textProperties.getLineHTML(d,this.code[d],null),"</div>\n"),++d;e=e.get();var h=this.ymacs.switchToBuffer("*Htmlize*");h.setCode(e),h.cmd("xml_mode",true)}),execute_extended_command:Ymacs_Interactive("^CM-x ",function(a){this.callInteractively(a)}),set_variable:Ymacs_Interactive("vSet variable: \nsTo value: ",function(a,b){var c=parseFloat(b);isNaN(c)||(b=c),this.setq(a,b)}),eval_string:Ymacs_Interactive("^MEval string: ",function(a){try{var b=[this,this.ymacs];a=new Function("buffer","ymacs",a),a.apply(this,b),this.clearTransientMark()}catch(a){this.signalError(a.type+": "+a.message),window.console&&console.log(a)}}),eval_region:Ymacs_Interactive("^r",function(a,b){this.cmd("eval_string",this.cmd("buffer_substring",a,b))}),eval_buffer:Ymacs_Interactive(function(){this.cmd("eval_string",this.getCode())}),toggle_line_numbers:Ymacs_Interactive("^",function(){this.whenActiveFrame("toggleLineNumbers")}),save_file:Ymacs_Interactive("FWrite file: ",function(a){var b=this.ymacs.ls_getFileDirectory(a,"file");b.dir[b.other[0]]=this.getCode(),this.ymacs.ls_set(b.store),this.signalInfo("Saved in local storage")}),load_file:Ymacs_Interactive("fFind file: ",function(a){var b=this.ymacs.ls_getFileContents(a),c=this.ymacs.createBuffer({name:a});c.setCode(b),this.cmd("switch_to_buffer",a)}),delete_file:Ymacs_Interactive("fDelete file: ",function(a){this.ymacs.ls_getFileContents(a);var b=this.ymacs.ls_get();delete b[a],this.ymacs.ls_set(b)}),eval_file:Ymacs_Interactive("fEval file: ",function(a){this.cmd("eval_string",this.ymacs.ls_getFileContents(a))})}),DEFINE_CLASS("Ymacs_Keymap",null,function(a,b){var c={};Object.foreach(DlKeyboard,function(a,b){typeof a=="number"&&(c[a]=b)}),a.CONSTRUCT=function(){this.definitions=Object.makeCopy(this.__originalDefs)},b.FINISH_OBJECT_DEF=function(){this.__originalDefs={};var a=this.constructor.KEYS;a&&this.defineKeys(a)},b.parseKey=function(a){var b={},c=a.split(/-/);c.reverse(),c.foreach(function(a,d){if(d==0)typeof DlKeyboard[a]=="number"?b.keyCode=DlKeyboard[a]:(c[d]=a.toLowerCase(),b.charCode=c[d].charCodeAt(0));else switch(a){case"C":b.ctrlKey=true;break;case"M":b.metaKey=true;break;case"S":b.shiftKey=true}}),c.reverse();var d=c.pop();b.str=c.sort().join("-"),b.str&&(b.str+="-"),b.str+=d;return b},a.unparseKey=function(a){var b,d=[];a.keyCode in c?b=c[a.keyCode]:a.charCode&&(a.charCode==32?b="SPACE":a.charCode==45?b="DASH":b=String.fromCharCode(a.charCode).toLowerCase()),a.ctrlKey&&d.push("C"),a.altKey&&d.push("M"),a.shiftKey&&(a.charCode&&/^[a-zA-Z0-9]$/.test(b)||a.keyCode)&&d.push("S"),d.sort(),(d=d.join("-"))&&(d+="-");return d+b},b.defineKey=function(a,b,c){b instanceof Array&&(c=b.slice(1),b=b[0]),a=a.trim().split(/\s*&&\s*/);if(a.length>1)a.foreach(function(a){this.defineKey(a,b,c)},this);else{a=a[0].trim();var d=this.definitions||this.__originalDefs;if(a.indexOf(" ")>=0){var e=a.split(/\s+/);a=e.pop(),e.foreach(function(a){a=this.parseKey(a).str,d[a]||(d[a]={}),d=d[a]},this)}a=this.parseKey(a),d[a.str]=[b,c]}},b.defineKeys=function(a){Object.foreach(a,function(a,b){this.defineKey(b,a)},this)},b.getHandler=function(a){var b=null,c=this.definitions;a.foreach(function(a){var d=b?b[a]:c[a];d?(b=d)instanceof Array&&$BREAK():b&&(b=null,$BREAK())});return b},b.attached=Function.noop,b.detached=Function.noop}),DEFINE_SINGLETON("Ymacs_Keymap_Emacs",Ymacs_Keymap,function(a,b){var c=String.template("<table>","<tr><td style='text-align: right; font-weight: bold'>Char:</td><td><tt> $ch </tt></td></tr>","<tr><td style='text-align: right; font-weight: bold'>Char code:</td><td> $code / 0x$codeHex </td></tr>","<tr><td style='text-align: right; font-weight: bold'>Position:</td><td> $point </td></tr>","<tr><td style='text-align: right; font-weight: bold'>Mark:</td><td> $mark </td></tr>","<tr><td style='text-align: right; font-weight: bold'>Buffer size:</td><td> $sizeKB </td></tr>","</table>");a.KEYS={"ARROW_UP && C-p":"backward_line","ARROW_DOWN && C-n":"forward_line","ARROW_LEFT && C-b":"backward_char","ARROW_RIGHT && C-f":"forward_char",HOME:"beginning_of_indentation_or_line","END && C-e":"end_of_line","C-a":"beginning_of_line","C-HOME && M-<":"beginning_of_buffer","C-END && M->":"end_of_buffer","C-ARROW_RIGHT && M-f":"forward_word","C-ARROW_LEFT && M-b":"backward_word","C-ARROW_DOWN":"forward_paragraph","C-ARROW_UP":"backward_paragraph","C-l":"recenter_top_bottom","PAGE_UP && M-v":"scroll_up","PAGE_DOWN && C-v":"scroll_down","S-ARROW_UP && S-C-p":"backward_line_mark","S-ARROW_DOWN && S-C-n":"forward_line_mark","S-ARROW_LEFT && S-C-b":"backward_char_mark","S-ARROW_RIGHT && S-C-f":"forward_char_mark","S-C-ARROW_RIGHT && S-M-f":"forward_word_mark","S-C-ARROW_LEFT && S-M-b":"backward_word_mark","S-C-ARROW_DOWN":"forward_paragraph_mark","S-C-ARROW_UP":"backward_paragraph_mark","S-HOME":"beginning_of_indentation_or_line_mark","S-C-a":"beginning_of_line_mark","S-END":"end_of_line_mark","S-C-HOME":"beginning_of_buffer_mark","S-C-END":"end_of_buffer_mark",BACKSPACE:"backward_delete_char","DELETE && C-d":"delete_char","ENTER && C-m":"newline","M-d && C-DELETE":"kill_word","C-BACKSPACE && M-BACKSPACE && M-DELETE":"backward_kill_word","C-k":"kill_line","C-y && S-INSERT":"yank","M-y":"yank_pop","C-SPACE":"set_mark_command","C-x C-x":"exchange_point_and_mark","C-w":"kill_region","M-t":"transpose_words","C-t":"transpose_chars","C-x C-t":"transpose_lines","M-w":"copy_region_as_kill","M-c":"capitalize_word","M-u":"upcase_word","M-l":"downcase_word",F11:"nuke_trailing_whitespace",TAB:"indent_line","C-M-\\":"indent_region","M-q":"fill_paragraph","C-/ && C-x u && C-_ && C-z":"undo",INSERT:"overwrite_mode","M-s":"center_line","M-/":"dabbrev_expand","C-s":"isearch_forward","C-r":"isearch_backward","M-C-s":"isearch_forward_regexp","M-C-r":"isearch_backward_regexp","C-u":"universal_argument","M-g":"goto_line","C-x h":"mark_whole_buffer","C-g":"keyboard_quit","C-x r t":"string_rectangle","C-x r c":"clear_rectangle","C-x r k":"kill_rectangle","C-x r y":"yank_rectangle","C-x C-ARROW_RIGHT && C-x ARROW_RIGHT && C-TAB":"next_buffer","C-x C-ARROW_LEFT && C-x ARROW_LEFT && C-S-TAB":"previous_buffer","C-x b":"switch_to_buffer","C-x k":"kill_buffer","C-x 0":"delete_frame","C-x 1":"delete_other_frames","C-x 2":"split_frame_vertically","C-x 3":"split_frame_horizontally","C-x o":"other_frame","C-x l":"toggle_line_numbers","M-x":"execute_extended_command","C-S-y":"yank_from_operating_system","M-S-w":"copy_for_operating_system","C-S-w":"kill_for_operating_system","M-S-y":"yank_shift","C-c /":"close_last_xml_tag","S-BACKSPACE":"backward_delete_whitespace","S-DELETE":"delete_whitespace","C-M-d":"delete_region_or_line","M-ENTER":"start_next_paragraph","M-S-q":"fill_paragraph_no_prefix","C-M-|":"cperl_lineup","C-F4":"kill_buffer","M-ARROW_LEFT":["windmove","left"],"M-ARROW_RIGHT":["windmove","right"],"M-ARROW_UP":["windmove","up"],"M-ARROW_DOWN":["windmove","down"],"C-x =":function(){var a=this.charAt(),b=a;a==" "?b="<SPACE>":a=="\n"?b="<NEWLINE>":a=="-"&&(b="<DASH>"),this.signalInfo(c({ch:b.htmlEscape(),code:a.charCodeAt(0),codeHex:a.charCodeAt().hex(),point:this.point(),mark:this.markMarker.getPosition(),size:this.getCodeSize(),sizeKB:this.getCodeSize().formatBytes(2)}),true)}},b.defaultHandler=["self_insert_command"]}),DEFINE_SINGLETON("Ymacs_Keymap_UniversalArgument",Ymacs_Keymap,function(a,b){b.defaultHandler=[Ymacs_Interactive("^",function(){var a=this.interactiveEvent(),b=String.fromCharCode(a.charCode),c=this.getPrefixArg(true);if(a.charCode&&(/^[0-9]$/.test(b)||b==="-"&&c==="")&&!a.altKey&&!a.ctrlKey){c+=b,this.setPrefixArg(c),this.isMinibuffer||this.whenMinibuffer(function(a){a.cmd("insert"," ",b)});return true}this.popKeymap(Ymacs_Keymap_UniversalArgument());return false})],b.attached=function(a){a.setPrefixArg("")}}),DEFINE_SINGLETON("Ymacs_Keymap_ISearch",Ymacs_Keymap,function(a,b){a.KEYS={"C-g && ESCAPE":["isearch_abort",true],"C-w":"isearch_yank_word_or_char","C-s":"isearch_forward","C-r":"isearch_backward",BACKSPACE:function(){this.getMinibuffer().point()>this._isearchContext.mbMark.getPosition()&&(this.getMinibuffer().cmd("backward_delete_char"),this.cmd("goto_char",this._isearchContext.point),d.call(this,this._isearchContext.forward))},ENTER:"isearch_abort"},a.CONSTRUCT=function(){this.defaultHandler=["isearch_printing_char"]};function c(a){if(!this._isearchContext){this.pushKeymap(Ymacs_Keymap_ISearch()),this.cmd("set_mark_command",this.point()),this.setMinibuffer(a?"I-Search: ":"I-Search backward: "),this._isearchContext={forward:a,point:this.point(),mbMark:this.getMinibuffer().createMarker(null,true)};return true}}function d(a){this._isearchContext.forward=a,this._isearchContext.point=this.point();var b=f(this);!/\S/.test(b)&&this._isearchLastText&&(this.getMinibuffer()._placeUndoBoundary(),this.getMinibuffer().cmd("insert",this._isearchLastText),b=this._isearchLastText);return e.call(this,b)}function e(a){a==null&&(a=f(this));var b=this.cmd("bind_variables",{case_fold_search:a==a.toLowerCase()},this.cmd,this._isearchContext.forward?"search_forward":"search_backward",a);if(b){this.cmd("ensure_caret_visible");var c=this._positionToRowCol(this.point()+(this._isearchContext.forward?-1:1)*a.length);this.setOverlay("isearch",{line1:c.row,line2:this._rowcol.row,col1:c.col,col2:this._rowcol.col})}return b}function f(a){return a.cmd("isearch_get_search_text")}Ymacs_Buffer.newCommands({isearch_get_search_text:Ymacs_Interactive(function(){if(this._isearchContext)return this.getMinibuffer()._bufferSubstring(this._isearchContext.mbMark)}),isearch_forward:Ymacs_Interactive(function(){c.call(this,true)||(d.call(this,true)||this.signalError("No more forward occurrences of the search text"))}),isearch_forward_regexp:Ymacs_Interactive(function(){this.signalError("Not implemented, but should be easy. Volunteers?")}),isearch_backward_regexp:Ymacs_Interactive(function(){this.signalError("Not implemented, but should be easy. Volunteers?")}),isearch_backward:Ymacs_Interactive(function(){c.call(this,false)||(d.call(this,false)||this.signalError("No more backward occurrences of the search text"))}),isearch_yank_word_or_char:Ymacs_Interactive(function(){var a=this.point(),b=this.cmd("save_excursion",function(){this.cmd("forward_word");return this.point()});if(b!=a){var c=this._bufferSubstring(a,b);this.getMinibuffer()._placeUndoBoundary(),this.getMinibuffer().cmd("insert",c.toLowerCase()),c=f(this),this._isearchContext.forward&&this.cmd("goto_char",b-c.length),e.call(this,c)}}),isearch_printing_char:Ymacs_Interactive(function(){var a=this.interactiveEvent();if(a.charCode&&!a.ctrlKey&&!a.altKey){this.getMinibuffer().cmd("self_insert_command"),this.cmd("goto_char",this._isearchContext.point),e.call(this,f(this));return a.domStop=true}if(a.keyCode!=0||a.ctrlKey||a.altKey){this.cmd("isearch_abort");return false}}),isearch_abort:Ymacs_Interactive(function(a){a||(this._isearchLastText=f(this)),this.setMinibuffer(""),this.popKeymap(Ymacs_Keymap_ISearch()),this._isearchContext.mbMark.destroy(),this._isearchContext=null,a&&this.cmd("exchange_point_and_mark"),this.deleteOverlay("isearch"),this.deleteOverlay("isearch-lazy");return true})})}),Ymacs_Buffer.newMode("minibuffer_mode",function(){var a=this.createMarker(0,true),b=this.setq({minibuffer_end_marker:a}),c=Ymacs_Keymap_Minibuffer();this.pushKeymap(c);return function(){this.setq(b),a.destroy(),this.popKeymap(c)}}),function(){var a=false,b=null,c=null;function d(d,e){b&&b.destroy(),b=new DlVMenu({}),e.foreach(function(a){var c=a;typeof a!="string"&&(c=a.completion,a=a.label),new DlMenuItem({parent:b,label:a.htmlEscape(),data:c})});var f=Ymacs_Completion_Popup.get();f.popup({timeout:0,content:b,align:{prefer:"Tr",fallX1:"_r",fallX2:"_L",fallY1:"B_",fallY2:"T_"},anchor:d.getCaretElement(),widget:d,onHide:function(){a=false,b=c=null},isContext:true}),a=true}function e(a,b,c){this.whenMinibuffer(function(d){var e=d.setq({completion_list:a,minibuffer_validation:function(a){a==null&&(a=d.cmd("minibuffer_contents"));if(c)return c.call(this,d,a);return true}.$(this),minibuffer_continuation:function(a){d.setq(e),b&&b.call(this,a)}.$(this)})})}function f(a,b){var c=this.ymacs.ls_getFileDirectory(b),e=c.dir,f=c.other,g=c.path,h=f[0];if(f.length!=1)throw new Ymacs_Exception("Not found");if(typeof e[h]=="string")return[g.concat([h]).join("/")];var i=[];for(var j in e)j.indexOf(h)==0&&i.push(j);var k=i.common_prefix();if(k!=h)i.length==1&&typeof e[k]!="string"&&(k+="/"),a.cmd("minibuffer_replace_input",g.concat([k]).join("/"));else{if(i.length==1)throw new Ymacs_Exception("Single completion");if(i.length==0)throw new Ymacs_Exception("No completions");i=i.map(function(a){typeof e[a]!="string"&&(a+="/");return{label:a,completion:g.concat([a]).join("/")}}),d(this.getMinibufferFrame(),i)}return null}Ymacs_Buffer.newCommands({minibuffer_prompt:function(a,b){this.whenMinibuffer(function(c){var d=this.getMinibufferFrame();c.setCode(""),c.cmd("prevent_undo",function(){c.cmd("insert",a)}),c.getq("minibuffer_end_marker").setPosition(c.point()),d._redrawCaret(true),b||d.focus()})},minibuffer_read_number:function(a){e.call(this,null,a,function(a,b){var c=parseInt(b,10);isNaN(c)&&a.signalError("Please enter a number");return!isNaN(c)})},minibuffer_read_command:function(a){var b=Array.hashKeys(this.COMMANDS).grep(function(a){return this.COMMANDS[a].ymacsInteractive},this).sort();e.call(this,b,a,function(a,b){var c=this.COMMANDS[b],d=c&&c.ymacsInteractive;d||a.signalError("No such command: "+b);return d})},minibuffer_read_function:function(a){var b=Array.hashKeys(this.COMMANDS).sort();e.call(this,b,a,function(a,b){var c=this.COMMANDS[b],d=!!c;d||a.signalError("No such function: "+b);return d})},minibuffer_read_buffer:function(a){this.whenYmacs(function(b){var c=b.buffers.map("name");c.push(c.shift()),e.call(this,c,a),k.call(this)})},minibuffer_read_string:function(a,b){e.call(this,a,b)},minibuffer_read_variable:function(a){var b=this.globalVariables;Object.merge(b,this.variables);var c=Array.hashKeys(b).grep(function(a){return!/^\*/.test(a)}).sort();e.call(this,c,a)},minibuffer_read_existing_file:function(a){var b=this.ymacs.ls_getFileDirectory(this.name).path.join("/");b&&(b+="/"),this.cmd("minibuffer_replace_input",b),e.call(this,f,a,function(a,b){var c=this.ymacs.ls_getFileContents(b,true);c||a.signalError("No such file: "+b);return c})},minibuffer_read_file:function(a){var b=this.ymacs.ls_getFileDirectory(this.name).path.join("/");b&&(b+="/"),e.call(this,f,a)},minibuffer_read_file_or_directory:function(a){var b=this.ymacs.ls_getFileDirectory(this.name).path.join("/");b&&(b+="/"),e.call(this,f,a)},minibuffer_read_directory:function(a){var b=this.ymacs.ls_getFileDirectory(this.name).path.join("/");b&&(b+="/"),e.call(this,f,a)},minibuffer_prompt_end:function(){return this.whenMinibuffer(function(a){return a.getq("minibuffer_end_marker").getPosition()})},minibuffer_contents:function(){return this.whenMinibuffer(function(a){return a._bufferSubstring(a.getq("minibuffer_end_marker"))})},minibuffer_replace_input:function(a){this.whenMinibuffer(function(b){b._replaceText(b.getq("minibuffer_end_marker"),b.getCodeSize(),a),this.getMinibufferFrame()._redrawCaret(true)})},minibuffer_complete:function(){this.whenMinibuffer(function(a){var b=a.getq("completion_list"),c=a.cmd("minibuffer_contents"),e=c.replace(/([\[\]\(\)\{\}\.\*\+\?\|\\])/g,"\\$1").replace(/([_-])/g,"[^_-]*[_-]");e=new RegExp("^"+e,"i");if(b instanceof Function){b=b.call(this,a,c,e);if(!b)return}else b&&b.length>0&&(b=b.grep(function(a){return e.test(a)}));if(!b||b.length==0)a.signalError("No completions");else{var f=b.common_prefix();f!=c?a.cmd("minibuffer_replace_input",f):b.length==1?a.signalError("Sole completion"):d(this.getMinibufferFrame(),b)}})},minibuffer_complete_and_exit:function(){this.whenMinibuffer(function(a){a.getq("minibuffer_validation").call(a)&&a.cmd("minibuffer_keyboard_quit",this.getq("minibuffer_continuation"))})},minibuffer_keyboard_quit:function(a){this.whenMinibuffer(function(b){var c=this.cmd("minibuffer_contents");b.setCode(""),this.ymacs.getActiveFrame().focus(),function(b){a&&a.call(this,b),this.getPrefixArg()}.delayed(1,this,c)}),DlPopup.clearAllPopups()}});function g(a){var d=c,e;switch(a){case"next":c==null&&(c=-1),c=b.children().rotateIndex(++c);break;case"prev":c==null&&(c=0),c=b.children().rotateIndex(--c)}d!=null&&(e=b.children(d),e.callHooks("onMouseLeave")),d=c,e=b.children(c),e.callHooks("onMouseEnter")}function h(){if(a)return g.call(this,"next")}function i(){if(a)return g.call(this,"prev")}function j(){a?c!=null?(this.cmd("minibuffer_replace_input",b.children()[c].userData),DlPopup.clearAllPopups()):this.signalError("Select something..."):this.cmd("minibuffer_complete_and_exit")}function k(){a||this.cmd("minibuffer_complete"),h.call(this)}function l(){i.call(this)}function m(){a?DlPopup.clearAllPopups():this.cmd("minibuffer_keyboard_quit")}DEFINE_SINGLETON("Ymacs_Keymap_Minibuffer",Ymacs_Keymap,function(a,b){a.KEYS={"C-g":"minibuffer_keyboard_quit",TAB:k,"S-TAB":l,ARROW_DOWN:h,ARROW_UP:i,ENTER:j,ESCAPE:m},b.defaultHandler=[function(){DlPopup.clearAllPopups();return false}]})}(),DEFINE_CLASS("Ymacs_Completion_Popup",DlCompletionPopup),DEFINE_CLASS("Ymacs_Stream",null,function(a,b){a.DEFAULT_ARGS={buffer:["buffer",null],line:["line",0],col:["col",0]},b.nextCol=function(){++this.col},b.prevCol=function(){--this.col},b.nextLine=function(){++this.line,this.col=0},b.prevLine=function(){--this.line,this.col=0},b.peek=function(a){a==null&&(a=0);return this.buffer.code[this.line].charAt(this.col+a)},b.get=function(){var a=this.peek();this.nextCol();return a},b.lineText=function(a){a==null&&(a=this.line);return this.buffer.code[a]},b.lineIndentation=function(a){return/^\s*/.exec(this.lineText(a))[0].length},b.lookingAt=function(a){var b=this.buffer.code[this.line];return a instanceof RegExp?a.exec(b.substr(this.col)):b.substr(this.col,a.length)==a},b.textBefore=function(a){a==null&&(a=this.buffer._rowColToPosition(this.line,this.col));return this.buffer.getCode().substr(0,a)},b.textAfter=function(a){a==null&&(a=this.buffer._rowColToPosition(this.line,this.col));return this.buffer.getCode().substr(a)},b.substring=function(a,b){return this.buffer.getCode().substring(a,b)},b.substr=function(a,b){return this.buffer.getCode().substr(a,b)},b.eol=function(){return this.col==this.buffer.code[this.line].length},b.eof=function(){var a=this.buffer.code.length,b=this.line;return b>=a||b==a-1&&this.eol()},b.length=function(){return this.buffer.code.length},b.lineLength=function(a){a==null&&(a=this.line);return this.buffer.code[a].length},b.save=function(){return{buffer:this.buffer,line:this.line,col:this.col}},b.restore=function(a){this.buffer=a.buffer,this.line=a.line,this.col=a.col},b.checkStop=function(){if(this.eof())throw this.EOF;if(this.eol())throw this.EOL},b.EOL=new function(){},b.EOF=new function(){}}),DEFINE_CLASS("Ymacs_Tokenizer",DlEventProxy,function(a,b){var c={};a.define=function(a,b){c[a.toLowerCase()]=b},a.DEFAULT_EVENTS=["onFoundToken"],a.DEFAULT_ARGS={buffer:["buffer",null],type:["type",null]},a.FIXARGS=function(a){typeof a.type=="string"&&(a.type=c[a.type.toLowerCase()])},a.CONSTRUCT=function(){var a=null,b=null;this.quickUpdate=function(c){var d=this.buffer._positionToRowCol(c).row;this.parsers.splice(d-1,this.parsers.length+1),a!=null?a=Math.min(d,a):a=d,clearTimeout(b),b=function(){this._do_quickUpdate(a),a=null}.delayed(1,this)},this._stopQuickUpdate=function(){clearTimeout(b),clearTimeout(this.timerUpdate)},this.reset()},b.reset=function(){this.stream=new Ymacs_Stream({buffer:this.buffer}),this.theParser=this.type(this.stream,this),this.parsers=[],this.parsers[-1]=this.theParser.copy(),this.timerUpdate=null,this.quickUpdate(0)},b.getLanguage=function(a){return c[a](this.stream,this)},b.showProgress=function(a){a!=null&&(a=Math.round(a/this.stream.length()*100)+"%"),this.buffer.updateProgress("Syntax highlighting",a)},b._do_quickUpdate=function(a){this._stopQuickUpdate();var b=this.stream,c,d=this.parsers,e;b.line=a-1;while(!(c=d[b.line]))b.prevLine();b.nextLine(),c=c();var f=0,g=true,h=function(){this.buffer.preventUpdates(),e=g?3:20,++f>10&&this.showProgress(this.stream.line);while(true)try{while(true)c.next()}catch(a){if(a===b.EOL){d[b.line]=c.copy(),b.nextLine();if(--e==0){this.buffer.resumeUpdates(),this.timerUpdate=setTimeout(h,g?500:50),g=false;return}}else{if(a===b.EOF){d[b.line]=c.copy(),this.buffer.resumeUpdates(),c.on_EOF&&c.on_EOF();break}throw a}}this.showProgress()}.$(this);h()},b.quickInsertLine=function(a){this.parsers.splice(a,this.parsers.length+1)},b.quickDeleteLine=function(a){this.parsers.splice(a,this.parsers.length+1)},b.onToken=function(a,b,c,d){this.callHooks("onFoundToken",a,b,c,d)},b.getParserForLine=function(a){this._stopQuickUpdate();var b=this.stream,c,d=this.parsers,e,f=b.line;b.line=a-1;while(!(c=d[b.line]))b.prevLine();b.nextLine(),c=c();try{this.buffer.preventUpdates();while(true){if(b.line==a)return c;try{while(true)c.next()}catch(a){if(a===b.EOL)d[b.line]=c.copy(),b.nextLine();else{if(a===b.EOF)break;throw a}}}}finally{this.buffer.resumeUpdates(),b.line<b.length()&&(this.timerUpdate=this._do_quickUpdate.delayed(50,this,b.line))}},b.reparseAll=function(){this.parsers.splice(0,this.parsers.length);return this.finishParsing()},b.finishParsing=function(){this.getParserForLine(this.stream.length());return this.getLastParser()},b.getLastParser=function(){return this.parsers.peek()},b.getIndentation=function(a,b){var c=this.getParserForLine(a);if(c&&c.indentation instanceof Function)return c.indentation(b)}}),DEFINE_SINGLETON("Ymacs_Keymap_ParenMatch",Ymacs_Keymap,function(a,b){a.KEYS={"C-c \\":"goto_matching_paren","C-M-q":"indent_sexp","C-M-f && C-M-n":"forward_sexp","C-M-b && C-M-p":"backward_sexp","C-M-u && M-a":"backward_up_list","M-e && C-M-ARROW_UP":"up_list","C-M-ARROW_DOWN":"down_list","M-C-k":"kill_sexp","M-C-SPACE":"mark_sexp","M-C-t":"transpose_sexps","M-(":["paredit_wrap_round","("],"M-[":["paredit_wrap_round","["],"M-{":["paredit_wrap_round","{"],"M-\"":["paredit_wrap_round","\"",true],"M-'":["paredit_wrap_round","'",true]};function c(a,b){return a.line<b.line?-1:a.line>b.line?1:a.col-b.col}var d={"(":")","[":"]","{":"}","\"":{close:"\"",backslash:/[\x22\\]/g},"'":{close:"'",backslash:/[\x27\\]/g}};function e(a){throw new Ymacs_Exception("Balanced expression not found")}function f(a){var b=a.context.passedParens;return b instanceof Function?b():b}Ymacs_Buffer.newCommands({matching_paren:function(){var a=this.tokenizer.getLastParser(),b=this._rowcol;if(a){var c=f(a);return c.foreach(function(a){var c=a.closed;a.line==b.row&&a.col==b.col?$RETURN(this._rowColToPosition(c.line,c.col+1)):c.line==b.row&&c.col==b.col-1&&$RETURN(this._rowColToPosition(a.line,a.col))},this)}},indent_sexp:Ymacs_Interactive(function(){var a=this.cmd("matching_paren");a!=null?this.cmd("indent_region",this.point(),a):e(this)}),goto_matching_paren:Ymacs_Interactive(function(){var a=this.cmd("matching_paren");if(a!=null){this.cmd("goto_char",a);return true}}),forward_sexp:Ymacs_Interactive(function(){var a=this._rowcol,b=this.tokenizer.finishParsing();if(b){var d=f(b).mergeSort(c),g=d.foreach(function(b){(b.line>a.row||b.line==a.row&&b.col>=a.col)&&$RETURN(b)});if(!g||!g.closed){e(this);return}var h=this._rowColToPosition(g.line,g.col);this._rowcol.row==g.line&&this._rowcol.col==g.col||!/\S/.test(this._bufferSubstring(null,h))?this.cmd("goto_char",this._rowColToPosition(g.closed.line,g.closed.col)+1):this.cmd("goto_char",h);return true}}),backward_sexp:Ymacs_Interactive(function(){var a=this._rowcol,b=this.tokenizer.finishParsing();if(b){var d=f(b).grep("closed").map("closed").mergeSort(c),g=d.r_foreach(function(b){(b.line<a.row||b.line==a.row&&b.col<a.col)&&$RETURN(b)});if(!g){e(this);return}this.cmd("goto_char",this._rowColToPosition(g.opened.line,g.opened.col));return true}}),mark_sexp:Ymacs_Interactive("^r",function(a,b){this.cmd("save_excursion",function(){this.transientMarker&&this.cmd("goto_char",b),this.ensureTransientMark(),this.cmd("forward_sexp"),this.cmd("set_mark_command",this.point()),this.transientMarker.swap(this.caretMarker)}),this.ensureTransientMark()}),kill_sexp:Ymacs_Interactive(function(){this._killingAction(this.point(),this.cmd("save_excursion",function(){this.cmd("forward_sexp");return this.point()}))}),transpose_sexps:Ymacs_Interactive(function(){var a=[];this.cmd("forward_sexp"),a.push(this.point()),this.cmd("backward_sexp"),a.push(this.point()),this.cmd("backward_sexp"),a.push(this.point()),this.cmd("forward_sexp"),a.push(this.point()),this.cmd("goto_char",this._swapAreas(a))}),paredit_wrap_round:Ymacs_Interactive("^",function(a,b){a||(a="(");var c=d[a],e=this.transientMarker?this.getRegion():this.cmd("save_excursion",function(){var a=this.point();b||this.cmd("forward_sexp");return{begin:a,end:this.point()}}),f=this._bufferSubstring(e.begin,e.end),g=this.point()<e.end;typeof c!="string"&&(f=f.replace(c.backslash,function(a){return"\\"+a}),c=c.close);var h=this.createMarker(e.end);this.cmd("save_excursion",function(){this._replaceText(e.begin,e.end,a+f+c)},g),this.cmd("forward_char",g?1:-1),this.clearTransientMark(),this.cmd("indent_region",e.begin,h.getPosition()),h.destroy()}),down_list:Ymacs_Interactive(function(){var a=this._rowcol,b=this.tokenizer.finishParsing();if(b){var d={line:a.row,col:a.col};b=f(b).grep("closed").mergeSort(c).grep_first(function(a){return c(a,d)>=0}),b!=null?this.cmd("goto_char",this._rowColToPosition(b.line,b.col)+1):e(this)}}),backward_up_list:Ymacs_Interactive(function(){var a=this._rowcol,b=this.tokenizer.finishParsing();if(b){var d={line:a.row,col:a.col};b=f(b).grep("closed").mergeSort(c).grep_last(function(a){return c(a,d)<0&&c(a.closed,d)>=0}),b!=null?this.cmd("goto_char",this._rowColToPosition(b.line,b.col)):e(this)}}),up_list:Ymacs_Interactive(function(){this.cmd("backward_up_list"),this.cmd("forward_sexp")})}),Ymacs_Buffer.newMode("paren_match_mode",function(){var a=Ymacs_Keymap_ParenMatch();this.pushKeymap(a);var b=false,c=function(){b&&this.deleteOverlay("match-paren")}.clearingTimeout(500,this),d={beforeInteractiveCommand:function(){c.doItNow()},afterInteractiveCommand:function(){var a=this.tokenizer.getLastParser(),d=this._rowcol;a&&f(a).foreach(function(a){var e=a.closed;if(a.line==d.row&&a.col==d.col||e.line==d.row&&e.col==d.col-1)b=true,this.setOverlay("match-paren",{line1:a.line,line2:e.line,col1:a.col,col2:e.col+1}),c()},this)}.clearingTimeout(100)};this.addEventListener(d);return function(){c.doItNow(),this.popKeymap(a),this.removeEventListener(d)}})}),function(){Ymacs_Buffer.newCommands({lisp_open_paren:Ymacs_Interactive(function(a){a==null&&(a="("),a+=i(a),this.cmd("insert",a),this.cmd("backward_char")}),lisp_close_paren:Ymacs_Interactive(function(a){var b=new RegExp("\\s*\\"+a,"ig");this.cmd("looking_at",b)&&this._deleteText(this.point(),this.matchData.after),this.cmd("insert",a)}),lisp_close_all_parens:Ymacs_Interactive(function(){var a=this.tokenizer.getParserForLine(this._rowcol.row);if(a){var b=this.tokenizer.stream;b.line=this._rowcol.row,b.col=0;try{while(b.col<this._rowcol.col)a.next()}catch(a){}a=a.copy().context.parens,a.r_foreach(function(a){this.cmd("lisp_close_paren",i(a.type))},this)}})});var a="\ndeftype defstruct defclass \ndefmacro defun defmethod defgeneric defpackage in-package defreadtable in-readtable \nwhen cond unless etypecase typecase ctypecase \nlambda let load-time-value quote macrolet \nprogn prog1 prog2 progv go flet the \nif throw eval-when multiple-value-prog1 unwind-protect let* \nignore-errors handler-case case \nlabels function symbol-macrolet block tagbody catch locally \nreturn return-from setq multiple-value-call".qw().toHash(),b="loop do while".qw().toHash(),c="t nil".qw().toHash(),d={"(":")","{":"}","[":"]"},e={")":"(","}":"{","]":"["},f="defun defgeneric defmethod".qw().toHash(),g="deftype defclass defstruct".qw().toHash(),h={"if":"3+",when:"1*",lambda:"1*",unless:"1*",defun:"2*",defgeneric:"2*",defmethod:"2*",defclass:"2*",defmacro:"2*",progn:"0*",prog1:"0*",prog2:"0*",let:"1*"};function i(a){return d[a]}function j(a){return e[a]}function k(a){return a.toLowerCase()!=a.toUpperCase()||/^[-0-9!#$%&*+./:<=>?@\[\]\^_\{\}~]$/i.test(a)}function l(a){return a!="#"&&k(a)}Ymacs_Tokenizer.define("lisp",function(d,e){var m=[],n=false,o=false,p=null,q=[],r=[],s=[],t=[],u={next:D,copy:v,indentation:E};function v(){var a=b.context={cont:m.slice(0),quote:p,inString:n,inComment:o,parens:q.slice(0),passedParens:r.slice(0),backList:s.slice(0),list:t.slice(0)};function b(){m=a.cont.slice(0),n=a.inString,p=a.quote,o=a.inComment,q=a.parens.slice(0),r=a.passedParens.slice(0),s=a.backList.slice(0),t=a.list.slice(0);return u}return b}function w(a,b,c){e.onToken(d.line,a,b,c)}function x(a){a==null&&(a={c1:d.col}),t.push(a)}function y(){return d.buffer.getq("indent_level")}function z(){var a=d.col,b=d.get(),c=b;while(!d.eol()){b=d.peek();if(!k(b))break;c+=b,d.nextCol()}return b&&{line:d.line,c1:a,c2:d.col,id:c.toLowerCase()}}function A(a,b){var c,e=false,f=d.col;while(!d.eol()){if((c=d.peek())===a&&!e){m.pop(),n=null,w(f,d.col,b),w(d.col,++d.col,b+"-stopper");return true}e=!e&&c==="\\",d.nextCol()}w(f,d.col,b)}function B(){var a=d.lineText(),b=a.indexOf("|#",d.col),c=/^\s*\|+/.exec(a.substr(d.col));c&&w(d.col,d.col+=c[0].length,"mcomment-starter"),b>=0?(m.pop(),o=null,w(d.col,b,"mcomment"),w(b,b+=2,"mcomment-stopper"),d.col=b):(w(d.col,a.length,"mcomment"),d.col=a.length)}function C(a){var b=t&&t.length>0&&t[0].id;if(b){b=b.toLowerCase();if(a==null)return b;return typeof a=="string"?b==a:b in a}}function D(){d.checkStop();if(m.length>0)return m.peek()();var e=d.peek(),h;if(h=d.lookingAt(/^#\\(Space|Newline|.?)/i))x(),w(d.col,d.col+=h[0].length,"constant");else if(d.lookingAt(/^#\x27[^(]/))x(),d.col+=2,h=z(),w(h.c1,h.c2,"function-name");else if(d.lookingAt("#|"))o={line:d.line,c1:d.col},w(d.col,d.col+=2,"mcomment-starter"),m.push(B);else if(h=d.lookingAt(/^;+/))w(d.col,d.col+=h[0].length,"comment-starter"),w(d.col,d.col=d.lineLength(),"comment");else if(e==="\"")x(),n={line:d.line,c1:d.col},w(d.col,++d.col,"string-starter"),m.push(A.$C(e,"string"));else if(h=d.lookingAt(/^[+-]?(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*)(\x2f(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*))?/))x(),w(d.col,d.col+=h[0].length,"number");else if(h=i(e))x(),s.push(t),t=[],q.push({line:d.line,col:d.col,type:e}),w(d.col,++d.col,"open-paren");else if(h=j(e)){var k=q.pop();!k||k.type!=h?w(d.col,++d.col,"error"):(k.closed={line:d.line,col:d.col,opened:k},r.push(k),t=s.pop(),w(d.col,++d.col,"close-paren"))}else if(l(e)&&(h=z())){var p=e==":"?"lisp-keyword":h.id in a?"keyword":h.id in b?"builtin":h.id in c?"constant":null;p||(C(f)&&t.length==1?p="function-name":C(g)&&t.length==1?p="type":/^with-/i.test(h.id)&&(p="builtin")),x(h),w(h.c1,h.c2,p)}else w(d.col,++d.col,null)}function E(){if(n)return 0;var a=d.lineText(),b=0,c=q.peek();if(c){var e=d.lineText(c.line);b=c.col+1;var f;if(l(e.charAt(b))){b=c.col+y();var g=/\s\S/g;g.lastIndex=c.col,(f=g.exec(e))&&(f=f.index+1)}if(t&&t.length){var i=C();if(i){i=i.replace(/\*$/,"");var j=h[i];!j&&/^with/.test(i)&&(j="1*"),j||(j="1+");if(j){var k=parseInt(j,10),m=/\+$/.test(j),o=/\*$/.test(j);if(t.length-1<k||m)f?b=f:b+=y()}}}}return b}return u})}(),DEFINE_SINGLETON("Ymacs_Keymap_LispMode",Ymacs_Keymap,function(a,b){a.KEYS={ENTER:"newline_and_indent","(":["lisp_open_paren","("],")":["lisp_close_paren",")"],"C-c ] && C-c C-]":"lisp_close_all_parens"}}),Ymacs_Buffer.newMode("lisp_mode",function(){var a=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"lisp"}));var b=this.setq({indent_level:2}),c=Ymacs_Keymap_LispMode();this.pushKeymap(c);var d=this.cmd("paren_match_mode",true);return function(){this.setTokenizer(a),this.setq(b),this.popKeymap(c),d||this.cmd("paren_match_mode",false)}}),function(){var a="abstract break case catch class const \ncontinue debugger default delete do else \nenum export extends final finally for \nfunction goto if implements import in \ninstanceof interface native new package \nprivate protected public return static \nsuper switch synchronized throw \nthrows transient try typeof var void let \nyield volatile while with".qw(),b="boolean byte char double float int long short void \nArray Date Function Math Number Object RegExp String".qw(),c="false null undefined Infinity NaN true arguments this".qw(),d="Infinity NaN \nPackages decodeURI decodeURIComponent \nencodeURI encodeURIComponent eval isFinite isNaN parseFloat \nparseInt undefined window document alert prototype constructor".qw(),e=/[\[({,;+\-*=?&|!:][\x20\t\n\xa0]*$|return\s+$|typeof\s+$/;function f(a){return a.toLowerCase()!=a.toUpperCase()}function g(a){return a&&(f(a)||/^[_$]$/.test(a))}function h(a){return a&&(f(a)||/^[0-9_$]$/.test(a))}var i={"(":")","{":"}","[":"]"},j={")":"(","}":"{","]":"["};function k(a){return i[a]}function l(a){return j[a]}function m(a,b,c,d,f,j){var m=[],n=[],o=[],p=null,q=null,r={next:z,copy:t,indentation:A};function s(){return f.buffer.getq("indent_level")}function t(){var a=b.context={cont:m.slice(0),inComment:p,inString:q,parens:n.slice(0),passedParens:o.slice(0)};function b(){m=a.cont.slice(0),p=a.inComment,q=a.inString,n=a.parens.slice(0),o=a.passedParens.slice(0);return r}return b}function u(a,b,c){j.onToken(f.line,a,b,c)}function v(){var a=f.col,b=f.get(),c=b;while(!f.eol()){b=f.peek();if(!h(b))break;c+=b,f.nextCol()}return b&&{line:f.line,c1:a,c2:f.col,id:c}}function w(){var a=f.lineText(),b=a.indexOf("*/",f.col),c=/^\s*\*+/.exec(a.substr(f.col));c&&u(f.col,f.col+=c[0].length,"mcomment-starter"),b>=0?(m.pop(),p=null,u(f.col,b,"mcomment"),u(b,b+=2,"mcomment-stopper"),f.col=b):(u(f.col,a.length,"mcomment"),f.col=a.length)}function x(a,b){var c,d=false,e=f.col;while(!f.eol()){if((c=f.peek())===a&&!d){m.pop(),q=null,u(e,f.col,b),u(f.col,++f.col,b+"-stopper");return true}d=!d&&c==="\\",f.nextCol()}u(e,f.col,b)}function y(){var a,b=false,c=0,d=f.col;while(!f.eol()){a=f.peek(),k(a)&&!b&&!c&&c++,l(a)&&!b&&(c--,c<0&&(c=0));if(a==="/"&&!b&&!c){m.pop(),q=null,u(d,f.col,"regexp"),u(f.col,++f.col,"regexp-stopper");var e=f.lookingAt(/^[gmsiy]+/);e&&u(f.col,f.col+=e[0].length,"regexp-modifier");return true}b=!b&&a==="\\",f.nextCol()}u(d,f.col,"regexp")}function z(){f.checkStop();if(m.length>0)return m.peek()();var h=f.peek(),i,j;if(f.lookingAt("/*"))p={line:f.line,c1:f.col},u(f.col,f.col+=2,"mcomment-starter"),m.push(w);else if(f.lookingAt("//"))u(f.col,f.col+=2,"comment-starter"),u(f.col,f.col=f.lineLength(),"comment");else if(h==="\""||h==="'")q={line:f.line,c1:f.col},u(f.col,++f.col,"string-starter"),m.push(x.$C(h,"string"));else if(i=f.lookingAt(/^0x[0-9a-f]+|^[0-9]*\.?[0-9]+/))u(f.col,f.col+=i[0].length,"number");else if(g(h)&&(j=v())){var r=j.id in a?"keyword":j.id in b?"type":j.id in c?"constant":j.id in d?"builtin":null;u(j.c1,j.c2,r)}else if(j=k(h))n.push({line:f.line,col:f.col,type:h}),u(f.col,++f.col,"open-paren");else if(j=l(h)){var s=n.pop();!s||s.type!=j?u(f.col,++f.col,"error"):(s.closed={line:f.line,col:f.col,opened:s},o.push(s),u(f.col,++f.col,"close-paren"))}else h==="/"&&e.test(f.textBefore())?(u(f.col,++f.col,"regexp-starter"),m.push(y)):(i=f.lookingAt(/^\s+$/))?u(f.col,f.col+=i[0].length,"trailing-whitespace"):u(f.col,++f.col,null)}function A(){if(q)return 0;var a=f.line,b=f.lineText(),c=0;if(p){var d=f.lineText(p.line);c=p.c1+1;if(!/^\s*\*/.test(b)){var e=/[^\s*]/g;e.lastIndex=p.c1+1;var g=e.exec(d);g&&(c=g.index)}return c}var h=n.peek();if(h){var e=new RegExp("^\\s*\\"+i[h.type]),j=e.test(b),k=f.lineText(h.line);e=/\S/g,e.lastIndex=h.col+1;var g=e.exec(k);g?c=j?h.col:g.index:(c=f.lineIndentation(h.line)+s(),j&&(c-=s()))}if(a>0){var l=f.textBefore();if(/\)\s*$/.test(l)&&o.length>0){h=o.peek();var m=f.lineText(h.line);/^\s*(if|for|while)\W/.test(m)&&(c+=s())}else/\Welse\s*$/.test(l)&&(c+=s())}/^\s*(case|default)\W/.test(b)&&(c-=s()/2);return c}return r}Ymacs_Tokenizer.define("js",m.$C(a.toHash(true),b.toHash(true),c.toHash(true),d.toHash(true)));var n=d.concat("\nDEFINE_CLASS DEFINE_SINGLETON DEFINE_HIDDEN_CLASS \nDEFAULT_ARGS DEFAULT_EVENTS \nFIXARGS CONSTRUCT BEFORE_BASE FINISH_OBJECT_DEF \nD P $".qw());Ymacs_Tokenizer.define("js-dynarchlib",m.$C(a.toHash(true),b.toHash(true),c.toHash(true),n.toHash(true)))}(),DEFINE_SINGLETON("Ymacs_Keymap_CLanguages",Ymacs_Keymap,function(a,b){a.KEYS={ENTER:"newline_and_indent","} && ) && ] && : && ; && { && ( && [ && *":"c_insert_and_indent"}}),Ymacs_Buffer.newMode("javascript_mode",function(a){var b=this.tokenizer,c=Ymacs_Keymap_CLanguages();this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:a?"js-dynarchlib":"js"})),this.pushKeymap(c);var d=this.cmd("paren_match_mode",true);return function(){this.setTokenizer(b),this.popKeymap(c),d||this.cmd("paren_match_mode",false)}}),Ymacs_Buffer.newCommands({javascript_dl_mode:Ymacs_Interactive(function(){return this.cmd("javascript_mode",true)}),c_electric_block:Ymacs_Interactive(function(){this.cmd("indent_line"),this.cmd("insert","{\n\n}"),this.cmd("indent_line"),this.cmd("backward_line",1),this.cmd("indent_line")}),c_insert_and_indent:Ymacs_Interactive(function(){var a;if(a=this.cmd("self_insert_command")){this.cmd("indent_line");return a}})}),Ymacs_Tokenizer.define("xml",function(a,b){var c=[],d=[],e=null,f=null,g={next:s,copy:h,indentation:t};function h(){var a=c.slice(0),b=d.slice(0),h=e,i=f;function j(){d=b.slice(0),c=a.slice(0),e=h,f=i;return g}return j}function i(){return a.buffer.getq("indent_level")}function j(c,d,e){b.onToken(a.line,c,d,e)}function k(a){return a.toLowerCase()!=a.toUpperCase()}function l(a){return a&&(k(a)||/^[:_-]$/.test(a))}function m(a){return a&&(k(a)||/^[0-9_-]$/.test(a))}function n(){var b=a.col,c=a.get(),d=c;while(!a.eol()){c=a.peek();if(!m(c))break;d+=c,a.nextCol()}return c&&{line:a.line,c1:b,c2:a.col,id:d}}function o(b){var c,e=false,f=a.col;while(!a.eol()){if((c=a.peek())===b&&!e){d.pop(),j(f,a.col,"string"),j(a.col,++a.col,"string-stopper");return}e=!e&&c==="\\",a.nextCol()}j(f,a.col,"string")}function p(){var b=a.peek(),f;a.lookingAt(/^\x2f>/)?(d.pop(),e=null,j(a.col,++a.col,"xml-closetag-slash"),j(a.col,++a.col,"xml-close-bracket")):b===">"?(d.pop(),c.push(e),e=null,j(a.col,++a.col,"xml-close-bracket")):l(b)&&(f=n())?j(f.c1,f.c2,"xml-attribute"):b==="\""||b==="'"?(j(a.col,++a.col,"string-starter"),d.push(o.$C(b))):j(a.col,++a.col,null)}function q(b,c){var e=a.lineText(),g=e.indexOf(c,a.col);g>=0?(d.pop(),j(a.col,g,b),f=null,j(g,g+=c.length,b+"-stopper"),a.col=g):(j(a.col,e.length,b),a.col=e.length)}function r(){var b=a.lookingAt(/^([\s\xA0]*)(>?)/);b&&b[0]?(b[1]&&j(a.col,a.col+=b[1].length,null),b[2]&&(j(a.col,a.col+=b[2].length,"xml-close-bracket"),d.pop())):j(a.col,++a.col,"error")}function s(){a.checkStop();if(d.length>0)return d.peek()();var b=a.peek(),g;if(a.lookingAt("<![CDATA["))j(a.col,a.col+=9,"xml-cdata-starter"),f={line:a.line,c1:a.col},d.push(q.$C("xml-cdata","]]>"));else if(a.lookingAt("<!--"))j(a.col,a.col+=4,"mcomment-starter"),f={line:a.line,c1:a.col},d.push(q.$C("mcomment","-->"));else if(a.lookingAt(/^<\x2f/)&&l(a.peek(+2))){j(a.col,++a.col,"xml-open-bracket"),j(a.col,++a.col,"xml-closetag-slash");var h=n(),i=c.pop();j(h.c1,h.c2,i&&i.id==h.id?"xml-close-tag":"error"),d.push(r)}else if(b==="<"&&l(a.peek(+1))){j(a.col,++a.col,"xml-open-bracket");var h=n();j(h.c1,h.c2,"xml-open-tag"),e=h,d.push(p)}else(g=a.lookingAt(/^&.*?;/))?(j(a.col,++a.col,"xml-entity-starter"),j(a.col,a.col+=g[0].length-2,"xml-entity"),j(a.col,++a.col,"xml-entity-stopper")):b==="&"?j(a.col,++a.col,"error"):j(a.col,++a.col,null)}function t(){var b,d;if(f)b=a.lineIndentation(f.line)+i();else if(e)b=e.c1+e.id.length+1;else if(d=c.peek())b=a.lineIndentation(d.line)+i(),/^\s*<\x2f/.test(a.lineText())&&(b-=i());return b}return g}),DEFINE_SINGLETON("Ymacs_Keymap_XML",Ymacs_Keymap,function(a,b){a.KEYS={"C-c /":"xml_close_tag","C-ENTER":"xml_zen_expand",ENTER:"newline_and_indent"}}),Ymacs_Buffer.newMode("xml_mode",function(){var a=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"xml"}));var b=Ymacs_Keymap_XML();this.pushKeymap(b);var c=this.setq({indent_level:2});return function(){this.setTokenizer(a),this.popKeymap(b),this.setq(c)}}),function(){DEFINE_SINGLETON("Ymacs_Keymap_XML_Zen",Ymacs_Keymap,function(a,b){a.KEYS={TAB:"xml_zen_next_poi","S-TAB":"xml_zen_prev_poi","C-g":"xml_zen_stop"}});var a=1,b=2,c=3,d=4,e=5;function f(a,b){for(var c=a.repeat||1,d=1;d<=c;++d)d>1&&b("\n"),b("<",a.type),a.id&&b(" id=\"",a.id.replace(/\$/g,d),"\""),a.klass&&b(" class=\"",a.klass.replace(/\$/g,d),"\""),a.attributes&&a.attributes.foreach(function(a){b(" ",a,"=\"|\"")}),b(">"),a.child?(b("\n"),f(a.child,b),b("\n")):b("|"),b("</",a.type,">"),a.next&&(b("\n"),f(a.next,b))}function g(f,h){var i={type:""},j=a;OUTER:while(h<f.length){var k=f.charAt(h++);switch(k){case"#":j=c,i.id="";break;case".":j=b,i.klass!=null?i.klass+=" ":i.klass="";break;case":":j=e,i.attributes==null&&(i.attributes=[]),i.attributes.push("");break;case"*":j=d,i.repeat="";break;case">":i.child=g(f,h),h=i.child.i;break OUTER;case"(":i.child=g(f,h),h=i.child.i;break;case")":break OUTER;case"+":i.next=g(f,h),h=i.next.i;break OUTER;default:switch(j){case a:i.type+=k;break;case b:i.klass+=k;break;case c:i.id+=k;break;case d:i.repeat=parseInt(String(i.repeat)+k,10);break;case e:i.attributes.push(i.attributes.pop()+k)}}}i.i=h;return i}function h(){var a=this.point(),b=this.getq("xml_zen_markers"),c=b[0],d=b.peek();(a<c.getPosition()||a>d.getPosition()||d.getPosition()==b.peek(1).getPosition())&&this.cmd("xml_zen_stop")}Ymacs_Buffer.newCommands({xml_close_tag:Ymacs_Interactive(function(){this.cmd("close_last_xml_tag"),this.cmd("indent_line")}),xml_zen_expand:Ymacs_Interactive(function(){this.cmd("xml_zen_stop");var a=String.buffer(),b=this.cmd("save_excursion",function(){this.cmd("backward_whitespace");while(!this.cmd("looking_back",/[\x20\xa0\s\t\n;&]/))if(!this.cmd("backward_char"))break;return this.point()}),c=this.point();try{f(g(this.cmd("buffer_substring",b,c).trim(),0),a)}catch(a){throw new Ymacs_Exception("The Zen is not strong today :-/")}a=a.get(),this.cmd("delete_region",b,c),this.cmd("insert",a),b=this.createMarker(b,false,"xml_zen");var d=this.createMarker(this.point(),true,"xml_zen"),e=[];this.cmd("goto_char",b.getPosition());while(this.cmd("search_forward","|",d.getPosition()))this.cmd("backward_delete_char"),e.push(this.createMarker(this.point(),true,"xml_zen_start")),e.push(this.createMarker(this.point(),false,"xml_zen_end"));this.cmd("indent_region",b.getPosition(),d.getPosition());var i=e.length;i>0?(this.cmd("goto_char",e[0]),e.unshift(b),e.push(d),this.setq("xml_zen_markers",e),this.pushKeymap(Ymacs_Keymap_XML_Zen()),this.addEventListener("afterInteractiveCommand",h)):(b.destroy(),d.destroy())}),xml_zen_stop:Ymacs_Interactive(function(){var a=this.getq("xml_zen_markers");a&&(a.map("destroy"),this.setq("xml_zen_markers",null)),this.popKeymap(Ymacs_Keymap_XML_Zen()),this.removeEventListener("afterInteractiveCommand",h)}),xml_zen_next_poi:Ymacs_Interactive(function(){var a=this.getq("xml_zen_markers"),b=this.point();a.foreach(function(a){a.getPosition()>b&&(this.cmd("goto_char",a.getPosition()),$BREAK())},this)}),xml_zen_prev_poi:Ymacs_Interactive(function(){var a=this.getq("xml_zen_markers"),b=this.point();a.r_foreach(function(a){a.getPosition()<b&&(this.cmd("goto_char",a.getPosition()),$BREAK())},this)})})}(),Ymacs_Tokenizer.define("css",function(a,b){var c={next:r,copy:i,indentation:s},d=[],e=[],f=[],g=null,h=null;function i(){var a=b.context={parens:d.slice(0),passedParens:e.slice(0),cont:f.slice(0),inString:g,inComment:h};function b(){d=a.parens.slice(0),e=a.passedParens.slice(0),f=a.cont.slice(0),g=a.inString,h=a.inComment;return c}return b}function j(){return b.buffer.getq("indent_level")}var k={"(":")","{":"}","[":"]"},l={")":"(","}":"{","]":"["};function m(a){return k[a]}function n(a){return l[a]}function o(c,d,e){b.onToken(a.line,c,d,e)}function p(){var b=a.lineText(),c=b.indexOf("*/",a.col),d=/^\s*\*+/.exec(b.substr(a.col));d&&o(a.col,a.col+=d[0].length,"mcomment-starter"),c>=0?(f.pop(),h=null,o(a.col,c,"mcomment"),o(c,c+=2,"mcomment-stopper"),a.col=c):(o(a.col,b.length,"mcomment"),a.col=b.length)}function q(b,c){var d,e=false,h=a.col;while(!a.eol()){if((d=a.peek())===b&&!e){f.pop(),g=null,o(h,a.col,c),o(a.col,++a.col,c+"-stopper");return true}e=!e&&d==="\\",a.nextCol()}o(h,a.col,c)}function r(){a.checkStop();if(f.length>0)return f.peek()();var b=a.peek(),c;if(a.lookingAt("/*"))h={line:a.line,c1:a.col},o(a.col,a.col+=2,"mcomment-starter"),f.push(p);else if(b==="\""||b==="'")g={line:a.line,c1:a.col},o(a.col,++a.col,"string-starter"),f.push(q.$C(b,"string"));else if(c=m(b))d.push({line:a.line,col:a.col,type:b}),o(a.col,++a.col,"open-paren");else if(c=n(b)){var i=d.pop();!i||i.type!=c?o(a.col,++a.col,"error"):(i.closed={line:a.line,col:a.col,opened:i},e.push(i),o(a.col,++a.col,"close-paren"))}else(c=a.lookingAt(/^([a-zA-z-]+):/))?(o(a.col,a.col+=c[1].length,"keyword"),o(a.col,++a.col,"operator")):(c=a.lookingAt(/^([0-9.]+)(px|pt|em|ex|in|cm|mm|%)/))?(o(a.col,a.col+=c[1].length,"number"),o(a.col,a.col+=c[2].length,"type")):(c=a.lookingAt(/^(\.[a-zA-Z0-9_:-]+)/))?o(a.col,a.col+=c[1].length,"function-name"):(c=a.lookingAt(/^(#[a-zA-Z0-9_:-]+)/))?o(a.col,a.col+=c[1].length,"constant"):(c=a.lookingAt(/^(@[a-zA-Z0-9_:-]+)/))?o(a.col,a.col+=c[1].length,"builtin"):(c=a.lookingAt(/^(url|none|auto|bold|italic|normal|inherit|print|screen|all)/))?o(a.col,a.col+=c[1].length,"builtin"):o(a.col,++a.col,null)}function s(){if(g)return 0;var b=a.line,c=a.lineText(),e=0;if(h){var f=a.lineText(h.line);e=h.c1+1;if(!/^\s*\*/.test(c)){var i=/[^\s*]/g;i.lastIndex=h.c1+1;var l=i.exec(f);l&&(e=l.index)}return e}var m=d.peek();if(m){var i=new RegExp("^\\s*\\"+k[m.type]),n=i.test(c),o=a.lineText(m.line);i=/\S/g,i.lastIndex=m.col+1;var l=i.exec(o);l?e=n?m.col:l.index:(e=a.lineIndentation(m.line)+j(),n&&(e-=j()))}return e}return c}),DEFINE_SINGLETON("Ymacs_Keymap_CSS",Ymacs_Keymap),Ymacs_Keymap_CSS().defineKeys({ENTER:"newline_and_indent",": && } && )":"c_insert_and_indent"}),Ymacs_Buffer.newMode("css_mode",function(){var a=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"css"}));var b=this.cmd("paren_match_mode",true);this.pushKeymap(Ymacs_Keymap_CSS());return function(){this.setTokenizer(a),b||this.cmd("paren_match_mode",false),this.popKeymap(Ymacs_Keymap_CSS())}}),Ymacs_Tokenizer.define("markdown",function(a,b){var c={next:f,copy:d};function d(){var a=b.context={};function b(){return c}return b}function e(c,d,e){b.onToken(a.line,c,d,e)}function f(){a.checkStop();var c;a.col==0&&(c=a.lookingAt(/^(#+)/))?e(0,a.col=a.lineLength(),"markdown-heading"+c[0].length):a.line>0&&a.col==0&&(c=a.lookingAt(/^[=-]+$/))&&/\S/.test(a.lineText(a.line-1))?(c=c[0].charAt(0)=="="?1:2,c="markdown-heading"+c,b.onToken(a.line-1,0,a.lineLength(a.line-1),c),e(0,a.col=a.lineLength(),c)):a.col==0&&(c=a.lookingAt(/^[>\s]*/))?((c=c[0].replace(/\s+/g,"").length)>3&&(c=""),c="markdown-blockquote"+c,e(0,a.col=a.lineLength(),c)):e(a.col,++a.col,null)}return c}),Ymacs_Buffer.newMode("markdown_mode",function(){var a=this.tokenizer;this.setTokenizer(new Ymacs_Tokenizer({buffer:this,type:"markdown"}));return function(){this.setTokenizer(a)}}) \ No newline at end of file
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.#editorload.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/.#editorload.js
new file mode 120000
index 0000000..76cdbc5
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.#editorload.js
@@ -0,0 +1 @@
+supriya@dragbox.4544:1338183693 \ No newline at end of file
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.#savetext.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/.#savetext.js
new file mode 120000
index 0000000..22b842f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.#savetext.js
@@ -0,0 +1 @@
+supriya@dragbox.2387:1336633521 \ No newline at end of file
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/all-wcprops b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/all-wcprops
new file mode 100644
index 0000000..de6e46b
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/all-wcprops
@@ -0,0 +1,149 @@
+K 25
+svn:wc:ra_dav:version-url
+V 37
+/svn/labcode/!svn/ver/56/Ymacs/src/js
+END
+ymacs-frame.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/labcode/!svn/ver/56/Ymacs/src/js/ymacs-frame.js
+END
+ymacs-regexp.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-regexp.js
+END
+ymacs-mode-js.js
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-mode-js.js
+END
+ymacs-exception.js
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-exception.js
+END
+ymacs-commands-utils.js
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-commands-utils.js
+END
+ymacs-keyboard.js
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-keyboard.js
+END
+ymacs-commands.js
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/labcode/!svn/ver/56/Ymacs/src/js/ymacs-commands.js
+END
+ymacs-keymap-isearch.js
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-keymap-isearch.js
+END
+ymacs.js
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/labcode/!svn/ver/51/Ymacs/src/js/ymacs.js
+END
+gnowmacs.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/labcode/!svn/ver/51/Ymacs/src/js/gnowmacs.js
+END
+ymacs-mode-markdown.js
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-mode-markdown.js
+END
+ymacs-buffer.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-buffer.js
+END
+ymacs-mode-css.js
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-mode-css.js
+END
+ymacs-tokenizer.js
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/labcode/!svn/ver/51/Ymacs/src/js/ymacs-tokenizer.js
+END
+ymacs-keymap-emacs.js
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/labcode/!svn/ver/51/Ymacs/src/js/ymacs-keymap-emacs.js
+END
+ymacs-interactive.js
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-interactive.js
+END
+gnowmoz.html
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/labcode/!svn/ver/2/Ymacs/src/js/gnowmoz.html
+END
+ymacs-marker.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-marker.js
+END
+ymacs-mode-paren-match.js
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-mode-paren-match.js
+END
+ymacs-mode-xml.js
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-mode-xml.js
+END
+ymacs-textprop.js
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-textprop.js
+END
+ymacs-minibuffer.js
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-minibuffer.js
+END
+ymacs-keymap.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-keymap.js
+END
+ymacs-mode-lisp.js
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/labcode/!svn/ver/2/Ymacs/src/js/ymacs-mode-lisp.js
+END
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/entries b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/entries
new file mode 100644
index 0000000..f240c44
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/entries
@@ -0,0 +1,844 @@
+10
+
+dir
+60
+https://svn.gnowledge.org/svn/labcode/Ymacs/src/js
+https://svn.gnowledge.org/svn/labcode
+
+
+
+2011-07-04T13:18:15.544880Z
+56
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15bf0492-30b5-4620-9f24-ebed40bad4e9
+
+ymacs-frame.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+5ed2cc2361ad9c42a97908abb74ebf7e
+2011-07-04T13:18:15.544880Z
+56
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+29678
+
+ymacs-regexp.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+2fce9bea79401ba94d305c4ea70d28c2
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4579
+
+ymacs-mode-js.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+96a16055c49d7c1018e00fc3458bd8e0
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+19781
+
+ymacs-exception.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+6bdf528e2365965debcdd385776b6654
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1778
+
+ymacs-commands-utils.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+1550ac489247bfadb2f82ca481d7ea82
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6924
+
+ymacs-keyboard.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+aafe1644d74cdadfc1981798c831a7d8
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4025
+
+ymacs-commands.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+722253cc4ce0092e0efe74f24fcb0e43
+2011-07-04T13:18:15.544880Z
+56
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+60351
+
+ymacs-keymap-isearch.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+79bc67c8ab57bc84d73900400fb508a7
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8603
+
+ymacs.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+0b839bd5d69a92cbde47c20453bf8215
+2011-06-29T11:25:20.046232Z
+51
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+21453
+
+gnowmacs.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+b499c721fadefaccd92df487619fbb14
+2011-06-29T11:25:20.046232Z
+51
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12608
+
+ymacs-mode-markdown.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+2f403e0c6c30cd6fb80a5e2e928ddf5b
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3741
+
+ymacs-buffer.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+41fbb9ce94f505c47688e6f8a7331613
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+42762
+
+ymacs-mode-css.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+0036f7c58e013e824960b1ce8a973b89
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11214
+
+ymacs-tokenizer.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+78f31630e293e4eaad6dd207ca2621e0
+2011-06-29T11:25:20.046232Z
+51
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12442
+
+ymacs-keymap-emacs.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+f72ee282d04ce2e9b631fbb865e32d6b
+2011-06-29T11:25:20.046232Z
+51
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+14759
+
+ymacs-interactive.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+796e38ee63e912813e326cab98cd2020
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10933
+
+gnowmoz.html
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+aafcff8e156382d178dc64dd5a306515
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11409
+
+ymacs-marker.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+afa98ce75b65cad4757cd6c86c2a5f69
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4050
+
+ymacs-mode-paren-match.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+7d81f6ee6801b386db66f7cfa81eb5e0
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+14679
+
+ymacs-mode-xml.js
+file
+
+
+
+
+2012-01-23T13:07:10.493354Z
+6dcb936c73b5fe24479b065d80de8755
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+20046
+
+ymacs-textprop.js
+file
+
+
+
+
+2012-01-23T13:07:10.497354Z
+a50dd6040857ea0ddc45de8175544fbb
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7437
+
+ymacs-minibuffer.js
+file
+
+
+
+
+2012-01-23T13:07:10.497354Z
+6a9c387990e489ef6ff0ebdbfcb78b68
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+19677
+
+ymacs-keymap.js
+file
+
+
+
+
+2012-01-23T13:07:10.497354Z
+a5e9c330425cf8c639b929076ad9e66e
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6856
+
+ymacs-mode-lisp.js
+file
+
+
+
+
+2012-01-23T13:07:10.497354Z
+9bced0959eba036e3b05cd01010b25ed
+2011-04-12T10:49:38.890806Z
+2
+sndt2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+19965
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/gnowmacs.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/gnowmacs.js.svn-base
new file mode 100644
index 0000000..86945dd
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/gnowmacs.js.svn-base
@@ -0,0 +1,345 @@
+// This file is part of Gnowmacs for GNOWSYS: Gnowledge Networking
+// and Organizing System.
+
+// Gnowmacs is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation; either version 3 of
+// the License, or (at your option) any later version.
+
+// Gnowmacs 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 Affero General Public
+// License along with Gnowmacs (agpl.txt); if not, write to the
+// Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301 USA59 Temple Place, Suite 330,
+
+// Author: Divya <divyas15@gmail.com>
+
+// @require ymacs-tokenizer.js
+
+var arr4;
+Ymacs_Tokenizer.define("org", function(stream, tok){
+
+ var PARSER = {
+ next : next,
+ copy : copy,
+ indentation : indentation
+ };
+
+ var $parens = [];
+ var $passedParens = [];
+ var $cont = [];
+ var $inString = null;
+ var $inComment = null;
+ var $inHeading = null;
+
+ function copy() {
+ var c = resume.context = {
+ parens : $parens.slice(0),
+ passedParens : $passedParens.slice(0),
+ cont : $cont.slice(0),
+ inString : $inString,
+ inComment : $inComment,
+ inHeading : $inHeading
+ };
+ function resume() {
+ $parens = c.parens.slice(0);
+ $passedParens = c.passedParens.slice(0);
+ $cont = c.cont.slice(0);
+ $inString = c.inString;
+ $inComment = c.inComment;
+ $inHeading = c.inHeading;
+ return PARSER;
+ };
+ return resume;
+ };
+
+ function INDENT_LEVEL() {
+ return tok.buffer.getq("indent_level");
+ };
+
+ var OPEN_PAREN = {
+ "(" : ")",
+ "{" : "}",
+ "[" : "]"
+ };
+
+ var CLOSE_PAREN = {
+ ")" : "(",
+ "}" : "{",
+ "]" : "["
+ };
+
+ function isOpenParen(ch) {
+ return OPEN_PAREN[ch];
+ };
+
+ function isCloseParen(ch) {
+ return CLOSE_PAREN[ch];
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function readComment() {
+ var line = stream.lineText(), pos = line.indexOf("*/", stream.col);
+ var m = /^\s*\*+/.exec(line.substr(stream.col));
+ if (m) {
+ foundToken(stream.col, stream.col += m[0].length, "mcomment-starter");
+ }
+ if (pos >= 0) {
+ $cont.pop();
+ $inComment = null;
+ foundToken(stream.col, pos, "mcomment");
+ foundToken(pos, pos += 2, "mcomment-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, "mcomment");
+ stream.col = line.length;
+ }
+ };
+
+ function readString(end, type) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, type);
+ foundToken(stream.col, ++stream.col, type + "-stopper");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ function readHeading(type) {
+ var start = stream.col;
+ while (!stream.eol()) {
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), tmp;
+ if (stream.lookingAt("/*")) {
+ $inComment = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, stream.col += 2, "mcomment-starter");
+ $cont.push(readComment);
+ }
+ else if (ch === '"' || ch === "'") {
+ $inString = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch, "string"));
+ }
+ //to start with org
+ else if ((tmp = stream.lookingAt(/^(\[\[)(.+?)(\]\[)(.+?)(\]\])/))) {
+ foundToken(stream.col, stream.col += tmp[2].length+4, "org-link-url");
+ var url = tmp[2];
+ foundToken(stream.col, stream.col += (tmp[4].length+1), "org-link-text");
+ window.open(url);
+ foundToken(stream.col, stream.col += 1, "org-link-close");
+
+
+ }
+ else if ((tmp = stream.lookingAt(/^(\*.+?\*)/))) {
+ if (tmp[1].substring(1,2) === " " || tmp[1].substring(tmp[1].length-2, tmp[1].length-1) === " ")
+ {foundToken(stream.col, stream.col += tmp[1].length, null);}
+ else{
+ foundToken(stream.col, stream.col += tmp[1].length, "org-bold");
+ }
+ }
+ else if ((tmp = stream.lookingAt(/^(\/.+?\/)/))) {
+ if (tmp[1].substring(1,2) === " " || tmp[1].substring(tmp[1].length-2, tmp[1].length-1) === " ")
+ {foundToken(stream.col, stream.col += tmp[1].length, null);}
+ else{
+ foundToken(stream.col, stream.col += tmp[1].length, "org-italic");
+ }
+ }
+ else if ((tmp = stream.lookingAt(/^(_.+?_)/))) {
+ if (tmp[1].substring(1,2) === " " || tmp[1].substring(tmp[1].length-2, tmp[1].length-1) === " ")
+ {foundToken(stream.col, stream.col += tmp[1].length, null);}
+ else{
+ foundToken(stream.col, stream.col += tmp[1].length, "org-underline");
+ }
+ }
+ else if ((tmp = stream.lookingAt(/^(\+.+?\+)/))) {
+ if (tmp[1].substring(1,2) === " " || tmp[1].substring(tmp[1].length-2, tmp[1].length-1) === " ")
+ {foundToken(stream.col, stream.col += tmp[1].length, null);}
+ else{
+ foundToken(stream.col, stream.col += tmp[1].length, "org-strike");
+ }
+ }
+
+ else if ((tmp = stream.lookingAt(/^(\*+\s+)/))) {
+ if (stream.col == 0){
+ var headtype = "org-heading" + (tmp[1].length -1);
+ foundToken(stream.col, stream.col += tmp[1].length, headtype);
+ readHeading(headtype);
+ }
+ }
+
+
+ //to end with org
+
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+
+
+
+ function indentation() {
+ // no indentation for continued strings
+ if ($inString)
+ return 0;
+
+ var row = stream.line;
+ var currentLine = stream.lineText();
+ var indent = 0;
+
+ if ($inComment) {
+ var commentStartLine = stream.lineText($inComment.line);
+ indent = $inComment.c1 + 1;
+ if (!/^\s*\*/.test(currentLine)) {
+ // align with the first non-whitespace and non-asterisk character in the comment
+ var re = /[^\s*]/g;
+ re.lastIndex = $inComment.c1 + 1;
+ var m = re.exec(commentStartLine);
+ if (m)
+ indent = m.index;
+ }
+ return indent;
+ }
+
+ var p = $parens.peek();
+ if (p) {
+ // check if the current line closes the paren
+ var re = new RegExp("^\\s*\\" + OPEN_PAREN[p.type]);
+ var thisLineCloses = re.test(currentLine);
+
+ // Check if there is text after the opening paren. If so, indent to that column.
+ var line = stream.lineText(p.line);
+ re = /\S/g;
+ re.lastIndex = p.col + 1;
+ var m = re.exec(line);
+ if (m) {
+ // but if this line closes the paren, better use the column of the open paren
+ indent = thisLineCloses ? p.col : m.index;
+ }
+ else {
+ // Otherwise we should indent to one level more than the indentation of the line
+ // containing the opening paren.
+ indent = stream.lineIndentation(p.line) + INDENT_LEVEL();
+
+ // but if this line closes the paren, then back one level
+ if (thisLineCloses)
+ indent -= INDENT_LEVEL();
+ }
+ }
+
+ return indent;
+ };
+
+ return PARSER;
+
+});
+
+DEFINE_SINGLETON("Ymacs_Keymap_Org", Ymacs_Keymap);
+Ymacs_Keymap_Org().defineKeys({
+ "ENTER" : "newline_and_indent",
+ ": && } && )" : "c_insert_and_indent"
+});
+
+Ymacs_Buffer.newMode("org_mode", function(){
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "org" }));
+ var was_paren_match = this.cmd("paren_match_mode", true);
+ this.pushKeymap(Ymacs_Keymap_Org());
+
+ return function() {
+ this.setTokenizer(tok);
+ if (!was_paren_match)
+ this.cmd("paren_match_mode", false);
+ this.popKeymap(Ymacs_Keymap_Org());
+ };
+});
+
+
+Ymacs_Buffer.newCommands({
+
+ org_insert_heading: Ymacs_Interactive(function() {
+ this.cmd("beginning_of_line");
+ this.cmd("insert", "* ");
+ }),
+
+ org_bold: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "*");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "*");
+ }),
+
+ org_italic: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "/");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "/");
+ }),
+
+ org_underline: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "_");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "_");
+ }),
+
+ org_strike: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "+");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "+");
+ }),
+
+ org_file: Ymacs_Interactive("f", function() {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "+");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "+");
+ }),
+ org_link: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "[[");
+ this.cmd("goto_char", end+2);
+ this.cmd("insert", "]]");
+ }),
+ org_table_create: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "|");
+ this.cmd("insert"," ");
+ //this.cmd("goto_char", end+1);
+ //this.cmd("insert", "|");
+ })
+
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/gnowmoz.html.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/gnowmoz.html.svn-base
new file mode 100644
index 0000000..7873887
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/gnowmoz.html.svn-base
@@ -0,0 +1,276 @@
+<!DOCTYPE html>
+<!--
+#**** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License
+# Version 1.1 (the "License"); you may not use this file except in
+# compliance with the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+# License for the specific language governing rights and limitations
+# under the License.
+#
+# The Original Code is MozGnowser code.
+#
+# The Initial Developer of the Original Code is Jayakrishnan B Nair
+# Portions created by the Initial Developer are Copyright (C) 2009-2010.
+# All Rights Reserved.
+#
+# Contributor(s):
+# Jayakrishnan B Nair <jayakrishnan.bk.nair@gmail.com>
+# Sai Srivatsan R Iyengar
+# Ridima Borkar
+# Foram Dalal
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+#**** END LICENSE BLOCK *****
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
+<head>
+<!--<link type="text/css" href="chrome://gnowmoz/content/css/ui-darkness/jquery-ui-1.8rc3.custom.css" rel="stylesheet" />-->
+<link type="text/css" href="chrome://gnowmoz/content/css/cupertino/jquery-ui-1.8rc3.custom.css" rel="stylesheet" />
+<!--<link type="text/css" rel="stylesheet" href="http://jqueryui.com/themes/base/ui.all.css" />-->
+<script type="text/javascript" src="chrome://gnowmoz/content/js/json2.js"></script>
+<script type="text/javascript" src="chrome://gnowmoz/content/js/jquery.js"></script>
+<script type="text/javascript" src="chrome://gnowmoz/content/js/jquery-ui.js"></script>
+<script type="text/javascript" src="chrome://gnowmoz/content/js/jquery.qtip.min.js"></script>
+<script type="text/javascript" src="chrome://gnowmoz/content/js/jquery.jsonviewer.js"></script>
+<!--<script type="text/javascript" src="http://jqueryui.com/themeroller/themeswitchertool/"></script>-->
+
+<script type="text/javascript" src="chrome://gnowmoz/content/js/jquery.hotkeys.js"></script>
+<script type="text/javascript" src="chrome://gnowmoz/content/js/gnowmoz.js"></script>
+
+</head>
+<body onLoad="dologin()">
+
+ <!-- HEADER WITH SEARCH BOX -->
+<div id="layout-header" style="display:none">
+ <div id="page-header" style="padding:5px;height:30px;background:#deedf7" class="ui-corner-all">
+ <div style="float:left;width:20%;font-weight:bold">MozGnowser</div>
+ <button style="float:left;width:10%" id="help">HELP TIPS</button>
+ <button style="float:left;" id="gnowql-shell-link" onClick="gnowqlShell()" > GnowQL SHELL </button>
+ <div style="float:left" id="themes" ></div>
+ <button style="float:right;" id="SEARCH" class="ui-widget-content" onClick="GnowqlSearch()">SEARCH</button>
+ <input type="text" style="float:right;font-size:18px" class="ui-widget-content ui-corner-all autocomplete"
+ id="search-value" value="" >
+ <select style="float:right;font-size:18px" id="search-type" class="ui-widget ui-widget-content ui-corner-all ">
+ <option value="All">ALL</option>
+ <option value="gbobjects">Object</option>
+ <option value="gbobjecttypes">Objecttype</option>
+ <option value="gbrelations">Relation</option>
+ <option value="gbrelationtypes">Relationtype</option>
+ <option value="gbattributes">Attribute</option>
+ <option value="gbattributetypes">Attributetype</option>
+ <option value="gbmetatypes">Metatype</option>
+ <option value="gbusers">User</option>
+ <option value="gbusertypes">Usertype</option>
+ <option value="gbprocess">Process</option>
+ <option value="gbprocesstypes">Processtype</option>
+ </select>
+
+ </div>
+<div id="search-loading"></div>
+</div>
+
+
+
+<div id="startup-info" style="display:none" class="ui-widget">
+<pre>
+ Welcome to MozGnowser
+
+ Searching the Gnowsys DB can be done using the
+ search box on the top right of the page.
+ The appropriate item of choice can be selected from the list.
+ The NBH-SVG tab will give a digramatic representation
+ of the item selected.
+ The NBH-INFO tab will give u textual representation
+ of the node's neighbourhood.
+
+ Various Key Shortcuts are available :
+ (do not press down the buttons continously and make sure to
+ have clicked outside the SVG image before using the shortcuts)
+ 1) Ctrl + z : Zoom In for the SVG image
+ 2) Ctrl + x : Zoom Out for the SVG image
+ 3) Ctrl + arrowkeys will help u pan the image as per requirement
+
+</pre>
+</div>
+
+<div id="search-tip" style="display:none">
+<pre>
+ Search Box :
+ You can search the title from the Gnowsys DB.
+ You can use "ssid:" without the quotes to
+ make a specific search example: "ssid:108"
+</pre>
+</div>
+
+
+<div id="result-table" style="width:100%;display:none">
+
+ <div id="result-border" style="width:79%;height:100%;border:4px #00FFFF solid;float:left">
+
+ <div id="add" style="width:100%:z-index:1000">
+ <h3><a href="#">Add</a></h3>
+ <div id="nbh-add" style="height:20%">
+ <ul>
+ <li><a href="#atabs-1" id="addrel">RELATIONS</a></li>
+ <li><a href="#atabs-2" id="addatt">ATTRIBUTES</a></li>
+ <li><a href="#atabs-3" id="adddep">DEPENDSON</a></li>
+ </ul>
+ <div id="atabs-1" >
+ <input type="text" id="nbh-add-nid-rel" style="width:30%;float:left;"
+ class="ui-widget-content ui-corner-all autocomplete"></input>
+ <select id="nbh-add-select-rel" class="text ui-widget-content " style="width:30%;float:left"></select>
+ <input type="text" id="nbh-add-text-rel" class="ui-widget-content ui-corner-all autocomplete"
+ style="width:30%;float:left"></input>
+ <input type="button" id="nbh-add-submit-rel" class="ui-widget-content ui-corner-all" value="Submit"
+ onclick='if(document.getElementById("nbh-add-text-rel").value!="")add("rel");'></input>
+ </div>
+ <div id="atabs-2">
+ <input type="text" id="nbh-add-nid-att" style="width:30%;float:left;"
+ class="ui-widget-content ui-corner-all autocomplete"></input>
+ <select id="nbh-add-select-att" class="text ui-widget-content" style="width:30%;float:left"></select>
+ <input type="text" id="nbh-add-text-att" class="text ui-widget-content ui-corner-all autocomplete"
+ style="width:30%;float:left"></input>
+ <input type="button" id="nbh-add-submit-att" class="text ui-widget-content ui-corner-all"
+ value="Submit" onclick='if(document.getElementById("nbh-add-text-att").value!="")add("att")'></input>
+ </div>
+
+ <div id="atabs-3">
+ <input type="text" id="nbh-add-nid-dep" style="width:30%;float:left;"
+ class="ui-widget-content ui-corner-all autocomplete"></input>
+ <select id="nbh-add-select-dep" class="text ui-widget-content" style="width:30%;float:left"></select>
+ <input type="text" id="nbh-add-text-dep" class="text ui-widget-content ui-corner-all autocomplete"
+ style="width:30%;float:left"></input>
+ <input type="button" id="nbh-add-submit-dep" class="text ui-widget-content ui-corner-all"
+ value="Submit" onclick='if(document.getElementById("nbh-add-text-dep").value!="")add("dep")'></input>
+ </div>
+
+ </div>
+ </div>
+
+
+ <div id="nbh-resultinfo" style="width:100%">
+ <ul>
+ <li><a href="#tabs-1" >NBH-SVG</a></li>
+ <li><a href="#tabs-2" >NBH-INFO</a></li>
+ </ul>
+ <div id="tabs-1">
+ <div id="nbh-svg" style="height:100%;width:100%"></div>
+ </div>
+ <div id="tabs-2">
+ <div id="nbh-info" style="height:100%;width:100%" ></div>
+ </div>
+ </div>
+ </div>
+
+ <div id="result-area" class="text" style="width:19.5%;float:right;border:4px #00FFFF solid;overflow:auto" ></div>
+
+</div>
+
+
+
+<!-- LOGIN FORM DIALOG-->
+<div id="login-form" title="Dialog Title" style="display:none" title="Login Form">
+ <p >All form fields are required.</p>
+
+
+ <table style="width:100%" align="left">
+ <tr>
+ <td><label for="name" >Name</label></td>
+ <td><input type="text" name="name" id="login" value="" class="text ui-widget-content ui-corner-all logintext"
+ style="width:100%"></td>
+ </tr>
+
+ <tr>
+ <td><label for="password" >Password</label></td>
+ <td><input type="password" name="password" id="pass" value="" style="width:100%"
+ class="text ui-widget-content ui-corner-all logintext"></td>
+ </tr>
+
+ <tr>
+ <td><label for="text" >GnowQL URL</label></td>
+ <td><input type="text" name="url" id="url" value="http://sandboxat.gnowledge.org/gnowql"
+ style="width:100%" class="text ui-widget-content ui-corner-all logintext"></td>
+ </tr>
+ </table>
+ <table style="width:100%">
+ <tr>
+ <td>
+ <div id="proxy" style="width:100%">
+ <h3><a href="#">Proxy Settings : Click To Enable</a></h3>
+ <div>
+ <table>
+ <tr>
+ <td><label style="float:left">Proxy URL</label></td>
+ <td><input type="text" name="url" id="proxy-url" value=""
+ style="width:100%" class="text ui-widget-content ui-corner-all logintext"> </td>
+ </tr>
+ <tr>
+ <td><label style="float:left">Proxy Port</label></td>
+ <td><input type="text" name="url" id="proxy-port" value="0"
+ style="width:100%" class="text ui-widget-content ui-corner-all logintext"></td>
+ </tr>
+ <tr>
+ <td><label >Proxy Username</label></td>
+ <td><input type="text" name="url" id="proxy-username" value=""
+ style="width:100%" class="text ui-widget-content ui-corner-all logintext"></td>
+ </tr>
+ <tr>
+ <td><label >Proxy Password</label></td>
+ <td><input type="password" name="url" id="proxy-password" value=""
+ style="width:100%" class="text ui-widget-content ui-corner-all logintext"></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ <table>
+ </table>
+ <tr>
+ <td></td>
+ <td colspan=2><div id="login-error" style="color:black;visibility:hidden">LOGIN ERROR !!!</div></td>
+ </tr>
+ </table>
+
+
+ </div>
+
+<!-- ADD Options -->
+<div id="add-options" title="Choice" style="display:none" title="Multiple Choice">
+ <p class="validateTips">Please Select your Choice!!!</p>
+ </div>
+
+<!--GnowQL Shell-->
+
+
+<div id="gnowql-shell" title="GnowQL SHELL" style="display:none" >
+ <label>Type HERE : </label>
+ <input type="text" id="gnowql-shell-text" value="" style="width:100%;height:50px;font-weight:bold;font-size:30px"
+ class="text ui-widget-content ui-corner-all">
+ <label> Result (JSON string) : </label><br />
+ <textarea id="gnowql-shell-box" cols="130" rows="20" style:"float:left"></textarea>
+ <br />
+<div style="overflow:auto">
+<div id="gnowql-shell-tree"></div>
+</div>
+ </div>
+
+</body>
+</html>
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-buffer.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-buffer.js.svn-base
new file mode 100644
index 0000000..ba6303e
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-buffer.js.svn-base
@@ -0,0 +1,1079 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-interactive.js
+
+DEFINE_CLASS("Ymacs_Buffer", DlEventProxy, function(D, P){
+
+ D.DEFAULT_EVENTS = [
+ "onLineChange",
+ "onInsertLine",
+ "onDeleteLine",
+ "onPointChange",
+ "onResetCode",
+ "onMessage",
+ "onOverwriteMode",
+ "onOverlayChange",
+ "onOverlayDelete",
+ "beforeInteractiveCommand",
+ "afterInteractiveCommand",
+ "beforeRedraw",
+ "afterRedraw",
+ "finishedEvent",
+ "onProgressChange",
+ "onTextInsert",
+ "onTextDelete"
+ ];
+
+ D.DEFAULT_ARGS = {
+ name : [ "name" , "*scratch*" ],
+ _code : [ "code" , null ],
+ ymacs : [ "ymacs" , null ],
+ tokenizer : [ "tokenizer" , null ],
+ isMinibuffer : [ "isMinibuffer" , false ]
+ };
+
+ var GLOBAL_VARS = {
+ case_fold_search : true,
+ line_movement_requested_col : 0,
+ fill_column : 78,
+ tab_width : 8,
+ indent_level : 8,
+
+ // syntax variables
+ syntax_word : { test: TEST_UNICODE_WORD_CHAR },
+ syntax_word_dabbrev : { test: TEST_DABBREV_WORD_CHAR },
+ syntax_paragraph_sep : /\n\s*\n/g
+ };
+
+ function setq(key, val) {
+ if (typeof key == "string") {
+ if (val === undefined)
+ delete this[key];
+ else
+ this[key] = val;
+ if (val instanceof Function)
+ val.ymacsCommand = key;
+ return val;
+ } else {
+ var changed = {};
+ for (var i in key) {
+ changed[i] = this[i];
+ setq.call(this, i, key[i]);
+ }
+ return changed;
+ }
+ };
+
+ var MAX_UNDO_RECORDS = 50000; // XXX: should we not limit?
+
+ function MRK(x) {
+ return x instanceof Ymacs_Marker ? x.getPosition() : x;
+ };
+
+ function TEST_UNICODE_WORD_CHAR(c) {
+ if (c) {
+ var code = c.charCodeAt(0);
+ return (code >= 48 && code <= 57) || c.toUpperCase() != c.toLowerCase();
+ }
+ };
+
+ function TEST_DABBREV_WORD_CHAR(c) {
+ if (c) {
+ var code = c.charCodeAt(0);
+ return (code >= 48 && code <= 57) || c == "_" || c.toUpperCase() != c.toLowerCase();
+ }
+ };
+
+ P.lastIndexOfRegexp = function(str, re, caret, bound) {
+ str = str.substring(0, caret);
+ re = Ymacs_Regexp.search_backward(re);
+ re.lastIndex = bound || 0;
+ var m = re.exec(str);
+ if (m) {
+ var a = Array.$(m, 2);
+ a.index = m.index + m[1].length;
+ a.after = m.index + m[0].length;
+ a[0] = str.substring(a.index, a.after);
+ this.matchData = a;
+ return a;
+ }
+ };
+
+ D.COMMANDS = P.COMMANDS = {};
+
+ D.newCommands = P.newCommands = function() {
+ return setq.apply(this.COMMANDS, arguments);
+ };
+
+ D.newMode = P.newMode = function(name, activate) {
+ var modevar = "*" + name + "*", hookvar = modevar + "hooks";
+ D.setGlobal(hookvar, []);
+ this.COMMANDS[name] = Ymacs_Interactive("P", function(force){
+ var status = this.getq(modevar);
+ if (status) {
+ // currently active
+ if (force !== true) {
+ // deactivate
+ this.getq(hookvar).foreach(function(hook){
+ hook.call(this, false);
+ }, this);
+ if (status instanceof Function) {
+ // clean-up
+ status.call(this);
+ }
+ this.setq(modevar, null);
+ this.modes.remove(name);
+ }
+ }
+ else {
+ // inactive
+ if (force !== false) {
+ var off = activate.apply(this, arguments);
+ if (!(off instanceof Function))
+ off = true;
+ this.setq(modevar, off);
+ this.modes.push(name);
+ this.getq(hookvar).foreach(function(hook){
+ hook.call(this, true);
+ }, this);
+ }
+ }
+ return status;
+ });
+ };
+
+ D.addModeHook = P.addModeHook = function(name, func) {
+ if (typeof func == "string")
+ func = this.COMMANDS[func];
+ var hookvar = "*" + name + "*hooks";
+ this.getq(hookvar).pushUnique(func);
+ };
+
+ D.removeModeHook = P.removeModeHook = function(name, func) {
+ if (typeof func == "string")
+ func = this.COMMANDS[func];
+ var hookvar = "*" + name + "*hooks";
+ this.getq(hookvar).remove(func);
+ };
+
+ D.FIXARGS = function(args) {
+ if (args.code == null)
+ args.code = "";
+ };
+
+ D.CONSTRUCT = function() {
+ this.__savingExcursion = 0;
+ this.__preventUpdates = 0;
+ this.__preventUndo = 0;
+ this.__undoInProgress = 0;
+ this.__dirtyLines = [];
+ this.__undoQueue = [];
+ this.__redoQueue = [];
+ this.__overlays = {};
+
+ this.markers = [];
+ this.caretMarker = this.createMarker(0, false, "point");
+ this.markMarker = this.createMarker(0, true, "mark");
+ this.matchData = [];
+ this.previousCommand = null;
+ this.currentCommand = null;
+ this.currentKeys = [];
+ this.progress = {};
+
+ this.variables = {};
+ this.globalVariables = GLOBAL_VARS;
+ this.modes = [];
+
+ this.caretMarker.onChange.push(function(pos) {
+ this._rowcol = this.caretMarker.getRowCol();
+ // XXX: this shouldn't be needed
+ if (this.__preventUpdates == 0) {
+ this.callHooks("onPointChange", this._rowcol, this.point());
+ }
+ });
+
+ this._tokenizerEvents = {
+ "onFoundToken": this._on_tokenizerFoundToken.$(this)
+ };
+
+ this._textProperties = new Ymacs_Text_Properties({ buffer: this });
+ this._textProperties.addEventListener("onChange", this._on_textPropertiesChange.$(this));
+
+ this.keymap = [];
+ this.pushKeymap(this.makeDefaultKeymap());
+ this.setCode(this._code);
+ this._lastCommandWasKill = 0;
+ delete this["_code"];
+ };
+
+ /* -----[ dynamic variables ]----- */
+
+ // Who said dynamic scope is bad? Ever since I'm using Lisp I
+ // started considering them one of the most valuable features.
+ // Everybody is using dynamic scope.
+ //
+ // Since we don't have real dynamic scope in JS, we store the
+ // values in a hash and using the withVariables method we can
+ // assign temporary values to them and execute a function.
+
+ P.withVariables = function(vars, cont) {
+ var saved = {}, i, ret;
+ for (i in vars) {
+ saved[i] = this.variables[i];
+ this.variables[i] = vars[i];
+ }
+ try {
+ if (cont instanceof Function)
+ return cont.apply(this, Array.$(arguments, 2));
+ else
+ return this.cmdApply(cont, Array.$(arguments, 2));
+ } finally {
+ for (i in saved) {
+ if (saved[i] === undefined)
+ delete this.variables[i];
+ else
+ this.variables[i] = saved[i];
+ }
+ }
+ };
+
+ P.withCommands = function(cmds, cont) {
+ var saved = this.COMMANDS;
+ this.COMMANDS = Object.makeCopy(saved);
+ Object.merge(this.COMMANDS, cmds);
+ try {
+ if (cont instanceof Function)
+ return cont.apply(this, Array.$(arguments, 2));
+ else
+ return this.cmdApply(cont, Array.$(arguments, 2));
+ } finally {
+ this.COMMANDS = saved;
+ }
+ };
+
+ P.getVariable = function(key) {
+ return (key in this.variables)
+ ? this.variables[key]
+ : GLOBAL_VARS[key];
+ };
+
+ P.setVariable = function() {
+ return setq.apply(this.variables, arguments);
+ };
+
+ D.setq = D.setVariable = D.setGlobal = P.setGlobal = function() {
+ return setq.apply(GLOBAL_VARS, arguments);
+ };
+
+ P.setq = P.setVariable;
+ P.getq = P.getVariable;
+ D.getq = D.getVariable = function(key) {
+ return GLOBAL_VARS[key];
+ };
+
+ /* -----[ public API ]----- */
+
+ P.pushKeymap = function(keymap) {
+ if (keymap instanceof Array) {
+ keymap.foreach(this.pushKeymap, this);
+ } else {
+ this.popKeymap(keymap);
+ this.keymap.push(keymap);
+ keymap.attached(this);
+ }
+ };
+
+ P.popKeymap = function(keymap) {
+ this.keymap.remove(keymap);
+ keymap.detached(this);
+ };
+
+ P.makeDefaultKeymap = function() {
+ return Ymacs_Keymap_Emacs();
+ };
+
+ P.signalError = function(text, html, timeout) {
+ this.callHooks("onMessage", "error", text, html, timeout);
+ };
+
+ P.signalInfo = function(text, html, timeout) {
+ this.callHooks("onMessage", "info", text, html, timeout);
+ };
+
+ P.createMarker = function(pos, before, name) {
+ if (pos == null)
+ pos = this.point();
+ return new Ymacs_Marker({ editor: this, pos: pos, name: name, before: before });
+ };
+
+ P.point = function() {
+ return this.caretMarker.getPosition();
+ };
+
+ P.setCode = function(code) {
+ // this.__code = code = code.replace(/\t/g, " ".x(this.getq("tab_width")));
+ this.__code = code;
+ this.__size = code.length;
+ this.__undoQueue = [];
+ this.__redoQueue = [];
+ this.__overlays = {};
+ this.markers.map("setPosition", 0, true, true);
+ this.code = code.split(/\n/);
+ this._textProperties.reset();
+ if (this.tokenizer) {
+ this.tokenizer.reset();
+ }
+ this.callHooks("onResetCode", this.code);
+ this.caretMarker.setPosition(0, false, true);
+ this.markMarker.setPosition(0, true);
+ };
+
+ P.setTokenizer = function(tok) {
+ if (this.tokenizer != null) {
+ this.tokenizer.removeEventListener(this._tokenizerEvents);
+ }
+ this.tokenizer = tok;
+ if (tok) {
+ tok.addEventListener(this._tokenizerEvents);
+ } else {
+ this._textProperties.reset();
+ this.callHooks("onResetCode", this.code);
+ }
+ };
+
+ P.getCode = function() {
+ return this.__code || (this.__code = this.code.join("\n"));
+ };
+
+ P.getCodeSize = function() {
+ if (this.__size)
+ return this.__size;
+ var i = this.code.length, size = i > 0 ? -1 : 0;
+ while (--i >= 0)
+ size += this.code[i].length + 1;
+ return this.__size = size;
+ };
+
+ P.getLine = function(row) {
+ if (row == null)
+ row = this._rowcol.row;
+ return this.code[row];
+ };
+
+ P.charAtRowCol = function(row, col) {
+ var n = this.code.length;
+ if (row >= n--)
+ return null;
+ var line = this.code[row];
+ if (col == line.length)
+ return row == n && line.charAt(col) || "\n";
+ return line.charAt(col);
+ };
+
+ P.charAt = function(point) {
+ if (point == null)
+ point = this.point();
+ else {
+ point = MRK(point);
+ if (point < 0)
+ point += this.point();
+ }
+ var rc = this._positionToRowCol(point);
+ return this.charAtRowCol(rc.row, rc.col);
+ };
+
+ P.callInteractively = function(func, args, finalArgs) {
+ if (!args)
+ args = []; // make IE happy
+ var cmd;
+ if (!(func instanceof Function)) {
+ cmd = func;
+ func = this.COMMANDS[func];
+ } else {
+ cmd = func.ymacsCommand || null;
+ }
+ if (func.ymacsCallInteractively && !finalArgs) {
+ // after prompting for eventual
+ // arguments, ymacsCallInteractively
+ // will actually call back again
+ // buffer's callInteractively, so we
+ // should STOP here.
+ return func.ymacsCallInteractively.apply(this, args);
+ }
+ this.currentCommand = cmd;
+ // the amount of brain twisting to get
+ // this right is incredible. :-( I give up.
+ if (cmd != "undo") {
+ this.__undoQueue = this.__undoQueue.concat(this.__redoQueue);
+ this.__redoQueue = [];
+ }
+ if (this.previousCommand != cmd) {
+ this.sameCommandCount(0);
+ if (cmd != "undo") {
+ this._placeUndoBoundary();
+ }
+ } else if (cmd != "self_insert_command" || this.sameCommandCount() % 20 == 0) {
+ if (cmd != "undo") {
+ this._placeUndoBoundary();
+ }
+ }
+ this.preventUpdates();
+ try {
+ this.callHooks("beforeInteractiveCommand", cmd, func);
+ if (!func.ymacsMarkExtend)
+ this.clearTransientMark();
+ return func.apply(this, args);
+ } catch(ex) {
+ if (ex instanceof Ymacs_Exception) {
+ this.signalError(ex.message);
+ } else {
+ throw ex;
+ }
+ } finally {
+ this.resumeUpdates();
+ this.callHooks("afterInteractiveCommand", cmd, func);
+ this.previousCommand = cmd;
+ this.sameCommandCount(+1);
+ }
+ };
+
+ P.resetOverwriteMode = function(om) {
+ if (arguments.length == 0)
+ om = this.overwriteMode;
+ this.callHooks("onOverwriteMode", this.overwriteMode = !om);
+ this.signalInfo(om ? "Insert mode" : "Overwrite mode");
+ };
+
+ P.getMinibuffer = function() {
+ return this.whenYmacs(function(ymacs) { return ymacs.minibuffer; });
+ };
+
+ P.getMinibufferFrame = function() {
+ return this.whenYmacs(function(ymacs) { return ymacs.minibuffer_frame; });
+ };
+
+ P.setMinibuffer = function(text) {
+ this.whenMinibuffer(function(mb){
+ mb.setCode(text);
+ mb.cmd("end_of_buffer");
+ });
+ };
+
+ P.cmd = function(cmd) {
+ return this.COMMANDS[cmd].apply(this, Array.$(arguments, 1));
+ };
+
+ P.cmdApply = function(cmd, args) {
+ return this.COMMANDS[cmd].apply(this, args);
+ };
+
+ P.createDialog = function(args) {
+ if (!args.parent) {
+ args.parent = this.getActiveFrame() && this.getActiveFrame().getParentDialog();
+ if (!("noShadows" in args)) {
+ args.noShadows = true;
+ }
+ }
+ var dlg = new DlDialog(args);
+ this.whenActiveFrame(function(frame){
+ dlg.addEventListener("onDestroy", frame.focus.clearingTimeout(0, frame));
+ });
+ return dlg;
+ };
+
+ P.getActiveFrame = function() {
+ return this.whenYmacs("getActiveFrame");
+ };
+
+ // This function receives a string and a continuation. If
+ // there is an object property or variable named $what, then
+ // $cont is called in the context of this object and given the
+ // value of $what as first argument. The returned value is
+ // passed back to caller.
+ //
+ // The continuation can also be a string, in which case it's
+ // assumed to be a method in the value of $what, thus called
+ // on it.
+ //
+ // This is a bit messy, but should work well as long as we
+ // don't use the same name for both an object property and a
+ // variable in this.variables. Otherwise, the property takes
+ // precedence.
+ P.when = function(what, cont) {
+ what = this[what] || this.getq(what);
+ if (what != null) {
+ if (cont instanceof Function)
+ return cont.call(this, what);
+ else {
+ return what[cont].apply(what, Array.$(arguments, 2));
+ }
+ }
+ };
+
+ // XXX: this is way too ugly.
+ P.whenActiveFrame = function() {
+ var fr = this.getActiveFrame(); // miserable hack
+ if (fr.buffer === this) {
+ this.activeFrame = fr;
+ var a = Array.$(arguments);
+ a.unshift("activeFrame");
+ return this.when.apply(this, a);
+ } else {
+ this.activeFrame = null;
+ }
+ };
+
+ P.forAllFrames = function(cont) {
+ this.ymacs.getBufferFrames(this).foreach(cont);
+ };
+
+ P.whenYmacs = function() {
+ var a = Array.$(arguments);
+ a.unshift("ymacs");
+ return this.when.apply(this, a);
+ };
+
+ P.whenMinibuffer = function(cont) {
+ // In fact, we should move when() into some base
+ // object... but which one? JS doesn't have multiple
+ // inheritance, though we could easily "invent" it.
+ return this.whenYmacs(function(ymacs){
+ if (ymacs.minibuffer)
+ return cont.call(this, ymacs.minibuffer);
+ });
+ };
+
+ P.preventUpdates = function() {
+ ++this.__preventUpdates;
+ };
+
+ P.resumeUpdates = function() {
+ if ((this.__preventUpdates = Math.max(this.__preventUpdates - 1, 0)) == 0) {
+ this.redrawDirtyLines();
+ }
+ };
+
+ P.getRegion = function(begin, end) {
+ if (begin == null) begin = this.caretMarker;
+ if (end == null) end = this.markMarker;
+ begin = MRK(begin);
+ end = MRK(end);
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ return { begin: begin, end: end };
+ };
+
+ P.redrawDirtyLines = function() {
+ this.callHooks("beforeRedraw");
+ this.__dirtyLines.foreach(function(draw, row){
+ if (draw) {
+ this.callHooks("onLineChange", row);
+ }
+ }, this);
+ this.__dirtyLines = [];
+ this.callHooks("afterRedraw");
+ };
+
+ P.getOverlays = function() {
+ return this.__overlays;
+ };
+
+ P.getOverlay = function(name) {
+ return this.__overlays[name];
+ };
+
+ P.setOverlay = function(name, props) {
+ var ov = this.__overlays[name], isNew = !ov, tmp;
+ if (isNew)
+ ov = this.__overlays[name] = props;
+ else
+ Object.merge(ov, props);
+ // normalize line/col
+ if (ov.line2 < ov.line1) {
+ tmp = ov.line2; ov.line2 = ov.line1; ov.line1 = tmp;
+ tmp = ov.col2; ov.col2 = ov.col1; ov.col1 = tmp;
+ }
+ else if (ov.line2 == ov.line1 && ov.col2 < ov.col1) {
+ tmp = ov.col2; ov.col2 = ov.col1; ov.col1 = tmp;
+ }
+ this.callHooks("onOverlayChange", name, ov, isNew);
+ };
+
+ P.deleteOverlay = function(name) {
+ delete this.__overlays[name];
+ this.callHooks("onOverlayDelete", name);
+ };
+
+ P.ensureTransientMark = function() {
+ var rc = this._rowcol, tm;
+ if (!this.transientMarker) {
+ this.transientMarker = this.createMarker();
+ this.markMarker.setPosition(this.point());
+ tm = rc;
+ }
+ if (!tm)
+ tm = this.transientMarker.getRowCol();
+ this.setOverlay("selection", {
+ line1 : tm.row,
+ col1 : tm.col,
+ line2 : rc.row,
+ col2 : rc.col
+ });
+ };
+
+ P.clearTransientMark = function() {
+ if (this.transientMarker) {
+ this.transientMarker.destroy();
+ this.transientMarker = null;
+ this.deleteOverlay("selection");
+ }
+ };
+
+ P.deleteTransientRegion = function() {
+ if (this.transientMarker) {
+ this._deleteText(this.caretMarker, this.transientMarker);
+ this.clearTransientMark();
+ this._placeUndoBoundary();
+ return true;
+ }
+ };
+
+ var $sameCommandCount = 0;
+ P.sameCommandCount = function(diff) {
+ if (diff == null)
+ return $sameCommandCount;
+ return $sameCommandCount += diff;
+ };
+
+ var $lastKeyEvent;
+ P.interactiveEvent = function(ev) {
+ if (arguments.length == 0)
+ return $lastKeyEvent;
+ return $lastKeyEvent = ev;
+ };
+
+ P.getPrefixArg = function(noDiscard) {
+ var ret = this.getq("universal_prefix");
+ if (!noDiscard) {
+ this.setq("universal_prefix", undefined);
+ if (!this.isMinibuffer)
+ this.setMinibuffer("");
+ }
+ return ret;
+ };
+
+ P.setPrefixArg = function(val) {
+ return this.setq("universal_prefix", val);
+ };
+
+ P.updateProgress = function(name, val) {
+ if (val == null)
+ delete this.progress[name];
+ else
+ this.progress[name] = val;
+ this.callHooks("onProgressChange");
+ };
+
+ P.renderModelineContent = function(rc) {
+ var ml = String.buffer("-- <b>", this.name.htmlEscape(), "</b> (", rc.row + 1, ",", rc.col, ") ");
+ var pr = [];
+ for (var i in this.progress) {
+ pr.push(i + ": " + this.progress[i]);
+ }
+ if (pr.length > 0) {
+ ml("[", pr.join(", "), "]");
+ }
+ return ml.get();
+ };
+
+ /* -----[ not-so-public API ]----- */
+
+ // BEGIN: undo queue
+
+ P._recordChange = function(type, pos, len, text) {
+ if (len > 0) {
+ var q = this.__undoQueue;
+ q.push({
+ type : type,
+ pos : pos,
+ len : len,
+ text : text
+ });
+ if (q.length > MAX_UNDO_RECORDS)
+ q.shift();
+ }
+ };
+
+ P._placeUndoBoundary = function(q) {
+ q = q || this.__undoQueue;
+ var m = this.markers.map(function(m){
+ return [ m, m.getPosition() ];
+ });
+ var last = q.peek();
+ if (!last || last.type != 3) {
+ q.push({ type: 3, markers: m });
+ } else {
+ last.markers = m;
+ }
+ };
+
+ P._playbackUndo = function(q) {
+ ++this.__undoInProgress;
+ var didit = false, action;
+ while (q.length > 0 && q.peek().type == 3) {
+ action = q.pop();
+ }
+ while (q.length > 0) {
+ action = q.pop();
+ if (action.type == 3) { // boundary
+ // restore markers
+ action.markers.foreach(function(m){
+ m[0].setPosition(m[1]);
+ });
+ break;
+ }
+ didit = true;
+ var pos = action.pos;
+ switch (action.type) {
+ case 1: // insert
+ this._deleteText(pos, pos + action.len);
+ break;
+ case 2: // delete
+ this._insertText(action.text, pos);
+ break;
+ }
+ }
+ --this.__undoInProgress;
+ return didit;
+ };
+
+ // END: undo
+
+ P._replaceLine = function(row, text) {
+ this.code[row] = text;
+ this._textProperties.replaceLine(row, text);
+ if (this.__preventUpdates == 0) {
+ this.callHooks("onLineChange", row);
+ } else {
+ this.__dirtyLines[row] = true;
+ }
+ };
+
+ P._deleteLine = function(row) {
+ this.code.splice(row, 1);
+ this._textProperties.deleteLine(row);
+ if (this.tokenizer)
+ this.tokenizer.quickDeleteLine(row);
+ this.__dirtyLines.splice(row, 1);
+ this.callHooks("onDeleteLine", row);
+ };
+
+ P._insertLine = function(row, text) {
+ this.code.splice(row, 0, text);
+ this._textProperties.insertLine(row);
+ if (this.tokenizer)
+ this.tokenizer.quickInsertLine(row);
+ var drawIt = this.__preventUpdates == 0;
+ this.callHooks("onInsertLine", row, drawIt);
+ if (!drawIt) {
+ if (this.__dirtyLines.length <= row)
+ this.__dirtyLines[row] = true;
+ else
+ this.__dirtyLines.splice(row, 0, true);
+ }
+ };
+
+ P._insertText = function(text, pos) {
+ if (text.length == 0)
+ return;
+ if (pos == null)
+ pos = this.caretMarker.getPosition();
+ pos = MRK(pos);
+ // *** UNDO RECORDING
+ if (this.__preventUndo == 0)
+ this._recordChange(1, pos, text.length);
+ var rc = pos == this.point() ? this._rowcol : this._positionToRowCol(pos),
+ i = rc.row;
+ if (/^\n+$/.test(text) && rc.col == 0) {
+ // handle this case separately, since it's so
+ // frequently used (ENTER pressed) and the
+ // default algorithm messes up colorization
+ // for a fraction of a second, flashing badly.
+ text.length.times(function(j){
+ this._insertLine(i + j, "");
+ }, this);
+ } else {
+ var lines = text.split("\n"), ln = this.code[i], rest = ln.substr(rc.col);
+ if (lines.length > 1) {
+ this._replaceLine(i, ln.substr(0, rc.col) + lines.shift());
+ lines.foreach(function(text){
+ this._insertLine(++i, text);
+ }, this);
+ this._replaceLine(i, this.code[i] + rest);
+ } else {
+ this._replaceLine(i, ln.substr(0, rc.col) + lines[0] + ln.substr(rc.col));
+ }
+ }
+ this._updateMarkers(pos, text.length);
+ this.callHooks("onTextInsert", pos, text);
+ };
+
+ P._deleteText = function(begin, end) {
+ begin = this._boundPosition(MRK(begin));
+ end = this._boundPosition(MRK(end));
+ if (begin == end)
+ return;
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ // *** UNDO RECORDING
+ if (this.__preventUndo == 0)
+ this._recordChange(2, begin, end - begin, this._bufferSubstring(begin, end));
+ var brc = this._positionToRowCol(begin),
+ erc = this._positionToRowCol(end);
+ var line = this.code[brc.row];
+ if (brc.row == erc.row) {
+ // same line, that's easy
+ line = line.substr(0, brc.col) + line.substr(erc.col);
+ this._replaceLine(brc.row, line);
+ } else {
+ // fix first line
+ line = line.substr(0, brc.col) + this.code[erc.row].substr(erc.col);
+ this._replaceLine(brc.row, line);
+ // delete lines in between
+ line = brc.row + 1;
+ (erc.row - brc.row).times(this._deleteLine.$(this, line));
+ }
+ this._updateMarkers(begin, begin - end, begin);
+ this.callHooks("onTextDelete", begin, end);
+ };
+
+ P._replaceText = function(begin, end, text) {
+ this._deleteText(begin, end);
+ this._insertText(text, begin);
+ };
+
+ P._swapAreas = function(a) {
+ a = a.map(MRK).mergeSort();
+ var b1 = a[0],
+ e1 = a[1],
+ b2 = a[2],
+ e2 = a[3],
+ t1 = this._bufferSubstring(b1, e1),
+ t2 = this._bufferSubstring(b2, e2);
+ this._replaceText(b2, e2, t1);
+ this._replaceText(b1, e1, t2);
+ return e2;
+ };
+
+ P._bufferSubstring = function(begin, end) {
+ if (begin == null) begin = this.point();
+ else begin = MRK(begin);
+
+ if (end == null) end = this.getCodeSize();
+ else end = MRK(end);
+
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ // var brc = this._positionToRowCol(begin),
+ // erc = this._positionToRowCol(end);
+ // if (brc.row == erc.row) {
+ // return this.code[brc.row].substring(brc.col, erc.col);
+ // } else return [ this.code[brc.row].substr(brc.col) ].
+ // concat(this.code.slice(brc.row + 1, erc.row)).
+ // concat(this.code[erc.row].substr(0, erc.col)).
+ // join("\n");
+ return this.getCode().substring(begin, end);
+ };
+
+ P._killingAction = function(p1, p2, prepend, noDelete) {
+ p1 = MRK(p1);
+ p2 = MRK(p2);
+ var text = this._bufferSubstring(p1, p2);
+ this._saveKilledText(text, prepend);
+ if (!noDelete)
+ this._deleteText(p1, p2);
+ };
+
+ P._saveKilledText = function(text, prepend) {
+ if (!this._lastCommandWasKill)
+ this.ymacs.killRingToMaster();
+ this.ymacs.pushToKillRing(text, prepend);
+ this._lastCommandWasKill++;
+ };
+
+ P._positionToRowCol = function(pos) {
+ var line = 0, a = this.code, n = a.length;
+ while (pos > 0 && line < n) {
+ var len = a[line].length;
+ if (len >= pos)
+ break;
+ pos -= len + 1; // one for the newline
+ line++;
+ }
+ return { row: line, col: pos };
+ };
+
+ P._rowColToPosition = function(row, col) {
+ var pos = 0, a = this.code, i = Math.min(row, a.length - 1), n = i;
+ if (i < 0)
+ return 0;
+ while (--i >= 0)
+ pos += a[i].length + 1; // one for the newline
+ return pos + Math.min(col, a[n].length);
+ };
+
+ P._boundPosition = function(pos) {
+ if (pos < 0)
+ return 0;
+ return Math.min(pos, this.getCodeSize());
+ };
+
+ P._repositionCaret = function(pos) {
+ var p = this.caretMarker.getPosition();
+ if (pos == null)
+ pos = p;
+ pos = MRK(pos);
+ pos = this._boundPosition(pos);
+ this.caretMarker.setPosition(pos);
+ return pos != p;
+ };
+
+ P._updateMarkers = function(offset, delta, min) {
+ this.__size = null;
+ this.__code = null;
+ // if (this.__undoInProgress == 0) {
+ this.markers.map("editorChange", offset, delta, min || 0);
+ // }
+ if (this.tokenizer) {
+ this.tokenizer.quickUpdate(Math.min(offset, offset + delta));
+ }
+ };
+
+ P._saveExcursion = function(cont, markerBefore) {
+ var tmp = this.createMarker(null, markerBefore);
+ ++this.__savingExcursion;
+ try {
+ return cont.call(this);
+ } finally {
+ --this.__savingExcursion;
+ this.caretMarker.swap(tmp, false, true);
+ tmp.destroy();
+ }
+ };
+
+ P._disableUndo = function(cont) {
+ ++this.__preventUndo;
+ try {
+ return cont.call(this);
+ } finally {
+ --this.__preventUndo;
+ }
+ };
+
+ P._handleKeyEvent = function(ev) {
+ var handled = false;
+ this.interactiveEvent(ev);
+ var lcwk = this._lastCommandWasKill;
+
+ if (this.__nextIsMeta)
+ ev.altKey = true;
+ this.__nextIsMeta = false;
+
+ var key = Ymacs_Keymap.unparseKey(ev);
+ var cc = this.currentKeys;
+ var foundPrefix = false;
+ cc.push(key);
+
+ this.keymap.r_foreach(function(km){
+ var h = km.getHandler(cc);
+ if (h instanceof Array) {
+ this.callInteractively(h[0], h[1]);
+ handled = true;
+ }
+ else if (h) {
+ handled = foundPrefix = true;
+ }
+ else if (key === "ESCAPE") {
+ this.__nextIsMeta = true;
+ handled = true;
+ }
+ else if (km.defaultHandler && cc.length == 1) {
+ handled = this.callInteractively(km.defaultHandler[0], km.defaultHandler[1]);
+ }
+ if (handled)
+ $BREAK();
+ }, this);
+
+ if (!foundPrefix) {
+ if (!handled) {
+ if (cc.length > 1) {
+ this.signalError(cc.join(" ").bold() + " is undefined", true);
+ handled = true;
+ }
+ }
+ cc.splice(0, cc.length);
+ }
+
+ if (this._lastCommandWasKill == lcwk && typeof handled != "object") {
+ // selecting a prefix keymap shouldn't clear the killRing
+ this._lastCommandWasKill = 0;
+ }
+
+ this.callHooks("finishedEvent", handled);
+ this.interactiveEvent(null);
+ return handled;
+ };
+
+ P._on_tokenizerFoundToken = function(row, c1, c2, what) {
+ if (what) {
+ this._textProperties.addLineProps(row, c1, c2, "css", what);
+ } else {
+ this._textProperties.removeLineProps(row, c1, c2, "css");
+ }
+ };
+
+ P._on_textPropertiesChange = function(row) {
+ if (this.__preventUpdates == 0) {
+ this.callHooks("onLineChange", row);
+ } else {
+ this.__dirtyLines[row] = true;
+ }
+ };
+
+ P.formatLineHTML = function(row, caret) {
+ var rc = this._rowcol;
+ if (caret instanceof Ymacs_Marker)
+ rc = caret.getRowCol();
+ caret = row == rc.row ? rc.col : null;
+ return this._textProperties.getLineHTML(row, this.code[row], caret);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-commands-utils.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-commands-utils.js.svn-base
new file mode 100644
index 0000000..04d3d36
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-commands-utils.js.svn-base
@@ -0,0 +1,157 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+Ymacs_Buffer.newCommands({
+
+ get_region: function() {
+ return this.getRegion();
+ },
+
+ cperl_lineup: Ymacs_Interactive("r", function(begin, end){
+ this.cmd("save_excursion", function(){
+ var rcend = this._positionToRowCol(end), max = 0, lines = [];
+ this.cmd("goto_char", begin);
+ this.cmd("forward_whitespace", true);
+ var ch = this.charAt();
+ if (ch.toLowerCase() != ch.toUpperCase()) {
+ this.signalError("Cannot lineup here");
+ return;
+ }
+ while (this._rowcol.row <= rcend.row) {
+ var pos = this.getLine().indexOf(ch);
+ if (pos >= 0) {
+ if (pos > max)
+ max = pos;
+ lines.push([ this._rowcol.row, pos ]);
+ }
+ if (!this.cmd("forward_line"))
+ break;
+ }
+ ++max;
+ lines.foreach(function(l){
+ this.cmd("goto_char", this._rowColToPosition(l[0], l[1]));
+ this.cmd("insert", " ".x(max - l[1]));
+ }, this);
+ });
+ }),
+
+ htmlize_region: Ymacs_Interactive("r\nP", function(begin, end, lineNum) {
+ this.tokenizer.finishParsing();
+ var row = this._positionToRowCol(begin).row,
+ html = String.buffer(),
+ line = row, pad;
+ if (lineNum && !lineNum.empty)
+ line = parseInt(lineNum, 10);
+ end = this._positionToRowCol(end).row;
+ pad = String(end).length;
+ while (row <= end) {
+ html("<div class='line'>");
+ if (lineNum)
+ html("<span class='line-number'>", line.zeroPad(pad, " "), "</span>");
+ ++line;
+ html(this._textProperties.getLineHTML(row, this.code[row], null), "</div>\n");
+ ++row;
+ }
+ html = html.get();
+ var tmp = this.ymacs.switchToBuffer("*Htmlize*");
+ tmp.setCode(html);
+ tmp.cmd("xml_mode", true);
+ }),
+
+ execute_extended_command: Ymacs_Interactive("^CM-x ", function(cmd) {
+ this.callInteractively(cmd);
+ }),
+
+ set_variable: Ymacs_Interactive("vSet variable: \nsTo value: ", function(variable, value) {
+ var tmp = parseFloat(value);
+ if (!isNaN(tmp))
+ value = tmp;
+ this.setq(variable, value);
+ }),
+
+ eval_string: Ymacs_Interactive("^MEval string: ", function(code){
+ try {
+ var variables = [
+ this, // buffer
+ this.ymacs // ymacs
+ ];
+ code = new Function("buffer", "ymacs", code);
+ code.apply(this, variables);
+ this.clearTransientMark();
+ } catch(ex) {
+ this.signalError(ex.type + ": " + ex.message);
+ if (window.console)
+ console.log(ex);
+ }
+ }),
+
+ eval_region: Ymacs_Interactive("^r", function(begin, end) {
+ this.cmd("eval_string", this.cmd("buffer_substring", begin, end));
+ }),
+
+ eval_buffer: Ymacs_Interactive(function(){
+ this.cmd("eval_string", this.getCode());
+ }),
+
+ toggle_line_numbers: Ymacs_Interactive("^", function(){
+ this.whenActiveFrame("toggleLineNumbers");
+ }),
+
+ save_file: Ymacs_Interactive("FWrite file: ", function(name){
+ var files = this.ymacs.ls_getFileDirectory(name, "file");
+ files.dir[files.other[0]] = this.getCode();
+ this.ymacs.ls_set(files.store);
+ this.signalInfo("Saved in local storage");
+ }),
+
+ load_file: Ymacs_Interactive("fFind file: ", function(name){
+ var code = this.ymacs.ls_getFileContents(name);
+ var buffer = this.ymacs.createBuffer({ name: name });
+ buffer.setCode(code);
+ this.cmd("switch_to_buffer", name);
+ }),
+
+ delete_file: Ymacs_Interactive("fDelete file: ", function(name){
+ this.ymacs.ls_getFileContents(name);
+ var files = this.ymacs.ls_get();
+ delete files[name];
+ this.ymacs.ls_set(files);
+ }),
+
+ eval_file: Ymacs_Interactive("fEval file: ", function(name){
+ this.cmd("eval_string", this.ymacs.ls_getFileContents(name));
+ })
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-commands.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-commands.js.svn-base
new file mode 100644
index 0000000..93190e0
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-commands.js.svn-base
@@ -0,0 +1,1491 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+
+Ymacs_Buffer.newCommands({
+
+ forward_char: Ymacs_Interactive("p", function(x) {
+ if (x == null) x = 1;
+ return this.cmd("goto_char", this.point() + x);
+ }),
+
+ backward_char: Ymacs_Interactive("p", function(x) {
+ if (x == null) x = 1;
+ return this.cmd("forward_char", -x);
+ }),
+
+ forward_line: Ymacs_Interactive("p", function(x) {
+ if (x == null) x = 1;
+ var rc = this._rowcol;
+ if (!/^(forward|backward)_line$/.test(this.previousCommand)) {
+ this.setq("line_movement_requested_col", rc.col);
+ }
+ var ret = this.cmd("goto_char",
+ this._rowColToPosition(rc.row + x,
+ Math.max(rc.col,
+ this.getq("line_movement_requested_col")))); // starting to look like Lisp, eh?
+ if (!ret)
+ this.setq("line_movement_requested_col", rc.col);
+ return ret;
+ }),
+
+ backward_line: Ymacs_Interactive("p", function(x) {
+ if (x == null) x = 1;
+ return this.cmd("forward_line", -x);
+ }),
+
+ forward_whitespace: Ymacs_Interactive("P", function(noLine) {
+ var re = noLine ? /[^\x20\t\xA0]/g : /[^\s]/g;
+ if (this.cmd("search_forward_regexp", re)) {
+ this.cmd("backward_char");
+ return true;
+ } else if (!noLine)
+ return this.cmd("end_of_buffer");
+ }),
+
+ backward_whitespace: Ymacs_Interactive("P", function(noLine) {
+ var re = noLine ? /[^\x20\t\xA0]/g : /[^\s]/g;
+ if (this.cmd("search_backward_regexp", re)) {
+ this.cmd("forward_char");
+ return true;
+ } else if (!noLine)
+ return this.cmd("beginning_of_buffer");
+ }),
+
+ beginning_of_line: Ymacs_Interactive(function() {
+ return this.cmd("goto_char", this._rowColToPosition(this._rowcol.row, 0));
+ }),
+
+ back_to_indentation: Ymacs_Interactive(function() {
+ var rc = this._rowcol, line = this.code[rc.row], m = /\S/.exec(line);
+ if (m)
+ return this.cmd("goto_char", this._rowColToPosition(rc.row, m.index));
+ }),
+
+ beginning_of_indentation_or_line: Ymacs_Interactive(function() {
+ return this.cmd("back_to_indentation") || this.cmd("beginning_of_line");
+ }),
+
+ end_of_line: Ymacs_Interactive(function() {
+ var rc = this._rowcol;
+ return this.cmd("goto_char", this._rowColToPosition(rc.row, this.code[rc.row].length));
+ }),
+ wrap : Ymacs_Interactive(function() {
+ var i = 0;
+ this.cmd("end_of_buffer");
+ var st1 = this.caretMarker.getPosition();
+ this.cmd("beginning_of_buffer");
+ if(st1 != 0)
+ {
+ while(i < 50 )
+ {
+ this.cmd("goto_line", i);
+ i= i+1;
+ rc = this._rowcol;
+ var line = this.code[rc.row];
+ var line_size = line.length;
+ if(line_size > 112)
+ {
+ this.cmd("move_to_column", 111);
+ this.cmd("insert", "\n");
+ this.cmd("forward_line");
+ }
+ }
+
+ }
+
+ }),
+
+
+ wrap_at_edge : Ymacs_Interactive(function() {
+ rc = this._rowcol;
+ var line = this.code[rc.row];
+ var str1 = line.length;
+ if(str1 > 112)
+ {
+ this.cmd("insert", "\n");
+ }
+ }),
+
+ wrap_status:Ymacs_Interactive(function() {
+ var one = flag;
+ //alert("inside wrap_status");
+ return one;
+ }),
+
+ word_wrap : Ymacs_Interactive(function() {
+
+ var one1 = this.cmd("wrap_status");
+ if(one1 == "Word Wrap")
+ {
+ var x = 112;
+ rc = this._rowcol;
+ var line = this.code[rc.row];
+ var str1 = line.length;
+ if(str1 > x)
+ {
+ var str2 = line.slice(0,str1-2);
+ var str3 = str2.lastIndexOf(" ");
+ this.cmd("move_to_column", str3+1);
+ this.cmd("insert", "\n");
+ this.cmd("end_of_line");
+ this.cmd("insert", " ");
+ }
+ else
+ {
+ this.cmd("insert", " ");
+ }
+ }
+ else
+ {
+
+ this.cmd("insert", " ");
+ }
+
+
+ }),
+
+
+ wrap1:Ymacs_Interactive(function() {
+ var i = 1;
+ this.cmd("end_of_buffer");
+ var str1 = this.caretMarker.getPosition();
+ //this.cmd("beginning_of_buffer");
+ if(str1 != 0)
+ {
+ while(i < 50 )
+ {
+ this.cmd("goto_line" ,i);
+ i=i+1;
+ rc = this._rowcol;
+ var line = this.code[rc.row];
+ var str2 = line.lastIndexOf(" ");
+ if(str2 > 112)
+ {
+ var str2 = line.slice(0,115);
+ var str3 = str2.lastIndexOf(" ");
+ this.cmd("move_to_column", str3+1);
+ this.cmd("insert", "\n");
+ this.cmd("forward_line");
+ }
+ }
+ }
+
+ }),
+
+
+ beginning_of_buffer: Ymacs_Interactive(function() {
+ return this.cmd("goto_char", 0);
+ }),
+
+ end_of_buffer: Ymacs_Interactive(function() {
+ return this.cmd("goto_char", this.getCodeSize());
+ }),
+
+ eob_p: function() {
+ return this.point() == this.getCodeSize();
+ },
+
+ bob_p: function() {
+ return this.point() == 0;
+ },
+
+ eol_p: function() {
+ var rc = this._positionToRowCol(this.point());
+ return rc.col == this.code[rc.line].length;
+ },
+
+ bol_p: function() {
+ return this._positionToRowCol(this.point()).col == 0;
+ },
+
+ backward_delete_char: Ymacs_Interactive("^p", function(n){
+ if (!this.deleteTransientRegion()) {
+ if (n == null) n = 1;
+ var pos = this.point();
+ if (pos > 0)
+ this._deleteText(pos - n, pos);
+ }
+ }),
+
+ delete_char: Ymacs_Interactive("^p", function(n){
+ if (!this.deleteTransientRegion()) {
+ if (n == null) n = 1;
+ var pos = this.point();
+ this._deleteText(pos, pos + n);
+ }
+ }),
+
+ delete_whitespace: Ymacs_Interactive("^P", function(noLine) {
+ if (!this.deleteTransientRegion()) {
+ var p = this.point();
+ if (this.cmd("forward_whitespace", noLine)) {
+ this._deleteText(p, this.point());
+ return true;
+ }
+ }
+ }),
+
+ backward_delete_whitespace: Ymacs_Interactive("^P", function(noLine) {
+ if (!this.deleteTransientRegion()) {
+ var p = this.point();
+ if (this.cmd("backward_whitespace", noLine)) {
+ this._deleteText(this.point(), p);
+ return true;
+ }
+ }
+ }),
+
+ universal_argument: Ymacs_Interactive("^", function(){
+ this.pushKeymap(Ymacs_Keymap_UniversalArgument());
+ if (!this.isMinibuffer)
+ this.setMinibuffer("C-u");
+ }),
+
+ overwrite_mode: Ymacs_Interactive(function() {
+ this.resetOverwriteMode();
+ }),
+
+ self_insert_command: Ymacs_Interactive("^p", function(repeat) {
+ var ev = this.interactiveEvent(),
+ ch = String.fromCharCode(ev.charCode),
+ rc = this._rowcol;
+ if (ev.charCode && ch && !ev.altKey && !ev.ctrlKey) {
+ this.deleteTransientRegion();
+ if (repeat != null)
+ ch = ch.x(repeat);
+ if (this.overwriteMode) {
+ var line = this.code[rc.row], left = line.length - rc.col;
+ if (left > 0)
+ this.cmd("delete_char", Math.min(left, repeat || 1));
+ }
+ this.cmd("insert", ch);
+ ev.domStop = true;
+ return true;
+ }
+ return false;
+ }),
+
+ newline: Ymacs_Interactive("^p", function(n){
+ if (n == null) n = 1;
+ this.deleteTransientRegion();
+ this.cmd("insert", "\n".x(n));
+ }),
+
+
+ newline_and_indent: Ymacs_Interactive("^p", function(n){
+ if (n) {
+ this.cmd("newline", n);
+ } else {
+ this.cmd("backward_delete_whitespace", true);
+ this.cmd("newline");
+ this.cmd("indent_line");
+ }
+ }),
+
+
+// tab is not working on the 1st position of the buffer
+// user should create table from 1st position only
+
+ indent_line: Ymacs_Interactive("P", function(noEmpty) {
+ if (this.tokenizer) {
+ var indent = this.tokenizer.getIndentation(this._rowcol.row, this);
+ var a = " ";
+ if (indent != null) {
+ if (!noEmpty || /\S/.test(this.getLine())) {
+ var pos = this.cmd("save_excursion", function(){
+
+ if (this._rowcol.col != indent) {
+
+
+ var pos1 = this.caretMarker.getPosition();
+ //alert(pos1);
+ this.cmd("beginning_of_line");
+
+ var pos2 = this.caretMarker.getPosition();
+
+ var char1 = this.charAt(pos2);
+ this.cmd("forward_paragraph");
+ this.cmd("backward_line");
+ this.cmd("end_of_line");
+ var para_end1 = this.caretMarker.getPosition();
+ var para_end2 = (para_end1 - 1);
+
+
+ // identifying table or text
+
+ if (char1 == "|"){
+ this.cmd("goto_char",pos1);
+ this.cmd("end_of_line");
+ var end_line1 = this.caretMarker.getPosition();
+ var end_line2 =(end_line1 - 1);
+ for( var a1=1;a1<113;a1=a1+1){
+
+ var pos3 = (pos1 + a1);
+ //alert(pos3);
+ var char2 = this.charAt(pos3);
+ // checks end of the table
+ if (char2 == "|"){
+ if (char2 == "|" && pos3 == para_end2)
+ {this.cmd("goto_char",pos3);
+ //this.point();
+ this.cmd("beginning_of_line");
+ var B11 = this.caretMarker.getPosition();
+ //alert(B1);
+ this.cmd("end_of_line");
+ var P11 = this.caretMarker.getPosition();
+ //alert(P1);
+ var count1=0;
+ for(i=B11;i<=P11;i=i+1)
+ {
+ var c11=this.charAt(i);
+ if(c11=="|")
+ {count1=count1 + 1;}
+
+ }
+
+ var count2 = (count1 - 1);
+ this.cmd("newline");
+ for(i=1;i<=count2;i=i+1)
+ {
+ this.cmd("org_table_create");}
+ this.cmd("insert","|");
+ this.cmd("beginning_of_line");
+ this.cmd("forward_char");
+ }
+ // checks row or table end
+ else if(char2 == "|" && end_line2 == pos3)
+ { this.cmd("forward_line");
+ this.cmd("beginning_of_line");
+ var beg = this.caretMarker.getPosition();
+ var a11= this.charAt(beg);
+ if(a11 == "|"){
+ //alert(a11);
+ var beg1 = (beg + 1);
+ this.cmd("goto_char",beg1);}
+ else
+ {//alert("table-end");
+ this.cmd("goto_char",pos1);
+ var r_count = 1;
+ for(i=0;i<=5;i=i+1)
+ {
+ this.cmd("backward_line");
+ this.cmd("beginning_of_line");
+ var c_row = this.caretMarker.getPosition();
+ this.cmd("goto_char",c_row);
+ var ch_row = this.charAt(c_row);
+ // alert(ch_row);
+
+ if (ch_row == "|")
+ { r_count = r_count + 1 ;
+
+ }else
+ break;
+ }//alert("no_of_rows:" +r_count);
+
+
+ this.cmd("goto_char",pos3);
+ //this.point();
+ this.cmd("beginning_of_line");
+ var B1 = this.caretMarker.getPosition();
+ //alert(B1);
+ this.cmd("end_of_line");
+ var P1 = this.caretMarker.getPosition();
+ //alert(P1);
+ var count=0;
+ for(i=B1;i<=P1;i=i+1)
+ {
+ var c1=this.charAt(i);
+ if(c1=="|")
+ {count=count + 1;}
+
+ }
+ var count_n = (count -1);
+ //alert(count);
+ this.cmd("newline");
+ for(i=1;i<=count_n;i=i+1)
+ {this.cmd("org_table_create");}
+ this.cmd("insert","|");
+ this.cmd("beginning_of_line");
+ this.cmd("forward_char");
+ }
+
+ }
+ else if (char2 == "|")
+ {
+
+ var pos31 = (pos3 + 1);
+ this.cmd("goto_char",pos31);
+
+ }break;}}
+
+
+ }
+ // for text gives 4 spaces
+ else {
+ this.cmd("goto_char",pos1);
+ this.cmd("insert",a);}
+
+ }
+ return this.point();
+ });
+ // when point is before the indentation, go there.
+ if (this.point() < pos)
+ this.cmd("goto_char", pos);
+ }
+ return;
+ }
+ }
+ this.cmd("insert", " ".x(this.getq("indent_line")));
+ }),
+ indent_region: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("save_excursion", function() {
+ var m = this.createMarker(end);
+ this.cmd("goto_char", begin);
+ while (this.point() < m.getPosition()) {
+ this.cmd("indent_line", true);
+ this.cmd("beginning_of_line");
+ if (!this.cmd("forward_line"))
+ break;
+ };
+ m.destroy();
+ });
+ }),
+
+ make_marker: function(pos) {
+ return this.createMarker(pos);
+ },
+
+ looking_at: function(rx) {
+ var pos = rx.lastIndex = this.point();
+ var ret = this.matchData = rx.exec(this.getCode());
+ if (ret)
+ ret.after = rx.lastIndex;
+ return ret && ret.index == pos;
+ },
+
+ looking_back: function(rx) {
+ var m = this.lastIndexOfRegexp(this.getCode(), rx, this.point());
+ return m && m.after == this.point();
+ },
+
+ search_forward: Ymacs_Interactive("sSearch: ", function(str, bound) {
+ var code = this.getCode(), point = this.point();
+ if (this.getq("case_fold_search")) {
+ code = code.toLowerCase();
+ str = str.toLowerCase();
+ }
+ var pos = code.indexOf(str, point);
+ if (pos >= 0 && (bound == null || pos <= bound)) {
+ this.cmd("goto_char", pos + str.length);
+ return true;
+ }
+ }),
+
+ search_backward: Ymacs_Interactive("sSearch backward: ", function(str, bound) {
+ var code = this.getCode(), point = this.point();
+ if (this.getq("case_fold_search")) {
+ code = code.toLowerCase();
+ str = str.toLowerCase();
+ }
+ var pos = code.lastIndexOf(str, point);
+ if (pos == point)
+ pos = code.lastIndexOf(str, point - 1);
+ if (pos >= 0 && pos != point && (bound == null || pos >= bound)) {
+ this.cmd("goto_char", pos);
+ return true;
+ }
+ }),
+
+ make_regexp: function(rx) {
+ if (!(rx instanceof RegExp)) {
+ var matchCase = rx.toLowerCase() != rx.toUpperCase();
+ try {
+ rx = new RegExp(rx, matchCase ? "ig" : "g");
+ } catch(ex) {
+ throw new Ymacs_Exception("Invalid regexp");
+ }
+ }
+ return rx;
+ },
+
+ search_forward_regexp: Ymacs_Interactive("sRegExp search: ", function(rx) {
+ rx = this.cmd("make_regexp", rx);
+ var code = this.getCode(),
+ pos = rx.lastIndex = this.point(),
+ ret = this.matchData = rx.exec(code);
+ if (ret && rx.lastIndex != pos) {
+ ret.after = rx.lastIndex;
+ this.cmd("goto_char", rx.lastIndex);
+ return true;
+ }
+ }),
+
+ search_backward_regexp: Ymacs_Interactive("sBackward RegExp search: ", function(rx) {
+ rx = this.cmd("make_regexp", rx);
+ var m = this.lastIndexOfRegexp(this.getCode(), rx, this.point());
+ if (m && m.index != this.point()) {
+ this.cmd("goto_char", m.index);
+ return true;
+ }
+ }),
+
+ forward_word: Ymacs_Interactive_X(function(){
+ var word = this.getq("syntax_word"), end = false;
+ while (!end && !word.test(this.charAt()))
+ if (!this.cmd("forward_char"))
+ end = true;
+ while (!end && word.test(this.charAt()))
+ if (!this.cmd("forward_char"))
+ end = true;
+ }),
+
+ backward_word: Ymacs_Interactive_X(function(){
+ var word = this.getq("syntax_word"), end = false;
+ while (!end && !word.test(this.charAt(-1)))
+ if (!this.cmd("backward_char"))
+ end = true;
+ while (!end && word.test(this.charAt(-1)))
+ if (!this.cmd("backward_char"))
+ end = true;
+ }),
+
+ forward_paragraph: Ymacs_Interactive_X(function(){
+ this.cmd("forward_whitespace");
+ if (this.cmd("search_forward_regexp", this.getq("syntax_paragraph_sep")))
+ this.cmd("goto_char", this.cmd("match_beginning") + 1);
+ else
+ this.cmd("end_of_buffer");
+ }),
+
+ backward_paragraph: Ymacs_Interactive_X(function(){
+ this.cmd("backward_whitespace");
+ if (this.cmd("search_backward_regexp", this.getq("syntax_paragraph_sep")))
+ this.cmd("goto_char", this.cmd("match_end") - 1);
+ else
+ this.cmd("beginning_of_buffer");
+ }),
+
+ transpose_words: Ymacs_Interactive_X(function() {
+ // if we're in the middle of a word, some
+ // weird things happen; better skip it, just
+ // like Emacs does.
+ this.cmd("backward_char");
+ if (this.getq("syntax_word").test(this.charAt()))
+ this.cmd("forward_word");
+
+ var a = [];
+ this.cmd("forward_word"); a.push(this.point());
+ this.cmd("backward_word"); a.push(this.point());
+ this.cmd("backward_word"); a.push(this.point());
+ this.cmd("forward_word"); a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ transpose_lines: Ymacs_Interactive_X(function() {
+ var a = [];
+ //alert(a[0]);
+ this.cmd("backward_line");
+ this.cmd("beginning_of_line"); a.push(this.point());
+ this.cmd("end_of_line"); a.push(this.point());
+ this.cmd("forward_char"); a.push(this.point());
+ this.cmd("end_of_line"); a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ transpose_para: Ymacs_Interactive_X(function() {
+ var a = [];
+ //alert(a[0]);
+ this.cmd("backward_paragraph");
+ // this.cmd("backward_line");
+ this.cmd("forward_line"); a.push(this.point());
+ this.cmd("forward_paragraph");
+ this.cmd("backward_char"); a.push(this.point());
+ this.cmd("forward_whitespace"); a.push(this.point());
+ this.cmd("forward_paragraph");
+ this.cmd("backward_char");a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ transpose_text: Ymacs_Interactive_X(function() {
+ var a = [];
+ //alert(a[0]);
+ this.cmd("beginning_of_line");
+ this.cmd("backward_paragraph");
+ this.cmd("forward_line");
+ this.cmd("forward_char");
+ this.cmd("forward_char"); a.push(this.point());
+ this.cmd("forward_paragraph");
+ this.cmd("backward_char"); a.push(this.point());
+ this.cmd("forward_whitespace");
+ this.cmd("forward_char");
+ this.cmd("forward_char");a.push(this.point());
+ this.cmd("forward_paragraph");
+ this.cmd("backward_char");a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ transpose_chars: Ymacs_Interactive_X(function() {
+ var pos = this.point();
+ if (this.cmd("backward_char"))
+ this.cmd("goto_char", this._swapAreas([ pos - 1, pos, pos, pos + 1 ]));
+ }),
+
+ kill_word: Ymacs_Interactive_X(function() {
+ var pos = this.point();
+ this.cmd("forward_word");
+ var pos2 = this.point();
+ this._killingAction(pos, pos2, false);
+ }),
+
+ backward_kill_word: Ymacs_Interactive_X(function() {
+ var pos = this.point();
+ this.cmd("backward_word");
+ var pos2 = this.point();
+ this._killingAction(pos, pos2, true);
+ }),
+
+ _apply_operation_on_word: function (op, cc) {
+ var pos = this.point();
+ if (this.getq("syntax_word").test(this.charAt())) {
+ var pos2 = this.cmd("save_excursion", function(){
+ this.cmd("forward_word");
+ return this.point();
+ });
+ var word = op.call(this._bufferSubstring(pos, pos2));
+ this._deleteText(pos, pos2);
+ this._insertText(word);
+ } else {
+ this.cmd("forward_word");
+ this.cmd("backward_word");
+ if (pos != this.point())
+ this.cmd(cc);
+ }
+ },
+
+ capitalize_word: Ymacs_Interactive_X(function() {
+ this.cmd("_apply_operation_on_word", function() {
+ return this.charAt(0).toUpperCase() + this.substr(1).toLowerCase();
+ }, "capitalize_word");
+ }),
+
+ downcase_word: Ymacs_Interactive_X(function() {
+ this.cmd("_apply_operation_on_word", String.prototype.toLowerCase, "downcase_word");
+ }),
+
+ upcase_word: Ymacs_Interactive_X(function() {
+ this.cmd("_apply_operation_on_word", String.prototype.toUpperCase, "upcase_word");
+ }),
+
+ goto_char: Ymacs_Interactive("NGoto char: ", function(pos){
+ return this._repositionCaret(pos);
+ }),
+
+ goto_line: Ymacs_Interactive("NGoto line: ", function(row){
+ var pos = this._rowColToPosition(row - 1, 0);
+ return this.cmd("goto_char", pos);
+ }),
+
+ move_to_column: Ymacs_Interactive("NMove to column: ", function(col, force){
+ var rc = this._positionToRowCol(this.point());
+ var text = this.code[rc.row];
+ if (text.length < col) {
+ if (force) {
+ this.cmd("end_of_line");
+ this.cmd("insert", " ".x(col - text.length));
+ } else {
+ this.cmd("end_of_line");
+ }
+ } else {
+ this.cmd("goto_char", this._rowColToPosition(rc.row, col));
+ }
+ }),
+
+ delete_region: Ymacs_Interactive("r", function(begin, end){
+ this._deleteText(begin, end);
+ }),
+
+ insert: Ymacs_Interactive("sInsert text: ", function(){
+ return this._insertText(Array.$(arguments).join(""));
+ }),
+
+ keyboard_quit: Ymacs_Interactive("^p", Function.noop),
+
+ buffer_substring: function(begin, end) {
+ if (arguments.length == 0) {
+ var r = this.getRegion();
+ begin = r.begin;
+ end = r.end;
+ }
+ return this._bufferSubstring(begin, end);
+ },
+
+ kill_line: Ymacs_Interactive_X(function() {
+ var pos = this.point(),
+ rc = this._rowcol,
+ line = this.code[rc.row],
+ end = pos + line.length - rc.col;
+ if (rc.row < this.code.length - 1 && this.cmd("looking_at", /\s*$/mg))
+ end++;
+ this._killingAction(pos, end);
+ }),
+
+ save_excursion: function() {
+ return this._saveExcursion.apply(this, arguments);
+ },
+
+ prevent_undo: function() {
+ return this._disableUndo.apply(this, arguments);
+ },
+
+ point: function() {
+ return this.caretMarker.getPosition();
+ },
+
+ kill_region: Ymacs_Interactive("r", function(begin, end){
+ this._killingAction(begin, end);
+ }),
+
+ copy_region_as_kill: Ymacs_Interactive("r", function(begin, end){
+ this._killingAction(begin, end, false, true);
+ }),
+
+ yank: Ymacs_Interactive("^P", function(atStart){
+ this.deleteTransientRegion();
+ var point = this.point();
+ this._insertText(this.ymacs.killRingText());
+ this.cmd("set_mark_command", point);
+ if (atStart)
+ this.cmd("exchange_point_and_mark");
+ }),
+
+ yank_pop: Ymacs_Interactive(function() {
+ if (/^yank/.test(this.previousCommand)) {
+ this.ymacs.rotateKillRing(false);
+ this._deleteText(this.caretMarker, this.markMarker);
+ this.cmd("yank");
+ } else {
+ this.signalError("Previous command was not a yank");
+ }
+ }),
+
+ yank_shift: Ymacs_Interactive(function() {
+ if (/^yank/.test(this.previousCommand)) {
+ this.ymacs.rotateKillRing(true);
+ this._deleteText(this.caretMarker, this.markMarker);
+ this.cmd("yank");
+ } else {
+ this.signalError("Previous command was not a yank");
+ }
+ }),
+
+ mark: function() {
+ return this.markMarker.getPosition();
+ },
+
+ set_mark_command: Ymacs_Interactive("d", function(x){
+ if (this.currentCommand == "set_mark_command")
+ this.signalInfo("Mark set", null, 1000);
+ this.markMarker.setPosition(x);
+ }),
+
+ exchange_point_and_mark: Ymacs_Interactive("^", function(){
+ this.caretMarker.swap(this.markMarker);
+ }),
+
+ mark_whole_buffer: Ymacs_Interactive(function(){
+ this.clearTransientMark();
+ this.cmd("end_of_buffer");
+ this.ensureTransientMark();
+ this.cmd("beginning_of_buffer");
+ this.ensureTransientMark();
+ }),
+
+ // <XXX>: the following two kind of suck
+
+ recenter_top_bottom: Ymacs_Interactive(function() {
+ this.whenActiveFrame(function(frame){
+ frame.ensureCaretVisible(true);
+ frame.centerOnCaret();
+ });
+ }),
+
+ ensure_caret_visible: Ymacs_Interactive(function() {
+ this.whenActiveFrame(function(frame){
+ // frame.centerOnCaretIfNotVisible();
+ frame.ensureCaretVisible(true);
+ frame.centerOnCaret();
+ });
+ }),
+
+ // </XXX>
+
+ /* -----[ paragraphs ]----- */
+
+ fill_paragraph: Ymacs_Interactive("P", function(noPrefix) {
+ this.cmd("save_excursion", function(){
+ if (!this.cmd("looking_at", this.getq("syntax_paragraph_sep")))
+ this.cmd("forward_paragraph");
+ var eop = this.createMarker(this.point() - 1);
+ this.cmd("backward_paragraph");
+ if (this.point() > 0)
+ this.cmd("forward_char");
+
+ // identify the prefix to use for each line
+ var prefix = "", del = false;
+ if (this.cmd("looking_at", /\s*([-]|[0-9]+\.|\(?[a-z][\).])?\s+/ig)) {
+ prefix = " ".x(this.matchData[0].length);
+ del = /\s*[#>;\s]*\s*/g;
+ }
+ else if (this.cmd("looking_at", /\s*[#>;*\s]+\s*/g)) {
+ prefix = this.matchData[0];
+ del = /\s*[#>;\s]*\s*/g;
+ }
+
+ if (noPrefix) {
+ this._deleteText(this.point(), this.point() + this.matchData[0].length);
+ prefix = "";
+ }
+
+ // remove newlines first
+ while (true) {
+ this.cmd("end_of_line");
+ this.cmd("backward_delete_whitespace");
+ if (this.point() >= eop.getPosition())
+ break;
+ this._replaceText(this.point(), this.point() + 1, " ");
+ if (del && this.cmd("looking_at", del)) {
+ this._deleteText(this.point(), this.point() + this.matchData[0].length);
+ }
+ }
+
+ this.cmd("beginning_of_line");
+
+ // main operation
+ while (this.point() < eop.getPosition()) {
+ var p = this.point();
+ if (!this.cmd("search_forward_regexp", /\s/g))
+ break;
+ if (this.point() > eop.getPosition()) {
+ this.cmd("goto_char", eop);
+ }
+ if (this._rowcol.col > this.getq("fill_column")) {
+ this.cmd("goto_char", p);
+ this.cmd("backward_delete_whitespace");
+ this.cmd("newline");
+ this.cmd("insert", prefix);
+ }
+ }
+
+ eop.destroy();
+
+ this.cmd("recenter_top_bottom");
+ });
+ }),
+
+ fill_paragraph_no_prefix: Ymacs_Interactive(function() {
+ return this.cmd("fill_paragraph", true);
+ }),
+
+ // this looks at the style of the current paragraph and starts
+ // a similar one, i.e. using same indentation level and prefix
+ // (list-like prefixes are incremented)
+
+
+
+
+
+ sub_bullet: Ymacs_Interactive(function() {
+ this.cmd("backward_line");
+ if (this.point() > 1)
+ this.cmd("forward_char");
+
+ // identify the prefix to use for each line
+ var prefix = "*";
+ if (this.cmd("looking_at", /(\s*)([+#-])(\s)([a-z]+)/g)) {
+
+ prefix = this.matchData[1]+this.matchData[2];
+ //alert(prefix);
+
+ }
+
+ this.cmd("forward_line");
+ if (this.cmd("eob_p"))
+ this.cmd("newline");
+ // this.cmd("newline");
+
+ this.cmd("insert",prefix);
+
+ if (!this.cmd("looking_at", /\n/g)) {
+ this.cmd("newline");
+ this.cmd("backward_char");
+ };
+ }),
+
+ start_next_paragraph: Ymacs_Interactive(function() {
+ this.cmd("backward_paragraph");
+ if (this.point() > 1)
+ this.cmd("forward_char");
+
+ // identify the prefix to use for each line
+ var prefix = "*";
+ if (this.cmd("looking_at", /(\s*)([0-9]+)(\.)(\s+)/g)) {
+ prefix = this.matchData[1] +
+ (parseInt(this.matchData[2], 10) + 1) +
+ this.matchData[3];//+this.matchdata[4];//+this.matchdata[5];
+
+ }
+ else if (this.cmd("looking_at", /(\s*\(?)([a-z])([\.\)]\s+)/ig)) {
+ prefix = this.matchData[1] +
+ String.fromCharCode(this.matchData[2].charCodeAt(0) + 1) +
+ this.matchData[3];//+this.matchdata[4];//+this.matchdata[5];
+
+ }
+
+
+ else if (this.cmd("looking_at", /[#>;*-]+/g)) {
+ prefix = this.matchData[0];
+
+ }
+ this.cmd("forward_paragraph");
+ if (this.cmd("eob_p"))
+ this.cmd("newline");
+ this.cmd("newline");
+
+ this.cmd("insert",prefix," ");
+
+ if (!this.cmd("looking_at", /\n/g)) {
+ this.cmd("newline");
+ this.cmd("backward_char");
+ };
+ }),
+
+ scroll_down: Ymacs_Interactive_X(function() {
+ this.whenActiveFrame(function(frame){
+ var hl = frame.heightInLines();
+ this.cmd("forward_line", Math.round(hl / 1.33));
+ this.cmd("recenter_top_bottom");
+ });
+ }),
+
+ scroll_up: Ymacs_Interactive_X(function() {
+ this.whenActiveFrame(function(frame){
+ var hl = frame.heightInLines();
+ this.cmd("backward_line", Math.round(hl / 1.33));
+ this.cmd("recenter_top_bottom");
+ });
+ }),
+
+ nuke_trailing_whitespace: Ymacs_Interactive(function() {
+ this.cmd("save_excursion", function(){
+ this.cmd("goto_char", 0);
+ while (this._rowcol.row < this.code.length) {
+ var line = this.code[this._rowcol.row],
+ m = /\s+$/.exec(line);
+ if (m) {
+ this.cmd("beginning_of_line");
+ this._deleteText(this.point() + m.index, this.point() + line.length);
+ }
+ if (!this.cmd("forward_line"))
+ break;
+ }
+ });
+ }),
+
+ match_string: function(n) {
+ return this.matchData[n];
+ },
+
+ match_beginning: function() {
+ return this.matchData.index;
+ },
+
+ match_end: function() {
+ return this.matchData.index + this.matchData[0].length;
+ },
+
+ undo: Ymacs_Interactive_X(function() {
+ var q = this.__undoQueue;
+ this.__undoQueue = this.__redoQueue;
+ this._placeUndoBoundary();
+ if (!this._playbackUndo(q)) {
+ this.signalError("No further undo information");
+ }
+ this.__undoQueue = q;
+ }),
+
+ center_line: Ymacs_Interactive("p", function(n){
+ if (n == null) n = 1;
+ n.times(function(i){
+ if (i > 0)
+ this.cmd("forward_line");
+ this.cmd("save_excursion", function(){
+ this.cmd("end_of_line");
+ this.cmd("backward_delete_whitespace", true);
+ this.cmd("beginning_of_line");
+ this.cmd("delete_whitespace", true);
+ var line = this.code[this._rowcol.row];
+ var indent = Math.floor((this.getq("fill_column") - line.length) / 2);
+ this.cmd("insert", " ".x(indent));
+ });
+ }, this);
+ }),
+
+ /* -----[ dabbrev ]----- */
+
+ dabbrev_expand: Ymacs_Interactive_X(function() {
+ if (this.previousCommand != "dabbrev_expand")
+ this.setq("dabbrev_context", null);
+
+ var ctx = this.getq("dabbrev_context");
+ if (!ctx) {
+ ctx = this.setq("dabbrev_context", {});
+ var p1 = this.cmd("save_excursion", function(){
+ this.cmd("bind_variables", {
+ syntax_word: this.getq("syntax_word_dabbrev")
+ }, "backward_word");
+ return this.point();
+ });
+ if (p1 == this.point())
+ return this.signalError("Nothing to expand");
+ ctx.search = this.cmd("buffer_substring", p1, this.point());
+ ctx.point = p1;
+ ctx.length = this.point() - p1;
+ ctx.lastSearch = p1;
+ ctx.encountered = {};
+ ctx.forward = false;
+ ctx.buffer = this;
+ ctx.startBuffer = this;
+ }
+ var expansion;
+
+ // in the following excursion, *this* is ctx.buffer,
+ // not necessarily the currently active buffer. It's
+ // purpose is to determine the next expansion and
+ // setup the context so that the next invocation would
+ // continue.
+ ctx.buffer.cmd("save_excursion", function repeat(){
+ var word = this.getq("syntax_word_dabbrev");
+ var p1;
+ var found = false;
+ this.cmd("goto_char", ctx.lastSearch);
+ // console.log("last at: %d", ctx.lastSearch);
+ if (!ctx.forward) {
+ while (this.cmd("search_backward", ctx.search)) {
+ if (!word.test(this.charAt(-1))) {
+ found = true;
+ break;
+ }
+ }
+ if (found) {
+ p1 = this.point();
+ ctx.lastSearch = p1;
+ this.cmd("goto_char", p1 + ctx.search.length);
+ } else {
+ ctx.forward = true;
+ ctx.lastSearch = ctx.point + ctx.length;
+ repeat.call(this);
+ return;
+ }
+ } else {
+ while (this.cmd("search_forward", ctx.search))
+ if (!word.test(this.charAt(-ctx.search.length - 1))) {
+ found = true;
+ break;
+ }
+ if (found) {
+ ctx.lastSearch = this.point();
+ p1 = this.point() - ctx.search.length;
+ } else {
+ ctx.buffer = this.whenYmacs("getNextBuffer", this);
+ if (ctx.buffer === ctx.startBuffer) {
+ expansion = ctx.search;
+ ctx.startBuffer.signalError("No more completions");
+ ctx.lastSearch = ctx.point + ctx.length;
+ ctx.startBuffer.setq("dabbrev_context", null);
+ return;
+ } else {
+ ctx.lastSearch = 0;
+ ctx.buffer.cmd("save_excursion", repeat);
+ return;
+ }
+ }
+ }
+ if (p1 != null) {
+ // console.log("%s at %d, next from %d", ctx.search, p1, ctx.lastSearch);
+ this.cmd("bind_variables", {
+ syntax_word: this.getq("syntax_word_dabbrev")
+ }, "forward_word");
+ expansion = this.cmd("buffer_substring", p1, this.point());
+ if (Object.HOP(ctx.encountered, expansion))
+ repeat.call(this);
+ }
+ });
+ if (expansion != null) {
+ this._replaceText(ctx.point, ctx.point + ctx.length, expansion);
+ ctx.length = expansion.length;
+ ctx.encountered[expansion] = true;
+ }
+ }),
+
+ /* -----[ frames and buffers ]----- */
+
+ split_frame_vertically: Ymacs_Interactive("p", function(percent) {
+ if (percent == null) percent = "50%";
+ else percent += "%";
+ this.whenActiveFrame("vsplit", percent);
+ }),
+
+ split_frame_horizontally: Ymacs_Interactive("p", function(percent) {
+ if (percent == null) percent = "50%";
+ else percent += "%";
+ this.whenActiveFrame("hsplit", percent);
+ }),
+
+ delete_other_frames: Ymacs_Interactive(function() {
+ this.whenActiveFrame("deleteOtherFrames");
+ }),
+
+ delete_frame: Ymacs_Interactive(function() {
+ this.whenActiveFrame("deleteFrame");
+ }),
+
+ other_frame: Ymacs_Interactive(function() {
+ this.whenYmacs("focusOtherFrame");
+ }),
+
+ windmove: function(dir) {
+ this.whenYmacs(function(ymacs){
+ var f = ymacs.getFrameInDirection(dir);
+ if (f) f.focus();
+ });
+ },
+
+ next_buffer: Ymacs_Interactive(function() {
+ this.whenYmacs("switchToNextBuffer", this.sameCommandCount() + 1);
+ }),
+
+ previous_buffer: Ymacs_Interactive(function() {
+ this.whenYmacs("switchToPreviousBuffer", this.sameCommandCount() + 1);
+ }),
+
+ switch_to_buffer: Ymacs_Interactive("BSwitch to buffer: ", function(name) {
+ this.whenYmacs(function(ymacs){
+ ymacs.switchToBuffer(name);
+ });
+ }),
+
+ kill_buffer: Ymacs_Interactive(function() {
+ this.whenYmacs(function(ymacs){
+ ymacs.killBuffer(this);
+ });
+ }),
+
+ rename_buffer: Ymacs_Interactive("sRename current buffer to: ", function(name){
+ this.whenYmacs(function(ymacs){
+ ymacs.renameBuffer(this, name);
+ });
+ }),
+
+ /* -----[ other ]----- */
+
+ delete_region_or_line: Ymacs_Interactive("^", function() {
+ if (!this.deleteTransientRegion()) {
+ this.cmd("beginning_of_line");
+ var pos = this.point();
+ if (this.cmd("forward_line") || this.cmd("end_of_line")) {
+ this._deleteText(pos, this.point());
+ return true;
+ }
+ }
+ }),
+ delete_line: Ymacs_Interactive("^", function() {
+
+
+ this.cmd("beginning_of_line");
+ var pos = this.point();
+ alert(pos);
+ this.cmd("end_of_line");
+ var pos1 = this.point();
+ alert(pos1);
+ this._replaceText(pos, pos1,"");
+ return true;
+
+
+
+
+
+ }),
+
+
+
+ // http://mihai.bazon.net/blog/close-last-xml-tag-emacs
+ close_last_xml_tag: Ymacs_Interactive_X(function() {
+ var tag, quote;
+ this.cmd("save_excursion", function() {
+ var skip = 1;
+ while (skip != 0 && this.cmd("search_backward_regexp", /<\x2f?([a-zA-Z0-9:_-]+)/g)) {
+ tag = this.cmd("match_string", 1);
+ if (this.cmd("looking_at", /<\x2f/g)) {
+ ++skip;
+ }
+ else if (!this.cmd("looking_at", /<[^\x2f][^>]*?\x2f>/g)) {
+ --skip;
+ }
+ }
+ if (skip != 0)
+ tag = null;
+ });
+ if (tag) {
+ this.cmd("insert", "</", tag, ">");
+ } else {
+ throw new Ymacs_Exception("Couldn't find a tag to close");
+ }
+ }),
+
+ bind_variables: function() {
+ return this.withVariables.apply(this, arguments);
+ },
+
+ for_region: Ymacs_Interactive("^r\nCExecute command within region: ", function(begin, end, func) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; } // MACROS! I WANT MACROS! EVAL SUCKS. x-(
+ if (!(func instanceof Function))
+ func = this.COMMANDS[func];
+ this.clearTransientMark();
+ this.cmd("goto_char", begin);
+ begin = this.createMarker(begin, true);
+ end = this.createMarker(end);
+ this.withCommands(
+ {
+ goto_char: function(pos){
+ if (pos >= begin.getPosition() && pos <= end.getPosition())
+ return this._repositionCaret(pos);
+ throw "YMACS_RESTRICT";
+ }
+ },
+ function() {
+ try {
+ while (true) {
+ var tmp = this.point();
+ func.call(this);
+ if (this.point() == tmp && !this.cmd("forward_line"))
+ break;
+ }
+ } catch(ex) {
+ if (ex !== "YMACS_RESTRICT")
+ throw ex;
+ } finally {
+ begin.destroy();
+ end.destroy();
+ }
+ }
+ );
+ })
+
+});
+
+/* -----[ rectangle functions (vertical editing) ]----- */
+
+(function(){
+
+ function apply_on_rectangle(buffer, begin, end, func) {
+ buffer.cmd("save_excursion", function(){
+ var p1 = this._positionToRowCol(begin),
+ p2 = this._positionToRowCol(end),
+ width = Math.abs(p2.col - p1.col);
+ for (var line = p1.row; line <= p2.row; ++line) {
+ this.cmd("goto_char", this._rowColToPosition(line, 0));
+ var text = this.code[line],
+ c1 = p1.col,
+ c2 = p2.col,
+ p = this.point(), ws = 0;
+ if (c1 > c2) {
+ var tmp = c1;
+ c1 = c2;
+ c2 = tmp;
+ }
+ if (c1 > text.length) {
+ ws = c1 - text.length;
+ c1 = text.length;
+ }
+ if (c2 > text.length) {
+ c2 = text.length;
+ }
+ func.call(this, p + c1, p + c2, ws, width);
+ }
+ }, begin == buffer.point());
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ string_rectangle: Ymacs_Interactive("r\nsString rectangle: ", function(begin, end, string) {
+ apply_on_rectangle(this, begin, end, function(c1, c2, ws){
+ if (ws > 0) {
+ this._insertText(" ".x(ws), c1);
+ } else {
+ this._deleteText(c1, c2);
+ }
+ this._insertText(string, c1 + ws);
+ });
+ }),
+
+ kill_rectangle: Ymacs_Interactive("r", function(begin, end){
+ var text = [];
+ apply_on_rectangle(this, begin, end, function(c1, c2, ws, width){
+ var str = this._bufferSubstring(c1, c2);
+ if (c2 - c1 < width)
+ str += " ".x(width - c2 + c1);
+ text.push(str);
+ this._deleteText(c1, c2);
+ });
+ this.setq("killed_rectangle", text);
+ }),
+
+ clear_rectangle: Ymacs_Interactive("r", function(begin, end){
+ this.cmd("string_rectangle", begin, end,
+ " ".x(Math.abs(this._positionToRowCol(end).col -
+ this._positionToRowCol(begin).col)));
+ }),
+
+ insert_rectangle: function(point, rect) {
+ var col = this._positionToRowCol(point).col;
+ this.cmd("set_mark_command", point);
+ rect.foreach(function(text, i){
+ if (i > 0) {
+ if (!this.cmd("forward_line")) {
+ this.cmd("end_of_line");
+ this.cmd("newline");
+ }
+ this.cmd("move_to_column", col, true);
+ }
+ this.cmd("insert", text);
+ }, this);
+ },
+
+ yank_rectangle: Ymacs_Interactive("d", function(point){
+ var kr = this.getq("killed_rectangle");
+ if (kr == null)
+ throw new Ymacs_Exception("No killed rectangle");
+ this.cmd("insert_rectangle", point, kr);
+ })
+
+ });
+
+})();
+
+/* -----[ commands to help using the system clipboard ]----- */
+
+(function(){
+
+ // <XXX>
+ // this should be moved some level up if it proves to be more
+ // generally useful
+ function modalTextarea(title, text, cont) {
+ var dlg = this.createDialog({ title : title,
+ quitBtn : "destroy",
+ modal : true });
+ var entry = new DlEntry({ parent: dlg, type: "textarea", fillParent: true, value: text });
+ dlg._focusedWidget = entry;
+ dlg.setSize({ x: 350, y: 250 });
+ entry.addEventListener("onKeyPress", function(ev){
+ if (ev.keyCode != DlKeyboard.ESCAPE) {
+ // var code = entry.getValue().replace(/\t/g, " ");
+ var code = entry.getValue();
+ dlg.destroy();
+ cont.delayed(0, this, code);
+ // XXX Without a delay here, be it zero, stars will align in such a way that
+ // yank_from_operating_system will move the caret in some bizarre position after
+ // inserting the pasted text.
+ // cont.call(this, code);
+ }
+ }.clearingTimeout(0, this));
+ dlg.show(true);
+ entry.select();
+ };
+ // </XXX>
+
+ Ymacs_Buffer.newCommands({
+
+ yank_from_operating_system: Ymacs_Interactive(function() {
+ modalTextarea.call(this, "Paste below (press CTRL-V)", null, function(code){
+ this._saveKilledText(code);
+ this.cmd("yank");
+ this.cmd("recenter_top_bottom");
+ });
+ }),
+
+ copy_for_operating_system: Ymacs_Interactive("r", function(begin, end) {
+ modalTextarea.call(this, "Press CTRL-C", this.cmd("buffer_substring"), function(){
+ this.cmd("copy_region_as_kill", begin, end);
+ });
+ }),
+
+ kill_for_operating_system: Ymacs_Interactive("r", function(begin, end) {
+ modalTextarea.call(this, "Press CTRL-C or CTRL-X", this.cmd("buffer_substring"), function(){
+ this.cmd("kill_region", begin, end);
+ });
+ })
+
+ });
+
+})();
+
+/* -----[ transient mark extension commands ]----- */
+
+[
+ "forward_char",
+ "forward_word",
+ "forward_line",
+ "forward_paragraph",
+ "forward_sexp",
+ "beginning_of_line",
+ "beginning_of_indentation_or_line",
+ "beginning_of_buffer",
+ "backward_char",
+ "backward_word",
+ "backward_line",
+ "backward_paragraph",
+ "backward_sexp",
+ "end_of_line",
+ "end_of_buffer"
+
+].foreach(function(cmd) {
+ Ymacs_Buffer.COMMANDS[cmd + "_mark"] = Ymacs_Interactive("^", function(){
+ this.ensureTransientMark();
+ this.cmdApply(cmd, arguments);
+ this.ensureTransientMark();
+ });
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-exception.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-exception.js.svn-base
new file mode 100644
index 0000000..9a3f9bb
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-exception.js.svn-base
@@ -0,0 +1,36 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+function Ymacs_Exception(why) {
+ this.message = why;
+};
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-frame.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-frame.js.svn-base
new file mode 100644
index 0000000..c2c83cd
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-frame.js.svn-base
@@ -0,0 +1,696 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs.js
+
+DEFINE_CLASS("Ymacs_Frame", DlContainer, function(D, P, DOM) {
+
+ var DBL_CLICK_SPEED = 300;
+
+ var EX = DlException.stopEventBubbling;
+
+ var LINE_DIV = DOM.createElement("div", null, { className: "line", innerHTML: "<br/>" });
+
+ var BLINK_TIMEOUT = 225;
+
+ D.DEFAULT_EVENTS = [ "onPointChange" ];
+
+ D.DEFAULT_ARGS = {
+ highlightCurrentLine : [ "highlightCurrentLine" , true ],
+ buffer : [ "buffer" , null ],
+ ymacs : [ "ymacs" , null ],
+ isMinibuffer : [ "isMinibuffer" , false ],
+
+ // override in DlWidget
+ _focusable : [ "focusable" , true ],
+ _fillParent : [ "fillParent" , true ]
+ };
+
+ D.CONSTRUCT = function() {
+ this.__blinkCaret = this.__blinkCaret.$(this);
+ this.__caretId = Dynarch.ID();
+ this.redrawModelineWithTimer = this.redrawModeline.clearingTimeout(0, this);
+
+ this.getElement().innerHTML = HTML;
+
+ this.addEventListener({
+ onDestroy : this._on_destroy,
+ onFocus : this._on_focus,
+ onBlur : this._on_blur,
+ onMouseDown : this._on_mouseDown,
+ onKeyDown : this._on_keyDown,
+ onKeyPress : this._on_keyPress,
+ onKeyPress : this._on_keyPress,
+ onKeyUp : this._on_keyUp,
+ onResize : this._on_resize
+ });
+
+ this._dragSelectCaptures = {
+ onMouseOver : EX,
+ onMouseOut : EX,
+ onMouseEnter : EX,
+ onMouseLeave : EX,
+ onMouseMove : _dragSelect_onMouseMove.$(this),
+ onMouseUp : _dragSelect_onMouseUp.$(this)
+ };
+
+ this._bufferEvents = {
+ onLineChange : this._on_bufferLineChange.$(this),
+ onInsertLine : this._on_bufferInsertLine.$(this),
+ onDeleteLine : this._on_bufferDeleteLine.$(this),
+ onPointChange : this._on_bufferPointChange.$(this),
+ onResetCode : this._on_bufferResetCode.$(this),
+ onOverwriteMode : this._on_bufferOverwriteMode.$(this),
+ onProgressChange : this._on_bufferProgressChange.$(this),
+ beforeInteractiveCommand : this._on_bufferBeforeInteractiveCommand.$(this),
+ afterInteractiveCommand : this._on_bufferAfterInteractiveCommand.$(this),
+ onOverlayDelete : this._on_bufferOverlayDelete.$(this)
+ };
+
+ this._moreBufferEvents = {
+ onMessage : this._on_bufferMessage.$(this),
+ onOverlayChange : this._on_bufferOverlayChange.$(this),
+ afterInteractiveCommand : this.ensureCaretVisible.$(this)
+ };
+
+ var buffer = this.buffer;
+ this.buffer = null;
+ if (buffer)
+ this.setBuffer(buffer);
+ if (!this.isMinibuffer && this.ymacs.cf_lineNumbers)
+ this.toggleLineNumbers();
+ };
+
+ var HTML = String.buffer(
+ "<div class='Ymacs-frame-overlays'>",
+ "<div class='Ymacs-frame-content'></div>",
+ "</div>",
+ "<div class='Ymacs_Modeline'></div>"
+ ).get();
+
+ P.focus = function(exitAllowed) {
+ D.BASE.focus.call(this);
+ if (exitAllowed instanceof Function) {
+ this.removeEventListener("onBlur", this.__exitFocusHandler);
+ this.addEventListener("onBlur", this.__exitFocusHandler = function(){
+ if (exitAllowed.call(this.buffer)) {
+ this.removeEventListener("onBlur", this.__exitFocusHandler);
+ } else {
+ this.focus.delayed(2, this, null);
+ }
+ });
+ }
+ };
+
+ P.blur = function(force) {
+ if (force)
+ this.removeEventListener("onBlur", this.__exitFocusHandler);
+ D.BASE.blur.call(this);
+ };
+
+ P.getOverlaysContainer = function() {
+ return this.getElement().firstChild;
+ };
+
+ P.getModelineElement = function() {
+ return this.getElement().childNodes[1];
+ };
+
+ P.getContentElement = function() {
+ return this.getElement().firstChild.firstChild;
+ };
+
+ P.getCaretElement = function() {
+ return document.getElementById(this.__caretId);
+ };
+
+ P.getLineDivElement = function(row) {
+ return this.getContentElement().childNodes[row] || null;
+ };
+
+ P.ensureCaretVisible = function() {
+ this._redrawCaret();
+
+ var caret = this.getCaretElement();
+ if (!caret)
+ return;
+ var div = this.getOverlaysContainer(), line = this.getLineDivElement(this.buffer._rowcol.row);
+
+ // vertical
+ var diff = line.offsetTop + line.offsetHeight - (div.scrollTop + div.clientHeight);
+ if (diff > 0) {
+ div.scrollTop += diff;
+ } else {
+ diff = line.offsetTop - div.scrollTop;
+ if (diff < 0) {
+ div.scrollTop += diff;
+ }
+ }
+
+ // horizontal
+ diff = caret.offsetLeft + caret.offsetWidth - (div.scrollLeft + div.clientWidth);
+ // if (caret.offsetLeft + caret.offsetWidth < div.clientWidth)
+ // div.scrollLeft = 0;
+ if (diff > 0) {
+ div.scrollLeft += diff;
+ } else {
+ diff = caret.offsetLeft - div.scrollLeft;
+ if (diff < 0)
+ div.scrollLeft += diff;
+ }
+ };
+
+ P.setBuffer = function(buffer) {
+ if (this.buffer) {
+ if (this.caretMarker && !this.isMinibuffer) {
+ this.caretMarker.destroy();
+ this.caretMarker = null;
+ }
+ this.buffer.removeEventListener(this._bufferEvents);
+ this.buffer.removeEventListener(this._moreBufferEvents);
+ }
+ this.buffer = buffer;
+ if (buffer) {
+ this.buffer.addEventListener(this._bufferEvents);
+ if (this.focusInside()) {
+ buffer.addEventListener(this._moreBufferEvents);
+ }
+ if (this.isMinibuffer) {
+ this.caretMarker = buffer.caretMarker;
+ } else {
+ this.caretMarker = buffer.createMarker(buffer.caretMarker.getPosition());
+ }
+ this._redrawBuffer();
+ this._redrawCaret(true);
+ this.centerOnCaret();
+ }
+ };
+
+ P.centerOnCaret = function() {
+ this.centerOnLine(this.buffer._rowcol.row);
+ };
+
+ P.centerOnLine = function(row) {
+ var line = this.getLineDivElement(row), div = this.getOverlaysContainer();
+ div.scrollTop = Math.round(line.offsetTop - div.clientHeight / 2 + line.offsetHeight / 2);
+ // this._redrawBuffer();
+ };
+
+ P.setModelineContent = function(html) {
+ this.getModelineElement().innerHTML = html;
+ };
+
+ P.deleteOtherFrames = function() {
+ this.ymacs.keepOnlyFrame(this);
+ };
+
+ P.deleteFrame = function() {
+ this.ymacs.deleteFrame(this);
+ };
+
+ P.vsplit = function(percent) {
+ if (percent == null) percent = "50%";
+ var cont = this.parent,
+ fr = this.ymacs.createFrame({ buffer: this.buffer }),
+ layout = new DlLayout(),
+ rb = new DlResizeBar({ widget: this, keepPercent: true, horiz: true, className: "Ymacs-splitbar-horiz" });
+ if (this._resizeBar)
+ this._resizeBar._widget = layout;
+ this._resizeBar = rb;
+ cont.replaceWidget(this, layout);
+ layout.packWidget(this, { pos: "top", fill: percent });
+ layout.packWidget(rb, { pos: "top" });
+ layout.packWidget(fr, { pos: "top", fill: "*" });
+ cont.__doLayout();
+ fr.centerOnCaret();
+ };
+
+ P.hsplit = function(percent) {
+ if (percent == null) percent = "50%";
+ var cont = this.parent,
+ fr = this.ymacs.createFrame({ buffer: this.buffer }),
+ layout = new DlLayout(),
+ rb = new DlResizeBar({ widget: this, keepPercent: true, className: "Ymacs-splitbar-vert" });
+ if (this._resizeBar)
+ this._resizeBar._widget = layout;
+ this._resizeBar = rb;
+ cont.replaceWidget(this, layout);
+ layout.packWidget(this, { pos: "left", fill: percent });
+ layout.packWidget(rb, { pos: "left" });
+ layout.packWidget(fr, { pos: "left", fill: "*" });
+ cont.__doLayout();
+ fr.centerOnCaret();
+ };
+
+ P.toggleLineNumbers = function() {
+ this.condClass(this.__lineNumbers =! this.__lineNumbers, "Ymacs-line-numbers");
+ };
+
+ function insertInText(div, col, el) {
+ // this is for empty lines
+ if (/^br$/i.test(div.firstChild.tagName)) {
+ div.insertBefore(el, div.firstChild);
+ return el;
+ }
+ var len = 0, OUT = {};
+ function walk(div) {
+ for (var i = div.firstChild; i; i = i.nextSibling) {
+ if (i.nodeType == 3 /* TEXT */) {
+ var clen = i.length;
+ if (len + clen > col) {
+ var pos = col - len; // here we should insert it, relative to the current node
+ var next = i.splitText(pos);
+ div.insertBefore(el, next);
+ throw OUT;
+ }
+ else if (len + clen == col) {
+ // this case is simpler; it could have been treated
+ // above, but let's optimize a bit since there's no need
+ // to split the text.
+ div.insertBefore(el, i.nextSibling);
+ throw OUT;
+ }
+ len += clen;
+ }
+ else if (i.nodeType == 1 /* ELEMENT */) {
+ walk(i); // recurse
+ }
+ }
+ };
+ try {
+ walk(div);
+ }
+ catch(ex) {
+ if (ex === OUT)
+ return el;
+ throw ex;
+ }
+ };
+
+ P.setMarkerAtPos = function(row, col) {
+ if (!row.tagName) // accept an element as well
+ row = this.getLineDivElement(row);
+ if (row)
+ return insertInText(row, col, DOM.createElement("span"));
+ };
+
+ P.__restartBlinking = function() {
+ this.__stopBlinking();
+ if (this.focusInside()) {
+ this.__caretTimer = setTimeout(this.__blinkCaret, 2 * BLINK_TIMEOUT);
+ }
+ };
+
+ P.__stopBlinking = function() {
+ clearTimeout(this.__caretTimer);
+ this.__showCaret();
+ };
+
+ P.__blinkCaret = function() {
+ DOM.condClass(this.getCaretElement(), this.BLINKING = ! this.BLINKING, "Ymacs-caret");
+ this.__caretTimer = setTimeout(this.__blinkCaret, BLINK_TIMEOUT);
+ };
+
+ P.__showCaret = function() {
+ DOM.addClass(this.getCaretElement(), "Ymacs-caret");
+ };
+
+ P._unhoverLine = function() {
+ if (this.__hoverLine != null) {
+ DOM.delClass(this.getLineDivElement(this.__hoverLine), "Ymacs-current-line");
+ this.__hoverLine = null;
+ }
+ };
+
+ P._redrawCaret = function(force) {
+ var isActive = this.ymacs.getActiveFrame() === this;
+ if (!force && !isActive)
+ return;
+
+ if (isActive && !this.isMinibuffer)
+ this.caretMarker.setPosition(this.buffer.caretMarker.getPosition());
+
+ var rc = this.buffer._rowcol;
+
+ if (this.highlightCurrentLine) {
+ this._unhoverLine();
+ DOM.addClass(this.getLineDivElement(rc.row), "Ymacs-current-line");
+ this.__hoverLine = rc.row;
+ }
+
+ // redraw the line where the caret was previously, so that it disappears from there
+ if (this.__prevCaretLine != null) {
+ this._on_bufferLineChange(this.__prevCaretLine);
+ }
+
+ // redraw current line if it's different
+ if (this.__prevCaretLine != rc.row) {
+ this.__prevCaretLine = rc.row;
+ this._on_bufferLineChange(rc.row);
+ }
+
+ // var caret = this.getCaretElement();
+ // if (caret)
+ // DOM.strip(caret);
+ // this._on_bufferLineChange(rc.row);
+
+ if (isActive)
+ this.__restartBlinking();
+
+ this.callHooks("onPointChange", rc.row, rc.col);
+ this.redrawModelineWithTimer(rc);
+ };
+
+ P._getLineHTML = function(row) {
+ var html = this.buffer.formatLineHTML(row, this.caretMarker);
+ // taking advantage of the fact that a literal > entered by the user will never appear in
+ // the generated HTML, since special HTMl characters are escaped.
+ var pos = html.indexOf("Ymacs-caret'>");
+ if (pos >= 0) {
+ html = html.substr(0, pos + 12)
+ + " id='" + this.__caretId + "'"
+ + html.substr(pos + 12);
+ }
+ return html;
+ };
+
+ P._redrawBuffer = function() {
+ this.setContent(this.buffer.code.map(function(line, i){
+ return this._getLineHTML(i).htmlEmbed("div", "line");
+ }, this).join(""));
+ };
+
+ P.coordinatesToRowCol = function(x, y) {
+ function findLine(r1, r2) {
+ if (r1 == r2)
+ return r1;
+ var row = Math.floor((r1 + r2) / 2),
+ div = self.getLineDivElement(row),
+ y1 = div.offsetTop,
+ y2 = y1 + div.offsetHeight - 1;
+ if (y2 < y)
+ return findLine(row + 1, r2);
+ if (y < y1)
+ return findLine(r1, row - 1);
+ return row;
+ };
+ function findCol(c1, c2) {
+ if (c1 == c2)
+ return c1;
+ var col = Math.floor((c1 + c2) / 2);
+ var p1 = self.coordinates(row, col),
+ p2 = self.coordinates(row, col + 1);
+ if (p2.x < x)
+ return findCol(col + 1, c2);
+ if (x < p1.x)
+ return findCol(c1, col - 1);
+ return col;
+ };
+ var self = this,
+ row = findLine(0, this.buffer.code.length - 1),
+ col = findCol(0, this.buffer.code[row].length);
+ return { row: row, col: col };
+ };
+
+ P.coordinates = function(row, col) {
+ var div = this.getLineDivElement(row);
+ var span = this.setMarkerAtPos(div, col);
+ var ret = { x: span.offsetLeft, y: div.offsetTop, h: div.offsetHeight };
+ DOM.trash(span);
+ return ret;
+ };
+
+ P.heightInLines = function() {
+ return Math.floor(this.getOverlaysContainer().clientHeight / this.getContentElement().firstChild.offsetHeight);
+ };
+
+ P.setOuterSize = P.setSize = function(sz) {
+ D.BASE.setOuterSize.apply(this, arguments);
+ DOM.setOuterSize(this.getOverlaysContainer(), sz.x, sz.y - this.getModelineElement().offsetHeight);
+ DOM.setOuterSize(this.getModelineElement(), sz.x);
+ };
+
+ P.redrawModeline = function(rc) {
+ this.setModelineContent(this.buffer.renderModelineContent(rc || this.caretMarker.getRowCol()));
+ };
+
+ /* -----[ event handlers ]----- */
+
+ P._on_bufferLineChange = function(row) {
+ var div = this.getLineDivElement(row);
+ if (div) {
+ //console.log("Redrawing line %d [%s]", row, this.buffer.code[row]);
+ div.innerHTML = this._getLineHTML(row);
+ }
+ };
+
+ P._on_bufferInsertLine = function(row, drawIt) {
+ var div = LINE_DIV.cloneNode(true);
+ this.getContentElement().insertBefore(div, this.getLineDivElement(row));
+ if (drawIt) {
+ div.innerHTML = this._getLineHTML(row);
+ }
+ };
+
+ P._on_bufferDeleteLine = function(row) {
+ DOM.trash(this.getLineDivElement(row));
+ };
+
+ P._on_bufferPointChange = function(rc, pos) {
+ this._redrawCaret();
+ };
+
+ P._on_bufferResetCode = function() {
+ this._redrawBuffer();
+ };
+
+ P._on_bufferOverwriteMode = function(om) {
+ this.condClass(om, "Ymacs-overwrite-mode");
+ };
+
+ P._on_bufferMessage = function(type, text, html, timeout) {
+ var anchor = this.isMinibuffer ? this.ymacs : this;
+ var popup = Ymacs_Message_Popup.get(0);
+ popup.popup({
+ content : html ? text : text.htmlEscape(),
+ widget : anchor,
+ anchor : anchor.getElement(),
+ align : { prefer: "CC", fallX1: "CC", fallX2: "CC", fallY1: "CC", fallY2: "CC" }
+ });
+ popup.hide(timeout || 5000);
+ };
+
+ P._on_bufferBeforeInteractiveCommand = function() {
+ this._unhoverLine();
+ Ymacs_Message_Popup.clearAll();
+ };
+
+ P._on_bufferAfterInteractiveCommand = function() {};
+
+ P._on_bufferProgressChange = function() {
+ this.redrawModelineWithTimer(null);
+ };
+
+ P.getOverlayId = function(name) {
+ return this.id + "-ovl-" + name;
+ };
+
+ P.getOverlayHTML = function(name, props) {
+ if (props.line1 == props.line2 && props.col1 == props.col2) {
+ this._on_bufferOverlayDelete(name, props);
+ return null;
+ }
+ var p1 = this.coordinates(props.line1, props.col1);
+ var p2 = this.coordinates(props.line2, props.col2);
+ var p0 = this.__lineNumbers ? this.coordinates(props.line1, 0) : { x: 0, y: 0 };
+ p1.x -= p0.x;
+ p2.x -= p0.x;
+ var str = String.buffer(
+ "<div id='", this.getOverlayId(name), "' class='Ymacs_Overlay ", name,
+ "' style='top:", p1.y, "px;left:", p0.x, "px'>"
+ );
+ if (props.line1 == props.line2) {
+ str("<div class='", name, "' style='margin-left:", p1.x,
+ "px; width:", p2.x - p1.x, "px;height:", p2.h, "px;'>&nbsp;</div>");
+ } else {
+ str("<div class='", name, "' style='margin-left:", p1.x, "px;height:", p1.h, "px;'>&nbsp;</div>");
+ if (props.line2 - props.line1 > 1)
+ str("<div class='", name, "' style='height:", p2.y - p1.y - p1.h, "px'></div>");
+ str("<div class='", name, "' style='width:", p2.x, "px;height:", p2.h, "px;'>&nbsp;</div>");
+ }
+ str("</div>");
+ return str.get();
+ };
+
+ P.getOverlaysCount = function() {
+ return this.getOverlaysContainer().childNodes.length - 1; // XXX: subtract the div.content; we need to revisit this if we add new elements.
+ };
+
+ P._on_bufferOverlayChange = function(name, props, isNew) {
+ var div = this.getOverlayHTML(name, props);
+ if (div) {
+ div = DOM.createFromHtml(div);
+ var p = this.getOverlaysContainer(),
+ old = !isNew && $(this.getOverlayId(name));
+ old ? p.replaceChild(div, old) : p.appendChild(div);
+ // this.condClass(this.getOverlaysCount() > 0, "Ymacs_Frame-hasOverlays");
+ }
+ };
+
+ P._on_bufferOverlayDelete = function(name, props, isNew) {
+ DOM.trash($(this.getOverlayId(name)));
+ // this.condClass(this.getOverlaysCount() > 0, "Ymacs_Frame-hasOverlays");
+ };
+
+ /* -----[ self events ]----- */
+
+ P._on_destroy = function() {
+ this.setBuffer(null);
+ this.__stopBlinking();
+ };
+
+ P._on_focus = function() {
+ window.focus();
+ // console.log("FOCUS for %s", this.buffer.name);
+ this.ymacs.setActiveFrame(this, true);
+ this.addClass("Ymacs_Frame-active");
+ if (!this.isMinibuffer) {
+ this.buffer.cmd("goto_char", this.caretMarker.getPosition());
+ }
+ this.buffer.addEventListener(this._moreBufferEvents);
+ this.__restartBlinking();
+ };
+
+ P._on_blur = function() {
+ // console.log("BLUR for %s", this.buffer.name);
+ if (!this.isMinibuffer) {
+ this.caretMarker.setPosition(this.buffer.caretMarker.getPosition());
+ }
+ this.buffer.removeEventListener(this._moreBufferEvents);
+ this.__stopBlinking();
+ };
+
+ var CLICK_COUNT = 0, CLICK_COUNT_TIMER = null, CLICK_LAST_TIME = null;
+ function CLEAR_CLICK_COUNT() { CLICK_COUNT = null };
+
+ P._on_mouseDown = function(ev) {
+ clearTimeout(CLICK_COUNT_TIMER);
+ CLICK_COUNT++;
+ CLICK_COUNT_TIMER = CLEAR_CLICK_COUNT.delayed(DBL_CLICK_SPEED);
+
+ this.__restartBlinking();
+ var pos = ev.computePos(this.getContentElement()),
+ rc = this.coordinatesToRowCol(pos.x, pos.y),
+ buf = this.buffer;
+
+ buf.clearTransientMark();
+ buf.cmd("goto_char", buf._rowColToPosition(rc.row, rc.col));
+ buf.callInteractively("keyboard_quit");
+ if (CLICK_COUNT == 1) {
+ buf.ensureTransientMark();
+ DlEvent.captureGlobals(this._dragSelectCaptures);
+ }
+ else if (CLICK_COUNT == 2) {
+ buf.cmd("backward_word");
+ buf.cmd("forward_word_mark");
+ }
+ else if (CLICK_COUNT == 3) {
+ buf.cmd("beginning_of_line");
+ buf.cmd("end_of_line_mark");
+ }
+ else if (CLICK_COUNT == 4) {
+ buf.cmd("backward_paragraph");
+ buf.cmd("forward_whitespace");
+ buf.cmd("beginning_of_line");
+ buf.cmd("forward_paragraph_mark");
+ }
+
+ EX();
+ };
+
+ function _dragSelect_onMouseMove(ev) {
+ var pos = ev.computePos(this.getContentElement()),
+ rc = this.coordinatesToRowCol(pos.x, pos.y);
+ this.buffer.cmd("goto_char", this.buffer._rowColToPosition(rc.row, rc.col));
+ this.buffer.ensureTransientMark();
+ this.ensureCaretVisible();
+ };
+
+ function _dragSelect_onMouseUp(ev) {
+ DlEvent.releaseGlobals(this._dragSelectCaptures);
+ };
+
+ P._on_keyDown = function(ev) {
+ if (!is_gecko) {
+ var ki = window.KEYBOARD_INSANITY, code = ev.keyCode;
+ if (code in ki.modifiers)
+ EX();
+ if ((code in ki.letters || code in ki.digits || code in ki.symbols) && !(ev.ctrlKey || ev.altKey)) {
+ return; // to be handled by the upcoming keypress event
+ }
+ ev.charCode = ki.getCharCode(code, ev.shiftKey);
+ if (ev.charCode)
+ ev.keyCode = 0;
+ if (this.buffer._handleKeyEvent(ev))
+ EX();
+ }
+ };
+ P._on_keyPress = function(ev) {
+ if (!is_gecko)
+ ev.keyCode = 0;
+ if (this.buffer._handleKeyEvent(ev))
+ EX();
+ var one = this.buffer.cmd("wrap_status");
+ if(one =="Wrap At Edge")
+ {
+ this.buffer.cmd("wrap_at_edge");
+ }
+ };
+
+
+ P._on_keyUp = function(ev) {
+ };
+
+ P._on_resize = function() {
+ this.centerOnCaret.delayed(1, this);
+ };
+
+});
+
+DEFINE_CLASS("Ymacs_Message_Popup", DlPopup, function(D, P) {
+ D.FIXARGS = function(args) {
+ args.focusable = false;
+ args.autolink = false;
+ args.zIndex = 5000;
+ };
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-interactive.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-interactive.js.svn-base
new file mode 100644
index 0000000..565c264
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-interactive.js.svn-base
@@ -0,0 +1,286 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-exception.js
+
+(function(){
+
+ /*
+ * Ymacs_Interactive(args_description, function_reference)
+ *
+ * This is a wrapper that makes it easy to define "interactive" commands. Pass two arguments: arguments
+ * description (args), and a function (func). args can be null, or a string, an array or a function. When null
+ * it is assumed that the function should not receive any arguments. When an array or a string, it contains
+ * some argument descriptions similar to Emacs:
+ *
+ * http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes
+ *
+ * (note that Emacs does not take a list for this argument).
+ *
+ * Ymacs_Interactive returns func. When not called interactively, the code should supply all the required
+ * arguments and the function is called with no performance penalty. To call it interactively, use
+ * func.ymacsCallInteractively(), which will read arguments from the minibuffer according to their description.
+ */
+
+ window.Ymacs_Interactive = function(args, func) {
+ if (arguments.length == 1) {
+ func = args;
+ args = null;
+ } else {
+ var documentation;
+ if (!(func instanceof Function)) {
+ documentation = func;
+ func = arguments[2];
+ func.ymacsDoc = documentation;
+ }
+ }
+ func.ymacsInteractive = true;
+ if (args instanceof Function) {
+ func.ymacsGetArgs = args;
+ }
+ else if (args != null) {
+ if (!(args instanceof Array)) {
+ var m = /^[\^\@\*]+/.exec(args);
+ if (m) {
+ m = m[0];
+ args = args.substr(m.length);
+ if (m.indexOf("^") >= 0) {
+ func.ymacsMarkExtend = true;
+ }
+ if (m.indexOf("*") >= 0) {
+ func.ymacsWarnReadonly = true;
+ }
+ if (m.indexOf("@") >= 0) {
+ func.ymacsSelectFrame = true;
+ }
+ }
+ if (args)
+ args = args.split(/\n+/);
+ }
+ if (args) {
+ var collect,
+ execute = function() {
+ collect.append(Array.$(arguments));
+ return this.callInteractively(func, collect, true);
+ };
+ while (args.length > 0) {
+ execute = createArgumentFunction(args.pop(), function(next) {
+ collect.append(Array.$(arguments, 1));
+ next.call(this);
+ }.$(null, execute));
+ }
+ func.ymacsCallInteractively = function(){
+ collect = [];
+ return execute.call(this);
+ };
+ }
+ }
+ return func;
+ };
+
+ window.Ymacs_Interactive_X = function(func) {
+ return Ymacs_Interactive("p", function(n){
+ if (n == null) n = 1;
+ n.times(func, this);
+ });
+ };
+
+ var $TRUE = (function(){});
+ $TRUE.toString = function() { return "" };
+ $TRUE.empty = true;
+
+ /* -----[ argument reader functions ]----- */
+
+ function prompt(arg) {
+ var pr = this.getPrefixArg(true /* noDiscard */);
+ if (pr) {
+ arg = pr + " " + arg;
+ }
+ this.cmd("minibuffer_prompt", arg);
+ };
+
+ function read_function_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_function", cont);
+ // XXX: enforce it!
+ };
+
+ function read_existing_buffer_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_buffer", cont);
+ // XXX: enforce it!
+ };
+
+ function read_buffer_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_buffer", cont);
+ };
+
+ function read_character(arg, cont) {
+
+ };
+
+ function read_command_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_command", cont);
+ // XXX: enforce it!
+ };
+
+ function get_point(arg, cont) {
+ cont.call(this, this.point());
+ };
+
+ function get_mouse_event(arg, cont) {
+
+ };
+
+ function irrelevant(arg, cont) {
+ cont.call(this, null);
+ };
+
+ function read_key_sequence(arg, cont) {
+
+ };
+
+ function read_key_sequence2(arg, cont) {
+
+ };
+
+ function get_mark(arg, cont) {
+ cont.call(this, this.markMarker.getPosition());
+ };
+
+ function read_arbitrary_text(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_string", null, cont);
+ };
+
+ function read_number(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_number", cont);
+ };
+
+ function read_number_or_prefix(arg, cont) {
+ var n = parseInt(this.getPrefixArg(), 10);
+ if (!isNaN(n))
+ cont.call(this, n);
+ else
+ read_number.call(this, arg, cont);
+ };
+
+ function get_numeric_prefix(arg, cont) {
+ var n = parseInt(this.getPrefixArg(), 10);
+ if (isNaN(n))
+ n = null;
+ cont.call(this, n);
+ };
+
+ function get_raw_prefix(arg, cont) {
+ arg = this.getPrefixArg();
+ if (arg === "")
+ arg = $TRUE;
+ cont.call(this, arg);
+ };
+
+ function get_point_and_mark(arg, cont) {
+ var r = this.getRegion();
+ cont.call(this, r.begin, r.end);
+ };
+
+ function read_key_sequence3(arg, cont) {
+
+ };
+
+ function read_variable_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_variable", cont);
+ };
+
+ function read_existing_file_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_existing_file", cont);
+ };
+
+ function read_file_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_file", cont);
+ };
+
+ function read_file_or_directory_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_file_or_directory", cont);
+ };
+
+ function read_existing_directory_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_directory", cont);
+ };
+
+ var ARG_READERS = {
+ a: read_function_name,
+ b: read_existing_buffer_name,
+ B: read_buffer_name,
+ c: read_character,
+ C: read_command_name,
+ d: get_point,
+ e: get_mouse_event,
+ i: irrelevant,
+ k: read_key_sequence,
+ K: read_key_sequence2,
+ m: get_mark,
+ M: read_arbitrary_text,
+ n: read_number,
+ N: read_number_or_prefix,
+ p: get_numeric_prefix,
+ P: get_raw_prefix,
+ r: get_point_and_mark,
+ s: read_arbitrary_text,
+ U: read_key_sequence3,
+ v: read_variable_name,
+
+ f: read_existing_file_name,
+ F: read_file_name,
+ G: read_file_or_directory_name,
+ D: read_existing_directory_name
+
+ // S: no reader for interned symbols in Ymacs
+ // no x, X, z and Z either
+ };
+
+ function createArgumentFunction(arg, cont) {
+ var code = arg.charAt(0);
+ arg = arg.substr(1);
+ return ARG_READERS[code].$(null, arg, cont);
+ };
+
+})();
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keyboard.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keyboard.js.svn-base
new file mode 100644
index 0000000..c15fd35
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keyboard.js.svn-base
@@ -0,0 +1,106 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// This file tries to define some keyboard constants based on the
+// sheer insanity of browser inconsistencies described here:
+//
+// http://unixpapa.com/js/key.html
+//
+// Kudos for that work!
+
+(function(){
+
+ var letters = {};
+ for (var i = 65; i <= 90; ++i)
+ letters[i] = [ i, i + 32 ];
+ letters[32] = [ 32, 32 ];
+
+ var modifiers = [ 16, 17, 18, 20, 144 ].toHash(true);
+
+ var digit_charcodes = [
+ [ 49, 33 ],
+ [ 50, 64 ],
+ [ 51, 35 ],
+ [ 52, 36 ],
+ [ 53, 37 ],
+ [ 54, 94 ],
+ [ 55, 38 ],
+ [ 56, 42 ],
+ [ 57, 40 ],
+ [ 48, 41 ]
+ ];
+
+ var digits = [ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 ].toHash(function(k, i) {
+ return digit_charcodes[i];
+ });
+
+ var symbol_charcodes = [
+ [ 59, 58 ],
+ [ 61, 43 ],
+ [ 44, 60 ],
+ [ 45, 95 ],
+ [ 46, 62 ],
+ [ 47, 63 ],
+ [ 96, 126 ],
+ [ 91, 123 ],
+ [ 92, 124 ],
+ [ 93, 125 ],
+ [ 39, 34 ]
+ ];
+
+ var symbols = ( is_gecko ? [ 59, 61, 188, 109, 190, 191, 192, 219, 220, 221, 222 ]
+ : is_opera ? [ 59, 61, 44, 45, 46, 47, 96, 91, 92, 93, 39 ]
+ : [ 186, 187, 188, 189, 190, 191, 192, 219, 220, 221, 222 ] ).toHash(function(k, i) {
+ return symbol_charcodes[i];
+ });
+
+ var arrows = [ 37, 38, 39, 40 ].toHash(true);
+
+ var specials = [ 45, 46, 36, 35, 33, 34, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123 ].toHash(true);
+
+ function getCharCode(code, shift) {
+ var a = letters[code] || digits[code] || symbols[code];
+ return a ? shift ? a[1] : a[0] : null;
+ };
+
+ window.KEYBOARD_INSANITY = {
+ letters : letters,
+ modifiers : modifiers,
+ digits : digits,
+ symbols : symbols,
+ arrows : arrows,
+ specials : specials,
+ getCharCode : getCharCode
+ };
+
+})();
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap-emacs.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap-emacs.js.svn-base
new file mode 100644
index 0000000..64c9891
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap-emacs.js.svn-base
@@ -0,0 +1,264 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-keymap.js
+
+// This is the default keymap, as configured in
+// Ymacs_Buffer::makeDefaultKeymap. It follows closely the standard
+// Emacs keybindings, with some small deviations that match my taste
+// (search for "my stuff" below).
+
+// It would be nice to have more options, such as an Eclipse keymap,
+// or Visual Studio -- but I'm not familiar with any of them.
+// Contributions welcome.
+
+// A keymap inherits from Ymacs_Keymap and should define its bindings
+// in D.KEYS. They can also define a defaultHandler property to take
+// whatever action they consider necessary -- for example the Isearch
+// keymap will, by default, print the entered character in the
+// minibuffer and trigger a search action. Isearch mode is almost
+// completely defined in a keymap -- with the minor note that
+// isearch_forward and isearch_backward are assigned below to key
+// combinations; once pressed, they will push the Isearch keymap onto
+// the buffer's keymap stack, and it will be used until isearch is
+// ended.
+
+/* KEY DEFINITIONS. A key is generally defined in standard Emacs
+ notation, with the following notes:
+
+ - it is possible to define multiple keys at once for the same
+ operation, by using the "&&" combination (separate with spaces
+ from the actual keys)
+
+ - some special characters are named literally; their names contain
+ more than one character. The available names are defined in
+ DlKeyboard (see keyboard.js in DynarchLIB). Examples:
+ ARROW_RIGHT, PAGE_UP, etc. but also SPACE and DASH.
+
+ Normally you would define commands using Ymacs_Buffer.newCommands
+ (see ymacs-commands.js) and specify the command name for key
+ bindings, but you can specify a function as well, if you want:
+
+ "C-8": function() {
+ alert("You pressed CTRL-8");
+ }
+
+ It is advised to define commands for more than simple cases, for
+ two reasons:
+
+ 1. they can be used for "non-interactive" calls too
+
+ 2. the command name is saved in this.currentCommand /
+ this.previousCommand, which is useful in a number of cases.
+
+*/
+
+DEFINE_SINGLETON("Ymacs_Keymap_Emacs", Ymacs_Keymap, function(D, P){
+
+ var TMPL_INFO = String.template(
+ "<table>",
+ "<tr><td style='text-align: right; font-weight: bold'>Char:</td><td><tt> $ch </tt></td></tr>",
+ "<tr><td style='text-align: right; font-weight: bold'>Char code:</td><td> $code / 0x$codeHex </td></tr>",
+ "<tr><td style='text-align: right; font-weight: bold'>Position:</td><td> $point </td></tr>",
+ "<tr><td style='text-align: right; font-weight: bold'>Mark:</td><td> $mark </td></tr>",
+ "<tr><td style='text-align: right; font-weight: bold'>Buffer size:</td><td> $sizeKB </td></tr>",
+ "</table>"
+ );
+
+ D.KEYS = {
+ // movement
+ "ARROW_UP && C-p" : "backward_line",
+ "ARROW_DOWN && C-n" : "forward_line",
+ "ARROW_LEFT && C-b" : "backward_char",
+ "ARROW_RIGHT && C-f" : "forward_char",
+ "HOME" : "beginning_of_indentation_or_line",
+ "END && C-e" : "end_of_line",
+ "C-c C-c" : "sub_bullet",
+ "C-a" : "beginning_of_line",
+ "C-HOME && M-<" : "beginning_of_buffer",
+ "C-END && M->" : "end_of_buffer",
+ "C-ARROW_RIGHT && M-f" : "forward_word",
+ "C-ARROW_LEFT && M-b" : "backward_word",
+ "C-ARROW_DOWN" : "forward_paragraph",
+ "C-ARROW_UP" : "backward_paragraph",
+ "C-l" : "recenter_top_bottom",
+ "PAGE_UP && M-v" : "scroll_up",
+ "PAGE_DOWN && C-v" : "scroll_down",
+
+ // transient mark
+ "S-ARROW_UP && S-C-p" : "backward_line_mark",
+ "S-ARROW_DOWN && S-C-n" : "forward_line_mark",
+ "S-ARROW_LEFT && S-C-b" : "backward_char_mark",
+ "S-ARROW_RIGHT && S-C-f" : "forward_char_mark",
+ "S-C-ARROW_RIGHT && S-M-f" : "forward_word_mark",
+ "S-C-ARROW_LEFT && S-M-b" : "backward_word_mark",
+ "S-C-ARROW_DOWN" : "forward_paragraph_mark",
+ "S-C-ARROW_UP" : "backward_paragraph_mark",
+ "S-HOME" : "beginning_of_indentation_or_line_mark",
+ "S-C-a" : "beginning_of_line_mark",
+ "S-END" : "end_of_line_mark",
+ "S-C-HOME" : "beginning_of_buffer_mark",
+ "S-C-END" : "end_of_buffer_mark",
+
+ // basic editing
+ "BACKSPACE" : "backward_delete_char",
+ "DELETE && C-d" : "delete_char",
+ "ENTER && C-m" : "newline",
+ "M-d && C-DELETE" : "kill_word",
+ "C-BACKSPACE && M-BACKSPACE && M-DELETE" : "backward_kill_word",
+ "C-k" : "kill_line",
+ "C-y && S-INSERT" : "yank",
+ "M-y" : "yank_pop",
+ "C-SPACE" : "set_mark_command",
+ "C-x C-x" : "exchange_point_and_mark",
+ "C-w" : "kill_region",
+ "M-t" : "transpose_words",
+ "C-t" : "transpose_chars",
+ "C-x C-t" : "transpose_lines",
+ "M-w" : "copy_region_as_kill",
+ "M-c" : "capitalize_word",
+ "M-u" : "upcase_word",
+ "M-l" : "downcase_word",
+ "F11" : "nuke_trailing_whitespace",
+ "TAB" : "indent_line",
+ "C-M-\\" : "indent_region",
+ "M-q" : "fill_paragraph",
+ "C-/ && C-x u && C-_ && C-z" : "undo",
+ "INSERT" : "overwrite_mode",
+ "M-s" : "center_line",
+ "M-/" : "dabbrev_expand",
+ "C-s" : "isearch_forward",
+ "C-r" : "isearch_backward",
+ "M-C-s" : "isearch_forward_regexp",
+ "M-C-r" : "isearch_backward_regexp",
+ "C-u" : "universal_argument",
+ "M-g" : "goto_line",
+ "C-x h" : "mark_whole_buffer",
+ "C-g" : "keyboard_quit",
+
+ // vertical editing
+ "C-x r t" : "string_rectangle",
+ "C-x r c" : "clear_rectangle",
+ "C-x r k" : "kill_rectangle",
+ "C-x r y" : "yank_rectangle",
+
+ // buffers
+ "C-x C-ARROW_RIGHT && C-x ARROW_RIGHT && C-TAB" : "next_buffer",
+ "C-x C-ARROW_LEFT && C-x ARROW_LEFT && C-S-TAB" : "previous_buffer",
+ "C-x b" : "switch_to_buffer",
+ "C-x k" : "kill_buffer",
+
+ // frames
+ "C-x 0" : "delete_frame",
+ "C-x 1" : "delete_other_frames",
+ "C-x 2" : "split_frame_vertically",
+ "C-x 3" : "split_frame_horizontally",
+ "C-x o" : "other_frame",
+ "C-x l" : "toggle_line_numbers",
+ "C-c C-o" : "org-open-at-point",
+ //"C-c C-l" : "Links",
+
+ // eval
+ "M-x" : "execute_extended_command",
+
+ // necessary evil
+ "C-S-y" : "yank_from_operating_system",
+ "M-S-w" : "copy_for_operating_system",
+ "C-S-w" : "kill_for_operating_system",
+
+ // my stuff, sorry if these have different meanings in the standard Emacs keys
+ "M-S-y" : "yank_shift", // that's the reverse of yank_shift
+ "C-c /" : "close_last_xml_tag",
+ "S-BACKSPACE" : "backward_delete_whitespace",
+ "S-DELETE" : "delete_whitespace",
+ "C-M-d" : "delete_region_or_line",
+ "M-ENTER" : "start_next_paragraph",
+ "M-S-q" : "fill_paragraph_no_prefix",
+ "C-M-|" : "cperl_lineup",
+ "C-F4" : "kill_buffer",
+ "M-ARROW_LEFT" : [ "windmove", "left" ],
+ "M-ARROW_RIGHT" : [ "windmove", "right" ],
+ "M-ARROW_UP" : [ "windmove", "up" ],
+ "M-ARROW_DOWN" : [ "windmove", "down" ],
+
+ // others
+ "C-x =": function() {
+ var ch = this.charAt(), chname = ch;
+ if (ch == " ")
+ chname = "<SPACE>";
+ else if (ch == "\n")
+ chname = "<NEWLINE>";
+ else if (ch == "-")
+ chname = "<DASH>";
+
+ this.signalInfo(TMPL_INFO({
+ ch : chname.htmlEscape(),
+ code : ch.charCodeAt(0),
+ codeHex : ch.charCodeAt().hex(),
+ point : this.point(),
+ mark : this.markMarker.getPosition(),
+ size : this.getCodeSize(),
+ sizeKB : this.getCodeSize().formatBytes(2)
+ }), true);
+ }
+ };
+
+ P.defaultHandler = [ "self_insert_command" ];
+
+});
+
+DEFINE_SINGLETON("Ymacs_Keymap_UniversalArgument", Ymacs_Keymap, function(D, P){
+
+ P.defaultHandler = [ Ymacs_Interactive("^", function(){
+ var ev = this.interactiveEvent(),
+ ch = String.fromCharCode(ev.charCode),
+ prefix = this.getPrefixArg(true);
+ if (ev.charCode && (/^[0-9]$/.test(ch) || (ch === "-" && prefix === "")) && !ev.altKey && !ev.ctrlKey) {
+ prefix += ch;
+ this.setPrefixArg(prefix);
+ if (!this.isMinibuffer) {
+ this.whenMinibuffer(function(mb){
+ mb.cmd("insert", " ", ch);
+ });
+ }
+ return true;
+ }
+ this.popKeymap(Ymacs_Keymap_UniversalArgument());
+ return false;
+ }) ];
+
+ P.attached = function(buffer) {
+ buffer.setPrefixArg("");
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap-isearch.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap-isearch.js.svn-base
new file mode 100644
index 0000000..593b772
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap-isearch.js.svn-base
@@ -0,0 +1,181 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-keymap.js
+
+DEFINE_SINGLETON("Ymacs_Keymap_ISearch", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "C-g && ESCAPE": [ "isearch_abort", true ],
+ "C-w": "isearch_yank_word_or_char",
+ "C-s": "isearch_forward",
+ "C-r": "isearch_backward",
+ "BACKSPACE": function() {
+ if (this.getMinibuffer().point() > this._isearchContext.mbMark.getPosition()) {
+ this.getMinibuffer().cmd("backward_delete_char");
+ this.cmd("goto_char", this._isearchContext.point);
+ updateIsearch.call(this, this._isearchContext.forward);
+ }
+ },
+ "ENTER": "isearch_abort"
+ };
+
+ D.CONSTRUCT = function() {
+ this.defaultHandler = [ "isearch_printing_char" ];
+ };
+
+ function initIsearch(fw) {
+ if (!this._isearchContext) {
+ this.pushKeymap(Ymacs_Keymap_ISearch());
+ this.cmd("set_mark_command", this.point());
+ this.setMinibuffer(fw ? "I-Search: " : "I-Search backward: ");
+ this._isearchContext = {
+ forward : fw,
+ point : this.point(),
+ mbMark : this.getMinibuffer().createMarker(null, true)
+ };
+ return true;
+ }
+ };
+
+ function updateIsearch(fw) {
+ this._isearchContext.forward = fw;
+ this._isearchContext.point = this.point();
+ var text = getText(this);
+ if (!/\S/.test(text) && this._isearchLastText) {
+ this.getMinibuffer()._placeUndoBoundary();
+ this.getMinibuffer().cmd("insert", this._isearchLastText);
+ text = this._isearchLastText;
+ }
+ return doSearch.call(this, text);
+ };
+
+ function doSearch(text) {
+ if (text == null)
+ text = getText(this);
+ var found = this.cmd("bind_variables", { case_fold_search: text == text.toLowerCase() },
+ this.cmd,
+ this._isearchContext.forward ? "search_forward" : "search_backward",
+ text);
+ if (found) {
+ this.cmd("ensure_caret_visible");
+ var rc_begin = this._positionToRowCol(this.point() + (this._isearchContext.forward ? -1 : 1) * text.length);
+ this.setOverlay("isearch", {
+ line1: rc_begin.row, line2: this._rowcol.row,
+ col1: rc_begin.col, col2: this._rowcol.col
+ });
+ }
+ return found;
+ };
+
+ function getText(o) {
+ return o.cmd("isearch_get_search_text");
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ isearch_get_search_text: Ymacs_Interactive(function() {
+ if (this._isearchContext) {
+ return this.getMinibuffer()._bufferSubstring(this._isearchContext.mbMark);
+ }
+ }),
+
+ isearch_forward: Ymacs_Interactive(function() {
+ if (!initIsearch.call(this, true)) {
+ if (!updateIsearch.call(this, true))
+ this.signalError("No more forward occurrences of the search text");
+ }
+ }),
+
+ isearch_forward_regexp: Ymacs_Interactive(function() {
+ this.signalError("Not implemented, but should be easy. Volunteers?");
+ }),
+
+ isearch_backward_regexp: Ymacs_Interactive(function() {
+ this.signalError("Not implemented, but should be easy. Volunteers?");
+ }),
+
+ isearch_backward: Ymacs_Interactive(function() {
+ if (!initIsearch.call(this, false)) {
+ if (!updateIsearch.call(this, false))
+ this.signalError("No more backward occurrences of the search text");
+ }
+ }),
+
+ isearch_yank_word_or_char: Ymacs_Interactive(function() {
+ var pos = this.point(),
+ pos2 = this.cmd("save_excursion", function(){
+ this.cmd("forward_word");
+ return this.point();
+ });
+ if (pos2 != pos) {
+ var word = this._bufferSubstring(pos, pos2);
+ this.getMinibuffer()._placeUndoBoundary();
+ this.getMinibuffer().cmd("insert", word.toLowerCase());
+ word = getText(this);
+ if (this._isearchContext.forward)
+ this.cmd("goto_char", pos2 - word.length);
+ doSearch.call(this, word);
+ }
+ }),
+
+ isearch_printing_char: Ymacs_Interactive(function() {
+ var ev = this.interactiveEvent();
+ if (ev.charCode && !ev.ctrlKey && !ev.altKey) {
+ this.getMinibuffer().cmd("self_insert_command");
+ this.cmd("goto_char", this._isearchContext.point);
+ doSearch.call(this, getText(this));
+ return ev.domStop = true;
+ } else if (ev.keyCode != 0 || ev.ctrlKey || ev.altKey) {
+ this.cmd("isearch_abort");
+ return false;
+ }
+ }),
+
+ isearch_abort: Ymacs_Interactive(function(cancelled) {
+ if (!cancelled)
+ this._isearchLastText = getText(this);
+ this.setMinibuffer("");
+ this.popKeymap(Ymacs_Keymap_ISearch());
+ this._isearchContext.mbMark.destroy();
+ this._isearchContext = null;
+ if (cancelled)
+ this.cmd("exchange_point_and_mark");
+ this.deleteOverlay("isearch");
+ this.deleteOverlay("isearch-lazy");
+ return true;
+ })
+
+ });
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap.js.svn-base
new file mode 100644
index 0000000..142570a
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-keymap.js.svn-base
@@ -0,0 +1,167 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+DEFINE_CLASS("Ymacs_Keymap", null, function(D, P){
+
+ var REVERSE_KEYS = {};
+ Object.foreach(DlKeyboard, function(val, key) {
+ if (typeof val == "number")
+ REVERSE_KEYS[val] = key;
+ });
+
+ D.CONSTRUCT = function() {
+ this.definitions = Object.makeCopy(this.__originalDefs);
+ };
+
+ P.FINISH_OBJECT_DEF = function() {
+ this.__originalDefs = {};
+ var keys = this.constructor.KEYS;
+ if (keys)
+ this.defineKeys(keys);
+ };
+
+ P.parseKey = function(str) {
+ var key = {};
+ var a = str.split(/-/);
+ a.reverse();
+ a.foreach(function(c, i){
+ if (i == 0) {
+ if (typeof DlKeyboard[c] == "number")
+ key.keyCode = DlKeyboard[c];
+ else {
+ a[i] = c.toLowerCase();
+ key.charCode = a[i].charCodeAt(0);
+ }
+ } else switch(c) {
+ case "C": key.ctrlKey = true; break;
+ case "M": key.metaKey = true; break;
+ case "S": key.shiftKey = true; break;
+ }
+ });
+ a.reverse();
+ var c = a.pop();
+ key.str = a.sort().join("-");
+ if (key.str)
+ key.str += "-";
+ key.str += c;
+ return key;
+ };
+
+ D.unparseKey = function(ev) {
+ var key, modifiers = [];
+ if (ev.keyCode in REVERSE_KEYS)
+ key = REVERSE_KEYS[ev.keyCode];
+ else if (ev.charCode) {
+ if (ev.charCode == 32)
+ key = "SPACE";
+ else if (ev.charCode == 45)
+ key = "DASH";
+ else if (ev.charCode == 58)
+ key = "COLON";
+ else if (ev.charCode == 41)
+ key = "CLOSED ROUND BRACKET";
+ else if (ev.charCode == 125)
+ key = "CLOSED CURLY BRACKET";
+ else
+ key = String.fromCharCode(ev.charCode).toLowerCase();
+ }
+ if (ev.ctrlKey)
+ modifiers.push("C");
+ if (ev.altKey)
+ modifiers.push("M");
+ if (ev.shiftKey && (ev.charCode && /^[a-zA-Z0-9]$/.test(key) || ev.keyCode))
+ modifiers.push("S");
+ modifiers.sort();
+ modifiers = modifiers.join("-");
+ if (modifiers)
+ modifiers += "-";
+ return modifiers + key;
+ };
+
+ P.defineKey = function(key, func, args) {
+ if (func instanceof Array) {
+ args = func.slice(1);
+ func = func[0];
+ }
+ key = key.trim().split(/\s*&&\s*/);
+ if (key.length > 1) {
+ key.foreach(function(key){
+ this.defineKey(key, func, args);
+ }, this);
+ } else {
+ key = key[0].trim();
+ var dfn = this.definitions || this.__originalDefs;
+ if (key.indexOf(" ") >= 0) {
+ var a = key.split(/\s+/);
+ key = a.pop();
+ a.foreach(function(key){
+ key = this.parseKey(key).str;
+ if (!dfn[key])
+ dfn[key] = {};
+ dfn = dfn[key];
+ }, this);
+ }
+ key = this.parseKey(key);
+ dfn[key.str] = [ func, args ];
+ }
+ };
+
+ P.defineKeys = function(map) {
+ Object.foreach(map, function(func, key){
+ this.defineKey(key, func);
+ }, this);
+ };
+
+ P.getHandler = function(keys) {
+ var handler = null, def = this.definitions;
+ keys.foreach(function(key){
+ var tmp = handler ? handler[key] : def[key];
+ if (tmp) {
+ handler = tmp;
+ if (handler instanceof Array)
+ $BREAK();
+ }
+ else if (handler) {
+ handler = null;
+ $BREAK();
+ }
+ });
+ return handler;
+ };
+
+ P.attached = Function.noop;
+ P.detached = Function.noop;
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-marker.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-marker.js.svn-base
new file mode 100644
index 0000000..ca9c1c0
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-marker.js.svn-base
@@ -0,0 +1,105 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+/* -----[ markers are objects that hold a position which is
+ automatically maintained as text is inserted or
+ removed ]----- */
+
+DEFINE_CLASS("Ymacs_Marker", null, function(D, P){
+
+ D.DEFAULT_ARGS = {
+ position : [ "pos" , null ],
+ editor : [ "editor" , null ],
+ before : [ "before" , false ],
+ name : [ "name" , null ]
+ };
+
+ D.CONSTRUCT = function() {
+ this.editor.markers.push(this);
+ this.rowcol = null;
+ this.onChange = [];
+ };
+
+ P.destroy = function() {
+ this.editor.markers.remove(this);
+ this.editor = null;
+ };
+
+ P.editorChange = function(pos, diff, min) {
+ var p = this.position;
+ if (this.before)
+ --p;
+ if (diff != 0 && pos <= p) {
+ this.rowcol = null;
+ this.position += diff;
+ if (this.position < min)
+ this.position = min;
+ this.callHooks(this.onChange, this.position);
+ }
+ };
+
+ P.callHooks = function(a, arg) {
+ for (var i = a.length; --i >= 0;)
+ a[i].call(this.editor, arg);
+ };
+
+ P.getPosition = function() {
+ return this.position;
+ };
+
+ P.setPosition = function(pos, noHooks, force) {
+ if (force || this.position != pos) {
+ this.rowcol = null;
+ this.position = pos;
+ if (!noHooks)
+ this.callHooks(this.onChange, this.position);
+ }
+ };
+
+ P.getRowCol = function() {
+ return this.rowcol || (this.rowcol = this.editor._positionToRowCol(this.position));
+ };
+
+ P.updateMarkers = function(delta) {
+ this.editor._updateMarkers(this.getPosition(), delta);
+ };
+
+ P.swap = function(other, noHooks, force) {
+ var tmp = this.getPosition();
+ this.setPosition(other.getPosition(), noHooks, force);
+ other.setPosition(tmp, noHooks, force);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-minibuffer.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-minibuffer.js.svn-base
new file mode 100644
index 0000000..01fd0f2
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-minibuffer.js.svn-base
@@ -0,0 +1,429 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+// @require ymacs-keymap.js
+
+Ymacs_Buffer.newMode("minibuffer_mode", function(){
+ var marker = this.createMarker(0, true);
+ var changed_vars = this.setq({
+ minibuffer_end_marker: marker
+ });
+ var keymap = Ymacs_Keymap_Minibuffer();
+ this.pushKeymap(keymap);
+ return function() {
+ this.setq(changed_vars);
+ marker.destroy();
+ this.popKeymap(keymap);
+ };
+});
+
+(function(){
+
+ var $popupActive = false;
+ var $menu = null, $item = null;
+ function popupCompletionMenu(frame, list) {
+ if ($menu)
+ $menu.destroy();
+ $menu = new DlVMenu({});
+ list.foreach(function(item){
+ var data = item;
+ if (typeof item != "string") {
+ data = item.completion;
+ item = item.label;
+ }
+ new DlMenuItem({ parent: $menu, label: item.htmlEscape(), data: data });
+ });
+ var popup = Ymacs_Completion_Popup.get();
+ popup.popup({
+ timeout: 0,
+ content: $menu,
+ align: {
+ prefer: "Tr",
+ fallX1: "_r",
+ fallX2: "_L",
+ fallY1: "B_",
+ fallY2: "T_"
+ },
+ anchor: frame.getCaretElement(),
+ widget: frame,
+ onHide: function() {
+ $popupActive = false;
+ // $menu.destroy();
+ $item = null;
+ $menu = null;
+ },
+ isContext: true
+ });
+ $popupActive = true;
+ };
+
+ function read_with_continuation(completions, cont, validate) {
+ this.whenMinibuffer(function(mb){
+ var changed_vars = mb.setq({
+ completion_list: completions,
+ minibuffer_validation: function(what){
+ if (what == null)
+ what = mb.cmd("minibuffer_contents");
+ if (validate)
+ return validate.call(this, mb, what);
+ return true; // accept anything by default
+ }.$(this),
+ minibuffer_continuation: function(what){
+ mb.setq(changed_vars);
+ if (cont)
+ cont.call(this, what);
+ }.$(this)
+ });
+ });
+ };
+
+ function filename_completion(mb, str) {
+ var info = this.ymacs.ls_getFileDirectory(str),
+ dir = info.dir,
+ other = info.other,
+ path = info.path,
+ last = other[0];
+ if (other.length != 1)
+ throw new Ymacs_Exception("Not found");
+ if (typeof dir[last] == "string")
+ return [ path.concat([ last ]).join("/") ]; // fully completed
+ var completions = [];
+ for (var i in dir) {
+ if (i.indexOf(last) == 0) {
+ completions.push(i);
+ }
+ }
+ var prefix = completions.common_prefix();
+ if (prefix != last) {
+ if (completions.length == 1 && typeof dir[prefix] != "string")
+ prefix += "/";
+ mb.cmd("minibuffer_replace_input", path.concat([ prefix ]).join("/"));
+ }
+ else if (completions.length == 1) {
+ // XXX: do we ever get here?
+ throw new Ymacs_Exception("Single completion");
+ }
+ else if (completions.length == 0) {
+ throw new Ymacs_Exception("No completions");
+ }
+ else {
+ completions = completions.map(function(name){
+ if (typeof dir[name] != "string")
+ name += "/";
+ return {
+ label: name,
+ completion: path.concat([ name ]).join("/")
+ };
+ });
+ popupCompletionMenu(this.getMinibufferFrame(), completions);
+ }
+ return null;
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ minibuffer_prompt: function(prompt, nofocus) {
+ this.whenMinibuffer(function(mb){
+ var f = this.getMinibufferFrame();
+ mb.setCode("");
+ mb.cmd("prevent_undo", function(){
+ mb.cmd("insert", prompt);
+ });
+ mb.getq("minibuffer_end_marker").setPosition(mb.point());
+ f._redrawCaret(true);
+ if (!nofocus)
+ f.focus();
+ });
+ },
+
+ minibuffer_read_number: function(cont) {
+ read_with_continuation.call(this, null, cont, function(mb, text){
+ var n = parseInt(text, 10);
+ if (isNaN(n))
+ mb.signalError("Please enter a number");
+ return !isNaN(n);
+ });
+ },
+
+ minibuffer_read_command: function(cont) {
+ var commandNames = Array.hashKeys(this.COMMANDS).grep(function(cmd){
+ return this.COMMANDS[cmd].ymacsInteractive;
+ }, this).sort();
+ read_with_continuation.call(this, commandNames, cont, function(mb, name){
+ var cmd = this.COMMANDS[name],
+ ret = cmd && cmd.ymacsInteractive;
+ if (!ret) {
+ mb.signalError("No such command: " + name);
+ }
+ return ret;
+ });
+ },
+
+ minibuffer_read_function: function(cont) {
+ var commandNames = Array.hashKeys(this.COMMANDS).sort();
+ read_with_continuation.call(this, commandNames, cont, function(mb, name){
+ var cmd = this.COMMANDS[name],
+ ret = !!cmd;
+ if (!ret)
+ mb.signalError("No such function: " + name);
+ return ret;
+ });
+ },
+
+ minibuffer_read_buffer: function(cont) {
+ this.whenYmacs(function(ymacs){
+ var bufferNames = ymacs.buffers.map("name");
+ bufferNames.push(bufferNames.shift());
+ read_with_continuation.call(this, bufferNames, cont);
+ handle_tab.call(this);
+ });
+ },
+
+ minibuffer_read_string: function(completions, cont) {
+ read_with_continuation.call(this, completions, cont);
+ },
+
+ minibuffer_read_variable: function(cont) {
+ var tmp = this.globalVariables;
+ Object.merge(tmp, this.variables);
+ var completions = Array.hashKeys(tmp).grep(function(name){
+ return !/^\*/.test(name);
+ }).sort();
+ read_with_continuation.call(this, completions, cont
+ // XXX: seems like a good idea, but it doesn't work
+ // XXX: need to refactor the signalInfo stuff. It doesn't show up
+ // currently because the buffer frame is not active, or something...
+ // , function(mb, name){
+ // var val = this.getq(name);
+ // mb.signalInfo("Current value of " + name + ": " + val);
+ // return true;
+ // }
+ );
+ },
+
+ minibuffer_read_existing_file: function(cont) {
+ var dir = this.ymacs.ls_getFileDirectory(this.name).path.join("/");
+ if (dir) dir += "/";
+ this.cmd("minibuffer_replace_input", dir);
+ read_with_continuation.call(this, filename_completion, cont, function(mb, name){
+ var ret = this.ymacs.ls_getFileContents(name, true);
+ if (!ret)
+ mb.signalError("No such file: " + name);
+ return ret;
+ });
+ },
+
+ minibuffer_read_file: function(cont) {
+ var dir = this.ymacs.ls_getFileDirectory(this.name).path.join("/");
+ if (dir) dir += "/";
+ read_with_continuation.call(this, filename_completion, cont);
+ },
+
+ minibuffer_read_file_or_directory: function(cont) {
+ var dir = this.ymacs.ls_getFileDirectory(this.name).path.join("/");
+ if (dir) dir += "/";
+ read_with_continuation.call(this, filename_completion, cont);
+ },
+
+ minibuffer_read_directory: function(cont) {
+ var dir = this.ymacs.ls_getFileDirectory(this.name).path.join("/");
+ if (dir) dir += "/";
+ read_with_continuation.call(this, filename_completion, cont);
+ },
+
+ minibuffer_prompt_end: function() {
+ return this.whenMinibuffer(function(mb){
+ return mb.getq("minibuffer_end_marker").getPosition();
+ });
+ },
+
+ minibuffer_contents: function() {
+ return this.whenMinibuffer(function(mb){
+ return mb._bufferSubstring(mb.getq("minibuffer_end_marker"));
+ });
+ },
+
+ minibuffer_replace_input: function(value) {
+ this.whenMinibuffer(function(mb){
+ mb._replaceText(mb.getq("minibuffer_end_marker"), mb.getCodeSize(), value);
+ this.getMinibufferFrame()._redrawCaret(true);
+ });
+ },
+
+ minibuffer_complete: function() {
+ this.whenMinibuffer(function(mb){
+ var a = mb.getq("completion_list"),
+ str = mb.cmd("minibuffer_contents"),
+ re = str.replace(/([\[\]\(\)\{\}\.\*\+\?\|\\])/g, "\\$1").replace(/([_-])/g, "[^_-]*[_-]");
+ re = new RegExp("^" + re, "i");
+ if (a instanceof Function) {
+ a = a.call(this, mb, str, re);
+ if (!a)
+ return;
+ }
+ else if (a && a.length > 0) {
+ a = a.grep(function(cmd){
+ return re.test(cmd);
+ });
+ }
+ if (!a || a.length == 0) {
+ mb.signalError("No completions");
+ }
+ else {
+ var prefix = a.common_prefix();
+ if (prefix != str) {
+ mb.cmd("minibuffer_replace_input", prefix);
+ }
+ else if (a.length == 1) {
+ mb.signalError("Sole completion");
+ }
+ else {
+ popupCompletionMenu(this.getMinibufferFrame(), a);
+ }
+ }
+ });
+ },
+
+ minibuffer_complete_and_exit: function() {
+ this.whenMinibuffer(function(mb){
+ if (mb.getq("minibuffer_validation").call(mb)) {
+ mb.cmd("minibuffer_keyboard_quit", this.getq("minibuffer_continuation"));
+ }
+ });
+ },
+
+ minibuffer_keyboard_quit: function(cont) {
+ this.whenMinibuffer(function(mb){
+ var text = this.cmd("minibuffer_contents");
+ mb.setCode("");
+ this.ymacs.getActiveFrame().focus();
+ (function(text){
+ if (cont)
+ cont.call(this, text);
+ this.getPrefixArg();
+ }).delayed(1, this, text);
+ });
+ DlPopup.clearAllPopups();
+ }
+
+ });
+
+ function handle_completion(how) {
+ var old_item = $item, w;
+ switch (how) {
+ case "next":
+ if ($item == null)
+ $item = -1;
+ $item = $menu.children().rotateIndex(++$item);
+ break;
+ case "prev":
+ if ($item == null)
+ $item = 0;
+ $item = $menu.children().rotateIndex(--$item);
+ break;
+ }
+ if (old_item != null) {
+ w = $menu.children(old_item);
+ w.callHooks("onMouseLeave");
+ }
+ old_item = $item;
+ w = $menu.children($item);
+ w.callHooks("onMouseEnter");
+ };
+
+ function handle_arrow_down() {
+ if ($popupActive) {
+ return handle_completion.call(this, "next");
+ }
+ };
+
+ function handle_arrow_up() {
+ if ($popupActive) {
+ return handle_completion.call(this, "prev");
+ }
+ };
+
+ function handle_enter() {
+ if ($popupActive) {
+ if ($item != null) {
+ this.cmd("minibuffer_replace_input", $menu.children()[$item].userData);
+ DlPopup.clearAllPopups();
+ } else {
+ this.signalError("Select something...");
+ }
+ } else {
+ this.cmd("minibuffer_complete_and_exit");
+ }
+ };
+
+ function handle_tab() {
+ if (!$popupActive)
+ this.cmd("minibuffer_complete");
+ handle_arrow_down.call(this); // autoselect the first one anyway
+ };
+
+ function handle_s_tab() {
+ handle_arrow_up.call(this);
+ };
+
+ function handle_escape() {
+ if ($popupActive) {
+ DlPopup.clearAllPopups();
+ } else {
+ this.cmd("minibuffer_keyboard_quit");
+ }
+ };
+
+ DEFINE_SINGLETON("Ymacs_Keymap_Minibuffer", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "C-g" : "minibuffer_keyboard_quit",
+ "TAB" : handle_tab,
+ "S-TAB" : handle_s_tab,
+ "ARROW_DOWN" : handle_arrow_down,
+ "ARROW_UP" : handle_arrow_up,
+ "ENTER" : handle_enter,
+ "ESCAPE" : handle_escape
+ };
+
+ P.defaultHandler = [ function() {
+ DlPopup.clearAllPopups();
+ return false; // say it's not handled though
+ } ];
+
+ });
+
+})();
+
+DEFINE_CLASS("Ymacs_Completion_Popup", DlCompletionPopup);
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-css.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-css.js.svn-base
new file mode 100644
index 0000000..40cb87a
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-css.js.svn-base
@@ -0,0 +1,263 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+Ymacs_Tokenizer.define("css", function(stream, tok){
+
+ var PARSER = {
+ next : next,
+ copy : copy,
+ indentation : indentation
+ };
+
+ var $parens = [];
+ var $passedParens = [];
+ var $cont = [];
+ var $inString = null;
+ var $inComment = null;
+
+ function copy() {
+ var c = resume.context = {
+ parens : $parens.slice(0),
+ passedParens : $passedParens.slice(0),
+ cont : $cont.slice(0),
+ inString : $inString,
+ inComment : $inComment
+ };
+ function resume() {
+ $parens = c.parens.slice(0);
+ $passedParens = c.passedParens.slice(0);
+ $cont = c.cont.slice(0);
+ $inString = c.inString;
+ $inComment = c.inComment;
+ return PARSER;
+ };
+ return resume;
+ };
+
+ function INDENT_LEVEL() {
+ return tok.buffer.getq("indent_level");
+ };
+
+ var OPEN_PAREN = {
+ "(" : ")",
+ "{" : "}",
+ "[" : "]"
+ };
+
+ var CLOSE_PAREN = {
+ ")" : "(",
+ "}" : "{",
+ "]" : "["
+ };
+
+ function isOpenParen(ch) {
+ return OPEN_PAREN[ch];
+ };
+
+ function isCloseParen(ch) {
+ return CLOSE_PAREN[ch];
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function readComment() {
+ var line = stream.lineText(), pos = line.indexOf("*/", stream.col);
+ var m = /^\s*\*+/.exec(line.substr(stream.col));
+ if (m) {
+ foundToken(stream.col, stream.col += m[0].length, "mcomment-starter");
+ }
+ if (pos >= 0) {
+ $cont.pop();
+ $inComment = null;
+ foundToken(stream.col, pos, "mcomment");
+ foundToken(pos, pos += 2, "mcomment-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, "mcomment");
+ stream.col = line.length;
+ }
+ };
+
+ function readString(end, type) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, type);
+ foundToken(stream.col, ++stream.col, type + "-stopper");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), tmp;
+ if (stream.lookingAt("/*")) {
+ $inComment = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, stream.col += 2, "mcomment-starter");
+ $cont.push(readComment);
+ }
+ else if (ch === '"' || ch === "'") {
+ $inString = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch, "string"));
+ }
+ else if ((tmp = isOpenParen(ch))) {
+ $parens.push({ line: stream.line, col: stream.col, type: ch });
+ foundToken(stream.col, ++stream.col, "open-paren");
+ }
+ else if ((tmp = isCloseParen(ch))) {
+ var p = $parens.pop();
+ if (!p || p.type != tmp) {
+ foundToken(stream.col, ++stream.col, "error");
+ } else {
+ // circular reference; poor browsers will leak. mwuhahahaha
+ p.closed = { line: stream.line, col: stream.col, opened: p };
+ $passedParens.push(p);
+ foundToken(stream.col, ++stream.col, "close-paren");
+ }
+ }
+ else if ((tmp = stream.lookingAt(/^([a-zA-z-]+):/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "keyword");
+ foundToken(stream.col, ++stream.col, "operator");
+ }
+ else if ((tmp = stream.lookingAt(/^([0-9.]+)(px|pt|em|ex|in|cm|mm|%)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "number");
+ foundToken(stream.col, stream.col += tmp[2].length, "type");
+ }
+ else if ((tmp = stream.lookingAt(/^(\.[a-zA-Z0-9_:-]+)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "function-name");
+ }
+ else if ((tmp = stream.lookingAt(/^(#[a-zA-Z0-9_:-]+)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "constant");
+ }
+ else if ((tmp = stream.lookingAt(/^(@[a-zA-Z0-9_:-]+)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "builtin");
+ }
+ else if ((tmp = stream.lookingAt(/^(url|none|auto|bold|italic|normal|inherit|print|screen|all)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "builtin");
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ function indentation() {
+ // no indentation for continued strings
+ if ($inString)
+ return 0;
+
+ var row = stream.line;
+ var currentLine = stream.lineText();
+ var indent = 0;
+
+ if ($inComment) {
+ var commentStartLine = stream.lineText($inComment.line);
+ indent = $inComment.c1 + 1;
+ if (!/^\s*\*/.test(currentLine)) {
+ // align with the first non-whitespace and non-asterisk character in the comment
+ var re = /[^\s*]/g;
+ re.lastIndex = $inComment.c1 + 1;
+ var m = re.exec(commentStartLine);
+ if (m)
+ indent = m.index;
+ }
+ return indent;
+ }
+
+ var p = $parens.peek();
+ if (p) {
+ // check if the current line closes the paren
+ var re = new RegExp("^\\s*\\" + OPEN_PAREN[p.type]);
+ var thisLineCloses = re.test(currentLine);
+
+ // Check if there is text after the opening paren. If so, indent to that column.
+ var line = stream.lineText(p.line);
+ re = /\S/g;
+ re.lastIndex = p.col + 1;
+ var m = re.exec(line);
+ if (m) {
+ // but if this line closes the paren, better use the column of the open paren
+ indent = thisLineCloses ? p.col : m.index;
+ }
+ else {
+ // Otherwise we should indent to one level more than the indentation of the line
+ // containing the opening paren.
+ indent = stream.lineIndentation(p.line) + INDENT_LEVEL();
+
+ // but if this line closes the paren, then back one level
+ if (thisLineCloses)
+ indent -= INDENT_LEVEL();
+ }
+ }
+
+ return indent;
+ };
+
+ return PARSER;
+
+});
+
+DEFINE_SINGLETON("Ymacs_Keymap_CSS", Ymacs_Keymap);
+Ymacs_Keymap_CSS().defineKeys({
+ "ENTER" : "newline_and_indent",
+ ": && } && )" : "c_insert_and_indent"
+});
+
+Ymacs_Buffer.newMode("css_mode", function(){
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "css" }));
+ var was_paren_match = this.cmd("paren_match_mode", true);
+ this.pushKeymap(Ymacs_Keymap_CSS());
+
+ return function() {
+ this.setTokenizer(tok);
+ if (!was_paren_match)
+ this.cmd("paren_match_mode", false);
+ this.popKeymap(Ymacs_Keymap_CSS());
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-js.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-js.js.svn-base
new file mode 100644
index 0000000..1265bc6
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-js.js.svn-base
@@ -0,0 +1,431 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+/* -----[ This defines the tokenizer ]----- */
+
+(function(){
+
+ var KEYWORDS = "abstract break case catch class const \
+continue debugger default delete do else \
+enum export extends final finally for \
+function goto if implements import in \
+instanceof interface native new package \
+private protected public return static \
+super switch synchronized throw \
+throws transient try typeof var void let \
+yield volatile while with".qw();
+
+ var KEYWORDS_TYPE = "boolean byte char double float int long short void \
+Array Date Function Math Number Object RegExp String".qw();
+
+ var KEYWORDS_CONST = "false null undefined Infinity NaN true arguments this".qw();
+
+ var KEYWORDS_BUILTIN = "Infinity NaN \
+Packages decodeURI decodeURIComponent \
+encodeURI encodeURIComponent eval isFinite isNaN parseFloat \
+parseInt undefined window document alert prototype constructor".qw();
+
+ var ALLOW_REGEXP_AFTER = /[\[({,;+\-*=?&|!:][\x20\t\n\xa0]*$|return\s+$|typeof\s+$/;
+
+ function isLetter(ch) {
+ return ch.toLowerCase() != ch.toUpperCase();
+ };
+
+ function isNameStart(ch) {
+ return ch && (isLetter(ch) || /^[_$]$/.test(ch));
+ };
+
+ function isNameChar(ch) {
+ return ch && (isLetter(ch) || /^[0-9_$]$/.test(ch));
+ };
+
+ var OPEN_PAREN = {
+ "(" : ")",
+ "{" : "}",
+ "[" : "]"
+ };
+
+ var CLOSE_PAREN = {
+ ")" : "(",
+ "}" : "{",
+ "]" : "["
+ };
+
+ function isOpenParen(ch) {
+ return OPEN_PAREN[ch];
+ };
+
+ function isCloseParen(ch) {
+ return CLOSE_PAREN[ch];
+ };
+
+ function JS_PARSER(KEYWORDS, KEYWORDS_TYPE, KEYWORDS_CONST, KEYWORDS_BUILTIN, stream, tok) {
+
+ var $cont = [],
+ $parens = [],
+ $passedParens = [],
+ $inComment = null,
+ $inString = null,
+ PARSER = {
+ next : next,
+ copy : copy,
+ indentation : indentation
+ };
+
+ function INDENT_LEVEL() {
+ return stream.buffer.getq("indent_level");
+ };
+
+ function copy() {
+ var context = restore.context = {
+ cont : $cont.slice(0),
+ inComment : $inComment,
+ inString : $inString,
+ parens : $parens.slice(0),
+ passedParens : $passedParens.slice(0)
+ };
+ function restore() {
+ $cont = context.cont.slice(0);
+ $inComment = context.inComment;
+ $inString = context.inString;
+ $parens = context.parens.slice(0);
+ $passedParens = context.passedParens.slice(0);
+ return PARSER;
+ };
+ return restore;
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function readName() {
+ var col = stream.col, ch = stream.get(),
+ name = ch;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (!isNameChar(ch))
+ break;
+ name += ch;
+ stream.nextCol();
+ }
+ return ch && { line: stream.line, c1: col, c2: stream.col, id: name };
+ };
+
+ function readComment() {
+ var line = stream.lineText(), pos = line.indexOf("*/", stream.col);
+ var m = /^\s*\*+/.exec(line.substr(stream.col));
+ if (m) {
+ foundToken(stream.col, stream.col += m[0].length, "mcomment-starter");
+ }
+ if (pos >= 0) {
+ $cont.pop();
+ $inComment = null;
+ foundToken(stream.col, pos, "mcomment");
+ foundToken(pos, pos += 2, "mcomment-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, "mcomment");
+ stream.col = line.length;
+ }
+ };
+
+ function readString(end, type) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, type);
+ foundToken(stream.col, ++stream.col, type + "-stopper");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ // function readLiteralRegexp() {
+ // var m;
+ // if (readString("/", "regexp") && (m = stream.lookingAt(/^[gmsiy]+/)))
+ // foundToken(stream.col, stream.col += m[0].length, "regexp-modifier");
+ // };
+
+ function readLiteralRegexp() {
+ var ch, esc = false, inset = 0, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (isOpenParen(ch) && !esc && !inset)
+ inset++;
+ if (isCloseParen(ch) && !esc) {
+ inset--;
+ if (inset < 0)
+ inset = 0;
+ }
+ if (ch === "/" && !esc && !inset) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, "regexp");
+ foundToken(stream.col, ++stream.col, "regexp-stopper");
+ var m = stream.lookingAt(/^[gmsiy]+/);
+ if (m)
+ foundToken(stream.col, stream.col += m[0].length, "regexp-modifier");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, "regexp");
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), m, tmp;
+ if (stream.lookingAt("/*")) {
+ $inComment = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, stream.col += 2, "mcomment-starter");
+ $cont.push(readComment);
+ }
+ else if (stream.lookingAt("//")) {
+ foundToken(stream.col, stream.col += 2, "comment-starter");
+ foundToken(stream.col, stream.col = stream.lineLength(), "comment");
+ }
+ else if (ch === '"' || ch === "'") {
+ $inString = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch, "string"));
+ }
+ else if ((m = stream.lookingAt(/^0x[0-9a-f]+|^[0-9]*\.?[0-9]+/))) {
+ foundToken(stream.col, stream.col += m[0].length, "number");
+ }
+ else if (isNameStart(ch) && (tmp = readName())) {
+ var type = tmp.id in KEYWORDS ? "keyword"
+ : tmp.id in KEYWORDS_TYPE ? "type"
+ : tmp.id in KEYWORDS_CONST ? "constant"
+ : tmp.id in KEYWORDS_BUILTIN ? "builtin"
+ : null;
+ foundToken(tmp.c1, tmp.c2, type);
+ }
+ else if ((tmp = isOpenParen(ch))) {
+ $parens.push({ line: stream.line, col: stream.col, type: ch });
+ foundToken(stream.col, ++stream.col, "open-paren");
+ }
+ else if ((tmp = isCloseParen(ch))) {
+ var p = $parens.pop();
+ if (!p || p.type != tmp) {
+ foundToken(stream.col, ++stream.col, "error");
+ } else {
+ // circular reference; poor browsers will leak. mwuhahahaha
+ p.closed = { line: stream.line, col: stream.col, opened: p };
+ $passedParens.push(p);
+ foundToken(stream.col, ++stream.col, "close-paren");
+ }
+ }
+ else if (ch === "/" && ALLOW_REGEXP_AFTER.test(stream.textBefore())) {
+ foundToken(stream.col, ++stream.col, "regexp-starter");
+ $cont.push(readLiteralRegexp);
+ }
+ else if ((m = stream.lookingAt(/^\s+$/))) {
+ foundToken(stream.col, stream.col += m[0].length, "trailing-whitespace");
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ function indentation() {
+
+ // no indentation for continued strings
+ if ($inString)
+ return 0;
+
+ var row = stream.line;
+ var currentLine = stream.lineText();
+ var indent = 0;
+
+ if ($inComment) {
+ var commentStartLine = stream.lineText($inComment.line);
+ indent = $inComment.c1 + 1;
+ if (!/^\s*\*/.test(currentLine)) {
+ // align with the first non-whitespace and non-asterisk character in the comment
+ var re = /[^\s*]/g;
+ re.lastIndex = $inComment.c1 + 1;
+ var m = re.exec(commentStartLine);
+ if (m)
+ indent = m.index;
+ }
+ return indent;
+ }
+
+ var p = $parens.peek();
+ if (p) {
+ // check if the current line closes the paren
+ var re = new RegExp("^\\s*\\" + OPEN_PAREN[p.type]);
+ var thisLineCloses = re.test(currentLine);
+
+ // Check if there is text after the opening paren. If so, indent to that column.
+ var line = stream.lineText(p.line);
+ re = /\S/g;
+ re.lastIndex = p.col + 1;
+ var m = re.exec(line);
+ if (m) {
+ // but if this line closes the paren, better use the column of the open paren
+ indent = thisLineCloses ? p.col : m.index;
+ }
+ else {
+ // Otherwise we should indent to one level more than the indentation of the line
+ // containing the opening paren.
+ indent = stream.lineIndentation(p.line) + INDENT_LEVEL();
+
+ // but if this line closes the paren, then back one level
+ if (thisLineCloses)
+ indent -= INDENT_LEVEL();
+ }
+ }
+
+ // Some more adjustments for continued statements. Since we don't really have a
+ // rigorous parser, we have to rely on other regexps here, which sucks but will do for
+ // now.
+
+ if (row > 0) {
+ var before = stream.textBefore();
+ if (/\)\s*$/.test(before) && $passedParens.length > 0) {
+ // Ends in a paren, could be an if, while or for which demands smart
+ // indentation on the current line, let's check it out.
+
+ // Note that the passedParen saved for that close paren is actually
+ // the opening one, which suits us greatly.
+ p = $passedParens.peek();
+ var stmtLine = stream.lineText(p.line);
+ if (/^\s*(if|for|while)\W/.test(stmtLine))
+ indent += INDENT_LEVEL();
+ }
+ else if (/\Welse\s*$/.test(before)) {
+ indent += INDENT_LEVEL();
+ }
+ }
+
+ // switch labels use half the indent level, which is my favorite
+ if (/^\s*(case|default)\W/.test(currentLine))
+ indent -= INDENT_LEVEL() / 2;
+
+ return indent;
+ };
+
+ return PARSER;
+
+ };
+
+ Ymacs_Tokenizer.define("js", JS_PARSER.$C(
+ KEYWORDS.toHash(true),
+ KEYWORDS_TYPE.toHash(true),
+ KEYWORDS_CONST.toHash(true),
+ KEYWORDS_BUILTIN.toHash(true)
+ ));
+
+ /* -----[ DynarchLIB ]----- */
+
+ var DL_KEYWORDS_BUILTIN = KEYWORDS_BUILTIN.concat("\
+DEFINE_CLASS DEFINE_SINGLETON DEFINE_HIDDEN_CLASS \
+DEFAULT_ARGS DEFAULT_EVENTS \
+FIXARGS CONSTRUCT BEFORE_BASE FINISH_OBJECT_DEF \
+D P $".qw());
+
+ Ymacs_Tokenizer.define("js-dynarchlib", JS_PARSER.$C(
+ KEYWORDS.toHash(true),
+ KEYWORDS_TYPE.toHash(true),
+ KEYWORDS_CONST.toHash(true),
+ DL_KEYWORDS_BUILTIN.toHash(true)
+ ));
+
+})();
+
+/* -----[ Keymap for C-like language mode ]----- */
+
+DEFINE_SINGLETON("Ymacs_Keymap_CLanguages", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "ENTER" : "newline_and_indent",
+ "} && ) && ] && : && ; && { && ( && [ && *" : "c_insert_and_indent"
+ // "{" : "c_electric_block"
+ };
+
+});
+
+/* -----[ Mode entry point ]----- */
+
+Ymacs_Buffer.newMode("javascript_mode", function(useDL) {
+ var tok = this.tokenizer;
+ var keymap = Ymacs_Keymap_CLanguages();
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: useDL ? "js-dynarchlib" : "js" }));
+ this.pushKeymap(keymap);
+ var was_paren_match = this.cmd("paren_match_mode", true);
+
+ return function() {
+ this.setTokenizer(tok);
+ this.popKeymap(keymap);
+ if (!was_paren_match)
+ this.cmd("paren_match_mode", false);
+ };
+
+});
+
+Ymacs_Buffer.newCommands({
+
+ javascript_dl_mode: Ymacs_Interactive(function() {
+ return this.cmd("javascript_mode", true);
+ }),
+
+ c_electric_block: Ymacs_Interactive(function() {
+ this.cmd("indent_line");
+ this.cmd("insert", "{\n\n}");
+ this.cmd("indent_line");
+ this.cmd("backward_line", 1);
+ this.cmd("indent_line");
+ }),
+
+ c_insert_and_indent: Ymacs_Interactive(function() {
+ var ret;
+ if ((ret = this.cmd("self_insert_command"))) {
+ this.cmd("indent_line");
+ return ret;
+ }
+ })
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-lisp.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-lisp.js.svn-base
new file mode 100644
index 0000000..dede250
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-lisp.js.svn-base
@@ -0,0 +1,419 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+(function(){
+
+ Ymacs_Buffer.newCommands({
+
+ lisp_open_paren: Ymacs_Interactive(function(what) {
+ if (what == null)
+ what = "(";
+ what += isOpenParen(what);
+ this.cmd("insert", what);
+ this.cmd("backward_char");
+ }),
+
+ lisp_close_paren: Ymacs_Interactive(function(what) {
+ var re = new RegExp("\\s*\\" + what, "ig");
+ if (this.cmd("looking_at", re))
+ this._deleteText(this.point(), this.matchData.after);
+ this.cmd("insert", what);
+ }),
+
+ lisp_close_all_parens: Ymacs_Interactive(function() {
+ var p = this.tokenizer.getParserForLine(this._rowcol.row);
+ if (p) {
+ // this kind of sucks, we need to rewind the stream to that location..
+ var s = this.tokenizer.stream;
+ s.line = this._rowcol.row;
+ s.col = 0;
+ try {
+ while (s.col < this._rowcol.col)
+ p.next();
+ } catch(ex) {}
+ p = p.copy().context.parens; // these are still-to-close
+ p.r_foreach(function(p){
+ this.cmd("lisp_close_paren", isOpenParen(p.type));
+ }, this);
+ }
+ })
+
+ });
+
+ // XXX: much of the parser is actually copied from ymacs-mode-js.js. I should somehow unify
+ // the duplicate code.
+
+ var SPECIAL_FORMS = "\
+deftype defstruct defclass \
+defmacro defun defmethod defgeneric defpackage in-package defreadtable in-readtable \
+when cond unless etypecase typecase ctypecase \
+lambda let load-time-value quote macrolet \
+progn prog1 prog2 progv go flet the \
+if throw eval-when multiple-value-prog1 unwind-protect let* \
+ignore-errors handler-case case \
+labels function symbol-macrolet block tagbody catch locally \
+return return-from setq multiple-value-call".qw().toHash();
+
+ var COMMON_MACROS = "loop do while".qw().toHash();
+
+ var CONSTANTS = "t nil".qw().toHash();
+
+ var OPEN_PAREN = {
+ "(" : ")",
+ "{" : "}",
+ "[" : "]"
+ };
+
+ var CLOSE_PAREN = {
+ ")" : "(",
+ "}" : "{",
+ "]" : "["
+ };
+
+ var DEFINES_FUNCTION = "defun defgeneric defmethod".qw().toHash();
+
+ var DEFINES_TYPE = "deftype defclass defstruct".qw().toHash();
+
+ var FORM_ARGS = {
+ "if" : "3+",
+ "when" : "1*",
+ "lambda" : "1*",
+ "unless" : "1*",
+ "defun" : "2*",
+ "defgeneric" : "2*",
+ "defmethod" : "2*",
+ "defclass" : "2*",
+ "defmacro" : "2*",
+ "progn" : "0*",
+ "prog1" : "0*",
+ "prog2" : "0*",
+ "let" : "1*"
+ };
+
+ function isOpenParen(ch) {
+ return OPEN_PAREN[ch];
+ };
+
+ function isCloseParen(ch) {
+ return CLOSE_PAREN[ch];
+ };
+
+ function isConstituent(ch) {
+ return ch.toLowerCase() != ch.toUpperCase() ||
+ /^[-0-9!#$%&*+./:<=>?@\[\]\^_\{\}~]$/i.test(ch);
+ };
+
+ function isConstituentStart(ch) {
+ return ch != "#" && isConstituent(ch);
+ };
+
+ // the tokenizer function
+ Ymacs_Tokenizer.define("lisp", function(stream, tok){
+
+ var $cont = [],
+ $inString = false,
+ $inComment = false,
+ $quote = null,
+ $parens = [],
+ $passedParens = [],
+ $backList = [],
+ $list = [],
+ PARSER = { next: next, copy: copy, indentation: indentation };
+
+ function copy() {
+ var context = restore.context = {
+ cont : $cont.slice(0),
+ quote : $quote,
+ inString : $inString,
+ inComment : $inComment,
+ parens : $parens.slice(0),
+ passedParens : $passedParens.slice(0),
+ backList : $backList.slice(0),
+ list : $list.slice(0)
+ };
+ function restore() {
+ $cont = context.cont.slice(0);
+ $inString = context.inString;
+ $quote = context.quote;
+ $inComment = context.inComment;
+ $parens = context.parens.slice(0);
+ $passedParens = context.passedParens.slice(0);
+ $backList = context.backList.slice(0),
+ $list = context.list.slice(0);
+ return PARSER;
+ };
+ return restore;
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function newArg(what) {
+ if (what == null)
+ what = { c1: stream.col };
+ $list.push(what);
+ };
+
+ function INDENT_LEVEL() { return stream.buffer.getq("indent_level"); };
+
+ function readName() {
+ var col = stream.col, ch = stream.get(),
+ name = ch;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (!isConstituent(ch))
+ break;
+ name += ch;
+ stream.nextCol();
+ }
+ return ch && { line: stream.line, c1: col, c2: stream.col, id: name.toLowerCase() };
+ };
+
+ function readString(end, type) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, type);
+ foundToken(stream.col, ++stream.col, type + "-stopper");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ function readComment() {
+ var line = stream.lineText(), pos = line.indexOf("|#", stream.col);
+ var m = /^\s*\|+/.exec(line.substr(stream.col));
+ if (m) {
+ foundToken(stream.col, stream.col += m[0].length, "mcomment-starter");
+ }
+ if (pos >= 0) {
+ $cont.pop();
+ $inComment = null;
+ foundToken(stream.col, pos, "mcomment");
+ foundToken(pos, pos += 2, "mcomment-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, "mcomment");
+ stream.col = line.length;
+ }
+ };
+
+ function isForm(form) {
+ var f = $list && $list.length > 0 && $list[0].id;
+ if (f) {
+ f = f.toLowerCase();
+ if (form == null)
+ return f;
+ return typeof form == "string" ? f == form : f in form;
+ }
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), tmp;
+ if ((tmp = stream.lookingAt(/^#\\(Space|Newline|.?)/i))) {
+ newArg();
+ foundToken(stream.col, stream.col += tmp[0].length, "constant");
+ }
+ else if (stream.lookingAt(/^#\x27[^(]/)) {
+ newArg();
+ stream.col += 2;
+ tmp = readName();
+ foundToken(tmp.c1, tmp.c2, "function-name");
+ }
+ else if (stream.lookingAt("#|")) {
+ $inComment = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, stream.col += 2, "mcomment-starter");
+ $cont.push(readComment);
+ }
+ else if ((tmp = stream.lookingAt(/^;+/))) {
+ foundToken(stream.col, stream.col += tmp[0].length, "comment-starter");
+ foundToken(stream.col, stream.col = stream.lineLength(), "comment");
+ }
+ else if (ch === '"') {
+ newArg();
+ $inString = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch, "string"));
+ }
+ else if ((tmp = stream.lookingAt(/^[+-]?(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*)(\x2f(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*))?/))) { // Dude, WTF...
+ newArg();
+ foundToken(stream.col, stream.col += tmp[0].length, "number");
+ }
+ else if ((tmp = isOpenParen(ch))) {
+ newArg();
+ $backList.push($list);
+ $list = [];
+ $parens.push({ line: stream.line, col: stream.col, type: ch });
+ foundToken(stream.col, ++stream.col, "open-paren");
+ }
+ else if ((tmp = isCloseParen(ch))) {
+ var p = $parens.pop();
+ if (!p || p.type != tmp) {
+ foundToken(stream.col, ++stream.col, "error");
+ } else {
+ p.closed = { line: stream.line, col: stream.col, opened: p };
+ $passedParens.push(p);
+ $list = $backList.pop();
+ foundToken(stream.col, ++stream.col, "close-paren");
+ }
+ }
+ else if (isConstituentStart(ch) && (tmp = readName())) {
+ var type = ch == ":" ? "lisp-keyword"
+ : tmp.id in SPECIAL_FORMS ? "keyword"
+ : tmp.id in COMMON_MACROS ? "builtin"
+ : tmp.id in CONSTANTS ? "constant"
+ : null;
+ if (!type) {
+ // perhaps function name?
+ if (isForm(DEFINES_FUNCTION) && $list.length == 1) {
+ type = "function-name";
+ }
+ else if (isForm(DEFINES_TYPE) && $list.length == 1) {
+ type = "type";
+ }
+ // there are a lot of macros starting with "with-", so let's highlight this
+ else if (/^with-/i.test(tmp.id)) {
+ type = "builtin";
+ }
+ }
+ newArg(tmp);
+ foundToken(tmp.c1, tmp.c2, type);
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ function indentation() {
+ // no indentation for continued strings
+ if ($inString)
+ return 0;
+
+ var currentLine = stream.lineText();
+ var indent = 0;
+
+ var p = $parens.peek();
+ if (p) {
+ var line = stream.lineText(p.line);
+ indent = p.col + 1;
+ var nextNonSpace;
+ if (isConstituentStart(line.charAt(indent))) {
+ indent = p.col + INDENT_LEVEL();
+ var re = /\s\S/g;
+ re.lastIndex = p.col;
+ nextNonSpace = re.exec(line);
+ if (nextNonSpace) {
+ nextNonSpace = nextNonSpace.index + 1;
+ }
+ }
+ if ($list && $list.length) {
+ // console.log($list);
+ var currentForm = isForm();
+ if (currentForm) {
+ currentForm = currentForm.replace(/\*$/, "");
+ var formArgs = FORM_ARGS[currentForm];
+ if (!formArgs && /^with/.test(currentForm)) {
+ // "with" macros usually take one argument, then &body
+ formArgs = "1*";
+ }
+ if (!formArgs) {
+ formArgs = "1+"; // kind of sucky now
+ }
+ if (formArgs) {
+ var n = parseInt(formArgs, 10);
+ var hasRest = /\+$/.test(formArgs);
+ var hasBody =/\*$/.test(formArgs);
+ // console.log("Expecting %d arguments, got %d already (rest=%o, body=%o)", n, $list.length - 1, hasRest, hasBody);
+ if ($list.length - 1 < n || hasRest) {
+ // still in the arguments
+ if (nextNonSpace)
+ indent = nextNonSpace;
+ else
+ indent += INDENT_LEVEL();
+ }
+ }
+ }
+ }
+ }
+
+ return indent;
+ };
+
+ return PARSER;
+ });
+
+})();
+
+DEFINE_SINGLETON("Ymacs_Keymap_LispMode", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "ENTER" : "newline_and_indent",
+ "(" : [ "lisp_open_paren", "(" ],
+ ")" : [ "lisp_close_paren", ")" ],
+ "C-c ] && C-c C-]" : "lisp_close_all_parens"
+ };
+
+});
+
+Ymacs_Buffer.newMode("lisp_mode", function() {
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "lisp" }));
+ var changed_vars = this.setq({
+ indent_level: 2
+ });
+ var keymap = Ymacs_Keymap_LispMode();
+ this.pushKeymap(keymap);
+ var was_paren_match = this.cmd("paren_match_mode", true);
+
+ return function() {
+ this.setTokenizer(tok);
+ this.setq(changed_vars);
+ this.popKeymap(keymap);
+ if (!was_paren_match)
+ this.cmd("paren_match_mode", false);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-markdown.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-markdown.js.svn-base
new file mode 100644
index 0000000..42a92b9
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-markdown.js.svn-base
@@ -0,0 +1,89 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+Ymacs_Tokenizer.define("markdown", function(stream, tok) {
+
+ var PARSER = { next: next, copy: copy };
+
+ function copy() {
+ var context = restore.context = {
+ };
+ function restore() {
+ return PARSER;
+ };
+ return restore;
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function next() {
+ stream.checkStop();
+ var tmp;
+ if (stream.col == 0 && (tmp = stream.lookingAt(/^(#+)/))) {
+ foundToken(0, stream.col = stream.lineLength(), "markdown-heading" + tmp[0].length);
+ }
+ else if (stream.line > 0 && stream.col == 0 && (tmp = stream.lookingAt(/^[=-]+$/)) && /\S/.test(stream.lineText(stream.line - 1))) {
+ tmp = tmp[0].charAt(0) == "=" ? 1 : 2;
+ tmp = "markdown-heading" + tmp;
+ tok.onToken(stream.line - 1, 0, stream.lineLength(stream.line - 1), tmp);
+ foundToken(0, stream.col = stream.lineLength(), tmp);
+ }
+ else if (stream.col == 0 && (tmp = stream.lookingAt(/^[>\s]*/))) {
+ tmp = tmp[0].replace(/\s+/g, "").length;
+ if (tmp > 3)
+ tmp = "";
+ tmp = "markdown-blockquote" + tmp;
+ foundToken(0, stream.col = stream.lineLength(), tmp);
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ return PARSER;
+
+});
+
+Ymacs_Buffer.newMode("markdown_mode", function() {
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "markdown" }));
+ return function() {
+ this.setTokenizer(tok);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-paren-match.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-paren-match.js.svn-base
new file mode 100644
index 0000000..cdeeb8f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-paren-match.js.svn-base
@@ -0,0 +1,301 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+// @require ymacs-tokenizer.js
+
+DEFINE_SINGLETON("Ymacs_Keymap_ParenMatch", Ymacs_Keymap, function(D, P) {
+
+ D.KEYS = {
+ "C-c \\" : "goto_matching_paren",
+ "C-M-q" : "indent_sexp",
+ "C-M-f && C-M-n" : "forward_sexp",
+ "C-M-b && C-M-p" : "backward_sexp",
+ "C-M-u && M-a" : "backward_up_list",
+ "M-e && C-M-ARROW_UP" : "up_list",
+ "C-M-ARROW_DOWN" : "down_list",
+ "M-C-k" : "kill_sexp",
+ "M-C-SPACE" : "mark_sexp",
+ "M-C-t" : "transpose_sexps",
+ "M-(" : [ "paredit_wrap_round", "(" ],
+ "M-[" : [ "paredit_wrap_round", "[" ],
+ "M-{" : [ "paredit_wrap_round", "{" ],
+ 'M-"' : [ "paredit_wrap_round", '"', true ],
+ "M-'" : [ "paredit_wrap_round", "'", true ]
+ };
+
+ /* -----[ new commands ]----- */
+
+ function compareRowCol(p1, p2) {
+ return (p1.line < p2.line)
+ ? -1
+ : p1.line > p2.line
+ ? 1
+ : p1.col - p2.col;
+ };
+
+ var PARENS = {
+ "(" : ")",
+ "[" : "]",
+ "{" : "}",
+ '"' : { close: '"', backslash: /[\x22\\]/g },
+ "'" : { close: "'", backslash: /[\x27\\]/g }
+ };
+
+ function ERROR(o) {
+ throw new Ymacs_Exception("Balanced expression not found");
+ };
+
+ function getPP(p) {
+ var pp = p.context.passedParens;
+ return pp instanceof Function ? pp() : pp;
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ matching_paren: function() {
+ var p = this.tokenizer.getLastParser(), rc = this._rowcol;
+ if (p) {
+ var parens = getPP(p);
+ return parens.foreach(function(p){
+ var match = p.closed;
+ if (p.line == rc.row && p.col == rc.col) {
+ $RETURN( this._rowColToPosition(match.line, match.col + 1) );
+ } else if (match.line == rc.row && match.col == rc.col - 1) {
+ $RETURN( this._rowColToPosition(p.line, p.col) );
+ }
+ }, this);
+ }
+ },
+
+ indent_sexp: Ymacs_Interactive(function() {
+ var pos = this.cmd("matching_paren");
+ if (pos != null) {
+ this.cmd("indent_region", this.point(), pos);
+ } else {
+ ERROR(this);
+ }
+ }),
+
+ goto_matching_paren: Ymacs_Interactive(function() {
+ var pos = this.cmd("matching_paren");
+ if (pos != null) {
+ this.cmd("goto_char", pos);
+ return true;
+ }
+ }),
+
+ forward_sexp: Ymacs_Interactive(function() {
+ var rc = this._rowcol, p = this.tokenizer.finishParsing();
+ if (p) {
+ // find next paren
+ var parens = getPP(p).mergeSort(compareRowCol);
+ var next = parens.foreach(function(p){
+ if (p.line > rc.row || (p.line == rc.row && p.col >= rc.col)) {
+ $RETURN(p);
+ }
+ });
+ if (!next || !next.closed) {
+ ERROR(this);
+ return;
+ }
+ var start = this._rowColToPosition(next.line, next.col);
+ if ((this._rowcol.row == next.line && this._rowcol.col == next.col)
+ || !/\S/.test(this._bufferSubstring(null, start)))
+ this.cmd("goto_char", this._rowColToPosition(next.closed.line, next.closed.col) + 1);
+ else
+ this.cmd("goto_char", start);
+ return true;
+ }
+ }),
+
+ backward_sexp: Ymacs_Interactive(function() {
+ var rc = this._rowcol, p = this.tokenizer.finishParsing();
+ if (p) {
+ // find next paren
+ var parens = getPP(p).grep("closed").map("closed").mergeSort(compareRowCol);
+ var prev = parens.r_foreach(function(p){
+ if (p.line < rc.row || (p.line == rc.row && p.col < rc.col))
+ $RETURN(p);
+ });
+ if (!prev) {
+ ERROR(this);
+ return;
+ }
+ this.cmd("goto_char", this._rowColToPosition(prev.opened.line, prev.opened.col));
+ return true;
+ }
+ }),
+
+ mark_sexp: Ymacs_Interactive("^r", function(begin, end){
+ this.cmd("save_excursion", function(){
+ if (this.transientMarker)
+ this.cmd("goto_char", end);
+ this.ensureTransientMark();
+ this.cmd("forward_sexp");
+ this.cmd("set_mark_command", this.point());
+ this.transientMarker.swap(this.caretMarker);
+ });
+ this.ensureTransientMark();
+ }),
+
+ kill_sexp: Ymacs_Interactive(function() {
+ this._killingAction(
+ this.point(),
+ this.cmd("save_excursion", function() {
+ this.cmd("forward_sexp");
+ return this.point();
+ })
+ );
+ }),
+
+ transpose_sexps: Ymacs_Interactive(function() {
+ var a = [];
+ this.cmd("forward_sexp"); a.push(this.point());
+ this.cmd("backward_sexp"); a.push(this.point());
+ this.cmd("backward_sexp"); a.push(this.point());
+ this.cmd("forward_sexp"); a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ paredit_wrap_round: Ymacs_Interactive("^", function(paren, nosexp){
+ if (!paren)
+ paren = "(";
+ var closing = PARENS[paren],
+ r = this.transientMarker
+ ? this.getRegion()
+ : this.cmd("save_excursion", function(){
+ var begin = this.point();
+ if (!nosexp)
+ this.cmd("forward_sexp");
+ return { begin: begin, end: this.point() };
+ }),
+ txt = this._bufferSubstring(r.begin, r.end),
+ before = this.point() < r.end;
+ if (typeof closing != "string") {
+ txt = txt.replace(closing.backslash, function(s){
+ return "\\" + s;
+ });
+ closing = closing.close;
+ }
+ var m = this.createMarker(r.end);
+ this.cmd("save_excursion", function(){
+ this._replaceText(r.begin, r.end, paren + txt + closing);
+ }, before);
+ this.cmd("forward_char", before ? 1 : -1);
+ this.clearTransientMark();
+ this.cmd("indent_region", r.begin, m.getPosition());
+ m.destroy();
+ }),
+
+ down_list: Ymacs_Interactive(function(){
+ var rc = this._rowcol, p = this.tokenizer.finishParsing();
+ if (p) {
+ var lc = { line: rc.row, col: rc.col };
+ p = getPP(p).grep("closed").mergeSort(compareRowCol).grep_first(function(p){
+ return compareRowCol(p, lc) >= 0;
+ });
+ if (p != null) {
+ this.cmd("goto_char", this._rowColToPosition(p.line, p.col) + 1);
+ } else {
+ ERROR(this);
+ }
+ }
+ }),
+
+ backward_up_list: Ymacs_Interactive(function(){
+ var rc = this._rowcol, p = this.tokenizer.finishParsing();
+ if (p) {
+ var lc = { line: rc.row, col: rc.col };
+ p = getPP(p).grep("closed").mergeSort(compareRowCol).grep_last(function(p){
+ return compareRowCol(p, lc) < 0 && compareRowCol(p.closed, lc) >= 0;
+ });
+ if (p != null) {
+ this.cmd("goto_char", this._rowColToPosition(p.line, p.col));
+ } else {
+ ERROR(this);
+ }
+ }
+ }),
+
+ up_list: Ymacs_Interactive(function(){
+ this.cmd("backward_up_list");
+ this.cmd("forward_sexp");
+ })
+
+ });
+
+ Ymacs_Buffer.newMode("paren_match_mode", function(){
+
+ var keymap = Ymacs_Keymap_ParenMatch();
+ this.pushKeymap(keymap);
+
+ var active = false,
+ clearOvl = function() {
+ if (active)
+ this.deleteOverlay("match-paren");
+ }.clearingTimeout(500, this);
+
+ var events = {
+ beforeInteractiveCommand: function() {
+ clearOvl.doItNow();
+ },
+ afterInteractiveCommand: function() {
+ var p = this.tokenizer.getLastParser(), rc = this._rowcol;
+ if (p) {
+ getPP(p).foreach(function(p){
+ var match = p.closed;
+ if ((p.line == rc.row && p.col == rc.col) ||
+ (match.line == rc.row && match.col == rc.col - 1)) {
+ active = true;
+ this.setOverlay("match-paren", {
+ line1: p.line, line2: match.line,
+ col1: p.col, col2: match.col + 1
+ });
+ clearOvl();
+ }
+ }, this);
+ }
+ }.clearingTimeout(100)
+ };
+ this.addEventListener(events);
+
+ return function() {
+ clearOvl.doItNow();
+ this.popKeymap(keymap);
+ this.removeEventListener(events);
+ };
+
+ });
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-xml.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-xml.js.svn-base
new file mode 100644
index 0000000..0e0ed47
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-mode-xml.js.svn-base
@@ -0,0 +1,474 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+Ymacs_Tokenizer.define("xml", function(stream, tok) {
+
+ var $tags = [],
+ $cont = [],
+ $inTag = null,
+ $inComment = null,
+ PARSER = { next: next, copy: copy, indentation: indentation };
+
+ function copy() {
+ var _tags = $tags.slice(0),
+ _cont = $cont.slice(0),
+ _inTag = $inTag,
+ _inComment = $inComment;
+ function resume() {
+ $cont = _cont.slice(0);
+ $tags = _tags.slice(0);
+ $inTag = _inTag;
+ $inComment = _inComment;
+ return PARSER;
+ };
+ return resume;
+ };
+
+ function INDENT_LEVEL() {
+ return stream.buffer.getq("indent_level");
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function isLetter(ch) {
+ return ch.toLowerCase() != ch.toUpperCase();
+ };
+
+ function isNameStart(ch) {
+ return ch && (isLetter(ch) || /^[:_-]$/.test(ch));
+ };
+
+ function isNameChar(ch) {
+ return ch && (isLetter(ch) || /^[0-9_-]$/.test(ch));
+ };
+
+ function readName() {
+ var col = stream.col, ch = stream.get(),
+ name = ch;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (!isNameChar(ch))
+ break;
+ name += ch;
+ stream.nextCol();
+ }
+ return ch && { line: stream.line, c1: col, c2: stream.col, id: name };
+ };
+
+ function readString(end) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ foundToken(start, stream.col, "string");
+ foundToken(stream.col, ++stream.col, "string-stopper");
+ return;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, "string");
+ };
+
+ function readTag() {
+ var ch = stream.peek(), name;
+ if (stream.lookingAt(/^\x2f>/)) {
+ $cont.pop();
+ $inTag = null;
+ foundToken(stream.col, ++stream.col, "xml-closetag-slash");
+ foundToken(stream.col, ++stream.col, "xml-close-bracket");
+ }
+ else if (ch === ">") {
+ $cont.pop();
+ $tags.push($inTag);
+ $inTag = null;
+ foundToken(stream.col, ++stream.col, "xml-close-bracket");
+ }
+ else if (isNameStart(ch) && (name = readName())) {
+ foundToken(name.c1, name.c2, "xml-attribute");
+ }
+ else if (ch === '"' || ch === "'") {
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch));
+ }
+ else foundToken(stream.col, ++stream.col, null);
+ };
+
+ function readComment(type, end) {
+ var line = stream.lineText(), pos = line.indexOf(end, stream.col);
+ if (pos >= 0) {
+ $cont.pop();
+ foundToken(stream.col, pos, type);
+ $inComment = null;
+ foundToken(pos, pos += end.length, type + "-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, type);
+ stream.col = line.length;
+ }
+ };
+
+ function readCloseBracket() {
+ var m = stream.lookingAt(/^([\s\xA0]*)(>?)/);
+ if (m && m[0]) {
+ if (m[1])
+ foundToken(stream.col, stream.col += m[1].length, null);
+ if (m[2]) {
+ foundToken(stream.col, stream.col += m[2].length, "xml-close-bracket");
+ $cont.pop();
+ }
+ } else {
+ foundToken(stream.col, ++stream.col, "error");
+ }
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), m;
+ if (stream.lookingAt("<![CDATA[")) {
+ foundToken(stream.col, stream.col += 9, "xml-cdata-starter");
+ $inComment = { line: stream.line, c1: stream.col };
+ $cont.push(readComment.$C("xml-cdata", "]]>"));
+ }
+ else if (stream.lookingAt("<!--")) {
+ foundToken(stream.col, stream.col += 4, "mcomment-starter");
+ $inComment = { line: stream.line, c1: stream.col };
+ $cont.push(readComment.$C("mcomment", "-->"));
+ }
+ else if (stream.lookingAt(/^<\x2f/) && isNameStart(stream.peek(+2))) {
+ foundToken(stream.col, ++stream.col, "xml-open-bracket");
+ foundToken(stream.col, ++stream.col, "xml-closetag-slash");
+ var tag = readName(), prev = $tags.pop();
+ foundToken(tag.c1, tag.c2, ( prev && prev.id == tag.id
+ ? "xml-close-tag"
+ : "error" ));
+ $cont.push(readCloseBracket);
+ }
+ else if (ch === "<" && isNameStart(stream.peek(+1))) {
+ foundToken(stream.col, ++stream.col, "xml-open-bracket");
+ var tag = readName();
+ foundToken(tag.c1, tag.c2, "xml-open-tag");
+ $inTag = tag;
+ $cont.push(readTag);
+ }
+ else if ((m = stream.lookingAt(/^&.*?;/))) {
+ foundToken(stream.col, ++stream.col, "xml-entity-starter");
+ foundToken(stream.col, stream.col += m[0].length - 2, "xml-entity");
+ foundToken(stream.col, ++stream.col, "xml-entity-stopper");
+ }
+ else if (ch === "&") {
+ foundToken(stream.col, ++stream.col, "error");
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ function indentation() {
+ var indent, lastTag;
+ if ($inComment) {
+ indent = stream.lineIndentation($inComment.line) + INDENT_LEVEL();
+ }
+ else if ($inTag) {
+ indent = $inTag.c1 + $inTag.id.length + 1;
+ }
+ else if ((lastTag = $tags.peek())) {
+ indent = stream.lineIndentation(lastTag.line) + INDENT_LEVEL();
+ // if current line begins with a closing tag, back one level
+ if (/^\s*<\x2f/.test(stream.lineText()))
+ indent -= INDENT_LEVEL();
+ }
+ return indent;
+ };
+
+ return PARSER;
+
+});
+
+DEFINE_SINGLETON("Ymacs_Keymap_XML", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "C-c /" : "xml_close_tag",
+ "C-ENTER" : "xml_zen_expand",
+ "ENTER" : "newline_and_indent"
+ };
+
+});
+
+Ymacs_Buffer.newMode("xml_mode", function(){
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "xml" }));
+ var keymap = Ymacs_Keymap_XML();
+ this.pushKeymap(keymap);
+ var changed_vars = this.setq({ indent_level: 2 });
+ return function() {
+ this.setTokenizer(tok);
+ this.popKeymap(keymap);
+ this.setq(changed_vars);
+ };
+
+});
+
+(function(){
+
+ DEFINE_SINGLETON("Ymacs_Keymap_XML_Zen", Ymacs_Keymap, function(D, P){
+ D.KEYS = {
+ "TAB" : "xml_zen_next_poi",
+ "S-TAB" : "xml_zen_prev_poi",
+ "C-g" : "xml_zen_stop"
+ };
+ });
+
+ var MODE_TYPE = 1, MODE_CLASS = 2, MODE_ID = 3, MODE_REPEAT = 4, MODE_ATTR = 5;
+
+ function zen_render(el, html) {
+ var n = el.repeat || 1;
+ for (var i = 1; i <= n; ++i) {
+ if (i > 1)
+ html("\n");
+ html("<", el.type);
+ if (el.id) {
+ html(' id="', el.id.replace(/\$/g, i), '"');
+ }
+ if (el.klass) {
+ html(' class="', el.klass.replace(/\$/g, i), '"');
+ }
+ if (el.attributes) {
+ el.attributes.foreach(function(attr){
+ html(" ", attr, '="|"');
+ });
+ }
+ html(">");
+ if (el.child) {
+ html("\n");
+ zen_render(el.child, html);
+ html("\n");
+ } else {
+ html("|");
+ }
+ html("</", el.type, ">");
+ if (el.next) {
+ html("\n");
+ zen_render(el.next, html);
+ }
+ }
+ };
+
+ function zen_parse(str, i) {
+ var el = { type: "" }, mode = MODE_TYPE;
+ OUTER: while (i < str.length) {
+ var ch = str.charAt(i++);
+ switch (ch) {
+
+ case "#":
+ mode = MODE_ID;
+ el.id = "";
+ break;
+
+ case ".":
+ mode = MODE_CLASS;
+ if (el.klass != null) {
+ el.klass += " ";
+ } else {
+ el.klass = "";
+ }
+ break;
+
+ case ":":
+ mode = MODE_ATTR;
+ if (el.attributes == null)
+ el.attributes = [];
+ el.attributes.push("");
+ break;
+
+ case "*":
+ mode = MODE_REPEAT;
+ el.repeat = "";
+ break;
+
+ case ">":
+ el.child = zen_parse(str, i);
+ i = el.child.i;
+ break OUTER;
+
+ case "(":
+ el.child = zen_parse(str, i);
+ i = el.child.i;
+ break;
+
+ case ")":
+ break OUTER;
+
+ case "+":
+ el.next = zen_parse(str, i);
+ i = el.next.i;
+ break OUTER;
+
+ default:
+ switch (mode) {
+ case MODE_TYPE:
+ el.type += ch;
+ break;
+ case MODE_CLASS:
+ el.klass += ch;
+ break;
+ case MODE_ID:
+ el.id += ch;
+ break;
+ case MODE_REPEAT:
+ el.repeat = parseInt(String(el.repeat) + ch, 10);
+ break;
+ case MODE_ATTR:
+ el.attributes.push(el.attributes.pop() + ch);
+ break;
+ }
+ }
+ }
+
+ el.i = i;
+ return el;
+ };
+
+ function maybe_stop_zen() {
+ var point = this.point(),
+ a = this.getq("xml_zen_markers"),
+ start = a[0],
+ end = a.peek();
+ if (point < start.getPosition() || point > end.getPosition() ||
+ end.getPosition() == a.peek(1).getPosition()) {
+ this.cmd("xml_zen_stop");
+ }
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ xml_close_tag: Ymacs_Interactive(function() {
+ this.cmd("close_last_xml_tag");
+ this.cmd("indent_line");
+ }),
+
+ xml_zen_expand: Ymacs_Interactive(function() {
+ this.cmd("xml_zen_stop");
+ var html = String.buffer(),
+ start = this.cmd("save_excursion", function() {
+ this.cmd("backward_whitespace");
+ while (!this.cmd("looking_back", /[\x20\xa0\s\t\n;&]/))
+ if (!this.cmd("backward_char"))
+ break;
+ return this.point();
+ }),
+ point = this.point();
+
+ try {
+ zen_render(
+ zen_parse(
+ this.cmd("buffer_substring", start, point).trim(), 0
+ ),
+ html
+ );
+ } catch(ex) {
+ throw new Ymacs_Exception("The Zen is not strong today :-/");
+ }
+
+ html = html.get();
+ this.cmd("delete_region", start, point);
+ this.cmd("insert", html);
+ start = this.createMarker(start, false, "xml_zen");
+
+ // locate points of interest
+ var end = this.createMarker(this.point(), true, "xml_zen"), markers = [];
+ this.cmd("goto_char", start.getPosition());
+ while (this.cmd("search_forward", "|", end.getPosition())) {
+ this.cmd("backward_delete_char");
+ markers.push(this.createMarker(this.point(), true, "xml_zen_start"));
+ markers.push(this.createMarker(this.point(), false, "xml_zen_end"));
+ }
+
+ this.cmd("indent_region", start.getPosition(), end.getPosition());
+
+ var count = markers.length;
+ if (count > 0) {
+ // move to first POI
+ this.cmd("goto_char", markers[0]);
+ markers.unshift(start);
+ markers.push(end);
+ this.setq("xml_zen_markers", markers);
+ this.pushKeymap(Ymacs_Keymap_XML_Zen());
+ this.addEventListener("afterInteractiveCommand", maybe_stop_zen);
+ } else {
+ start.destroy();
+ end.destroy();
+ }
+ }),
+
+ xml_zen_stop: Ymacs_Interactive(function(){
+ var tmp = this.getq("xml_zen_markers");
+ if (tmp) {
+ tmp.map("destroy");
+ this.setq("xml_zen_markers", null);
+ }
+ this.popKeymap(Ymacs_Keymap_XML_Zen());
+ this.removeEventListener("afterInteractiveCommand", maybe_stop_zen);
+ }),
+
+ xml_zen_next_poi: Ymacs_Interactive(function(){
+ var markers = this.getq("xml_zen_markers"), pos = this.point();
+ markers.foreach(function(m){
+ if (m.getPosition() > pos) {
+ this.cmd("goto_char", m.getPosition());
+ $BREAK();
+ }
+ }, this);
+ }),
+
+ xml_zen_prev_poi: Ymacs_Interactive(function(){
+ var markers = this.getq("xml_zen_markers"), pos = this.point();
+ markers.r_foreach(function(m){
+ if (m.getPosition() < pos) {
+ this.cmd("goto_char", m.getPosition());
+ $BREAK();
+ }
+ }, this);
+ })
+
+ });
+
+})();
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-regexp.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-regexp.js.svn-base
new file mode 100644
index 0000000..cf793af
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-regexp.js.svn-base
@@ -0,0 +1,96 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs.js
+
+window.Ymacs_Regexp = (function(){
+
+ var SEARCH_BACKWARD = {};
+
+ // var LOOKING_BACK = {};
+
+ function getPatternAndFlags(rx) {
+ if (rx instanceof RegExp)
+ rx = rx.toString();
+ var pos = rx.lastIndexOf("/"), flags = "";
+ flags = rx.substr(pos + 1);
+ rx = rx.substring(1, pos);
+ return { pattern: rx, flags: flags };
+ };
+
+ return {
+
+ // Prepends to the regexp a token that will greedily eat any characters in
+ // front of the pattern. This is useful to get the last occurrence of the
+ // pattern in a string. The returned regexp is cached, so it's not
+ // reconstructed a second time.
+ //
+ // A function using such regexp must be aware that m.index will always be zero,
+ // because it matches from the beginning of the string. To find the index of
+ // the real match, it should use m[0].length (where m is an array returned by
+ // rx.exec()).
+ search_backward: function(rx) {
+ var key = rx.toString();
+ var cached = SEARCH_BACKWARD[key];
+ if (!cached) {
+ rx = getPatternAndFlags(key);
+ rx.flags = rx.flags.replace(/g/g, "") + "g"; // make sure it's global
+ cached = new RegExp("([^]*)(" + rx.pattern + ")", rx.flags);
+ SEARCH_BACKWARD[key] = cached;
+ }
+ cached.lastIndex = 0;
+ return cached;
+ }
+
+ // Returns a regexp that has the "$" appended, so that it would match only at
+ // the end of the string. This should be faster than using search_backward and
+ // checking the lastIndex, since the JS regexp engine can optimize it, knowing
+ // that it should match only at the end of the string. Well, I hope.
+ //
+ // Update: it's not faster, and it's buggy. Don't use this.
+ //
+ // looking_back: function(rx) {
+ // var key = rx.toString();
+ // var cached = LOOKING_BACK[key];
+ // if (!cached) {
+ // rx = getPatternAndFlags(key);
+ // rx.pattern = rx.pattern.replace(/\$*$/, "$");
+ // cached = new RegExp(rx.pattern, rx.flags);
+ // LOOKING_BACK[key] = cached;
+ // }
+ // return cached;
+ // }
+
+ };
+
+})();
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-textprop.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-textprop.js.svn-base
new file mode 100644
index 0000000..0290838
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-textprop.js.svn-base
@@ -0,0 +1,168 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+DEFINE_CLASS("Ymacs_Text_Properties", DlEventProxy, function(D, P){
+
+ D.DEFAULT_EVENTS = [ "onChange" ];
+
+ D.DEFAULT_ARGS = {
+ buffer: [ "buffer", null ]
+ };
+
+ D.CONSTRUCT = P.reset = function() {
+ this.props = [];
+ };
+
+ P.insertLine = function(row) {
+ if (this.props.length < row)
+ this.props[row] = null;
+ else {
+ this.props.splice(row, 0, null);
+ }
+ };
+
+ P.deleteLine = function(row) {
+ this.props.splice(row, 1);
+ };
+
+ P.replaceLine = function(row, text) {
+ var p = this.props[row];
+ if (p && p.length > text.length) {
+ // remove extra-properties
+ p.splice(text.length, p.length);
+ }
+ };
+
+ P.addLineProps = function(row, i, j, prop, val) {
+ var p = this.props, o, changed = false;
+ if (i < j) {
+ p = p[row] || (p[row] = []);
+ while (i < j) {
+ o = p[i] || (p[i] = {});
+ if (o[prop] != val)
+ changed = true;
+ o[prop] = val;
+ ++i;
+ }
+ if (changed)
+ this.callHooks("onChange", row);
+ }
+ return changed;
+ };
+
+ P.removeLineProps = function(row, i, j, prop) {
+ var p = this.props[row], o, changed = false;
+ if (p && i < j) {
+ while (i < j) {
+ o = p[i];
+ if (o && prop in o) {
+ changed = true;
+ delete o[prop];
+ }
+ ++i;
+ }
+ if (changed)
+ this.callHooks("onChange", row);
+ }
+ return changed;
+ };
+
+ // this uses the "css" text property to intercalate <span class="$css"> ... </span> tags in the given text.
+ // "css" properties are added as the tokenizer parses the code and sends onFoundToken events.
+ //
+ // XXX: this function will be called a lot of times; seems complicated for what it does. Figure out if it can be
+ // optimized.
+ //
+ // Update: the mess got bigger once I decided to embed the caret in the text, rather than have it absolutely
+ // positioned (which seems to be the only practical way to position the cursor at the correct location). It is
+ // ESSENTIAL that the start tag of the element that defines the caret ends with "Ymacs-caret'>", so that the
+ // frame widget can find it.
+ P.getLineHTML = function(row, text, caret) {
+ var p = this.props[row];
+ if (caret === null) {
+ if (text == "")
+ return "<br/>";
+ if (!p || p.length == 0) {
+ return text.htmlEscape();
+ }
+ } else {
+ if (text == "")
+ return "<span class='Ymacs-caret'>&nbsp;</span>";
+ if (!p || p.length == 0) {
+ if (caret === text.length)
+ return text.htmlEscape() + "<span class='Ymacs-caret'>&nbsp;</span>";
+ return text.substr(0, caret).htmlEscape() +
+ "<span class='Ymacs-caret'>" +
+ text.charAt(caret).htmlEscape() +
+ "</span>" +
+ text.substr(caret + 1).htmlEscape();
+ }
+ }
+ var i = 0, n = text.length, last = null, o, ret = "", ch;
+ while (i < n) {
+ o = p[i];
+ o = o && o.css;
+ if (i === caret) {
+ o = o ? o + " Ymacs-caret" : "Ymacs-caret";
+ }
+ if (o && o != last) {
+ if (last)
+ ret += "</span>";
+ ret += "<span class='" + o + "'>";
+ }
+ else if (!o && last) {
+ ret += "</span>";
+ }
+ last = o;
+ // XXX: Should have used a hash rather than a
+ // switch statement? I'm not sure but I have
+ // a feeling that switch is faster.
+ ch = text.charAt(i);
+ switch (ch) {
+ case "<" : ret += "&lt;"; break;
+ case ">" : ret += "&gt;"; break;
+ case "&" : ret += "&amp;"; break;
+ default : ret += ch; break;
+ }
+ ++i;
+ }
+ if (last)
+ ret += "</span>";
+ if (i === caret) {
+ // caret is at EOL
+ ret += "<span class='Ymacs-caret'>&nbsp;</span>";
+ }
+ return ret;
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-tokenizer.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-tokenizer.js.svn-base
new file mode 100644
index 0000000..4eed935
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs-tokenizer.js.svn-base
@@ -0,0 +1,337 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+DEFINE_CLASS("Ymacs_Stream", null, function(D, P){
+
+ D.DEFAULT_ARGS = {
+ buffer : [ "buffer" , null ],
+ line : [ "line" , 0 ],
+ col : [ "col" , 0]
+ };
+
+ P.nextCol = function() {
+ ++this.col;
+ };
+
+ P.prevCol = function() {
+ --this.col;
+ };
+
+ P.nextLine = function() {
+ ++this.line;
+ this.col = 0;
+ };
+
+ P.prevLine = function() {
+ --this.line;
+ this.col = 0;
+ };
+
+ P.peek = function(n) {
+ if (n == null) n = 0;
+ return this.buffer.code[this.line].charAt(this.col + n);
+ };
+
+ P.get = function() {
+ var ch = this.peek();
+ this.nextCol();
+ return ch;
+ };
+
+ P.lineText = function(row) {
+ if (row == null)
+ row = this.line;
+ return this.buffer.code[row];
+ };
+
+ P.lineIndentation = function(row) {
+ return /^\s*/.exec(this.lineText(row))[0].length;
+ };
+
+ P.lookingAt = function(what) {
+
+ var line = this.buffer.code[this.line];
+ if (what instanceof RegExp) {
+ //what = 1;
+ return what.exec(line.substr(this.col + 1));
+ } else {
+ return line.substr(this.col, what.length) == what;
+ }
+ };
+
+ P.textBefore = function(pos) {
+ if (pos == null)
+ pos = this.buffer._rowColToPosition(this.line, this.col);
+ return this.buffer.getCode().substr(0, pos);
+ };
+
+ P.textAfter = function(pos) {
+ if (pos == null)
+ pos = this.buffer._rowColToPosition(this.line, this.col);
+ return this.buffer.getCode().substr(pos);
+ };
+
+ P.substring = function(start, end) {
+ return this.buffer.getCode().substring(start, end);
+ };
+
+ P.substr = function(start, end) {
+ return this.buffer.getCode().substr(start, end);
+ };
+
+ P.eol = function() {
+ return this.col == this.buffer.code[this.line].length;
+ };
+
+ P.eof = function() {
+ var n = this.buffer.code.length, l = this.line;
+ return l >= n || l == n - 1 && this.eol();
+ };
+
+ P.length = function() {
+ return this.buffer.code.length;
+ };
+
+ P.lineLength = function(line) {
+ if (line == null)
+ line = this.line;
+ return this.buffer.code[line].length;
+ };
+
+ P.save = function() {
+ return { buffer: this.buffer, line: this.line, col: this.col };
+ };
+
+ P.restore = function(state) {
+ this.buffer = state.buffer;
+ this.line = state.line;
+ this.col = state.col;
+ };
+
+ P.checkStop = function() {
+ if (this.eof()) throw this.EOF;
+ if (this.eol()) throw this.EOL;
+ };
+
+ P.EOL = new (function(){});
+
+ P.EOF = new (function(){});
+
+});
+
+DEFINE_CLASS("Ymacs_Tokenizer", DlEventProxy, function(D, P){
+
+ var LANGUAGES = {};
+
+ D.define = function(name, func) {
+ LANGUAGES[name.toLowerCase()] = func;
+ };
+
+ D.DEFAULT_EVENTS = [ "onFoundToken" ];
+
+ D.DEFAULT_ARGS = {
+ buffer : [ "buffer", null ],
+ type : [ "type", null ]
+ };
+
+ D.FIXARGS = function(args) {
+ if (typeof args.type == "string")
+ args.type = LANGUAGES[args.type.toLowerCase()];
+ };
+
+ D.CONSTRUCT = function() {
+ var smallest = null;
+ var timer = null;
+ this.quickUpdate = function(offset) {
+ var row = this.buffer._positionToRowCol(offset).row;
+ this.parsers.splice(row - 1, this.parsers.length + 1);
+
+ if (smallest != null) {
+ smallest = Math.min(row, smallest);
+ } else {
+ smallest = row;
+ }
+ clearTimeout(timer);
+ timer = function(){
+ this._do_quickUpdate(smallest);
+ smallest = null;
+ }.delayed(1, this);
+ };
+ this._stopQuickUpdate = function() {
+ clearTimeout(timer);
+ clearTimeout(this.timerUpdate);
+ };
+ this.reset();
+ };
+
+ P.reset = function() {
+ this.stream = new Ymacs_Stream({ buffer: this.buffer });
+ this.theParser = this.type(this.stream, this);
+ this.parsers = [];
+ this.parsers[-1] = this.theParser.copy();
+ this.timerUpdate = null;
+ this.quickUpdate(0);
+ };
+
+ P.getLanguage = function(name) {
+ return LANGUAGES[name](this.stream, this);
+ };
+
+ P.showProgress = function(p) {
+ if (p != null) {
+ p = Math.round(p / this.stream.length() * 100) + "%";
+ }
+ this.buffer.updateProgress("Syntax highlighting", p);
+ };
+
+ P._do_quickUpdate = function(row) {
+ this._stopQuickUpdate();
+ var s = this.stream, p, a = this.parsers, n;
+ s.line = row - 1;
+ while (!(p = a[s.line]))
+ s.prevLine();
+ s.nextLine();
+ p = p();
+ var iteration = 0;
+ var first = true;
+ var doit = function() {
+ this.buffer.preventUpdates();
+ n = first ? 3 : 20;
+ if (++iteration > 10)
+ this.showProgress(this.stream.line);
+ while (true) {
+ try {
+ while (true) p.next();
+ }
+ catch(ex) {
+ if (ex === s.EOL) {
+ a[s.line] = p.copy();
+ s.nextLine();
+ if (--n == 0) {
+ this.buffer.resumeUpdates();
+ this.timerUpdate = setTimeout(doit, first ? 500 : 50);
+ first = false;
+ return;
+ }
+ }
+ else if (ex === s.EOF) {
+ a[s.line] = p.copy();
+ this.buffer.resumeUpdates();
+ if (p.on_EOF)
+ p.on_EOF();
+ break;
+ }
+ else throw ex;
+ }
+ }
+ this.showProgress();
+ }.$(this);
+ doit();
+ };
+
+ P.quickInsertLine = function(row) {
+ this.parsers.splice(row, this.parsers.length + 1);
+ };
+
+ P.quickDeleteLine = function(row) {
+ this.parsers.splice(row, this.parsers.length + 1);
+ };
+
+ P.onToken = function(line, c1, c2, type) {
+ this.callHooks("onFoundToken", line, c1, c2, type);
+ };
+
+ P.getParserForLine = function(row) {
+ this._stopQuickUpdate();
+ var s = this.stream, p, a = this.parsers, n;
+ var currentLine = s.line;
+ s.line = row - 1;
+ while (!(p = a[s.line]))
+ s.prevLine();
+ s.nextLine();
+ p = p();
+ try {
+ this.buffer.preventUpdates();
+ while (true) {
+ if (s.line == row) {
+ return p;
+ }
+ try {
+ while (true) p.next();
+ } catch(ex) {
+ if (ex === s.EOL) {
+ a[s.line] = p.copy();
+ s.nextLine();
+ }
+ else if (ex === s.EOF) {
+ break;
+ }
+ else {
+ throw ex;
+ }
+ }
+ }
+ } finally {
+ this.buffer.resumeUpdates();
+ // if (currentLine < s.length()) {
+ // // resume lazy tokenizer if it was interrupted
+ // this.timerUpdate = this._do_quickUpdate.delayed(50, this, Math.min(row, currentLine));
+ // }
+ if (s.line < s.length())
+ this.timerUpdate = this._do_quickUpdate.delayed(50, this, s.line);
+ }
+ };
+
+ P.reparseAll = function() {
+ this.parsers.splice(0, this.parsers.length);
+ return this.finishParsing();
+ };
+
+ P.finishParsing = function() {
+ this.getParserForLine(this.stream.length());
+ return this.getLastParser();
+ };
+
+ P.getLastParser = function() {
+ return this.parsers.peek();
+ };
+
+ P.getIndentation = function(row, buffer) {
+ var p = this.getParserForLine(row);
+ if (p && p.indentation instanceof Function)
+ return p.indentation(buffer);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base
new file mode 100644
index 0000000..cf58706
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base
@@ -0,0 +1,559 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+DEFINE_CLASS("Ymacs", DlLayout, function(D, P, DOM){
+
+ D.DEFAULT_EVENTS = [
+ "onBufferSwitch",
+ "onCreateBuffer",
+ "onDeleteBuffer"
+ ];
+
+ D.DEFAULT_ARGS = {
+ buffers : [ "buffers" , null ],
+ frames : [ "frames" , null ],
+
+ // default options
+ cf_lineNumbers: [ "lineNumbers", false ],
+
+ // override in DlWidget
+ _focusable : [ "focusable" , true ]
+ };
+
+ D.FIXARGS = function(args) {
+ if (!args.buffers)
+ args.buffers = [];
+ if (!args.frames)
+ args.frames = [];
+ };
+
+ D.CONSTRUCT = function() {
+ this.buffers.foreach(function(b){
+ b.ymacs = this;
+ }, this);
+
+ /* -----[ variables ]----- */
+ this.killRing = [];
+ this.killMasterOfRings = [];
+ this.progress = {};
+
+ /* -----[ minibuffer ]----- */
+ this.minibuffer = this.createBuffer({ hidden: true, isMinibuffer: true });
+ this.minibuffer.cmd("minibuffer_mode");
+ this.minibuffer_frame = this.createFrame({
+ isMinibuffer : true,
+ buffer : this.minibuffer,
+ hidden : true,
+ highlightCurrentLine : false,
+ className : "Ymacs_Minibuffer"
+ });
+
+ /* -----[ main content ]----- */
+ if (this.buffers.length == 0)
+ this.createBuffer();
+
+ var frame = this.createFrame({ buffer: this.buffers[0] });
+
+ this.packWidget(this.minibuffer_frame, { pos: "bottom" });
+ this.packWidget(frame, { pos: "top", fill: "*" });
+
+ // this.__activeFrameEvents = {
+ // // onPointChange: this._on_activeFramePointChange.$(this)
+ // };
+
+ this.setActiveFrame(frame);
+ frame._redrawCaret();
+ };
+
+ P.pushToKillRing = function(text, prepend) {
+ prepend ? this.killRing.unshift(text)
+ : this.killRing.push(text);
+ };
+
+ P.killRingToMaster = function() {
+ if (this.killRing.length && (this.killMasterOfRings.length == 0 ||
+ this.killMasterOfRings.peek().join("") != this.killRing.join("")))
+ this.killMasterOfRings.push(this.killRing);
+ this.killRing = [];
+ };
+
+ P.killRingText = function() {
+ return this.killRing.join("");
+ };
+
+ P.rotateKillRing = function(push) {
+ if (push) {
+ this.killMasterOfRings.push(this.killRing);
+ this.killRing = this.killMasterOfRings.shift();
+ } else {
+ this.killMasterOfRings.unshift(this.killRing);
+ this.killRing = this.killMasterOfRings.pop();
+ }
+ };
+
+ P.getBuffer = function(buf) {
+ if (!(buf instanceof Ymacs_Buffer)) {
+ buf = this.buffers.grep_first(function(b){
+ return b.name == buf;
+ });
+ }
+ return buf;
+ };
+
+ P.killBuffer = function(buf) {
+ buf = this.getBuffer(buf);
+ this.callHooks("onDeleteBuffer", buf);
+ if (this.buffers.length > 1) {
+ if (this.getActiveBuffer() === buf)
+ this.switchToNextBuffer();
+ } else {
+ // make a brand new buffer
+ this.switchToBuffer(this.createBuffer());
+ }
+ this.buffers.remove(buf);
+ buf.destroy();
+ };
+
+ P.renameBuffer = function(buf, name) {
+ buf = this.getBuffer(buf);
+ buf.name = name;
+ buf.callHooks("onProgressChange");
+ };
+
+ P._do_switchToBuffer = function(buf) {
+ this.getActiveFrame().setBuffer(buf);
+ this.callHooks("onBufferSwitch", buf);
+ };
+
+ P.switchToBuffer = function(maybeName) {
+ var buf = this.getBuffer(maybeName), a = this.buffers;
+ if (!buf) {
+ // create new buffer
+ buf = this.createBuffer({ name: maybeName });
+ }
+ a.remove(buf);
+ a.unshift(buf);
+ this._do_switchToBuffer(buf);
+ return buf;
+ };
+
+ P.switchToNextBuffer = function(n) {
+ var a = this.buffers;
+ if (a.length > 1) {
+ var buf = a.shift();
+ a.push(buf);
+ this._do_switchToBuffer(a[0]);
+ }
+ };
+
+ P.switchToPreviousBuffer = function(n) {
+ var a = this.buffers;
+ if (a.length > 1) {
+ var buf = a.pop();
+ a.unshift(buf);
+ this._do_switchToBuffer(buf);
+ }
+ };
+
+ P.getNextBuffer = function(buf, n) {
+ if (n == null) n = 1;
+ var a = this.buffers;
+ return a[a.rotateIndex(a.find(buf) + n)];
+ };
+
+ P.getPrevBuffer = function(buf, n) {
+ if (n == null) n = 1;
+ var a = this.buffers;
+ return a[a.rotateIndex(a.find(buf) - n)];
+ };
+
+ P.getBufferFrames = function(buf) {
+ buf = this.getBuffer(buf);
+ return this.frames.grep(function(f){
+ return f.buffer === buf;
+ });
+ };
+
+ P.createBuffer = function(args) {
+ if (!args) args = {};
+ Object.merge(args, { ymacs: this });
+ var buf = new Ymacs_Buffer(args);
+ if (!args.hidden)
+ this.buffers.push(buf);
+ //
+ // XXX: although this seems the right way to do it,
+ // instead of doing it in killBuffer, for some
+ // reason we never get this event. Should
+ // investigate.
+ //
+ // buf.addEventListener("onDestroy", function(buf){
+ // console.log("got here, %s, %s", this.getActiveBuffer().name, buf.name);
+ // if (this.getActiveBuffer() === buf)
+ // this.switchToPreviousBuffer();
+ // this.buffers.remove(buf);
+ // }.$(this, buf));
+ //
+
+ this.callHooks("onCreateBuffer", buf);
+
+ return buf;
+ };
+
+ P.createFrame = function(args) {
+ if (!args) args = {};
+ Object.merge(args, { ymacs: this });
+ var frame = new Ymacs_Frame(args);
+ if (!args.hidden)
+ this.frames.unshift(frame);
+ frame.addEventListener("onDestroy", function(frame) {
+ this.frames.remove(frame);
+ }.$(this, frame));
+ return frame;
+ };
+
+ P.keepOnlyFrame = function(frame) {
+ if (this.frames.length > 1) {
+ var p = frame.parent;
+ while (p.parent != this)
+ p = p.parent;
+ this.replaceWidget(p, frame);
+ p.destroy();
+ this.setActiveFrame(frame);
+ this.doLayout();
+ }
+ };
+
+ P.deleteFrame = function(frame) {
+ if (this.frames.length > 1) {
+ var p = frame.parent, other = p.children().grep_first(function(f){
+ return f instanceof DlLayout || f instanceof Ymacs_Frame && f !== frame;
+ });
+ p.parent.replaceWidget(p, other);
+ p.destroy();
+ try {
+ DOM.walk(other.getElement(), function(el){
+ el = DlWidget.getFromElement(el);
+ if (el && el instanceof Ymacs_Frame)
+ throw el;
+ });
+ } catch(ex) {
+ if (!(ex instanceof Ymacs_Frame))
+ throw ex;
+ other = ex;
+ }
+ this.setActiveFrame(other);
+ this.doLayout();
+ }
+ };
+
+ P.focusOtherFrame = function() {
+ this.setActiveFrame(this.frames[0]);
+ };
+
+ P.focus = function() {
+ D.BASE.focus.apply(this, arguments);
+ this.frames.peek().focus();
+ };
+
+ P.setActiveFrame = function(frame, nofocus) {
+ if (!frame.isMinibuffer) {
+ var old = this.getActiveFrame();
+ if (old) {
+ old.delClass("Ymacs_Frame-active");
+ }
+ this.frames.remove(frame);
+ this.frames.push(frame);
+ }
+ if (!nofocus)
+ frame.focus();
+ };
+
+ P.getActiveFrame = function() {
+ return this.frames.peek();
+ };
+
+ P.getActiveBuffer = function() {
+ var frame = this.getActiveFrame();
+ return frame ? frame.buffer : this.buffers.peek();
+ };
+
+ P.setColorTheme = function(themeId) {
+ this.delClass(/Ymacs-Theme-[^\s]*/g);
+ if (!(themeId instanceof Array))
+ themeId = [ themeId ];
+ themeId.foreach(function(themeId){
+ this.addClass("Ymacs-Theme-" + themeId);
+ }, this);
+ };
+
+ P.getFrameInDirection = function(dir, pos, frame) {
+ if (!frame)
+ frame = this.getActiveFrame();
+ var caret = frame.getCaretElement();
+ if (!pos)
+ pos = DOM.getPos(caret);
+ if (!pos.sz)
+ pos.sz = DOM.getOuterSize(caret);
+ var byx = this.frames.mergeSort(function(a, b){ return a.getPos().x - b.getPos().x });
+ var byy = this.frames.mergeSort(function(a, b){ return a.getPos().y - b.getPos().y });
+ return this["_get_frameInDir_" + dir](byx, byy, pos, frame);
+
+ };
+
+ function selectClosestFrameX(byx, pos) {
+
+ if (byx.length > 0) {
+ var x = byx.peek().getPos().x, a = [ byx.pop() ];
+ while (byx.length > 0 && byx.peek().getPos().x == x)
+ a.push(byx.pop());
+ return a.minElement(function(f){
+ return Math.abs(pos.y - f.getPos().y - f.getSize().y/2);
+
+ });
+ }
+ };
+
+ function selectClosestFrameY(byy, pos) {
+ if (byy.length > 0) {
+ var y = byy.peek().getPos().y, a = [ byy.pop() ];
+ while (byy.length > 0 && byy.peek().getPos().y == y)
+ a.push(byy.pop());
+ return a.minElement(function(f){
+ return Math.abs(pos.x - f.getPos().x - f.getSize().x/2);
+
+ });
+
+}
+ };
+
+ P._get_frameInDir_left = function(byx, byy, pos, frame) {
+ byx = byx.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+ ymacs.getActiveBuffer().cmd("backward_delete_char");
+ return (f !== frame) && (p.x < pos.x) && (p.y - pos.sz.y <= pos.y) && (p.y + s.y > pos.y);
+ });
+ return selectClosestFrameX(byx, pos);
+ };
+
+ P._get_frameInDir_right = function(byx, byy, pos, frame) {
+ byx.reverse();
+ byx = byx.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+ var temp = "*";
+ ymacs.getActiveBuffer().cmd("insert",temp);
+ return (f !== frame) && (p.x > pos.x) && (p.y - pos.sz.y <= pos.y) && (p.y + s.y > pos.y);
+ });
+ return selectClosestFrameX(byx, pos);
+ };
+
+ P._get_frameInDir_up = function(byx, byy, pos, frame) {
+ byy = byy.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+ var prefix1,prefix2,pretemp1,pretemp2;
+ var temp1; var p1;
+ var temp2;
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp1 = ymacs.getActiveBuffer().matchData[0];
+ // ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char"); p1= ymacs.getActiveBuffer().point();
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp2 = ymacs.getActiveBuffer().matchData[0];
+ if (temp1.length > temp2.length)
+ {
+ alert("Cannot move past superior level or buffer limit");
+ }
+ else {
+ ymacs.getActiveBuffer().cmd("forward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[^*]+/g))
+ {
+ ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p1);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+ else
+ {
+ ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p1);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+ }
+ }
+ }
+ else if (ymacs.getActiveBuffer().cmd("looking_at", /([0-9]+)(\.\s+)([a-z]+)+/g))
+ {
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ ymacs.getActiveBuffer().cmd("transpose_text");
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ }
+
+
+ else
+ {
+ ymacs.getActiveBuffer().cmd("transpose_lines");
+ ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+ return (f !== frame) && (p.y < pos.y) && (p.x - pos.sz.x <= pos.x) && (p.x + s.x > pos.x);
+ });
+ return selectClosestFrameY(byy, pos);
+ };
+
+ P._get_frameInDir_down = function(byx, byy, pos, frame) {
+ byy.reverse();
+ byy = byy.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+
+ var p2;
+ var temp1;
+ var temp2;
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp1 = ymacs.getActiveBuffer().matchData[0];
+ // ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char");
+ p2= ymacs.getActiveBuffer().point();
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp2 = ymacs.getActiveBuffer().matchData[0];
+ if (temp1.length > temp2.length)
+ {
+ alert("Cannot move past superior level or buffer limit");
+ }
+ else {
+ /* ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char"); */
+ ymacs.getActiveBuffer().cmd("forward_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[^*]+/g))
+ { ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p2);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+ else
+ { ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p2);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+} }}
+ else if (ymacs.getActiveBuffer().cmd("looking_at", /([0-9]+)(\.\s+)([a-z]+)+/g))
+ {
+
+ ymacs.getActiveBuffer().cmd("forward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ // ymacs.getActiveBuffer().cmd("beginning_of_line");
+ ymacs.getActiveBuffer().cmd("transpose_text");
+
+ }
+
+
+ else
+ {
+ ymacs.getActiveBuffer().cmd("forward_line");
+ ymacs.getActiveBuffer().cmd("transpose_lines");
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+ return (f !== frame) && (p.y > pos.y) && (p.x - pos.sz.x <= pos.x) && (p.x + s.x > pos.x);
+ });
+ return selectClosestFrameY(byy, pos);
+ };
+
+ /* -----[ local storage ]----- */
+
+ function ensureLocalStorage() {
+ if (!(window.localStorage && window.localStorage.getItem))
+ throw new Ymacs_Exception("Local storage facility not available in this browser");
+ };
+
+ P.ls_get = function() {
+ ensureLocalStorage();
+ return DlJSON.decode(localStorage.getItem(".ymacs") || "{}", true);
+ };
+
+ P.ls_set = function(src) {
+ ensureLocalStorage();
+ localStorage.setItem(".ymacs", DlJSON.encode(src));
+ };
+
+ P.ls_getFileContents = function(name, nothrow) {
+ var info = this.ls_getFileDirectory(name), other = info.other, code;
+ if (other.length == 1) {
+ code = info.dir[other[0]];
+ }
+ if (code == null && !nothrow) {
+ throw new Ymacs_Exception("File not found");
+ }
+ return code;
+ };
+
+ P.ls_getFileDirectory = function(name, create) {
+ var store, dir = store = this.ls_get();
+ name = name.replace(/^[~\x2f]+/, "").split(/\x2f+/);
+ var path = [], other = [];
+ while (name.length > 0) {
+ var part = name.shift();
+ if (dir.hasOwnProperty(part) && (typeof dir[part] != "string")) {
+ dir = dir[part];
+ path.push(part);
+ }
+ else {
+ other.push(part);
+ }
+ };
+ if (create) {
+ var n = create == "file" ? 1 : 0;
+ while (other.length > n) {
+ dir = dir[other.shift()] = {};
+ }
+ this.ls_set(store);
+ }
+ return { store: store, dir: dir, path: path, other: other };
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/content.html b/gstudio/static/gstudio/js/Gnowmacs/src/js/content.html
new file mode 100644
index 0000000..df1c8a1
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/content.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+lang="en" xml:lang="en">
+<head>
+<title>*org content</title>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="generator" content="Org-mode"/>
+<meta name="generated" content="2012-05-08 11:22:31 IST"/>
+<meta name="author" content=""/>
+<style type="text/css">
+ <!--/*--><![CDATA[/*><!--*/
+ html { font-family: Times, serif; font-size: 12pt; }
+ .title { text-align: center; }
+ .todo { color: red; }
+ .done { color: green; }
+ .tag { background-color:lightblue; font-weight:normal }
+ .target { }
+ .timestamp { color: grey }
+ .timestamp-kwd { color: CadetBlue }
+ p.verse { margin-left: 3% }
+ pre {
+ border: 1pt solid #AEBDCC;
+ background-color: #F3F5F7;
+ padding: 5pt;
+ font-family: courier, monospace;
+ font-size: 90%;
+ overflow:auto;
+ }
+ table { border-collapse: collapse; }
+ td, th { vertical-align: top; }
+ dt { font-weight: bold; }
+ div.figure { padding: 0.5em; }
+ div.figure p { text-align: center; }
+ .linenr { font-size:smaller }
+ .code-highlighted {background-color:#ffff00;}
+ .org-info-js_info-navigation { border-style:none; }
+ #org-info-js_console-label { font-size:10px; font-weight:bold;
+ white-space:nowrap; }
+ .org-info-js_search-highlight {background-color:#ffff00; color:#000000;
+ font-weight:bold; }
+ /*]]>*/-->
+</style>
+<script type="text/javascript">
+<!--/*--><![CDATA[/*><!--*/
+ function CodeHighlightOn(elem, id)
+ {
+ var target = document.getElementById(id);
+ if(null != target) {
+ elem.cacheClassElem = elem.className;
+ elem.cacheClassTarget = target.className;
+ target.className = "code-highlighted";
+ elem.className = "code-highlighted";
+ }
+ }
+ function CodeHighlightOff(elem, id)
+ {
+ var target = document.getElementById(id);
+ if(elem.cacheClassElem)
+ elem.className = elem.cacheClassElem;
+ if(elem.cacheClassTarget)
+ target.className = elem.cacheClassTarget;
+ }
+/*]]>*/-->
+</script>
+</head><body>
+<h1 class="title">*org content</h1>
+
+
+<div id="table-of-contents">
+<h2>Table of Contents</h2>
+<div id="text-table-of-contents">
+<ul>
+<li><a href="#sec-1">1 abc </a></li>
+</ul>
+</div>
+</div>
+
+<div id="outline-container-1" class="outline-3">
+<h3 id="sec-1">1 abc </h3>
+<div id="text-1">
+
+</div>
+</div>
+<div id="postamble"><p class="author"> Author:
+<a href="mailto:supriya@dragbox">&lt;supriya@dragbox&gt;</a>
+</p>
+<p class="date"> Date: 2012-05-08 11:22:31 IST</p>
+<p>HTML generated by org-mode 6.21b in emacs 23</p>
+</div></body>
+</html>
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/editorload.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/editorload.js
new file mode 100644
index 0000000..294efa7
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/editorload.js
@@ -0,0 +1,28 @@
+ $.noConflict();
+ jQuery(document).ready(function($) {
+ // Code that uses jQuery's $ can follow here.
+ $("#editdata").click(function(){
+ alert("test");
+ $("#sidebar").hide();
+ $("#gnoweditor").gnowmacs();
+
+ // var org_data = encodeURIComponent($("#bufferdata").val());
+ // alert("encode" +org_data);
+
+ // alert("supriya");
+ // var content = $("#bufferdata").val();
+ // var iden = $("#objectid").val();
+ // alert ("data" + content);
+ //alert ("id" +iden);
+ // url = "/nodetypes/ajax/contentorgadd/?id=" + iden + "&contentorg=" +content;
+ // alert(url);
+ // $.get(url,
+ // function(data){
+ // alert("qqq" + data);
+ // })
+
+ });
+
+ });
+ // Code that uses other library's $ can follow here.
+
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/gnowmacs.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/gnowmacs.js
new file mode 100644
index 0000000..ec21f01
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/gnowmacs.js
@@ -0,0 +1,345 @@
+// This file is part of Ymacs for GNOWSYS: Gnowledge Networking
+// and Organizing System.
+
+// Ymacs is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation; either version 3 of
+// the License, or (at your option) any later version.
+
+// Ymacs 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 Affero General Public
+// License along with Ymacs (agpl.txt); if not, write to the
+// Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301 USA59 Temple Place, Suite 330,
+
+// Author: Divya <divyas15@gmail.com>
+
+// @require ymacs-tokenizer.js
+
+var arr4;
+Ymacs_Tokenizer.define("org", function(stream, tok){
+
+ var PARSER = {
+ next : next,
+ copy : copy,
+ indentation : indentation
+ };
+
+ var $parens = [];
+ var $passedParens = [];
+ var $cont = [];
+ var $inString = null;
+ var $inComment = null;
+ var $inHeading = null;
+
+ function copy() {
+ var c = resume.context = {
+ parens : $parens.slice(0),
+ passedParens : $passedParens.slice(0),
+ cont : $cont.slice(0),
+ inString : $inString,
+ inComment : $inComment,
+ inHeading : $inHeading
+ };
+ function resume() {
+ $parens = c.parens.slice(0);
+ $passedParens = c.passedParens.slice(0);
+ $cont = c.cont.slice(0);
+ $inString = c.inString;
+ $inComment = c.inComment;
+ $inHeading = c.inHeading;
+ return PARSER;
+ };
+ return resume;
+ };
+
+ function INDENT_LEVEL() {
+ return tok.buffer.getq("indent_level");
+ };
+
+ var OPEN_PAREN = {
+ "(" : ")",
+ "{" : "}",
+ "[" : "]"
+ };
+
+ var CLOSE_PAREN = {
+ ")" : "(",
+ "}" : "{",
+ "]" : "["
+ };
+
+ function isOpenParen(ch) {
+ return OPEN_PAREN[ch];
+ };
+
+ function isCloseParen(ch) {
+ return CLOSE_PAREN[ch];
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function readComment() {
+ var line = stream.lineText(), pos = line.indexOf("*/", stream.col);
+ var m = /^\s*\*+/.exec(line.substr(stream.col));
+ if (m) {
+ foundToken(stream.col, stream.col += m[0].length, "mcomment-starter");
+ }
+ if (pos >= 0) {
+ $cont.pop();
+ $inComment = null;
+ foundToken(stream.col, pos, "mcomment");
+ foundToken(pos, pos += 2, "mcomment-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, "mcomment");
+ stream.col = line.length;
+ }
+ };
+
+ function readString(end, type) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, type);
+ foundToken(stream.col, ++stream.col, type + "-stopper");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ function readHeading(type) {
+ var start = stream.col;
+ while (!stream.eol()) {
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), tmp;
+ if (stream.lookingAt("/*")) {
+ $inComment = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, stream.col += 2, "mcomment-starter");
+ $cont.push(readComment);
+ }
+ else if (ch === '"' || ch === "'") {
+ $inString = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch, "string"));
+ }
+ //to start with org
+ else if ((tmp = stream.lookingAt(/^(\[\[)(.+?)(\]\[)(.+?)(\]\])/))) {
+ foundToken(stream.col, stream.col += tmp[2].length+4, "org-link-url");
+ var url = tmp[2];
+ foundToken(stream.col, stream.col += (tmp[4].length+1), "org-link-text");
+ window.open(url);
+ foundToken(stream.col, stream.col += 1, "org-link-close");
+
+
+ }
+ else if ((tmp = stream.lookingAt(/^(\*.+?\*)/))) {
+ if (tmp[1].substring(1,2) === " " || tmp[1].substring(tmp[1].length-2, tmp[1].length-1) === " ")
+ {foundToken(stream.col, stream.col += tmp[1].length, null);}
+ else{
+ foundToken(stream.col, stream.col += tmp[1].length, "org-bold");
+ }
+ }
+ else if ((tmp = stream.lookingAt(/^(\/.+?\/)/))) {
+ if (tmp[1].substring(1,2) === " " || tmp[1].substring(tmp[1].length-2, tmp[1].length-1) === " ")
+ {foundToken(stream.col, stream.col += tmp[1].length, null);}
+ else{
+ foundToken(stream.col, stream.col += tmp[1].length, "org-italic");
+ }
+ }
+ else if ((tmp = stream.lookingAt(/^(_.+?_)/))) {
+ if (tmp[1].substring(1,2) === " " || tmp[1].substring(tmp[1].length-2, tmp[1].length-1) === " ")
+ {foundToken(stream.col, stream.col += tmp[1].length, null);}
+ else{
+ foundToken(stream.col, stream.col += tmp[1].length, "org-underline");
+ }
+ }
+ else if ((tmp = stream.lookingAt(/^(\+.+?\+)/))) {
+ if (tmp[1].substring(1,2) === " " || tmp[1].substring(tmp[1].length-2, tmp[1].length-1) === " ")
+ {foundToken(stream.col, stream.col += tmp[1].length, null);}
+ else{
+ foundToken(stream.col, stream.col += tmp[1].length, "org-strike");
+ }
+ }
+
+ else if ((tmp = stream.lookingAt(/^(\*+\s+)/))) {
+ if (stream.col == 0){
+ var headtype = "org-heading" + (tmp[1].length -1);
+ foundToken(stream.col, stream.col += tmp[1].length, headtype);
+ readHeading(headtype);
+ }
+ }
+
+
+ //to end with org
+
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+
+
+
+ function indentation() {
+ // no indentation for continued strings
+ if ($inString)
+ return 0;
+
+ var row = stream.line;
+ var currentLine = stream.lineText();
+ var indent = 0;
+
+ if ($inComment) {
+ var commentStartLine = stream.lineText($inComment.line);
+ indent = $inComment.c1 + 1;
+ if (!/^\s*\*/.test(currentLine)) {
+ // align with the first non-whitespace and non-asterisk character in the comment
+ var re = /[^\s*]/g;
+ re.lastIndex = $inComment.c1 + 1;
+ var m = re.exec(commentStartLine);
+ if (m)
+ indent = m.index;
+ }
+ return indent;
+ }
+
+ var p = $parens.peek();
+ if (p) {
+ // check if the current line closes the paren
+ var re = new RegExp("^\\s*\\" + OPEN_PAREN[p.type]);
+ var thisLineCloses = re.test(currentLine);
+
+ // Check if there is text after the opening paren. If so, indent to that column.
+ var line = stream.lineText(p.line);
+ re = /\S/g;
+ re.lastIndex = p.col + 1;
+ var m = re.exec(line);
+ if (m) {
+ // but if this line closes the paren, better use the column of the open paren
+ indent = thisLineCloses ? p.col : m.index;
+ }
+ else {
+ // Otherwise we should indent to one level more than the indentation of the line
+ // containing the opening paren.
+ indent = stream.lineIndentation(p.line) + INDENT_LEVEL();
+
+ // but if this line closes the paren, then back one level
+ if (thisLineCloses)
+ indent -= INDENT_LEVEL();
+ }
+ }
+
+ return indent;
+ };
+
+ return PARSER;
+
+});
+
+DEFINE_SINGLETON("Ymacs_Keymap_Org", Ymacs_Keymap);
+Ymacs_Keymap_Org().defineKeys({
+ "ENTER" : "newline_and_indent",
+ ": && } && )" : "c_insert_and_indent"
+});
+
+Ymacs_Buffer.newMode("org_mode", function(){
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "org" }));
+ var was_paren_match = this.cmd("paren_match_mode", true);
+ this.pushKeymap(Ymacs_Keymap_Org());
+
+ return function() {
+ this.setTokenizer(tok);
+ if (!was_paren_match)
+ this.cmd("paren_match_mode", false);
+ this.popKeymap(Ymacs_Keymap_Org());
+ };
+});
+
+
+Ymacs_Buffer.newCommands({
+
+ org_insert_heading: Ymacs_Interactive(function() {
+ this.cmd("beginning_of_line");
+ this.cmd("insert", "* ");
+ }),
+
+ org_bold: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "*");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "*");
+ }),
+
+ org_italic: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "/");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "/");
+ }),
+
+ org_underline: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "_");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "_");
+ }),
+
+ org_strike: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "+");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "+");
+ }),
+
+ org_file: Ymacs_Interactive("f", function() {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "+");
+ this.cmd("goto_char", end+1);
+ this.cmd("insert", "+");
+ }),
+ org_link: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "[[");
+ this.cmd("goto_char", end+2);
+ this.cmd("insert", "]]");
+ }),
+ org_table_create: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("goto_char", begin);
+ this.cmd("insert", "|");
+ this.cmd("insert"," ");
+ //this.cmd("goto_char", end+1);
+ //this.cmd("insert", "|");
+ })
+
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/jquery-1.7.1.min.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/jquery-1.7.1.min.js
new file mode 100644
index 0000000..198b3ff
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/jquery-1.7.1.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/jquery-ui-1.8.18.custom.min.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/jquery-ui-1.8.18.custom.min.js
new file mode 100644
index 0000000..f00a62f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/jquery-ui-1.8.18.custom.min.js
@@ -0,0 +1,356 @@
+/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);/*
+ * jQuery UI Position 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f={},g=a.fn.position,h=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return g.apply(this,arguments);b=a.extend({},b);var h=a(b.of),i=h[0],j=(b.collision||"flip").split(" "),k=b.offset?b.offset.split(" "):[0,0],l,m,n;i.nodeType===9?(l=h.width(),m=h.height(),n={top:0,left:0}):i.setTimeout?(l=h.width(),m=h.height(),n={top:h.scrollTop(),left:h.scrollLeft()}):i.preventDefault?(b.at="left top",l=m=0,n={top:b.of.pageY,left:b.of.pageX}):(l=h.outerWidth(),m=h.outerHeight(),n=h.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),j.length===1&&(j[1]=j[0]),k[0]=parseInt(k[0],10)||0,k.length===1&&(k[1]=k[0]),k[1]=parseInt(k[1],10)||0,b.at[0]==="right"?n.left+=l:b.at[0]===e&&(n.left+=l/2),b.at[1]==="bottom"?n.top+=m:b.at[1]===e&&(n.top+=m/2),n.left+=k[0],n.top+=k[1];return this.each(function(){var c=a(this),d=c.outerWidth(),g=c.outerHeight(),h=parseInt(a.curCSS(this,"marginLeft",!0))||0,i=parseInt(a.curCSS(this,"marginTop",!0))||0,o=d+h+(parseInt(a.curCSS(this,"marginRight",!0))||0),p=g+i+(parseInt(a.curCSS(this,"marginBottom",!0))||0),q=a.extend({},n),r;b.my[0]==="right"?q.left-=d:b.my[0]===e&&(q.left-=d/2),b.my[1]==="bottom"?q.top-=g:b.my[1]===e&&(q.top-=g/2),f.fractions||(q.left=Math.round(q.left),q.top=Math.round(q.top)),r={left:q.left-h,top:q.top-i},a.each(["left","top"],function(c,e){a.ui.position[j[c]]&&a.ui.position[j[c]][e](q,{targetWidth:l,targetHeight:m,elemWidth:d,elemHeight:g,collisionPosition:r,collisionWidth:o,collisionHeight:p,offset:k,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(q,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]!==e){var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0}},top:function(b,c){if(c.at[1]!==e){var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];if(!c||!c.ownerDocument)return null;if(b)return this.each(function(){a.offset.setOffset(this,b)});return h.call(this)}),function(){var b=document.getElementsByTagName("body")[0],c=document.createElement("div"),d,e,g,h,i;d=document.createElement(b?"div":"body"),g={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},b&&a.extend(g,{position:"absolute",left:"-1000px",top:"-1000px"});for(var j in g)d.style[j]=g[j];d.appendChild(c),e=b||document.documentElement,e.insertBefore(d,e.firstChild),c.style.cssText="position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;",h=a(c).offset(function(a,b){return b}).offset(),d.innerHTML="",e.removeChild(d),i=h.top+h.left+(b?2e3:0),f.fractions=i>21&&i<22}()})(jQuery);/*
+ * jQuery UI Draggable 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},destroy:function(){if(!!this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy();return this}},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle"))return!1;this.handle=this._getHandle(b);if(!this.handle)return!1;c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")});return!0},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment();if(this._trigger("start",b)===!1){this._clear();return!1}this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.helper.addClass("ui-draggable-dragging"),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b);return!0},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1){this._mouseUp({});return!1}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,b);return!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",b)!==!1&&d._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b);return a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)});return c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute");return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.left<h[0]&&(f=h[0]+this.offset.click.left),b.pageY-this.offset.click.top<h[1]&&(g=h[1]+this.offset.click.top),b.pageX-this.offset.click.left>h[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.top<h[1]||j-this.offset.click.top>h[3]?j-this.offset.click.top<h[1]?j+c.grid[1]:j-c.grid[1]:j:j;var k=c.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX;f=h?k-this.offset.click.left<h[0]||k-this.offset.click.left>h[2]?k-this.offset.click.left<h[0]?k+c.grid[0]:k-c.grid[0]:k:k}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(b,c,d){d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d]),b=="drag"&&(this.positionAbs=this._convertPositionTo("absolute"));return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(a){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.extend(a.ui.draggable,{version:"1.8.18"}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c){var d=a(this).data("draggable"),e=d.options,f=a.extend({},c,{item:d.element});d.sortables=[],a(e.connectToSortable).each(function(){var c=a.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",b,f))})},stop:function(b,c){var d=a(this).data("draggable"),e=a.extend({},c,{item:d.element});a.each(d.sortables,function(){this.instance.isOver?(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(b),this.instance.options.helper=this.instance.options._helper,d.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",b,e))})},drag:function(b,c){var d=a(this).data("draggable"),e=this,f=function(b){var c=this.offset.click.top,d=this.offset.click.left,e=this.positionAbs.top,f=this.positionAbs.left,g=b.height,h=b.width,i=b.top,j=b.left;return a.ui.isOver(e+c,f+d,i,j,g,h)};a.each(d.sortables,function(f){this.instance.positionAbs=d.positionAbs,this.instance.helperProportions=d.helperProportions,this.instance.offset.click=d.offset.click,this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},b.target=this.instance.currentItem[0],this.instance._mouseCapture(b,!0),this.instance._mouseStart(b,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",b),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(b)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",b,this.instance._uiHash(this.instance)),this.instance._mouseStop(b,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",b),d.dropped=!1)})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c){var d=a("body"),e=a(this).data("draggable").options;d.css("cursor")&&(e._cursor=d.css("cursor")),d.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("opacity")&&(e._opacity=d.css("opacity")),d.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(b,c){var d=a(this).data("draggable");d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"&&(d.overflowOffset=d.scrollParent.offset())},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=!1;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!="x")d.overflowOffset.top+d.scrollParent[0].offsetHeight-b.pageY<e.scrollSensitivity?d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop-e.scrollSpeed);if(!e.axis||e.axis!="y")d.overflowOffset.left+d.scrollParent[0].offsetWidth-b.pageX<e.scrollSensitivity?d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft-e.scrollSpeed)}else{if(!e.axis||e.axis!="x")b.pageY-a(document).scrollTop()<e.scrollSensitivity?f=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<e.scrollSensitivity&&(f=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed));if(!e.axis||e.axis!="y")b.pageX-a(document).scrollLeft()<e.scrollSensitivity?f=a(document).scrollLeft(a(document).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<e.scrollSensitivity&&(f=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed))}f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c){var d=a(this).data("draggable"),e=d.options;d.snapElements=[],a(e.snap.constructor!=String?e.snap.items||":data(draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!=d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=e.snapTolerance,g=c.offset.left,h=g+d.helperProportions.width,i=c.offset.top,j=i+d.helperProportions.height;for(var k=d.snapElements.length-1;k>=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f<g&&g<m+f&&n-f<i&&i<o+f||l-f<g&&g<m+f&&n-f<j&&j<o+f||l-f<h&&h<m+f&&n-f<i&&i<o+f||l-f<h&&h<m+f&&n-f<j&&j<o+f)){d.snapElements[k].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1;continue}if(e.snapMode!="inner"){var p=Math.abs(n-j)<=f,q=Math.abs(o-i)<=f,r=Math.abs(l-h)<=f,s=Math.abs(m-g)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var t=p||q||r||s;if(e.snapMode!="outer"){var p=Math.abs(n-i)<=f,q=Math.abs(o-j)<=f,r=Math.abs(l-g)<=f,s=Math.abs(m-h)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o-d.helperProportions.height,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left)}!d.snapElements[k].snapping&&(p||q||r||s||t)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=p||q||r||s||t}}}),a.ui.plugin.add("draggable","stack",{start:function(b,c){var d=a(this).data("draggable").options,e=a.makeArray(a(d.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});if(!!e.length){var f=parseInt(e[0].style.zIndex)||0;a(e).each(function(a){this.style.zIndex=f+a}),this[0].style.zIndex=f+e.length}}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("zIndex")&&(e._zIndex=d.css("zIndex")),d.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);/*
+ * jQuery UI Droppable 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ * jquery.ui.draggable.js
+ */(function(a,b){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var b=this.options,c=b.accept;this.isover=0,this.isout=1,this.accept=a.isFunction(c)?c:function(a){return a.is(c)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},a.ui.ddmanager.droppables[b.scope]=a.ui.ddmanager.droppables[b.scope]||[],a.ui.ddmanager.droppables[b.scope].push(this),b.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++)b[c]==this&&b.splice(c,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(b,c){b=="accept"&&(this.accept=a.isFunction(c)?c:function(a){return a.is(c)}),a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),c&&this._trigger("activate",b,this.ui(c))},_deactivate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),c&&this._trigger("deactivate",b,this.ui(c))},_over:function(b){var c=a.ui.ddmanager.current;!!c&&(c.currentItem||c.element)[0]!=this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",b,this.ui(c)))},_out:function(b){var c=a.ui.ddmanager.current;!!c&&(c.currentItem||c.element)[0]!=this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",b,this.ui(c)))},_drop:function(b,c){var d=c||a.ui.ddmanager.current;if(!d||(d.currentItem||d.element)[0]==this.element[0])return!1;var e=!1;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var b=a.data(this,"droppable");if(b.options.greedy&&!b.options.disabled&&b.options.scope==d.options.scope&&b.accept.call(b.element[0],d.currentItem||d.element)&&a.ui.intersect(d,a.extend(b,{offset:b.element.offset()}),b.options.tolerance)){e=!0;return!1}});if(e)return!1;if(this.accept.call(this.element[0],d.currentItem||d.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",b,this.ui(d));return this.element}return!1},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}}),a.extend(a.ui.droppable,{version:"1.8.18"}),a.ui.intersect=function(b,c,d){if(!c.offset)return!1;var e=(b.positionAbs||b.position.absolute).left,f=e+b.helperProportions.width,g=(b.positionAbs||b.position.absolute).top,h=g+b.helperProportions.height,i=c.offset.left,j=i+c.proportions.width,k=c.offset.top,l=k+c.proportions.height;switch(d){case"fit":return i<=e&&f<=j&&k<=g&&h<=l;case"intersect":return i<e+b.helperProportions.width/2&&f-b.helperProportions.width/2<j&&k<g+b.helperProportions.height/2&&h-b.helperProportions.height/2<l;case"pointer":var m=(b.positionAbs||b.position.absolute).left+(b.clickOffset||b.offset.click).left,n=(b.positionAbs||b.position.absolute).top+(b.clickOffset||b.offset.click).top,o=a.ui.isOver(n,m,k,i,c.proportions.height,c.proportions.width);return o;case"touch":return(g>=k&&g<=l||h>=k&&h<=l||g<k&&h>l)&&(e>=i&&e<=j||f>=i&&f<=j||e<i&&f>j);default:return!1}},a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d=a.ui.ddmanager.droppables[b.options.scope]||[],e=c?c.type:null,f=(b.currentItem||b.element).find(":data(droppable)").andSelf();droppablesLoop:for(var g=0;g<d.length;g++){if(d[g].options.disabled||b&&!d[g].accept.call(d[g].element[0],b.currentItem||b.element))continue;for(var h=0;h<f.length;h++)if(f[h]==d[g].element[0]){d[g].proportions.height=0;continue droppablesLoop}d[g].visible=d[g].element.css("display")!="none";if(!d[g].visible)continue;e=="mousedown"&&d[g]._activate.call(d[g],c),d[g].offset=d[g].element.offset(),d[g].proportions={width:d[g].element[0].offsetWidth,height:d[g].element[0].offsetHeight}}},drop:function(b,c){var d=!1;a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){!this.options||(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)&&(d=this._drop.call(this,c)||d),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],b.currentItem||b.element)&&(this.isout=1,this.isover=0,this._deactivate.call(this,c)))});return d},dragStart:function(b,c){b.element.parents(":not(body,html)").bind("scroll.droppable",function(){b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)})},drag:function(b,c){b.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(b,c),a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var d=a.ui.intersect(b,this,this.options.tolerance),e=!d&&this.isover==1?"isout":d&&this.isover==0?"isover":null;if(!e)return;var f;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");g.length&&(f=a.data(g[0],"droppable"),f.greedyChild=e=="isover"?1:0)}f&&e=="isover"&&(f.isover=0,f.isout=1,f._out.call(f,c)),this[e]=1,this[e=="isout"?"isover":"isout"]=0,this[e=="isover"?"_over":"_out"].call(this,c),f&&e=="isout"&&(f.isout=0,f.isover=1,f._over.call(f,c))}})},dragStop:function(b,c){b.element.parents(":not(body,html)").unbind("scroll.droppable"),b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)}}})(jQuery);/*
+ * jQuery UI Resizable 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width));return a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(a.browser.msie&&(!!a(c).is(":hidden")||!!a(c).parents(":hidden").length))continue;e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);/*
+ * jQuery UI Selectable 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable"),this.dragged=!1;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]),c.addClass("ui-selectee"),c.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=c.addClass("ui-selectee"),this._mouseInit(),this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable"),this._mouseDestroy();return this},_mouseStart:function(b){var c=this;this.opos=[b.pageX,b.pageY];if(!this.options.disabled){var d=this.options;this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.clientX,top:b.clientY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,!b.metaKey&&!b.ctrlKey&&(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().andSelf().each(function(){var d=a.data(this,"selectable-item");if(d){var e=!b.metaKey&&!b.ctrlKey||!d.$element.hasClass("ui-selected");d.$element.removeClass(e?"ui-unselecting":"ui-selected").addClass(e?"ui-selecting":"ui-unselecting"),d.unselecting=!e,d.selecting=e,d.selected=e,e?c._trigger("selecting",b,{selecting:d.element}):c._trigger("unselecting",b,{unselecting:d.element});return!1}})}},_mouseDrag:function(b){var c=this;this.dragged=!0;if(!this.options.disabled){var d=this.options,e=this.opos[0],f=this.opos[1],g=b.pageX,h=b.pageY;if(e>g){var i=g;g=e,e=i}if(f>h){var i=h;h=f,f=i}this.helper.css({left:e,top:f,width:g-e,height:h-f}),this.selectees.each(function(){var i=a.data(this,"selectable-item");if(!!i&&i.element!=c.element[0]){var j=!1;d.tolerance=="touch"?j=!(i.left>g||i.right<e||i.top>h||i.bottom<f):d.tolerance=="fit"&&(j=i.left>e&&i.right<g&&i.top>f&&i.bottom<h),j?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,c._trigger("selecting",b,{selecting:i.element}))):(i.selecting&&((b.metaKey||b.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),c._trigger("unselecting",b,{unselecting:i.element}))),i.selected&&!b.metaKey&&!b.ctrlKey&&!i.startselected&&(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,c._trigger("unselecting",b,{unselecting:i.element})))}});return!1}},_mouseStop:function(b){var c=this;this.dragged=!1;var d=this.options;a(".ui-unselecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-unselecting"),d.unselecting=!1,d.startselected=!1,c._trigger("unselected",b,{unselected:d.element})}),a(".ui-selecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected"),d.selecting=!1,d.selected=!0,d.startselected=!0,c._trigger("selected",b,{selected:d.element})}),this._trigger("stop",b),this.helper.remove();return!1}}),a.extend(a.ui.selectable,{version:"1.8.18"})})(jQuery);/*
+ * jQuery UI Sortable 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var a=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},destroy:function(){a.Widget.prototype.destroy.call(this),this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--)this.items[b].item.removeData(this.widgetName+"-item");return this},_setOption:function(b,c){b==="disabled"?(this.options[b]=c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(b,c){var d=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(b);var e=null,f=this,g=a(b.target).parents().each(function(){if(a.data(this,d.widgetName+"-item")==f){e=a(this);return!1}});a.data(b.target,d.widgetName+"-item")==f&&(e=a(b.target));if(!e)return!1;if(this.options.handle&&!c){var h=!1;a(this.options.handle,e).find("*").andSelf().each(function(){this==b.target&&(h=!0)});if(!h)return!1}this.currentItem=e,this._removeCurrentsFromItems();return!0},_mouseStart:function(b,c,d){var e=this.options,f=this;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),e.containment&&this._setContainment(),e.cursor&&(a("body").css("cursor")&&(this._storedCursor=a("body").css("cursor")),a("body").css("cursor",e.cursor)),e.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",e.opacity)),e.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",e.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(var g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",b,f._uiHash(this));a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b);return!0},_mouseDrag:function(b){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY<c.scrollSensitivity?this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop+c.scrollSpeed:b.pageY-this.overflowOffset.top<c.scrollSensitivity&&(this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop-c.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-b.pageX<c.scrollSensitivity?this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft+c.scrollSpeed:b.pageX-this.overflowOffset.left<c.scrollSensitivity&&(this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft-c.scrollSpeed)):(b.pageY-a(document).scrollTop()<c.scrollSensitivity?d=a(document).scrollTop(a(document).scrollTop()-c.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<c.scrollSensitivity&&(d=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed)),b.pageX-a(document).scrollLeft()<c.scrollSensitivity?d=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<c.scrollSensitivity&&(d=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed))),d!==!1&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(var e=this.items.length-1;e>=0;e--){var f=this.items[e],g=f.item[0],h=this._intersectsWithPointer(f);if(!h)continue;if(g!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=g&&!a.ui.contains(this.placeholder[0],g)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],g):!0)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(f))this._rearrange(b,f);else break;this._trigger("change",b,this._uiHash());break}}this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs;return!1},_mouseStop:function(b,c){if(!!b){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b);if(this.options.revert){var d=this,e=d.placeholder.offset();d.reverting=!0,a(this.helper).animate({left:e.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1}},cancel:function(){var b=this;if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("deactivate",null,b._uiHash(this)),this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",null,b._uiHash(this)),this.containers[c].containerCache.over=0)}this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem));return this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"=");return d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")});return d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l=d+j>h&&d+j<i&&b+k>f&&b+k<g;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?l:f<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<g&&h<d+this.helperProportions.height/2&&e-this.helperProportions.height/2<i},_intersectsWithPointer:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left,b.width),e=c&&d,f=this._getDragVerticalDirection(),g=this._getDragHorizontalDirection();if(!e)return!1;return this.floating?g&&g=="right"||f=="down"?2:1:f&&(f=="down"?2:1)},_intersectsWithSides:function(b){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,b.top+b.height/2,b.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,b.left+b.width/2,b.width),e=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();return this.floating&&f?f=="right"&&d||f=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a),this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){var c=this,d=[],e=[],f=this._connectWith();if(f&&b)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&e.push([a.isFunction(j.options.items)?j.options.items.call(j.element):a(j.options.items,j.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),j])}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var g=e.length-1;g>=0;g--)e[g][0].each(function(){d.push(this)});return a(d)},_removeCurrentsFromItems:function(){var a=this.currentItem.find(":data("+this.widgetName+"-item)");for(var b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(b){this.items=[],this.containers=[this];var c=this.items,d=this,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]],f=this._connectWith();if(f&&this.ready)for(var g=f.length-1;g>=0;g--){var h=a(f[g]);for(var i=h.length-1;i>=0;i--){var j=a.data(h[i],this.widgetName);j&&j!=this&&!j.options.disabled&&(e.push([a.isFunction(j.options.items)?j.options.items.call(j.element[0],b,{item:this.currentItem}):a(j.options.items,j.element),j]),this.containers.push(j))}}for(var g=e.length-1;g>=0;g--){var k=e[g][1],l=e[g][0];for(var i=0,m=l.length;i<m;i++){var n=a(l[i]);n.data(this.widgetName+"-item",k),c.push({item:n,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var c=this.items.length-1;c>=0;c--){var d=this.items[c];if(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])continue;var e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item;b||(d.width=e.outerWidth(),d.height=e.outerHeight());var f=e.offset();d.left=f.left,d.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var c=this.containers.length-1;c>=0;c--){var f=this.containers[c].element.offset();this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(b){var c=b||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var e=d.placeholder;d.placeholder={element:function(){var b=a(document.createElement(c.currentItem[0].nodeName)).addClass(e||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];e||(b.style.visibility="hidden");return b},update:function(a,b){if(!e||!!d.forcePlaceholderSize)b.height()||b.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),b.width()||b.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=a(d.placeholder.element.call(c.element,c.currentItem)),c.currentItem.after(c.placeholder),d.placeholder.update(c,c.placeholder)},_contactContainers:function(b){var c=null,d=null;for(var e=this.containers.length-1;e>=0;e--){if(a.ui.contains(this.currentItem[0],this.containers[e].element[0]))continue;if(this._intersectsWith(this.containers[e].containerCache)){if(c&&a.ui.contains(this.containers[e].element[0],c.element[0]))continue;c=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",b,this._uiHash(this)),this.containers[e].containerCache.over=0)}if(!!c)if(this.containers.length===1)this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1;else if(this.currentContainer!=this.containers[d]){var f=1e4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"];for(var i=this.items.length-1;i>=0;i--){if(!a.ui.contains(this.containers[d].element[0],this.items[i].item[0]))continue;var j=this.items[i][this.containers[d].floating?"left":"top"];Math.abs(j-h)<f&&(f=Math.abs(j-h),g=this.items[i])}if(!g&&!this.options.dropOnEmpty)return;this.currentContainer=this.containers[d],g?this._rearrange(b,g,null,!0):this._rearrange(b,null,this.containers[d].element,!0),this._trigger("change",b,this._uiHash()),this.containers[d]._trigger("change",b,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",b,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]),d[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(d[0].style.width==""||c.forceHelperSize)&&d.width(this.currentItem.width()),(d[0].style.height==""||c.forceHelperSize)&&d.height(this.currentItem.height());return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)){var c=a(b.containment)[0],d=a(b.containment).offset(),e=a(c).css("overflow")!="hidden";this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName);this.cssPosition=="relative"&&(this.scrollParent[0]==document||this.scrollParent[0]==this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var f=b.pageX,g=b.pageY;if(this.originalPosition){this.containment&&(b.pageX-this.offset.click.left<this.containment[0]&&(f=this.containment[0]+this.offset.click.left),b.pageY-this.offset.click.top<this.containment[1]&&(g=this.containment[1]+this.offset.click.top),b.pageX-this.offset.click.left>this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top));if(c.grid){var h=this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1];g=this.containment?h-this.offset.click.top<this.containment[1]||h-this.offset.click.top>this.containment[3]?h-this.offset.click.top<this.containment[1]?h+c.grid[1]:h-c.grid[1]:h:h;var i=this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0];f=this.containment?i-this.offset.click.left<this.containment[0]||i-this.offset.click.left>this.containment[2]?i-this.offset.click.left<this.containment[0]?i+c.grid[0]:i-c.grid[0]:i:i}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_rearrange:function(a,b,c,d){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var e=this,f=this.counter;window.setTimeout(function(){f==e.counter&&e.refreshPositions(!d)},0)},_clear:function(b,c){this.reverting=!1;var d=[],e=this;!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var f in this._storedCSS)if(this._storedCSS[f]=="auto"||this._storedCSS[f]=="static")this._storedCSS[f]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&d.push(function(a){this._trigger("receive",a,this._uiHash(this.fromOutside))}),(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c&&d.push(function(a){this._trigger("update",a,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||d.push(function(a){this._trigger("remove",a,this._uiHash())});for(var f=this.containers.length-1;f>=0;f--)a.ui.contains(this.containers[f].element[0],this.currentItem[0])&&!c&&(d.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.containers[f])),d.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.containers[f])))}for(var f=this.containers.length-1;f>=0;f--)c||d.push(function(a){return function(b){a._trigger("deactivate",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over&&(d.push(function(a){return function(b){a._trigger("out",b,this._uiHash(this))}}.call(this,this.containers[f])),this.containers[f].containerCache.over=0);this._storedCursor&&a("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",b,this._uiHash());for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}return!1}c||this._trigger("beforeStop",b,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!=this.currentItem[0]&&this.helper.remove(),this.helper=null;if(!c){for(var f=0;f<d.length;f++)d[f].call(this,b);this._trigger("stop",b,this._uiHash())}this.fromOutside=!1;return!0},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(b){var c=b||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:b?b.element:null}}}),a.extend(a.ui.sortable,{version:"1.8.18"})})(jQuery);/*
+ * jQuery UI Accordion 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var b=this,c=b.options;b.running=0,b.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix"),b.headers=b.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")}),b.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(c.navigation){var d=b.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var e=d.closest(".ui-accordion-header");e.length?b.active=e:b.active=d.closest(".ui-accordion-content").prev()}}b.active=b._findActive(b.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top"),b.active.next().addClass("ui-accordion-content-active"),b._createIcons(),b.resize(),b.element.attr("role","tablist"),b.headers.attr("role","tab").bind("keydown.accordion",function(a){return b._keydown(a)}).next().attr("role","tabpanel"),b.headers.not(b.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide(),b.active.length?b.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):b.headers.eq(0).attr("tabIndex",0),a.browser.safari||b.headers.find("a").attr("tabIndex",-1),c.event&&b.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(a){b._clickHandler.call(b,a,this),a.preventDefault()})},_createIcons:function(){var b=this.options;b.icons&&(a("<span></span>").addClass("ui-icon "+b.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(b.icons.header).toggleClass(b.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove(),this.element.removeClass("ui-accordion-icons")},destroy:function(){var b=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"),this.headers.find("a").removeAttr("tabIndex"),this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");(b.autoHeight||b.fillHeight)&&c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b=="active"&&this.activate(c),b=="icons"&&(this._destroyIcons(),c&&this._createIcons()),b=="disabled"&&this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(b){if(!(this.options.disabled||b.altKey||b.ctrlKey)){var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:b.target},b.target),b.preventDefault()}if(f){a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus();return!1}return!0}},resize:function(){var b=this.options,c;if(b.fillSpace){if(a.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height(),a.browser.msie&&this.element.parent().css("overflow",d),this.headers.each(function(){c-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")}else b.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c));return this},activate:function(a){this.options.active=a;var b=this._findActive(a)[0];this._clickHandler({target:b},b);return this},_findActive:function(b){return b?typeof b=="number"?this.headers.filter(":eq("+b+")"):this.headers.not(this.headers.not(b)):b===!1?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(b,c){var d=this.options;if(!d.disabled){if(!b.target){if(!d.collapsible)return;this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),this.active.next().addClass("ui-accordion-content-active");var e=this.active.next(),f={options:d,newHeader:a([]),oldHeader:d.active,newContent:a([]),oldContent:e},g=this.active=a([]);this._toggle(g,e,f);return}var h=a(b.currentTarget||c),i=h[0]===this.active[0];d.active=d.collapsible&&i?!1:this.headers.index(h);if(this.running||!d.collapsible&&i)return;var j=this.active,g=h.next(),e=this.active.next(),f={options:d,newHeader:i&&d.collapsible?a([]):h,oldHeader:this.active,newContent:i&&d.collapsible?a([]):g,oldContent:e},k=this.headers.index(this.active[0])>this.headers.index(h[0]);this.active=i?a([]):h,this._toggle(g,e,f,i,k),j.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header),i||(h.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),h.next().addClass("ui-accordion-content-active"));return}},_toggle:function(b,c,d,e,f){var g=this,h=g.options;g.toShow=b,g.toHide=c,g.data=d;var i=function(){if(!!g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data),g.running=c.size()===0?b.size():c.size();if(h.animated){var j={};h.collapsible&&e?j={toShow:a([]),toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace}:j={toShow:b,toHide:c,complete:i,down:f,autoHeight:h.autoHeight||h.fillSpace},h.proxied||(h.proxied=h.animated),h.proxiedDuration||(h.proxiedDuration=h.duration),h.animated=a.isFunction(h.proxied)?h.proxied(j):h.proxied,h.duration=a.isFunction(h.proxiedDuration)?h.proxiedDuration(j):h.proxiedDuration;var k=a.ui.accordion.animations,l=h.duration,m=h.animated;m&&!k[m]&&!a.easing[m]&&(m="slide"),k[m]||(k[m]=function(a){this.slide(a,{easing:m,duration:l||700})}),k[m](j)}else h.collapsible&&e?b.toggle():(c.hide(),b.show()),i(!0);c.prev().attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).blur(),b.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;this.running||(this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data))}}),a.extend(a.ui.accordion,{version:"1.8.18",animations:{slide:function(b,c){b=a.extend({easing:"swing",duration:300},b,c);if(!b.toHide.size())b.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},b);else{if(!b.toShow.size()){b.toHide.animate({height:"hide",paddingTop:"hide",paddingBottom:"hide"},b);return}var d=b.toShow.css("overflow"),e=0,f={},g={},h=["height","paddingTop","paddingBottom"],i,j=b.toShow;i=j[0].style.width,j.width(j.parent().width()-parseFloat(j.css("paddingLeft"))-parseFloat(j.css("paddingRight"))-(parseFloat(j.css("borderLeftWidth"))||0)-(parseFloat(j.css("borderRightWidth"))||0)),a.each(h,function(c,d){g[d]="hide";var e=(""+a.css(b.toShow[0],d)).match(/^([\d+-.]+)(.*)$/);f[d]={value:e[1],unit:e[2]||"px"}}),b.toShow.css({height:0,overflow:"hidden"}).show(),b.toHide.filter(":hidden").each(b.complete).end().filter(":visible").animate(g,{step:function(a,c){c.prop=="height"&&(e=c.end-c.start===0?0:(c.now-c.start)/(c.end-c.start)),b.toShow[0].style[c.prop]=e*f[c.prop].value+f[c.prop].unit},duration:b.duration,easing:b.easing,complete:function(){b.autoHeight||b.toShow.css("height",""),b.toShow.css({width:i,overflow:d}),b.complete()}})}},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1e3:200})}}})})(jQuery);/*
+ * jQuery UI Autocomplete 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.position.js
+ */(function(a,b){var c=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var b=this,c=this.element[0].ownerDocument,d;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!b.options.disabled&&!b.element.propAttr("readOnly")){d=!1;var e=a.ui.keyCode;switch(c.keyCode){case e.PAGE_UP:b._move("previousPage",c);break;case e.PAGE_DOWN:b._move("nextPage",c);break;case e.UP:b._move("previous",c),c.preventDefault();break;case e.DOWN:b._move("next",c),c.preventDefault();break;case e.ENTER:case e.NUMPAD_ENTER:b.menu.active&&(d=!0,c.preventDefault());case e.TAB:if(!b.menu.active)return;b.menu.select(c);break;case e.ESCAPE:b.element.val(b.term),b.close(c);break;default:clearTimeout(b.searching),b.searching=setTimeout(function(){b.term!=b.element.val()&&(b.selectedItem=null,b.search(null,c))},b.options.delay)}}}).bind("keypress.autocomplete",function(a){d&&(d=!1,a.preventDefault())}).bind("focus.autocomplete",function(){b.options.disabled||(b.selectedItem=null,b.previous=b.element.val())}).bind("blur.autocomplete",function(a){b.options.disabled||(clearTimeout(b.searching),b.closing=setTimeout(function(){b.close(a),b._change(a)},150))}),this._initSource(),this.response=function(){return b._response.apply(b,arguments)},this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",c)[0]).mousedown(function(c){var d=b.menu.element[0];a(c.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(c){c.target!==b.element[0]&&c.target!==d&&!a.ui.contains(d,c.target)&&b.close()})},1),setTimeout(function(){clearTimeout(b.closing)},13)}).menu({focus:function(a,c){var d=c.item.data("item.autocomplete");!1!==b._trigger("focus",a,{item:d})&&/^key/.test(a.originalEvent.type)&&b.element.val(d.value)},selected:function(a,d){var e=d.item.data("item.autocomplete"),f=b.previous;b.element[0]!==c.activeElement&&(b.element.focus(),b.previous=f,setTimeout(function(){b.previous=f,b.selectedItem=e},1)),!1!==b._trigger("select",a,{item:e})&&b.element.val(e.value),b.term=b.element.val(),b.close(a),b.selectedItem=e},blur:function(a,c){b.menu.element.is(":visible")&&b.element.val()!==b.term&&b.element.val(b.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"),a.fn.bgiframe&&this.menu.element.bgiframe(),b.beforeunloadHandler=function(){b.element.removeAttr("autocomplete")},a(window).bind("beforeunload",b.beforeunloadHandler)},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup"),this.menu.element.remove(),a(window).unbind("beforeunload",this.beforeunloadHandler),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments),b==="source"&&this._initSource(),b==="appendTo"&&this.menu.element.appendTo(a(c||"body",this.element[0].ownerDocument)[0]),b==="disabled"&&c&&this.xhr&&this.xhr.abort()},_initSource:function(){var b=this,d,e;a.isArray(this.options.source)?(d=this.options.source,this.source=function(b,c){c(a.ui.autocomplete.filter(d,b.term))}):typeof this.options.source=="string"?(e=this.options.source,this.source=function(d,f){b.xhr&&b.xhr.abort(),b.xhr=a.ajax({url:e,data:d,dataType:"json",context:{autocompleteRequest:++c},success:function(a,b){this.autocompleteRequest===c&&f(a)},error:function(){this.autocompleteRequest===c&&f([])}})}):this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val(),this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==!1)return this._search(a)},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.source({term:a},this.response)},_response:function(a){!this.options.disabled&&a&&a.length?(a=this._normalize(a),this._suggest(a),this._trigger("open")):this.close(),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",a))},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){if(b.length&&b[0].label&&b[0].value)return b;return a.map(b,function(b){if(typeof b=="string")return{label:b,value:b};return a.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(b){var c=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(c,b),this.menu.deactivate(),this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItem(b,c)})},_renderItem:function(b,c){return a("<li></li>").data("item.autocomplete",c).append(a("<a></a>").text(c.label)).appendTo(b)},_move:function(a,b){if(!this.menu.element.is(":visible"))this.search(null,b);else{if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term),this.menu.deactivate();return}this.menu[a](b)}},widget:function(){return this.menu.element}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}})})(jQuery),function(a){a.widget("ui.menu",{_create:function(){var b=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){!a(c.target).closest(".ui-menu-item a").length||(c.preventDefault(),b.select(c))}),this.refresh()},refresh:function(){var b=this,c=this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem");c.children("a").addClass("ui-corner-all").attr("tabindex",-1).mouseenter(function(c){b.activate(c,a(this).parent())}).mouseleave(function(){b.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.scrollTop(),e=this.element.height();c<0?this.element.scrollTop(d+c):c>=e&&this.element.scrollTop(d+c-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end(),this._trigger("focus",a,{item:b})},deactivate:function(){!this.active||(this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null)},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,c){if(!this.active)this.activate(c,this.element.children(b));else{var d=this.active[a+"All"](".ui-menu-item").eq(0);d.length?this.activate(c,d):this.activate(c,this.element.children(b))}},nextPage:function(b){if(this.hasScroll()){if(!this.active||this.last()){this.activate(b,this.element.children(".ui-menu-item:first"));return}var c=this.active.offset().top,d=this.element.height(),e=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c-d+a(this).height();return b<10&&b>-10});e.length||(e=this.element.children(".ui-menu-item:last")),this.activate(b,e)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(b){if(this.hasScroll()){if(!this.active||this.first()){this.activate(b,this.element.children(".ui-menu-item:last"));return}var c=this.active.offset().top,d=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var b=a(this).offset().top-c+d-a(this).height();return b<10&&b>-10}),result.length||(result=this.element.children(".ui-menu-item:first")),this.activate(b,result)}else this.activate(b,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})}(jQuery);/*
+ * jQuery UI Button 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */(function(a,b){var c,d,e,f,g="ui-button ui-widget ui-state-default ui-corner-all",h="ui-state-hover ui-state-active ",i="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",j=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},k=function(b){var c=b.name,d=b.form,e=a([]);c&&(d?e=a(d).find("[name='"+c+"']"):e=a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form}));return e};a.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",j),typeof this.options.disabled!="boolean"?this.options.disabled=!!this.element.propAttr("disabled"):this.element.propAttr("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var b=this,h=this.options,i=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(i?"":" ui-state-active"),m="ui-state-focus";h.label===null&&(h.label=this.buttonElement.html()),this.buttonElement.addClass(g).attr("role","button").bind("mouseenter.button",function(){h.disabled||(a(this).addClass("ui-state-hover"),this===c&&a(this).addClass("ui-state-active"))}).bind("mouseleave.button",function(){h.disabled||a(this).removeClass(l)}).bind("click.button",function(a){h.disabled&&(a.preventDefault(),a.stopImmediatePropagation())}),this.element.bind("focus.button",function(){b.buttonElement.addClass(m)}).bind("blur.button",function(){b.buttonElement.removeClass(m)}),i&&(this.element.bind("change.button",function(){f||b.refresh()}),this.buttonElement.bind("mousedown.button",function(a){h.disabled||(f=!1,d=a.pageX,e=a.pageY)}).bind("mouseup.button",function(a){!h.disabled&&(d!==a.pageX||e!==a.pageY)&&(f=!0)})),this.type==="checkbox"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).toggleClass("ui-state-active"),b.buttonElement.attr("aria-pressed",b.element[0].checked)}):this.type==="radio"?this.buttonElement.bind("click.button",function(){if(h.disabled||f)return!1;a(this).addClass("ui-state-active"),b.buttonElement.attr("aria-pressed","true");var c=b.element[0];k(c).not(c).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown.button",function(){if(h.disabled)return!1;a(this).addClass("ui-state-active"),c=this,a(document).one("mouseup",function(){c=null})}).bind("mouseup.button",function(){if(h.disabled)return!1;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(b){if(h.disabled)return!1;(b.keyCode==a.ui.keyCode.SPACE||b.keyCode==a.ui.keyCode.ENTER)&&a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(b){b.keyCode===a.ui.keyCode.SPACE&&a(this).click()})),this._setOption("disabled",h.disabled),this._resetButton()},_determineButtonType:function(){this.element.is(":checkbox")?this.type="checkbox":this.element.is(":radio")?this.type="radio":this.element.is("input")?this.type="input":this.type="button";if(this.type==="checkbox"||this.type==="radio"){var a=this.element.parents().filter(":last"),b="label[for='"+this.element.attr("id")+"']";this.buttonElement=a.find(b),this.buttonElement.length||(a=a.length?a.siblings():this.element.siblings(),this.buttonElement=a.filter(b),this.buttonElement.length||(this.buttonElement=a.find(b))),this.element.addClass("ui-helper-hidden-accessible");var c=this.element.is(":checked");c&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.attr("aria-pressed",c)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(g+" "+h+" "+i).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title"),a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);b==="disabled"?c?this.element.propAttr("disabled",!0):this.element.propAttr("disabled",!1):this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b),this.type==="radio"?k(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):this.type==="checkbox"&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass(i),c=a("<span></span>",this.element[0].ownerDocument).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",c))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}}),a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c),a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")==="rtl";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"),a.Widget.prototype.destroy.call(this)}})})(jQuery);/*
+ * jQuery UI Dialog 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.button.js
+ * jquery.ui.draggable.js
+ * jquery.ui.mouse.js
+ * jquery.ui.position.js
+ * jquery.ui.resizable.js
+ */(function(a,b){var c="ui-dialog ui-widget ui-widget-content ui-corner-all ",d={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},e={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},f=a.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};a.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(b){var c=a(this).css(b).offset().top;c<0&&a(this).css("top",b.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.options.title=this.options.title||this.originalTitle;var b=this,d=b.options,e=d.title||"&#160;",f=a.ui.dialog.getTitleId(b.element),g=(b.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass(c+d.dialogClass).css({zIndex:d.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(c){d.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(a){b.moveToTop(!1,a)}),h=b.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g),i=(b.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),j=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){j.addClass("ui-state-hover")},function(){j.removeClass("ui-state-hover")}).focus(function(){j.addClass("ui-state-focus")}).blur(function(){j.removeClass("ui-state-focus")}).click(function(a){b.close(a);return!1}).appendTo(i),k=(b.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(d.closeText).appendTo(j),l=a("<span></span>").addClass("ui-dialog-title").attr("id",f).html(e).prependTo(i);a.isFunction(d.beforeclose)&&!a.isFunction(d.beforeClose)&&(d.beforeClose=d.beforeclose),i.find("*").add(i).disableSelection(),d.draggable&&a.fn.draggable&&b._makeDraggable(),d.resizable&&a.fn.resizable&&b._makeResizable(),b._createButtons(d.buttons),b._isOpen=!1,a.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy(),a.uiDialog.hide(),a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),a.uiDialog.remove(),a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(b){var c=this,d,e;if(!1!==c._trigger("beforeClose",b)){c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",b)}):(c.uiDialog.hide(),c._trigger("close",b)),a.ui.dialog.overlay.resize(),c.options.modal&&(d=0,a(".ui-dialog").each(function(){this!==c.uiDialog[0]&&(e=a(this).css("z-index"),isNaN(e)||(d=Math.max(d,e)))}),a.ui.dialog.maxZ=d);return c}},isOpen:function(){return this._isOpen},moveToTop:function(b,c){var d=this,e=d.options,f;if(e.modal&&!b||!e.stack&&!e.modal)return d._trigger("focus",c);e.zIndex>a.ui.dialog.maxZ&&(a.ui.dialog.maxZ=e.zIndex),d.overlay&&(a.ui.dialog.maxZ+=1,d.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)),f={scrollTop:d.element.scrollTop(),scrollLeft:d.element.scrollLeft()},a.ui.dialog.maxZ+=1,d.uiDialog.css("z-index",a.ui.dialog.maxZ),d.element.attr(f),d._trigger("focus",c);return d},open:function(){if(!this._isOpen){var b=this,c=b.options,d=b.uiDialog;b.overlay=c.modal?new a.ui.dialog.overlay(b):null,b._size(),b._position(c.position),d.show(c.show),b.moveToTop(!0),c.modal&&d.bind("keydown.ui-dialog",function(b){if(b.keyCode===a.ui.keyCode.TAB){var c=a(":tabbable",this),d=c.filter(":first"),e=c.filter(":last");if(b.target===e[0]&&!b.shiftKey){d.focus(1);return!1}if(b.target===d[0]&&b.shiftKey){e.focus(1);return!1}}}),a(b.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus(),b._isOpen=!0,b._trigger("open");return b}},_createButtons:function(b){var c=this,d=!1,e=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);c.uiDialog.find(".ui-dialog-buttonpane").remove(),typeof b=="object"&&b!==null&&a.each(b,function(){return!(d=!0)}),d&&(a.each(b,function(b,d){d=a.isFunction(d)?{click:d,text:b}:d;var e=a('<button type="button"></button>').click(function(){d.click.apply(c.element[0],arguments)}).appendTo(g);a.each(d,function(a,b){a!=="click"&&(a in f?e[a](b):e.attr(a,b))}),a.fn.button&&e.button()}),e.appendTo(c.uiDialog))},_makeDraggable:function(){function f(a){return{position:a.position,offset:a.offset}}var b=this,c=b.options,d=a(document),e;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,g){e=c.height==="auto"?"auto":a(this).height(),a(this).height(a(this).height()).addClass("ui-dialog-dragging"),b._trigger("dragStart",d,f(g))},drag:function(a,c){b._trigger("drag",a,f(c))},stop:function(g,h){c.position=[h.position.left-d.scrollLeft(),h.position.top-d.scrollTop()],a(this).removeClass("ui-dialog-dragging").height(e),b._trigger("dragStop",g,f(h)),a.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function h(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}c=c===b?this.options.resizable:c;var d=this,e=d.options,f=d.uiDialog.css("position"),g=typeof c=="string"?c:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:g,start:function(b,c){a(this).addClass("ui-dialog-resizing"),d._trigger("resizeStart",b,h(c))},resize:function(a,b){d._trigger("resize",a,h(b))},stop:function(b,c){a(this).removeClass("ui-dialog-resizing"),e.height=a(this).height(),e.width=a(this).width(),d._trigger("resizeStop",b,h(c)),a.ui.dialog.overlay.resize()}}).css("position",f).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(b){var c=[],d=[0,0],e;if(b){if(typeof b=="string"||typeof b=="object"&&"0"in b)c=b.split?b.split(" "):[b[0],b[1]],c.length===1&&(c[1]=c[0]),a.each(["left","top"],function(a,b){+c[a]===c[a]&&(d[a]=c[a],c[a]=b)}),b={my:c.join(" "),at:c.join(" "),offset:d.join(" ")};b=a.extend({},a.ui.dialog.prototype.options.position,b)}else b=a.ui.dialog.prototype.options.position;e=this.uiDialog.is(":visible"),e||this.uiDialog.show(),this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},b)),e||this.uiDialog.hide()},_setOptions:function(b){var c=this,f={},g=!1;a.each(b,function(a,b){c._setOption(a,b),a in d&&(g=!0),a in e&&(f[a]=b)}),g&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(b,d){var e=this,f=e.uiDialog;switch(b){case"beforeclose":b="beforeClose";break;case"buttons":e._createButtons(d);break;case"closeText":e.uiDialogTitlebarCloseText.text(""+d);break;case"dialogClass":f.removeClass(e.options.dialogClass).addClass(c+d);break;case"disabled":d?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case"draggable":var g=f.is(":data(draggable)");g&&!d&&f.draggable("destroy"),!g&&d&&e._makeDraggable();break;case"position":e._position(d);break;case"resizable":var h=f.is(":data(resizable)");h&&!d&&f.resizable("destroy"),h&&typeof d=="string"&&f.resizable("option","handles",d),!h&&d!==!1&&e._makeResizable(d);break;case"title":a(".ui-dialog-title",e.uiDialogTitlebar).html(""+(d||"&#160;"))}a.Widget.prototype._setOption.apply(e,arguments)},_size:function(){var b=this.options,c,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),b.minWidth>b.width&&(b.width=b.minWidth),c=this.uiDialog.css({height:"auto",width:b.width}).height(),d=Math.max(0,b.minHeight-c);if(b.height==="auto")if(a.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();var f=this.element.css("height","auto").height();e||this.uiDialog.hide(),this.element.height(Math.max(f,d))}else this.element.height(Math.max(b.height-c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),a.extend(a.ui.dialog,{version:"1.8.18",uuid:0,maxZ:0,getTitleId:function(a){var b=a.attr("id");b||(this.uuid+=1,b=this.uuid);return"ui-dialog-title-"+b},overlay:function(b){this.$el=a.ui.dialog.overlay.create(b)}}),a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(b){this.instances.length===0&&(setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return!1})},1),a(document).bind("keydown.dialog-overlay",function(c){b.options.closeOnEscape&&!c.isDefaultPrevented()&&c.keyCode&&c.keyCode===a.ui.keyCode.ESCAPE&&(b.close(c),c.preventDefault())}),a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize));var c=(this.oldInstances.pop()||a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&c.bgiframe(),this.instances.push(c);return c},destroy:function(b){var c=a.inArray(b,this.instances);c!=-1&&this.oldInstances.push(this.instances.splice(c,1)[0]),this.instances.length===0&&a([document,window]).unbind(".dialog-overlay"),b.remove();var d=0;a.each(this.instances,function(){d=Math.max(d,this.css("z-index"))}),this.maxZ=d},height:function(){var b,c;if(a.browser.msie&&a.browser.version<7){b=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return b<c?a(window).height()+"px":b+"px"}return a(document).height()+"px"},width:function(){var b,c;if(a.browser.msie){b=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),c=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return b<c?a(window).width()+"px":b+"px"}return a(document).width()+"px"},resize:function(){var b=a([]);a.each(a.ui.dialog.overlay.instances,function(){b=b.add(this)}),b.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}}),a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);/*
+ * jQuery UI Slider 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=a(this).data("index.ui-slider-handle"),f,g,h,i;if(!b.options.disabled){switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:d.preventDefault();if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),f=b._start(d,e);if(f===!1)return}}i=b.options.step,b.options.values&&b.options.values.length?g=h=b.values(e):g=h=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:h=b._valueMin();break;case a.ui.keyCode.END:h=b._valueMax();break;case a.ui.keyCode.PAGE_UP:h=b._trimAlignValue(g+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(g-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g===b._valueMax())return;h=b._trimAlignValue(g+i);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g===b._valueMin())return;h=b._trimAlignValue(g-i)}b._slide(d,e,h)}}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;if(c.disabled)return!1;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i);if(j===!1)return!1;this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0;return!0},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);this._slide(a,this._handleIndex,c);return!1},_mouseStop:function(a){this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1;return!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e;return this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values());return this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length)this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);else return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1)this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);else{if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()}},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;a=this._trimAlignValue(a);return a},_values:function(a){var b,c,d;if(arguments.length){b=this.options.values[a],b=this._trimAlignValue(b);return b}c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;Math.abs(c)*2>=b&&(d+=c>0?b:-b);return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.18"})})(jQuery);/*
+ * jQuery UI Tabs 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */(function(a,b){function f(){return++d}function e(){return++c}var c=0,d=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(a,b){if(a=="selected"){if(this.options.collapsible&&b==this.options.selected)return;this.select(b)}else this.options[a]=b,this._tabify()},_tabId:function(a){return a.title&&a.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(a){return a.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+f());return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(a,b){return{tab:a,panel:b,index:this.anchors.index(a)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function m(b,c){b.css("display",""),!a.support.opacity&&c.opacity&&b[0].style.removeAttribute("filter")}var d=this,e=this.options,f=/^#.+/;this.list=this.element.find("ol,ul").eq(0),this.lis=a(" > li:has(a[href])",this.list),this.anchors=this.lis.map(function(){return a("a",this)[0]}),this.panels=a([]),this.anchors.each(function(b,c){var g=a(c).attr("href"),h=g.split("#")[0],i;h&&(h===location.toString().split("#")[0]||(i=a("base")[0])&&h===i.href)&&(g=c.hash,c.href=g);if(f.test(g))d.panels=d.panels.add(d.element.find(d._sanitizeSelector(g)));else if(g&&g!=="#"){a.data(c,"href.tabs",g),a.data(c,"load.tabs",g.replace(/#.*$/,""));var j=d._tabId(c);c.href="#"+j;var k=d.element.find("#"+j);k.length||(k=a(e.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(d.panels[b-1]||d.list),k.data("destroy.tabs",!0)),d.panels=d.panels.add(k)}else e.disabled.push(b)}),c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),e.selected===b?(location.hash&&this.anchors.each(function(a,b){if(b.hash==location.hash){e.selected=a;return!1}}),typeof e.selected!="number"&&e.cookie&&(e.selected=parseInt(d._cookie(),10)),typeof e.selected!="number"&&this.lis.filter(".ui-tabs-selected").length&&(e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))),e.selected=e.selected||(this.lis.length?0:-1)):e.selected===null&&(e.selected=-1),e.selected=e.selected>=0&&this.anchors[e.selected]||e.selected<0?e.selected:0,e.disabled=a.unique(e.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(a,b){return d.lis.index(a)}))).sort(),a.inArray(e.selected,e.disabled)!=-1&&e.disabled.splice(a.inArray(e.selected,e.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),e.selected>=0&&this.anchors.length&&(d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(e.selected).addClass("ui-tabs-selected ui-state-active"),d.element.queue("tabs",function(){d._trigger("show",null,d._ui(d.anchors[e.selected],d.element.find(d._sanitizeSelector(d.anchors[e.selected].hash))[0]))}),this.load(e.selected)),a(window).bind("unload",function(){d.lis.add(d.anchors).unbind(".tabs"),d.lis=d.anchors=d.panels=null})):e.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")),this.element[e.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible"),e.cookie&&this._cookie(e.selected,e.cookie);for(var g=0,h;h=this.lis[g];g++)a(h)[a.inArray(g,e.disabled)!=-1&&!a(h).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");e.cache===!1&&this.anchors.removeData("cache.tabs"),this.lis.add(this.anchors).unbind(".tabs");if(e.event!=="mouseover"){var i=function(a,b){b.is(":not(.ui-state-disabled)")&&b.addClass("ui-state-"+a)},j=function(a,b){b.removeClass("ui-state-"+a)};this.lis.bind("mouseover.tabs",function(){i("hover",a(this))}),this.lis.bind("mouseout.tabs",function(){j("hover",a(this))}),this.anchors.bind("focus.tabs",function(){i("focus",a(this).closest("li"))}),this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var k,l;e.fx&&(a.isArray(e.fx)?(k=e.fx[0],l=e.fx[1]):k=l=e.fx);var n=l?function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.hide().removeClass("ui-tabs-hide").animate(l,l.duration||"normal",function(){m(c,l),d._trigger("show",null,d._ui(b,c[0]))})}:function(b,c){a(b).closest("li").addClass("ui-tabs-selected ui-state-active"),c.removeClass("ui-tabs-hide"),d._trigger("show",null,d._ui(b,c[0]))},o=k?function(a,b){b.animate(k,k.duration||"normal",function(){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),m(b,k),d.element.dequeue("tabs")})}:function(a,b,c){d.lis.removeClass("ui-tabs-selected ui-state-active"),b.addClass("ui-tabs-hide"),d.element.dequeue("tabs")};this.anchors.bind(e.event+".tabs",function(){var b=this,c=a(b).closest("li"),f=d.panels.filter(":not(.ui-tabs-hide)"),g=d.element.find(d._sanitizeSelector(b.hash));if(c.hasClass("ui-tabs-selected")&&!e.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||d.panels.filter(":animated").length||d._trigger("select",null,d._ui(this,g[0]))===!1){this.blur();return!1}e.selected=d.anchors.index(this),d.abort();if(e.collapsible){if(c.hasClass("ui-tabs-selected")){e.selected=-1,e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){o(b,f)}).dequeue("tabs"),this.blur();return!1}if(!f.length){e.cookie&&d._cookie(e.selected,e.cookie),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this)),this.blur();return!1}}e.cookie&&d._cookie(e.selected,e.cookie);if(g.length)f.length&&d.element.queue("tabs",function(){o(b,f)}),d.element.queue("tabs",function(){n(b,g)}),d.load(d.anchors.index(this));else throw"jQuery UI Tabs: Mismatching fragment identifier.";a.browser.msie&&this.blur()}),this.anchors.bind("click.tabs",function(){return!1})},_getIndex:function(a){typeof a=="string"&&(a=this.anchors.index(this.anchors.filter("[href$="+a+"]")));return a},destroy:function(){var b=this.options;this.abort(),this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs"),this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.anchors.each(function(){var b=a.data(this,"href.tabs");b&&(this.href=b);var c=a(this).unbind(".tabs");a.each(["href","load","cache"],function(a,b){c.removeData(b+".tabs")})}),this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}),b.cookie&&this._cookie(null,b.cookie);return this},add:function(c,d,e){e===b&&(e=this.anchors.length);var f=this,g=this.options,h=a(g.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),i=c.indexOf("#")?this._tabId(a("a",h)[0]):c.replace("#","");h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+i);j.length||(j=a(g.panelTemplate).attr("id",i).data("destroy.tabs",!0)),j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"),e>=this.lis.length?(h.appendTo(this.list),j.appendTo(this.list[0].parentNode)):(h.insertBefore(this.lis[e]),j.insertBefore(this.panels[e])),g.disabled=a.map(g.disabled,function(a,b){return a>=e?++a:a}),this._tabify(),this.anchors.length==1&&(g.selected=0,h.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0)),this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(b){b=this._getIndex(b);var c=this.options,d=this.lis.eq(b).remove(),e=this.panels.eq(b).remove();d.hasClass("ui-tabs-selected")&&this.anchors.length>1&&this.select(b+(b+1<this.anchors.length?1:-1)),c.disabled=a.map(a.grep(c.disabled,function(a,c){return a!=b}),function(a,c){return a>=b?--a:a}),this._tabify(),this._trigger("remove",null,this._ui(d.find("a")[0],e[0]));return this},enable:function(b){b=this._getIndex(b);var c=this.options;if(a.inArray(b,c.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled"),c.disabled=a.grep(c.disabled,function(a,c){return a!=b}),this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(a){a=this._getIndex(a);var b=this,c=this.options;a!=c.selected&&(this.lis.eq(a).addClass("ui-state-disabled"),c.disabled.push(a),c.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[a],this.panels[a])));return this},select:function(a){a=this._getIndex(a);if(a==-1)if(this.options.collapsible&&this.options.selected!=-1)a=this.options.selected;else return this;this.anchors.eq(a).trigger(this.options.event+".tabs");return this},load:function(b){b=this._getIndex(b);var c=this,d=this.options,e=this.anchors.eq(b)[0],f=a.data(e,"load.tabs");this.abort();if(!f||this.element.queue("tabs").length!==0&&a.data(e,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(d.spinner){var g=a("span",e);g.data("label.tabs",g.html()).html(d.spinner)}this.xhr=a.ajax(a.extend({},d.ajaxOptions,{url:f,success:function(f,g){c.element.find(c._sanitizeSelector(e.hash)).html(f),c._cleanup(),d.cache&&a.data(e,"cache.tabs",!0),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.success(f,g)}catch(h){}},error:function(a,f,g){c._cleanup(),c._trigger("load",null,c._ui(c.anchors[b],c.panels[b]));try{d.ajaxOptions.error(a,f,b,e)}catch(g){}}})),c.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]),this.panels.stop(!1,!0),this.element.queue("tabs",this.element.queue("tabs").splice(-2,2)),this.xhr&&(this.xhr.abort(),delete this.xhr),this._cleanup();return this},url:function(a,b){this.anchors.eq(a).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}}),a.extend(a.ui.tabs,{version:"1.8.18"}),a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(a,b){var c=this,d=this.options,e=c._rotate||(c._rotate=function(b){clearTimeout(c.rotation),c.rotation=setTimeout(function(){var a=d.selected;c.select(++a<c.anchors.length?a:0)},a),b&&b.stopPropagation()}),f=c._unrotate||(c._unrotate=b?function(a){t=d.selected,e()}:function(a){a.clientX&&c.rotate(null)});a?(this.element.bind("tabsshow",e),this.anchors.bind(d.event+".tabs",f),e()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",e),this.anchors.unbind(d.event+".tabs",f),delete this._rotate,delete this._unrotate);return this}})})(jQuery);/*
+ * jQuery UI Datepicker 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ * jquery.ui.core.js
+ */(function($,undefined){function isArray(a){return a&&($.browser.safari&&typeof a=="object"&&a.length||a.constructor&&a.constructor.toString().match(/\Array\(\)/))}function extendRemove(a,b){$.extend(a,b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}function bindHover(a){var b="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return a.bind("mouseout",function(a){var c=$(a.target).closest(b);!c.length||c.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){var d=$(c.target).closest(b);!$.datepicker._isDisabledDatepicker(instActive.inline?a.parent()[0]:instActive.input[0])&&!!d.length&&(d.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),d.addClass("ui-state-hover"),d.hasClass("ui-datepicker-prev")&&d.addClass("ui-datepicker-prev-hover"),d.hasClass("ui-datepicker-next")&&d.addClass("ui-datepicker-next-hover"))})}function Datepicker(){this.debug=!1,this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},$.extend(this._defaults,this.regional[""]),this.dpDiv=bindHover($('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}$.extend($.ui,{datepicker:{version:"1.8.18"}});var PROP_NAME="datepicker",dpuuid=(new Date).getTime(),instActive;$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){extendRemove(this._defaults,a||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase(),inline=nodeName=="div"||nodeName=="span";target.id||(this.uuid+=1,target.id="dp"+this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{}),nodeName=="input"?this._connectDatepicker(target,inst):inline&&this._inlineDatepicker(target,inst)},_newInst:function(a,b){var c=a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1");return{id:c,input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:b?bindHover($('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')):this.dpDiv}},_connectDatepicker:function(a,b){var c=$(a);b.append=$([]),b.trigger=$([]);c.hasClass(this.markerClassName)||(this._attachments(c,b),c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),this._autoSize(b),$.data(a,PROP_NAME,b),b.settings.disabled&&this._disableDatepicker(a))},_attachments:function(a,b){var c=this._get(b,"appendText"),d=this._get(b,"isRTL");b.append&&b.append.remove(),c&&(b.append=$('<span class="'+this._appendClass+'">'+c+"</span>"),a[d?"before":"after"](b.append)),a.unbind("focus",this._showDatepicker),b.trigger&&b.trigger.remove();var e=this._get(b,"showOn");(e=="focus"||e=="both")&&a.focus(this._showDatepicker);if(e=="button"||e=="both"){var f=this._get(b,"buttonText"),g=this._get(b,"buttonImage");b.trigger=$(this._get(b,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:g,alt:f,title:f}):$('<button type="button"></button>').addClass(this._triggerClass).html(g==""?f:$("<img/>").attr({src:g,alt:f,title:f}))),a[d?"before":"after"](b.trigger),b.trigger.click(function(){$.datepicker._datepickerShowing&&$.datepicker._lastInput==a[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=a[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(a[0])):$.datepicker._showDatepicker(a[0]);return!1})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var d=function(a){var b=0,c=0;for(var d=0;d<a.length;d++)a[d].length>b&&(b=a[d].length,c=d);return c};b.setMonth(d(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort"))),b.setDate(d(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=$(a);c.hasClass(this.markerClassName)||(c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(a,c,d){b.settings[c]=d}).bind("getData.datepicker",function(a,c){return this._get(b,c)}),$.data(a,PROP_NAME,b),this._setDate(b,this._getDefaultDate(b),!0),this._updateDatepicker(b),this._updateAlternate(b),b.settings.disabled&&this._disableDatepicker(a),b.dpDiv.css("display","block"))},_dialogDatepicker:function(a,b,c,d,e){var f=this._dialogInst;if(!f){this.uuid+=1;var g="dp"+this.uuid;this._dialogInput=$('<input type="text" id="'+g+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>'),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),f=this._dialogInst=this._newInst(this._dialogInput,!1),f.settings={},$.data(this._dialogInput[0],PROP_NAME,f)}extendRemove(f.settings,d||{}),b=b&&b.constructor==Date?this._formatDate(f,b):b,this._dialogInput.val(b),this._pos=e?e.length?e:[e.pageX,e.pageY]:null;if(!this._pos){var h=document.documentElement.clientWidth,i=document.documentElement.clientHeight,j=document.documentElement.scrollLeft||document.body.scrollLeft,k=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[h/2-100+j,i/2-150+k]}this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),f.settings.onSelect=c,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,f);return this},_destroyDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();$.removeData(a,PROP_NAME),d=="input"?(c.append.remove(),c.trigger.remove(),b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(d=="div"||d=="span")&&b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!1,c.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().removeClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b})}},_disableDatepicker:function(a){var b=$(a),c=$.data(a,PROP_NAME);if(!!b.hasClass(this.markerClassName)){var d=a.nodeName.toLowerCase();if(d=="input")a.disabled=!0,c.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(d=="div"||d=="span"){var e=b.children("."+this._inlineClass);e.children().addClass("ui-state-disabled"),e.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=$.map(this._disabledInputs,function(b){return b==a?null:b}),this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return!0;return!1},_getInst:function(a){try{return $.data(a,PROP_NAME)}catch(b){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(a,b,c){var d=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?$.extend({},$.datepicker._defaults):d?b=="all"?$.extend({},d.settings):this._get(d,b):null;var e=b||{};typeof b=="string"&&(e={},e[b]=c);if(d){this._curInst==d&&this._hideDatepicker();var f=this._getDateDatepicker(a,!0),g=this._getMinMaxDate(d,"min"),h=this._getMinMaxDate(d,"max");extendRemove(d.settings,e),g!==null&&e.dateFormat!==undefined&&e.minDate===undefined&&(d.settings.minDate=this._formatDate(d,g)),h!==null&&e.dateFormat!==undefined&&e.maxDate===undefined&&(d.settings.maxDate=this._formatDate(d,h)),this._attachments($(a),d),this._autoSize(d),this._setDate(d,f),this._updateAlternate(d),this._updateDatepicker(d)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){var b=this._getInst(a);b&&this._updateDatepicker(b)},_setDateDatepicker:function(a,b){var c=this._getInst(a);c&&(this._setDate(c,b),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(a,b){var c=this._getInst(a);c&&!c.inline&&this._setDateFromField(c,b);return c?this._getDate(c):null},_doKeyDown:function(a){var b=$.datepicker._getInst(a.target),c=!0,d=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=!0;if($.datepicker._datepickerShowing)switch(a.keyCode){case 9:$.datepicker._hideDatepicker(),c=!1;break;case 13:var e=$("td."+$.datepicker._dayOverClass+":not(."+$.datepicker._currentClass+")",b.dpDiv);e[0]&&$.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,e[0]);var f=$.datepicker._get(b,"onSelect");if(f){var g=$.datepicker._formatDate(b);f.apply(b.input?b.input[0]:null,[g,b])}else $.datepicker._hideDatepicker();return!1;case 27:$.datepicker._hideDatepicker();break;case 33:$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 34:$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 35:(a.ctrlKey||a.metaKey)&&$.datepicker._clearDate(a.target),c=a.ctrlKey||a.metaKey;break;case 36:(a.ctrlKey||a.metaKey)&&$.datepicker._gotoToday(a.target),c=a.ctrlKey||a.metaKey;break;case 37:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?1:-1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?-$.datepicker._get(b,"stepBigMonths"):-$.datepicker._get(b,"stepMonths"),"M");break;case 38:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,-7,"D"),c=a.ctrlKey||a.metaKey;break;case 39:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,d?-1:1,"D"),c=a.ctrlKey||a.metaKey,a.originalEvent.altKey&&$.datepicker._adjustDate(a.target,a.ctrlKey?+$.datepicker._get(b,"stepBigMonths"):+$.datepicker._get(b,"stepMonths"),"M");break;case 40:(a.ctrlKey||a.metaKey)&&$.datepicker._adjustDate(a.target,7,"D"),c=a.ctrlKey||a.metaKey;break;default:c=!1}else a.keyCode==36&&a.ctrlKey?$.datepicker._showDatepicker(this):c=!1;c&&(a.preventDefault(),a.stopPropagation())},_doKeyPress:function(a){var b=$.datepicker._getInst(a.target);if($.datepicker._get(b,"constrainInput")){var c=$.datepicker._possibleChars($.datepicker._get(b,"dateFormat")),d=String.fromCharCode(a.charCode==undefined?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||d<" "||!c||c.indexOf(d)>-1}},_doKeyUp:function(a){var b=$.datepicker._getInst(a.target);if(b.input.val()!=b.lastVal)try{var c=$.datepicker.parseDate($.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,$.datepicker._getFormatConfig(b));c&&($.datepicker._setDateFromField(b),$.datepicker._updateAlternate(b),$.datepicker._updateDatepicker(b))}catch(a){$.datepicker.log(a)}return!0},_showDatepicker:function(a){a=a.target||a,a.nodeName.toLowerCase()!="input"&&(a=$("input",a.parentNode)[0]);if(!$.datepicker._isDisabledDatepicker(a)&&$.datepicker._lastInput!=a){var b=$.datepicker._getInst(a);$.datepicker._curInst&&$.datepicker._curInst!=b&&($.datepicker._curInst.dpDiv.stop(!0,!0),b&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var c=$.datepicker._get(b,"beforeShow"),d=c?c.apply(a,[a,b]):{};if(d===!1)return;extendRemove(b.settings,d),b.lastVal=null,$.datepicker._lastInput=a,$.datepicker._setDateFromField(b),$.datepicker._inDialog&&(a.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(a),$.datepicker._pos[1]+=a.offsetHeight);var e=!1;$(a).parents().each(function(){e|=$(this).css("position")=="fixed";return!e}),e&&$.browser.opera&&($.datepicker._pos[0]-=document.documentElement.scrollLeft,$.datepicker._pos[1]-=document.documentElement.scrollTop);var f={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,b.dpDiv.empty(),b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(b),f=$.datepicker._checkOffset(b,f,e),b.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":e?"fixed":"absolute",display:"none",left:f.left+"px",top:f.top+"px"});if(!b.inline){var g=$.datepicker._get(b,"showAnim"),h=$.datepicker._get(b,"duration"),i=function(){var a=b.dpDiv.find("iframe.ui-datepicker-cover");if(!!a.length){var c=$.datepicker._getBorders(b.dpDiv);a.css({left:-c[0],top:-c[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex($(a).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&$.effects[g]?b.dpDiv.show(g,$.datepicker._get(b,"showOptions"),h,i):b.dpDiv[g||"show"](g?h:null,i),(!g||!h)&&i(),b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus(),$.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this;b.maxRows=4;var c=$.datepicker._getBorders(a.dpDiv);instActive=a,a.dpDiv.empty().append(this._generateHTML(a));var d=a.dpDiv.find("iframe.ui-datepicker-cover");!d.length||d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}),a.dpDiv.find("."+this._dayOverClass+" a").mouseover();var e=this._getNumberOfMonths(a),f=e[1],g=17;a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),f>1&&a.dpDiv.addClass("ui-datepicker-multi-"+f).css("width",g*f+"em"),a.dpDiv[(e[0]!=1||e[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),a==$.datepicker._curInst&&$.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var h=a.yearshtml;setTimeout(function(){h===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml),h=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var d=a.dpDiv.outerWidth(),e=a.dpDiv.outerHeight(),f=a.input?a.input.outerWidth():0,g=a.input?a.input.outerHeight():0,h=document.documentElement.clientWidth+$(document).scrollLeft(),i=document.documentElement.clientHeight+$(document).scrollTop();b.left-=this._get(a,"isRTL")?d-f:0,b.left-=c&&b.left==a.input.offset().left?$(document).scrollLeft():0,b.top-=c&&b.top==a.input.offset().top+g?$(document).scrollTop():0,b.left-=Math.min(b.left,b.left+d>h&&h>d?Math.abs(b.left+d-h):0),b.top-=Math.min(b.top,b.top+e>i&&i>e?Math.abs(e+g):0);return b},_findPos:function(a){var b=this._getInst(a),c=this._get(b,"isRTL");while(a&&(a.type=="hidden"||a.nodeType!=1||$.expr.filters.hidden(a)))a=a[c?"previousSibling":"nextSibling"];var d=$(a).offset();return[d.left,d.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=$.data(a,PROP_NAME))&&this._datepickerShowing){var c=this._get(b,"showAnim"),d=this._get(b,"duration"),e=this,f=function(){$.datepicker._tidyDialog(b),e._curInst=null};$.effects&&$.effects[c]?b.dpDiv.hide(c,$.datepicker._get(b,"showOptions"),d,f):b.dpDiv[c=="slideDown"?"slideUp":c=="fadeIn"?"fadeOut":"hide"](c?d:null,f),c||f(),this._datepickerShowing=!1;var g=this._get(b,"onClose");g&&g.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(!!$.datepicker._curInst){var b=$(a.target),c=$.datepicker._getInst(b[0]);(b[0].id!=$.datepicker._mainDivId&&b.parents("#"+$.datepicker._mainDivId).length==0&&!b.hasClass($.datepicker.markerClassName)&&!b.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||b.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=c)&&$.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){var d=$(a),e=this._getInst(d[0]);this._isDisabledDatepicker(d[0])||(this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c),this._updateDatepicker(e))},_gotoToday:function(a){var b=$(a),c=this._getInst(b[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate(),c.drawMonth=c.selectedMonth=d.getMonth(),c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c),this._adjustDate(b)},_selectMonthYear:function(a,b,c){var d=$(a),e=this._getInst(d[0]);e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10),this._notifyChange(e),this._adjustDate(d)},_selectDay:function(a,b,c,d){var e=$(a);if(!$(d).hasClass(this._unselectableClass)&&!this._isDisabledDatepicker(e[0])){var f=this._getInst(e[0]);f.selectedDay=f.currentDay=$("a",d).html(),f.selectedMonth=f.currentMonth=b,f.selectedYear=f.currentYear=c,this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){var b=$(a),c=this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(a,b){var c=$(a),d=this._getInst(c[0]);b=b!=null?b:this._formatDate(d),d.input&&d.input.val(b),this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[b,d]):d.input&&d.input.trigger("change"),d.inline?this._updateDatepicker(d):(this._hideDatepicker(),this._lastInput=d.input[0],typeof d.input[0]!="object"&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),d=this._getDate(a),e=this.formatDate(c,d,this._getFormatConfig(a));$(b).each(function(){$(this).val(e)})}},noWeekends:function(a){var b=a.getDay();return[b>0&&b<6,""]},iso8601Week:function(a){var b=new Date(a.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();b.setMonth(0),b.setDate(1);return Math.floor(Math.round((c-b)/864e5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var d=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;d=typeof d!="string"?d:(new Date).getFullYear()%100+parseInt(d,10);var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=-1,j=-1,k=-1,l=-1,m=!1,n=function(b){var c=s+1<a.length&&a.charAt(s+1)==b;c&&s++;return c},o=function(a){var c=n(a),d=a=="@"?14:a=="!"?20:a=="y"&&c?4:a=="o"?3:2,e=new RegExp("^\\d{1,"+d+"}"),f=b.substring(r).match(e);if(!f)throw"Missing number at position "+r;r+=f[0].length;return parseInt(f[0],10)},p=function(a,c,d){var e=$.map(n(a)?d:c,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)}),f=-1;$.each(e,function(a,c){var d=c[1];if(b.substr(r,d.length).toLowerCase()==d.toLowerCase()){f=c[0],r+=d.length;return!1}});if(f!=-1)return f+1;throw"Unknown name at position "+r},q=function(){if(b.charAt(r)!=a.charAt(s))throw"Unexpected literal at position "+r;r++},r=0;for(var s=0;s<a.length;s++)if(m)a.charAt(s)=="'"&&!n("'")?m=!1:q();else switch(a.charAt(s)){case"d":k=o("d");break;case"D":p("D",e,f);break;case"o":l=o("o");break;case"m":j=o("m");break;case"M":j=p("M",g,h);break;case"y":i=o("y");break;case"@":var t=new Date(o("@"));i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"!":var t=new Date((o("!")-this._ticksTo1970)/1e4);i=t.getFullYear(),j=t.getMonth()+1,k=t.getDate();break;case"'":n("'")?q():m=!0;break;default:q()}if(r<b.length)throw"Extra/unparsed characters found in date: "+b.substring(r);i==-1?i=(new Date).getFullYear():i<100&&(i+=(new Date).getFullYear()-(new Date).getFullYear()%100+(i<=d?0:-100));if(l>-1){j=1,k=l;for(;;){var u=this._getDaysInMonth(i,j-1);if(k<=u)break;j++,k-=u}}var t=this._daylightSavingAdjust(new Date(i,j-1,k));if(t.getFullYear()!=i||t.getMonth()+1!=j||t.getDate()!=k)throw"Invalid date";return t},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:null)||this._defaults.dayNames,f=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){var c=m+1<a.length&&a.charAt(m+1)==b;c&&m++;return c},i=function(a,b,c){var d=""+b;if(h(a))while(d.length<c)d="0"+d;return d},j=function(a,b,c,d){return h(a)?d[b]:c[b]},k="",l=!1;if(b)for(var m=0;m<a.length;m++)if(l)a.charAt(m)=="'"&&!h("'")?l=!1:k+=a.charAt(m);else switch(a.charAt(m)){case"d":k+=i("d",b.getDate(),2);break;case"D":k+=j("D",b.getDay(),d,e);break;case"o":k+=i("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864e5),3);break;case"m":k+=i("m",b.getMonth()+1,2);break;case"M":k+=j("M",b.getMonth(),f,g);break;case"y":k+=h("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case"@":k+=b.getTime();break;case"!":k+=b.getTime()*1e4+this._ticksTo1970;break;case"'":h("'")?k+="'":l=!0;break;default:k+=a.charAt(m)}return k},_possibleChars:function(a){var b="",c=!1,d=function(b){var c=e+1<a.length&&a.charAt(e+1)==b;c&&e++;return c};for(var e=0;e<a.length;e++)if(c)a.charAt(e)=="'"&&!d("'")?c=!1:b+=a.charAt(e);else switch(a.charAt(e)){case"d":case"m":case"y":case"@":b+="0123456789";break;case"D":case"M":return null;case"'":d("'")?b+="'":c=!0;break;default:b+=a.charAt(e)}return b},_get:function(a,b){return a.settings[b]!==undefined?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),d=a.lastVal=a.input?a.input.val():null,e,f;e=f=this._getDefaultDate(a);var g=this._getFormatConfig(a);try{e=this.parseDate(c,d,g)||f}catch(h){this.log(h),d=b?"":d}a.selectedDay=e.getDate(),a.drawMonth=a.selectedMonth=e.getMonth(),a.drawYear=a.selectedYear=e.getFullYear(),a.currentDay=d?e.getDate():0,a.currentMonth=d?e.getMonth():0,a.currentYear=d?e.getFullYear():0,this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var d=function(a){var b=new Date;b.setDate(b.getDate()+a);return b},e=function(b){try{return $.datepicker.parseDate($.datepicker._get(a,"dateFormat"),b,$.datepicker._getFormatConfig(a))}catch(c){}var d=(b.toLowerCase().match(/^c/)?$.datepicker._getDate(a):null)||new Date,e=d.getFullYear(),f=d.getMonth(),g=d.getDate(),h=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,i=h.exec(b);while(i){switch(i[2]||"d"){case"d":case"D":g+=parseInt(i[1],10);break;case"w":case"W":g+=parseInt(i[1],10)*7;break;case"m":case"M":f+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f));break;case"y":case"Y":e+=parseInt(i[1],10),g=Math.min(g,$.datepicker._getDaysInMonth(e,f))}i=h.exec(b)}return new Date(e,f,g)},f=b==null||b===""?c:typeof b=="string"?e(b):typeof b=="number"?isNaN(b)?c:d(b):new Date(b.getTime());f=f&&f.toString()=="Invalid Date"?c:f,f&&(f.setHours(0),f.setMinutes(0),f.setSeconds(0),f.setMilliseconds(0));return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),(e!=a.selectedMonth||f!=a.selectedYear)&&!c&&this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),d=this._get(a,"showButtonPanel"),e=this._get(a,"hideIfNoPrevNext"),f=this._get(a,"navigationAsDateFormat"),g=this._getNumberOfMonths(a),h=this._get(a,"showCurrentAtPos"),i=this._get(a,"stepMonths"),j=g[0]!=1||g[1]!=1,k=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),l=this._getMinMaxDate(a,"min"),m=this._getMinMaxDate(a,"max"),n=a.drawMonth-h,o=a.drawYear;n<0&&(n+=12,o--);if(m){var p=this._daylightSavingAdjust(new Date(m.getFullYear(),m.getMonth()-g[0]*g[1]+1,m.getDate()));p=l&&p<l?l:p;while(this._daylightSavingAdjust(new Date(o,n,1))>p)n--,n<0&&(n=11,o--)}a.drawMonth=n,a.drawYear=o;var q=this._get(a,"prevText");q=f?this.formatDate(q,this._daylightSavingAdjust(new Date(o,n-i,1)),this._getFormatConfig(a)):q;var r=this._canAdjustMonth(a,-1,o,n)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', -"+i+", 'M');\""+' title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>":e?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+q+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+q+"</span></a>",s=this._get(a,"nextText");s=f?this.formatDate(s,this._daylightSavingAdjust(new Date(o,n+i,1)),this._getFormatConfig(a)):s;var t=this._canAdjustMonth(a,1,o,n)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._adjustDate('#"+a.id+"', +"+i+", 'M');\""+' title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":e?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>",u=this._get(a,"currentText"),v=this._get(a,"gotoCurrent")&&a.currentDay?k:b;u=f?this.formatDate(u,v,this._getFormatConfig(a)):u;var w=a.inline?"":'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+dpuuid+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>",x=d?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?w:"")+(this._isInRange(a,v)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+dpuuid+".datepicker._gotoToday('#"+a.id+"');\""+">"+u+"</button>":"")+(c?"":w)+"</div>":"",y=parseInt(this._get(a,"firstDay"),10);y=isNaN(y)?0:y;var z=this._get(a,"showWeek"),A=this._get(a,"dayNames"),B=this._get(a,"dayNamesShort"),C=this._get(a,"dayNamesMin"),D=this._get(a,"monthNames"),E=this._get(a,"monthNamesShort"),F=this._get(a,"beforeShowDay"),G=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths"),I=this._get(a,"calculateWeek")||this.iso8601Week,J=this._getDefaultDate(a),K="";for(var L=0;L<g[0];L++){var M="";this.maxRows=4;for(var N=0;N<g[1];N++){var O=this._daylightSavingAdjust(new Date(o,n,a.selectedDay)),P=" ui-corner-all",Q="";if(j){Q+='<div class="ui-datepicker-group';if(g[1]>1)switch(N){case 0:Q+=" ui-datepicker-group-first",P=" ui-corner-"+(c?"right":"left");break;case g[1]-1:Q+=" ui-datepicker-group-last",P=" ui-corner-"+(c?"left":"right");break;default:Q+=" ui-datepicker-group-middle",P=""}Q+='">'}Q+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+P+'">'+(/all|left/.test(P)&&L==0?c?t:r:"")+(/all|right/.test(P)&&L==0?c?r:t:"")+this._generateMonthYearHeader(a,n,o,l,m,L>0||N>0,D,E)+'</div><table class="ui-datepicker-calendar"><thead>'+"<tr>";var R=z?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(var S=0;S<7;S++){var T=(S+y)%7;R+="<th"+((S+y+6)%7>=5?' class="ui-datepicker-week-end"':"")+">"+'<span title="'+A[T]+'">'+C[T]+"</span></th>"}Q+=R+"</tr></thead><tbody>";var U=this._getDaysInMonth(o,n);o==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,U));var V=(this._getFirstDayOfMonth(o,n)-y+7)%7,W=Math.ceil((V+U)/7),X=j?this.maxRows>W?this.maxRows:W:W;this.maxRows=X;var Y=this._daylightSavingAdjust(new Date(o,n,1-V));for(var Z=0;Z<X;Z++){Q+="<tr>";var _=z?'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(Y)+"</td>":"";for(var S=0;S<7;S++){var ba=F?F.apply(a.input?a.input[0]:null,[Y]):[!0,""],bb=Y.getMonth()!=n,bc=bb&&!H||!ba[0]||l&&Y<l||m&&Y>m;_+='<td class="'+((S+y+6)%7>=5?" ui-datepicker-week-end":"")+(bb?" ui-datepicker-other-month":"")+(Y.getTime()==O.getTime()&&n==a.selectedMonth&&a._keyEvent||J.getTime()==Y.getTime()&&J.getTime()==O.getTime()?" "+this._dayOverClass:"")+(bc?" "+this._unselectableClass+" ui-state-disabled":"")+(bb&&!G?"":" "+ba[1]+(Y.getTime()==k.getTime()?" "+this._currentClass:"")+(Y.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!bb||G)&&ba[2]?' title="'+ba[2]+'"':"")+(bc?"":' onclick="DP_jQuery_'+dpuuid+".datepicker._selectDay('#"+a.id+"',"+Y.getMonth()+","+Y.getFullYear()+', this);return false;"')+">"+(bb&&!G?"&#xa0;":bc?'<span class="ui-state-default">'+Y.getDate()+"</span>":'<a class="ui-state-default'+(Y.getTime()==b.getTime()?" ui-state-highlight":"")+(Y.getTime()==k.getTime()?" ui-state-active":"")+(bb?" ui-priority-secondary":"")+'" href="#">'+Y.getDate()+"</a>")+"</td>",Y.setDate(Y.getDate()+1),Y=this._daylightSavingAdjust(Y)}Q+=_+"</tr>"}n++,n>11&&(n=0,o++),Q+="</tbody></table>"+(j?"</div>"+(g[0]>0&&N==g[1]-1?'<div class="ui-datepicker-row-break"></div>':""):""),M+=Q}K+=M}K+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':""),
+a._keyEvent=!1;return K},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i=this._get(a,"changeMonth"),j=this._get(a,"changeYear"),k=this._get(a,"showMonthAfterYear"),l='<div class="ui-datepicker-title">',m="";if(f||!i)m+='<span class="ui-datepicker-month">'+g[b]+"</span>";else{var n=d&&d.getFullYear()==c,o=e&&e.getFullYear()==c;m+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" "+">";for(var p=0;p<12;p++)(!n||p>=d.getMonth())&&(!o||p<=e.getMonth())&&(m+='<option value="'+p+'"'+(p==b?' selected="selected"':"")+">"+h[p]+"</option>");m+="</select>"}k||(l+=m+(f||!i||!j?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(f||!j)l+='<span class="ui-datepicker-year">'+c+"</span>";else{var q=this._get(a,"yearRange").split(":"),r=(new Date).getFullYear(),s=function(a){var b=a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?r+parseInt(a,10):parseInt(a,10);return isNaN(b)?r:b},t=s(q[0]),u=Math.max(t,s(q[1]||""));t=d?Math.max(t,d.getFullYear()):t,u=e?Math.min(u,e.getFullYear()):u,a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+dpuuid+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" "+">";for(;t<=u;t++)a.yearshtml+='<option value="'+t+'"'+(t==c?' selected="selected"':"")+">"+t+"</option>";a.yearshtml+="</select>",l+=a.yearshtml,a.yearshtml=null}}l+=this._get(a,"yearSuffix"),k&&(l+=(f||!i||!j?"&#xa0;":"")+m),l+="</div>";return l},_adjustInstDate:function(a,b,c){var d=a.drawYear+(c=="Y"?b:0),e=a.drawMonth+(c=="M"?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+(c=="D"?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),(c=="M"||c=="Y")&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&b<c?c:b;e=d&&e>d?d:e;return e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(b<0?b:e[0]*e[1]),1));b<0&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth()));return this._isInRange(a,f)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),$.fn.datepicker=function(a){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find("body").append($.datepicker.dpDiv),$.datepicker.initialized=!0);var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return $.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?$.datepicker["_"+a+"Datepicker"].apply($.datepicker,[this].concat(b)):$.datepicker._attachDatepicker(this,a)})},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.8.18",window["DP_jQuery_"+dpuuid]=$})(jQuery);/*
+ * jQuery UI Progressbar 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove(),a.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===b)return this._value();this._setOption("value",a);return this},_setOption:function(b,c){b==="value"&&(this.options.value=c,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;typeof a!="number"&&(a=0);return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change")),this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%"),this.element.attr("aria-valuenow",a)}}),a.extend(a.ui.progressbar,{version:"1.8.18"})})(jQuery);/*
+ * jQuery UI Effects 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */jQuery.effects||function(a,b){function l(b){if(!b||typeof b=="number"||a.fx.speeds[b])return!0;if(typeof b=="string"&&!a.effects[b])return!0;return!1}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete;return[b,c,d,e]}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function d(b,d){var e;do{e=a.curCSS(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function c(b){var c;if(b&&b.constructor==Array&&b.length==3)return b;if(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))return[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)];if(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))return[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55];if(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))return[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];if(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))return[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];if(c=/rgba\(0, 0, 0, 0\)/.exec(b))return e.transparent;return e[a.trim(b).toLowerCase()]}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){a.isFunction(d)&&(e=d,d=null);return this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class");a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.18",save:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){b=="toggle"&&(b=a.is(":hidden")?"show":"hide");return b},getBaseline:function(a,b){var c,d;switch(a[0]){case"top":c=0;break;case"middle":c=.5;break;case"bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case"left":d=0;break;case"center":d=.5;break;case"right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper"))return b.parent();var c={width:b.outerWidth(!0),height:b.outerHeight(!0),"float":b.css("float")},d=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"}));return d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;if(b.parent().is(".ui-effects-wrapper")){c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus();return c}return b},setTransition:function(b,c,d,e){e=e||{},a.each(c,function(a,c){unit=b.cssUnit(c),unit[0]>0&&(e[c]=unit[0]*d+unit[1])});return e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];if(a.fx.off||!i)return h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)});return i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="show";return this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);b[1].mode="hide";return this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);c[1].mode="toggle";return this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])});return d}}),a.easing.jswing=a.easing.swing,a.extend(a.easing,{def:"easeOutQuad",swing:function(b,c,d,e,f){return a.easing[a.easing.def](b,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b+c;return-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b+c;return d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b+c;return-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){if((b/=e/2)<1)return d/2*b*b*b*b*b+c;return d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return b==0?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){if(b==0)return c;if(b==e)return c+d;if((b/=e/2)<1)return d/2*Math.pow(2,10*(b-1))+c;return d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){if((b/=e/2)<1)return-d/2*(Math.sqrt(1-b*b)-1)+c;return d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g))+c},easeOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e)==1)return c+d;g||(g=e*.3);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*b)*Math.sin((b*e-f)*2*Math.PI/g)+d+c},easeInOutElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(b==0)return c;if((b/=e/2)==2)return c+d;g||(g=e*.3*1.5);if(h<Math.abs(d)){h=d;var f=g/4}else var f=g/(2*Math.PI)*Math.asin(d/h);if(b<1)return-0.5*h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)+c;return h*Math.pow(2,-10*(b-=1))*Math.sin((b*e-f)*2*Math.PI/g)*.5+d+c},easeInBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);return e*(c/=f)*c*((g+1)*c-g)+d},easeOutBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);return e*((c=c/f-1)*c*((g+1)*c+g)+1)+d},easeInOutBack:function(a,c,d,e,f,g){g==b&&(g=1.70158);if((c/=f/2)<1)return e/2*c*c*(((g*=1.525)+1)*c-g)+d;return e/2*((c-=2)*c*(((g*=1.525)+1)*c+g)+2)+d},easeInBounce:function(b,c,d,e,f){return e-a.easing.easeOutBounce(b,f-c,0,e,f)+d},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?d*7.5625*b*b+c:b<2/2.75?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:b<2.5/2.75?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(b,c,d,e,f){if(c<f/2)return a.easing.easeInBounce(b,c*2,0,e,f)*.5+d;return a.easing.easeOutBounce(b,c*2-f,0,e,f)*.5+e*.5+d}})}(jQuery);/*
+ * jQuery UI Effects Blind 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.blind=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=f=="vertical"?"height":"width",i=f=="vertical"?g.height():g.width();e=="show"&&g.css(h,0);var j={};j[h]=e=="show"?i:0,g.animate(j,b.duration,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);/*
+ * jQuery UI Effects Bounce 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Bounce
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.bounce=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"up",g=b.options.distance||20,h=b.options.times||5,i=b.duration||250;/show|hide/.test(e)&&d.push("opacity"),a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",g=b.options.distance||(j=="top"?c.outerHeight({margin:!0})/3:c.outerWidth({margin:!0})/3);e=="show"&&c.css("opacity",0).css(j,k=="pos"?-g:g),e=="hide"&&(g=g/(h*2)),e!="hide"&&h--;if(e=="show"){var l={opacity:1};l[j]=(k=="pos"?"+=":"-=")+g,c.animate(l,i/2,b.options.easing),g=g/2,h--}for(var m=0;m<h;m++){var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing),g=e=="hide"?g*2:g/2}if(e=="hide"){var l={opacity:0};l[j]=(k=="pos"?"-=":"+=")+g,c.animate(l,i/2,b.options.easing,function(){c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}else{var n={},p={};n[j]=(k=="pos"?"-=":"+=")+g,p[j]=(k=="pos"?"+=":"-=")+g,c.animate(n,i/2,b.options.easing).animate(p,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)})}c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);/*
+ * jQuery UI Effects Clip 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Clip
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.clip=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","height","width"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"vertical";a.effects.save(c,d),c.show();var g=a.effects.createWrapper(c).css({overflow:"hidden"}),h=c[0].tagName=="IMG"?g:c,i={size:f=="vertical"?"height":"width",position:f=="vertical"?"top":"left"},j=f=="vertical"?h.height():h.width();e=="show"&&(h.css(i.size,0),h.css(i.position,j/2));var k={};k[i.size]=e=="show"?j:0,k[i.position]=e=="show"?0:j/2,h.animate(k,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Drop 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Drop
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.drop=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","opacity"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0})/2:c.outerWidth({margin:!0})/2);e=="show"&&c.css("opacity",0).css(g,h=="pos"?-i:i);var j={opacity:e=="show"?1:0};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Explode 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Explode
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.explode=function(b){return this.queue(function(){var c=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3,d=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":b.options.mode;var e=a(this).show().css("visibility","hidden"),f=e.offset();f.top-=parseInt(e.css("marginTop"),10)||0,f.left-=parseInt(e.css("marginLeft"),10)||0;var g=e.outerWidth(!0),h=e.outerHeight(!0);for(var i=0;i<c;i++)for(var j=0;j<d;j++)e.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(g/d),top:-i*(h/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/d,height:h/c,left:f.left+j*(g/d)+(b.options.mode=="show"?(j-Math.floor(d/2))*(g/d):0),top:f.top+i*(h/c)+(b.options.mode=="show"?(i-Math.floor(c/2))*(h/c):0),opacity:b.options.mode=="show"?0:1}).animate({left:f.left+j*(g/d)+(b.options.mode=="show"?0:(j-Math.floor(d/2))*(g/d)),top:f.top+i*(h/c)+(b.options.mode=="show"?0:(i-Math.floor(c/2))*(h/c)),opacity:b.options.mode=="show"?1:0},b.duration||500);setTimeout(function(){b.options.mode=="show"?e.css({visibility:"visible"}):e.css({visibility:"visible"}).hide(),b.callback&&b.callback.apply(e[0]),e.dequeue(),a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);/*
+ * jQuery UI Effects Fade 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fade
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.fade=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Fold 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.fold=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"hide"),f=b.options.size||15,g=!!b.options.horizFirst,h=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(c,d),c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),j=e=="show"!=g,k=j?["width","height"]:["height","width"],l=j?[i.width(),i.height()]:[i.height(),i.width()],m=/([0-9]+)%/.exec(f);m&&(f=parseInt(m[1],10)/100*l[e=="hide"?0:1]),e=="show"&&i.css(g?{height:0,width:f}:{height:f,width:0});var n={},p={};n[k[0]]=e=="show"?l[0]:f,p[k[1]]=e=="show"?l[1]:0,i.animate(n,h,b.options.easing).animate(p,h,b.options.easing,function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery);/*
+ * jQuery UI Effects Highlight 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.highlight=function(b){return this.queue(function(){var c=a(this),d=["backgroundImage","backgroundColor","opacity"],e=a.effects.setMode(c,b.options.mode||"show"),f={backgroundColor:c.css("backgroundColor")};e=="hide"&&(f.opacity=0),a.effects.save(c,d),c.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(f,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),e=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Pulsate 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.pulsate=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"show");times=(b.options.times||5)*2-1,duration=b.duration?b.duration/2:a.fx.speeds._default/2,isVisible=c.is(":visible"),animateTo=0,isVisible||(c.css("opacity",0).show(),animateTo=1),(d=="hide"&&isVisible||d=="show"&&!isVisible)&&times--;for(var e=0;e<times;e++)c.animate({opacity:animateTo},duration,b.options.easing),animateTo=(animateTo+1)%2;c.animate({opacity:animateTo},duration,b.options.easing,function(){animateTo==0&&c.hide(),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);/*
+ * jQuery UI Effects Scale 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Scale
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.puff=function(b){return this.queue(function(){var c=a(this),d=a.effects.setMode(c,b.options.mode||"hide"),e=parseInt(b.options.percent,10)||150,f=e/100,g={height:c.height(),width:c.width()};a.extend(b.options,{fade:!0,mode:d,percent:d=="hide"?e:100,from:d=="hide"?g:{height:g.height*f,width:g.width*f}}),c.effect("scale",b.options,b.duration,b.callback),c.dequeue()})},a.effects.scale=function(b){return this.queue(function(){var c=a(this),d=a.extend(!0,{},b.options),e=a.effects.setMode(c,b.options.mode||"effect"),f=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:e=="hide"?0:100),g=b.options.direction||"both",h=b.options.origin;e!="effect"&&(d.origin=h||["middle","center"],d.restore=!0);var i={height:c.height(),width:c.width()};c.from=b.options.from||(e=="show"?{height:0,width:0}:i);var j={y:g!="horizontal"?f/100:1,x:g!="vertical"?f/100:1};c.to={height:i.height*j.y,width:i.width*j.x},b.options.fade&&(e=="show"&&(c.from.opacity=0,c.to.opacity=1),e=="hide"&&(c.from.opacity=1,c.to.opacity=0)),d.from=c.from,d.to=c.to,d.mode=e,c.effect("size",d,b.duration,b.callback),c.dequeue()})},a.effects.size=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right","width","height","overflow","opacity"],e=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],g=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],i=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],j=a.effects.setMode(c,b.options.mode||"effect"),k=b.options.restore||!1,l=b.options.scale||"both",m=b.options.origin,n={height:c.height(),width:c.width()};c.from=b.options.from||n,c.to=b.options.to||n;if(m){var p=a.effects.getBaseline(m,n);c.from.top=(n.height-c.from.height)*p.y,c.from.left=(n.width-c.from.width)*p.x,c.to.top=(n.height-c.to.height)*p.y,c.to.left=(n.width-c.to.width)*p.x}var q={from:{y:c.from.height/n.height,x:c.from.width/n.width},to:{y:c.to.height/n.height,x:c.to.width/n.width}};if(l=="box"||l=="both")q.from.y!=q.to.y&&(d=d.concat(h),c.from=a.effects.setTransition(c,h,q.from.y,c.from),c.to=a.effects.setTransition(c,h,q.to.y,c.to)),q.from.x!=q.to.x&&(d=d.concat(i),c.from=a.effects.setTransition(c,i,q.from.x,c.from),c.to=a.effects.setTransition(c,i,q.to.x,c.to));(l=="content"||l=="both")&&q.from.y!=q.to.y&&(d=d.concat(g),c.from=a.effects.setTransition(c,g,q.from.y,c.from),c.to=a.effects.setTransition(c,g,q.to.y,c.to)),a.effects.save(c,k?d:e),c.show(),a.effects.createWrapper(c),c.css("overflow","hidden").css(c.from);if(l=="content"||l=="both")h=h.concat(["marginTop","marginBottom"]).concat(g),i=i.concat(["marginLeft","marginRight"]),f=d.concat(h).concat(i),c.find("*[width]").each(function(){child=a(this),k&&a.effects.save(child,f);var c={height:child.height(),width:child.width()};child.from={height:c.height*q.from.y,width:c.width*q.from.x},child.to={height:c.height*q.to.y,width:c.width*q.to.x},q.from.y!=q.to.y&&(child.from=a.effects.setTransition(child,h,q.from.y,child.from),child.to=a.effects.setTransition(child,h,q.to.y,child.to)),q.from.x!=q.to.x&&(child.from=a.effects.setTransition(child,i,q.from.x,child.from),child.to=a.effects.setTransition(child,i,q.to.x,child.to)),child.css(child.from),child.animate(child.to,b.duration,b.options.easing,function(){k&&a.effects.restore(child,f)})});c.animate(c.to,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity),j=="hide"&&c.hide(),a.effects.restore(c,k?d:e),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Shake 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Shake
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.shake=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"effect"),f=b.options.direction||"left",g=b.options.distance||20,h=b.options.times||3,i=b.duration||b.options.duration||140;a.effects.save(c,d),c.show(),a.effects.createWrapper(c);var j=f=="up"||f=="down"?"top":"left",k=f=="up"||f=="left"?"pos":"neg",l={},m={},n={};l[j]=(k=="pos"?"-=":"+=")+g,m[j]=(k=="pos"?"+=":"-=")+g*2,n[j]=(k=="pos"?"-=":"+=")+g*2,c.animate(l,i,b.options.easing);for(var p=1;p<h;p++)c.animate(m,i,b.options.easing).animate(n,i,b.options.easing);c.animate(m,i,b.options.easing).animate(l,i/2,b.options.easing,function(){a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments)}),c.queue("fx",function(){c.dequeue()}),c.dequeue()})}})(jQuery);/*
+ * jQuery UI Effects Slide 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Slide
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.slide=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"show"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c).css({overflow:"hidden"});var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight({margin:!0}):c.outerWidth({margin:!0}));e=="show"&&c.css(g,h=="pos"?isNaN(i)?"-"+i:-i:i);var j={};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);/*
+ * jQuery UI Effects Transfer 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Transfer
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */(function(a,b){a.effects.transfer=function(b){return this.queue(function(){var c=a(this),d=a(b.options.to),e=d.offset(),f={top:e.top,left:e.left,height:d.innerHeight(),width:d.innerWidth()},g=c.offset(),h=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(f,b.duration,b.options.easing,function(){h.remove(),b.callback&&b.callback.apply(c[0],arguments),c.dequeue()})})}})(jQuery); \ No newline at end of file
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/jquery.ui.gnowmacs.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/jquery.ui.gnowmacs.js
new file mode 100644
index 0000000..88caa1f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/jquery.ui.gnowmacs.js
@@ -0,0 +1,929 @@
+(function ($) {
+ $.widget("ui.gnowmacs", {
+ _init: function () {
+ // This file is part of Gnowmacs for GNOWSYS: Gnowledge Networking
+ // and Organizing System.
+ // Gnowmacs is free software; you can redistribute it and/or modify
+ // it under the terms of the GNU Affero General Public License as
+ // published by the Free Software Foundation; either version 3 of
+ // the License, or (at your option) any later version.
+ // Gnowmacs 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 Affero General Public
+ // License along with Gnowmacs (agpl.txt); if not, write to the
+ // Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ // Boston, MA 02110-1301 USA59 Temple Place, Suite 330,
+ // Author Divya <divyas15@gmail.com>
+ var desktop = new DlDesktop({});
+ var tableg = 0;
+ var row, col;
+ var str_sym;
+ var options1, position, char_at_pos, index1, pt, pt1, pt2;
+ var formats;
+ formats = ["HTML", "PDF", "LaTeX", "DocBook", "XOXO"];
+ var al;
+ var str1;
+ var al1, al2;
+ var gImage;
+ var gOptions;
+
+ function print(obj) {
+ var a = [],
+ i;
+ for (i in obj) {
+ var val = obj[i];
+ if (val instanceof Function) val = val.toString();
+ else val = DlJSON.encode(val);
+ a.push(DlJSON.encode(i) + " : " + val);
+ }
+ return a.map(function (line) {
+ return line.replace(/^/mg, function (s) {
+ return " ";
+ });
+ }).join("\n");
+ };
+
+ var info = ("Existing keybindings:\n\n" + print(Ymacs_Keymap_Emacs().constructor.KEYS) + "\n\nHave fun!\n");
+ // var id = node_id
+ var id = document.getElementById("objectid").value;
+ // var orgcontent= document.getElementById("bufferdata").value;
+ var title = document.getElementById("title").value;
+ var orgcontent = document.getElementById("orgcontent").value;
+ var extension = ".org"
+
+
+
+ try {
+ var org = new Ymacs_Buffer({
+
+ name: title+ extension
+
+
+
+ });
+
+ org.setCode(orgcontent);
+ //var qqq = org.data2
+ org.cmd("org_mode");
+
+ var keys = new Ymacs_Buffer({
+ name: "keybindings.txt"
+ });
+ keys.setCode(info);
+
+ var layout = new DlLayout({
+ parent: desktop
+ });
+
+ var empty = new Ymacs_Buffer({
+ name: "empty"
+ });
+ var ymacs = window.ymacs = new Ymacs({
+ buffers: [org, keys]
+ });
+ ymacs.setColorTheme(["dark", "y"]);
+
+ try {
+ ymacs.getActiveBuffer().cmd("eval_file", ".ymacs");
+ } catch (ex) {}
+
+ var menu = new DlHMenu({});
+ menu.setStyle({
+ marginLeft: 0,
+ marginRight: 0
+ });
+
+
+ var item = new DlMenuItem({
+ parent: menu,
+ label: "Export".makeLabel()
+ });
+
+
+ /* -------------- Org Export --------------*/
+
+ //formats = ["HTML", "PDF", "LaTeX", "DocBook", "XOXO"];
+ var submenu = new DlVMenu({});
+ item.setMenu(submenu);
+ formats.foreach(function (format) {
+ var item = new DlMenuItem({
+ label: format,
+ parent: submenu
+ });
+ item.addEventListener("onSelect", function () {
+
+ try {
+
+ var is_Firefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
+ if (is_Firefox) netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+
+ var xhr = new XMLHttpRequest();
+ var url = "http://127.0.0.1:9292/";
+
+ xhr.open("POST", url, true);
+
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState == 4) {
+ alert(xhr.status);
+
+ }
+ }
+ xhr.setRequestHeader("Content-type", "text/plain");
+
+ if (format == "HTML" && gImage == 1) // checking if insertImage() is called
+ {
+ //ymacs.getActiveBuffer().cmd("delete_region_or_line",str1);
+ al = "#+ATTR_HTML: align=" + "\"left\"" + "\n";
+ al1 = al;
+ ymacs.getActiveBuffer().cmd("insert", al1);
+ //if(al2!=null)
+ //ymacs.getActiveBuffer().cmd("delete_region_or_line",al2);
+ } else if (format == "PDF" && gImage == 1) {
+ //ymacs.getActiveBuffer().cmd("delete_region_or_line",str1);
+ al = "#+ATTR_LaTeX:placement = {r}" + "\n";
+ al2 = al;
+ ymacs.getActiveBuffer().cmd("insert", al2);
+ //if(al1!=null)
+ //ymacs.getActiveBuffer().cmd("delete_region_or_line",al1);
+ }
+ xhr.send("gnow-select: " + format + "\n" + ymacs.getActiveBuffer().getCode());
+
+
+
+
+ //alert("gnow-select: "+format+"\n"+ymacs.getActiveBuffer().getCode());
+ //alert(format+"\n"+ymacs.getActiveBuffer().getCode());
+ } catch (e) {
+ alert("Some Error");
+ }
+ });
+ });
+
+
+ menu.addFiller();
+ var item = new DlMenuItem({
+ parent: menu,
+ label: "Save".makeLabel()
+ });
+ item.addEventListener("onSelect", function () {
+ var org_data = org.getCode();
+ document.getElementById("orgcontent").value = org_data;
+ var encode_data = encodeURIComponent(org_data);
+
+
+ url = "/nodetypes/ajax/contentorgadd/?id=" + id + "&contentorg=" +encode_data;
+ $.get(url,
+ function(data){
+ })
+ url = "/nodetypes/ajax/contentorgadd/?id=" + id + "&contentorg=" +encode_data;
+ $.get(url,
+ function(data){
+ })
+
+ url = "/nodetypes/ajax/ajaxcreatefile/?id=" +id+ "&content_org=" +encode_data;
+ $.get(url,
+ function(data){
+ })
+
+ url = "/nodetypes/ajax/ajaxcreatehtml/";
+ $.get(url,
+ function(data){
+ })
+
+ url = "/nodetypes/ajax/contentadd/?id=" + id;
+ $.get(url,
+ function(data){
+ })
+ url = "/nodetypes/ajax/contentadd/?id=" + id;
+ $.get(url,
+ function(data){
+ })
+ url = "/nodetypes/ajax/contentadd/?id=" + id;
+ $.get(url,
+ function(data){
+ })
+
+
+ alert("Data Saved");
+ window.location.reload();
+ });
+
+ var item = new DlMenuItem({
+ parent: menu,
+ label: "Toggle line numbers".makeLabel()
+ });
+ item.addEventListener("onSelect", function () {
+ ymacs.getActiveBuffer().cmd("toggle_line_numbers");
+ });
+
+ /*------[ Wrap ]--------
+ flag is a variable to store the current status of wrap.wrap itself switches On n Off depending on previous status.
+ so it is necessary to keep record of previous status*/
+
+ // var item = new DlMenuItem({
+ // parent: menu,
+ // label: "Wrap".makeLabel()
+ // });
+ // var flag = "False";
+ // item.addEventListener("onSelect", function () {
+ // if (flag == "False") {
+ // flag = "True";
+ // alert("Wrapping is ON");
+ // ymacs.getActiveBuffer().cmd("wrap_text");
+ // } else {
+ // flag = "False";
+ // alert("Wrapping is OFF");
+ // ymacs.getActiveBuffer().cmd("wrap_text");
+ // }
+
+ // });
+
+
+
+ /* -----[ insert - just a try] ----- */
+
+ var item = new DlMenuItem({
+ parent: menu,
+ label: "Insert".makeLabel()
+ });
+ var item1 = new DlMenuItem({
+ parent: submenu,
+ label: "TOC"
+ });
+ var submenu = new DlVMenu({});
+ item.setMenu(submenu);
+ var subToc = new DlVMenu({});
+ item = new DlMenuItem({
+ parent: submenu,
+ label: "Default from ymacs.css"
+ });
+ item.addEventListener("onSelect", function () {
+ ymacs.getActiveFrame().setStyle({
+ fontFamily: ""
+ });
+ });
+
+ submenu.addSeparator();
+ item1 = new DlMenuItem({
+ parent: submenu,
+ label: "Table Of Content"
+ });
+ item1.addEventListener("onSelect", function () {
+ options1 = "#+OPTIONS:" + " " + "H:3 num:t toc:t \\n:nil @:t ::t |:t ^:t -:t f:t *:t <:t" + "\n";
+ insertOPTIONS();
+
+ });
+ var files = [
+ "Table",
+ "Insert Column",
+ "Insert Row",
+ "Insert hline",
+ "Images",
+ ]
+ item1.setMenu(subToc);
+
+
+
+
+ files.foreach(function (i) {
+ item = new DlMenuItem({
+ parent: submenu,
+ label: "<span style='font-size:" + i + "'>" + i + "</span>"
+ });
+ item.addEventListener("onSelect", function () {
+
+ // alert("You selected " +i);
+ switch (i) {
+ case "Table":
+ insertTable();
+ break;
+ case "Insert Column":
+ if (tableg == 1) // if insertTable() is called previously then call insertColumn()
+ {
+ insertColumn();
+ } else {
+ alert("First create a table");
+ }
+ break;
+ case "Insert Row":
+ if (tableg == 1) // if insertTable() is called previously then call insertRow()
+ {
+ insertRow();
+ } else {
+ alert("First create a table");
+ }
+ break;
+ case "Insert hline":
+ if (tableg == 1) // if insertTable() is called previously then call insertHline()
+ {
+ insertHline();
+ } else {
+ alert("First create a table");
+ }
+ break;
+
+ case "Images":
+ insertImage1();
+ break;
+ default:
+ alert("code to be executed if n is different from case 1 and 2");
+ }
+ });
+ });
+
+
+ var files2 = [
+ "OPTIONS"
+
+
+ ].foreach(function (font) {
+ item = new DlMenuItem({
+ parent: subToc,
+ label: "<span style='font-family:" + font + "'>" + font + "</span>"
+ });
+ var test_flag = "False";
+ item.addEventListener("onSelect", function () {
+
+ // var pt2 = ymacs.getActiveBuffer().cmd("point");
+ // alert(pt2);
+ if (test_flag == "False" && gOptions == 1) {
+ test_flag = "True";
+ alert("OPTIONS is ON");
+ ymacs.getActiveBuffer().cmd("goto_char", pt1);
+ alert(pt1);
+ ymacs.getActiveBuffer().cmd("end_of_line");
+ ymacs.getActiveBuffer().cmd("insert", "\n");
+ pt2 = ymacs.getActiveBuffer().cmd("point");
+ alert(pt2);
+ options1 = "#+OPTIONS:" + " " + "H:3 num:t toc:t \\n:nil @:t ::t |:t ^:t -:t f:t *:t <:t" + "\n";
+ ymacs.getActiveBuffer().cmd("insert", options1);
+ //ymacs.getActiveBuffer().cmd("insert","\n");
+ } else if (gOptions != 1) {
+
+ alert("Insert TOC first");
+
+
+
+ } else {
+
+ // ymacs.getActiveBuffer().cmd("beginning_of_buffer");
+ test_flag = "False";
+ alert("OPTIONS is OFF");
+
+
+ // if(gOptions == 1)
+
+ ymacs.getActiveBuffer().cmd("goto_char", pt2);
+ alert(pt2);
+
+ // ymacs.getActiveBuffer().cmd("forward_line");
+ // var pt1 = ymacs.getActiveBuffer().cmd("point");
+ // alert("pt1",pt1);
+ // ymacs.getActiveBuffer().cmd("goto_char",pt1);
+ ymacs.getActiveBuffer().cmd("delete_line");
+ options1 = "#+OPTIONS:" + " " + "H:3 num:nil toc:nil \\n:nil @:t ::t |:t ^:t -:t f:t *:t <:t" + "\n";
+ ymacs.getActiveBuffer().cmd("insert", options1);
+
+
+
+ }
+
+
+
+
+
+
+
+
+ });
+ });
+
+ function insertOPTIONS() {
+ gOptions = 1;
+ var a1 = "#+AUTHOR:" + " " + "\n";
+ var t1 = "#+TITLE:" + " " + "\n";
+ var currentDate = new Date();
+ var month = currentDate.getMonth() + 1;
+ var day = currentDate.getDate();
+ var year = currentDate.getFullYear();
+ var weekday = new Array(7);
+ weekday[0] = "Sunday";
+ weekday[1] = "Monday";
+ weekday[2] = "Tuesday";
+ weekday[3] = "Wednesday";
+ weekday[4] = "Thursday";
+ weekday[5] = "Friday";
+ weekday[6] = "Saturday";
+ var d1 = weekday[currentDate.getDay()];
+ var fullDate = "#+DATE:" + " " + year + " " + month + " " + day + " " + d1 + "\n";
+ var language1 = "#+LANGUAGE:" + " " + "en" + "\n";
+ var emailId = "#+EMAIL:" + " " + "\n";
+ var desc = "#+DESCRIPTION:" + " " + "\n";
+ var keywords = "#+KEYWORDS:" + " " + "\n";
+ var options2 = "#+OPTIONS:" + " " + "TeX:t LaTeX:nil skip:nil d:nil todo:t pri:nil tags:not-in-toc" + "\n";
+ var info = "#+INFOJS_OPT:" + " " + "view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js" + "\n";
+ var export_select_tag = "#+EXPORT_" + " SELECT_" + "TAGS:" + " " + "export " + "\n";
+ var export_exclude_tag = "#+EXPORT_" + " EXCLUDE_" + "TAGS:" + " " + "noexport" + "\n";
+ var link_up = "#+LINK_UP:" + " " + "\n";
+ var link_home = "#+LINK_HOME:" + " " + "\n";
+ ymacs.getActiveBuffer().cmd("insert", t1);
+ ymacs.getActiveBuffer().cmd("insert", a1);
+ ymacs.getActiveBuffer().cmd("insert", emailId);
+ ymacs.getActiveBuffer().cmd("insert", fullDate);
+ ymacs.getActiveBuffer().cmd("insert", keywords);
+ ymacs.getActiveBuffer().cmd("insert", language1);
+ //pt = ymacs.getActiveBuffer().cmd("point");
+ //alert(pt);
+ //ymacs.getActiveBuffer().cmd("insert",options1);
+ // ymacs.getActiveBuffer().cmd("insert","\n");
+ ymacs.getActiveBuffer().cmd("insert", options2);
+
+ ymacs.getActiveBuffer().cmd("insert", "\n");
+ pt1 = ymacs.getActiveBuffer().cmd("point");
+ // alert(pt1);
+ ymacs.getActiveBuffer().cmd("insert", info);
+ ymacs.getActiveBuffer().cmd("insert", export_select_tag);
+ ymacs.getActiveBuffer().cmd("insert", export_exclude_tag);
+ ymacs.getActiveBuffer().cmd("insert", link_up);
+ ymacs.getActiveBuffer().cmd("insert", link_home);
+ //ymacs.getActiveBuffer().cmd("goto_char",pt);
+ }
+
+
+
+
+ // This function creates a table with the user specified no. of rows & columns.
+ function insertTable() {
+ row = prompt("Enter no. of rows", 1);
+ col = prompt("Enter no. of cols", 1);
+ tableg = 1;
+ for (k = 0; k <= col; k++) {
+ ymacs.getActiveBuffer().cmd("org_table_create");
+ }
+ ymacs.getActiveBuffer().cmd("insert", "\n");
+ ymacs.getActiveBuffer().cmd("insert", "|");
+ ymacs.getActiveBuffer().cmd("insert", "---");
+ for (k = 0; k < (col - 1); k++) {
+
+ ymacs.getActiveBuffer().cmd("insert", "@");
+ ymacs.getActiveBuffer().cmd("insert", "---");
+ }
+ ymacs.getActiveBuffer().cmd("insert", "|");
+ ymacs.getActiveBuffer().cmd("insert", "\n");
+ for (m = 1; m < row; m++) {
+
+ for (j = 0; j <= col; j++) {
+
+ ymacs.getActiveBuffer().cmd("org_table_create");
+ }
+ //alert(row);
+ ymacs.getActiveBuffer().cmd("insert", "\n");
+ }
+ }
+
+ // This function creates a column for the table.
+ function insertColumn()
+
+ {
+
+ ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ ymacs.getActiveBuffer().cmd("end_of_line");
+
+
+ ymacs.getActiveBuffer().cmd("insert", "|");
+
+ ymacs.getActiveBuffer().cmd("forward_line");
+ ymacs.getActiveBuffer().cmd("backward_char");
+ ymacs.getActiveBuffer().cmd("insert", "@");
+ ymacs.getActiveBuffer().cmd("delete_char");
+
+ ymacs.getActiveBuffer().cmd("insert", "---");
+ ymacs.getActiveBuffer().cmd("insert", "|");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ for (k = 1; k < row; k++) {
+ ymacs.getActiveBuffer().cmd("insert", "|");
+ ymacs.getActiveBuffer().cmd("forward_line");
+
+ }
+ col = parseInt(col) + 1;
+
+
+ }
+
+ // This function creates a row for the table.
+ function insertRow()
+
+ {
+ for (j = 0; j <= col; j++) {
+
+ ymacs.getActiveBuffer().cmd("org_table_create");
+ }
+ ymacs.getActiveBuffer().cmd("insert", "");
+ ymacs.getActiveBuffer().cmd("newline");
+
+ row = parseInt(row) + 1;
+
+ }
+
+ // This function creates a Horizontal Line for the table.
+ function insertHline() {
+ ymacs.getActiveBuffer().cmd("end_of_line");
+ ymacs.getActiveBuffer().cmd("insert", "\n");
+
+ ymacs.getActiveBuffer().cmd("insert", "|");
+ ymacs.getActiveBuffer().cmd("insert", "---");
+ for (k = 0; k < (col - 1); k++) {
+
+ ymacs.getActiveBuffer().cmd("insert", "@");
+ ymacs.getActiveBuffer().cmd("insert", "---");
+ }
+ ymacs.getActiveBuffer().cmd("insert", "|");
+
+
+ }
+
+ function insertImage() {
+
+
+ //gImage = 1;
+ //ymacs.getActiveBuffer().cmd("end_of_buffer");
+ //var img1 = prompt("Enter url for image","/home/sndt/Music/img2.jpeg");
+ //mywindow = window.open("fileupload2.html", "", "location=0,status=0,scrollbars=0, width=300,height=150");
+ mywindow = window.open("one.html", "", "location=0,status=0,scrollbars=0, width=300,height=150");
+ mywindow.moveTo(400, 400);
+
+ //document.write("<INPUT TYPE=file + >");
+ //document.write("hi");
+ //window.open(img1);
+ //var al;
+ //var str1;
+ //var img2 = img1;
+ //var str3 = img1.indexOf(".");
+ //var str4 = img1.lastIndexOf("/");
+ //var str2 = img1.slice(str4+1,str3);
+ //var str1 = "[[" + img1 + "]" + "["+ str2 +"]]";
+ //var al = "#+ATTR_HTML: align="+"\"left\""+"\n";
+ //str1 = "[[" + img1 + "]]";
+ //var str = img1.lastIndexOf("]");
+ //var a = str-1;
+ //var c = img1.length;
+ //var b = img1.slice(str4+1,c);
+ //var d = "/home/sndt/imgtry/" + b;
+ //var newPath = "[[" + d + "]]";
+ //ymacs.getActiveBuffer().cmd("insert",newPath);
+ //ymacs.getActiveBuffer().cmd("insert",str1);
+ }
+
+ function insertImage1() {
+
+ // alert(img0);
+ gImage = 1;
+ ymacs.getActiveBuffer().cmd("end_of_buffer");
+ var img1 = prompt("Enter url for image", "/home/sndt/Music/img2.jpeg");
+ //mywindow = window.open("fileupload1.html", "", "location=0,status=0,scrollbars=0, width=300,height=150");
+ // mywindow.moveTo(400, 400);
+ //document.write("<INPUT TYPE=file + >");
+ //document.write("hi");
+ //window.open(img1);
+ //var al;
+ //var str1;
+ // var img1 = img0;
+ var img2 = img1;
+ var str3 = img1.indexOf(".");
+ var str4 = img1.lastIndexOf("/");
+ var str2 = img1.slice(str4 + 1, str3);
+ //var str1 = "[[" + img1 + "]" + "["+ str2 +"]]";
+ //var al = "#+ATTR_HTML: align="+"\"left\""+"\n";
+ str1 = "[[" + img1 + "]]";
+ var str = img1.lastIndexOf("]");
+ var a = str - 1;
+ var c = img1.length;
+ var b = img1.slice(str4 + 1, c);
+ var d = "/home/sndt/imgtry/" + b;
+ var newPath = "[[" + d + "]]";
+ //ymacs.getActiveBuffer().cmd("insert",newPath);
+ ymacs.getActiveBuffer().cmd("insert", str1);
+ ymacs.getActiveBuffer().cmd("backward_line");
+ }
+
+
+
+
+ /* -----[ color theme ]----- */
+
+ var item = new DlMenuItem({
+ parent: menu,
+ label: "Color theme".makeLabel()
+ });
+ var submenu = new DlVMenu({});
+ item.setMenu(submenu);
+
+ [
+ "dark|y|Dark background (default)",
+ "dark|billw|>Billw",
+ "dark|charcoal-black|>Charcoal black",
+ "dark|clarity-and-beauty|>Clarity and beauty",
+ "dark|classic|>Classic",
+ "dark|gnome2|>Gnome 2",
+ "dark|calm-forest|>Calm forest",
+ "dark|linh-dang-dark|>Linh Dang Dark",
+ "dark|blue-mood|>Blue mood",
+ "dark|zenburn|>Zenburn",
+ "dark|standard-dark|>Emacs standard (dark)",
+ null,
+ "light|y|Light background (default)",
+ "light|andreas|>Andreas",
+ "light|bharadwaj|>Bharadwaj",
+ "light|gtk-ide|>GTK IDE",
+ "light|high-contrast|>High contrast",
+ "light|scintilla|>Scintilla",
+ "light|standard-xemacs|>Standard XEmacs",
+ "light|vim-colors|>Vim colors",
+ "light|standard|>Emacs standard (light)"
+ ].foreach(function (theme) {
+ if (theme == null) {
+ submenu.addSeparator();
+ } else {
+ theme = theme.split(/\s*\|\s*/);
+ var label = theme.pop();
+ label = label.replace(/^>\s*/, "&nbsp;".x(4));
+ var item = new DlMenuItem({
+ parent: submenu,
+ label: label
+ });
+ item.addEventListener("onSelect", ymacs.setColorTheme.$(ymacs, theme));
+ }
+ });
+ /*-------Insert-------
+
+ var item = new DlMenuItem({ parent: menu, label: "Insert".makeLabel() });
+ var item1 = new DlMenuItem({ parent: submenu, label: "TOC" });
+ var submenu = new DlVMenu({});
+
+ var subToc = new DlVMenu({});
+ item.setMenu(submenu);
+ item = new DlMenuItem({ parent: submenu, label: "Default file" });
+ submenu.addSeparator();
+ item1 = new DlMenuItem({ parent: submenu, label: "Table Of Content" });
+ item.addEventListener("onSelect", function(){
+
+ });
+
+ var files1 = [
+ "Image",
+ "Text",
+ "Table"
+
+
+
+ ]
+
+
+
+ item1.setMenu(subToc);
+ files1.foreach(function(font){
+ item = new DlMenuItem({ parent: submenu, label: "<span style='font-family:" + font + "'>" + font + "</span>" });
+ item.addEventListener("onSelect", function(){
+
+
+ if(font == "Image")
+ {
+ var imgPath = prompt("Enter the location:", "/home/snehal1/pics/ ");
+ window.open(imgPath);
+
+ }
+
+ });
+ });
+
+ var files2 = [
+ "Title",
+ "Author",
+ "Email",
+ "Description",
+ "Language"
+
+
+
+
+ ].foreach(function(font){
+ item = new DlMenuItem({ parent: subToc, label: "<span style='font-family:" + font + "'>" + font + "</span>" });
+ item.addEventListener("onSelect", function(){
+ var name1 = prompt("Enter data","");
+
+ });
+ });
+ */
+
+
+
+
+ /* -----[ Symbol Insert ]----- */
+
+ /* var item = new DlMenuItem({ parent: menu, label: "Symbol Insert".makeLabel() });
+ var submenu = new DlVMenu({});
+ item.setMenu(submenu);
+
+ submenu.addSeparator();
+
+ [
+ "&alpha;",
+ "&beta;",
+ "&#947;",
+ "&#948;",
+ "&#949;",
+ "&#952;",
+ "&#955;",
+ "&#956;",
+ "&#960;",
+ "&#961;",
+ "&#963;",
+ "&#934;",
+ "&#931;"
+
+ ].foreach(function(i){
+ item = new DlMenuItem({ parent: submenu, label: "<span style='font-family:" + i + "'>" + i + "</span>" });
+ item.addEventListener("onSelect", function(){
+ // ymacs.getActiveBuffer().cmd("insert",i);
+ alert(i);
+ var greek_sym1 = [945,946,947,948,949,952,955,956,960,961,963,934,931];
+ var greek_sym2 = ["&alpha;","&beta;","&#947;","&#948;","&#949;","&#952;","&#955;","&#956;","&#960;","&#961;","&#963;","&#934;","&#931;"];
+ //var str_sym;
+
+ for(j=0;j<=13;j++)
+ {
+ for(k=0;k<=13;k++)
+ {
+ if(greek_sym2[j]==i && j==k)
+ {
+ str_sym = String.fromCharCode(greek_sym1[k]);
+ }
+
+ }
+
+
+ }
+ ymacs.getActiveBuffer().cmd("insert",str_sym);
+
+
+ });
+ });
+*/
+ /* -----[ font ]----- */
+
+ var item = new DlMenuItem({
+ parent: menu,
+ label: "Font family".makeLabel()
+ });
+ var submenu = new DlVMenu({});
+ item.setMenu(submenu);
+
+ item = new DlMenuItem({
+ parent: submenu,
+ label: "Default from ymacs.css"
+ });
+ item.addEventListener("onSelect", function () {
+ ymacs.getActiveFrame().setStyle({
+ fontFamily: ""
+ });
+ });
+
+ submenu.addSeparator();
+
+ [
+ "Lucida Sans Typewriter",
+ "Andale Mono",
+ "Courier New",
+ "Arial",
+ "Verdana",
+ "Tahoma",
+ "Georgia",
+ "Times New Roman"
+
+ ].foreach(function (font) {
+ item = new DlMenuItem({
+ parent: submenu,
+ label: "<span style='font-family:" + font + "'>" + font + "</span>"
+ });
+ item.addEventListener("onSelect", function () {
+ ymacs.getActiveFrame().setStyle({
+ fontFamily: font
+ });
+ });
+ });
+
+ // ymacs.getActiveFrame().setStyle({ fontFamily: "Arial", fontSize: "18px" });
+ /* -----[ gnowsys-mode ]----- */
+
+ /* var item = new DlMenuItem({ parent: menu, label: "gnowsys-mode".makeLabel() });
+
+ item.addEventListener("onSelect", function(){
+ // window.open("/home/sndt/Downloads/jknair-MozGnowser-42c5530/gnowmoz@gnowledge.org/chrome/gnowmoz/content/gnowmoz.html");
+
+ var org1 = new Ymacs_Buffer({ name: "gnowsysmode.org" });
+ org1.setCode("hi");
+ ymacs.getActiveBuffer().cmd("switch_to_buffer",org1);
+ // org1.cmd("org_mode");
+ ymacs.getActiveBuffer().cmd("load_file");
+ //window.open("http://sandboxatlas.gnowledge.org/gnowql");
+ //window.open("/home/sndt/Downloads/jknair-MozGnowser-42c5530/gnowmoz@gnowledge.org/chrome/gnowmoz/content/gnowmoz.html");
+ //window.open("two.html","_blank","width=650,height=650");
+
+ }); */
+ /* -----[ font size ]----- */
+
+ var item = new DlMenuItem({
+ parent: menu,
+ label: "Font size".makeLabel()
+ });
+ var submenu = new DlVMenu({});
+ item.setMenu(submenu);
+
+ item = new DlMenuItem({
+ parent: submenu,
+ label: "Default from ymacs.css"
+ });
+ item.addEventListener("onSelect", function () {
+ ymacs.getActiveFrame().setStyle({
+ fontSize: ""
+ });
+ });
+
+ submenu.addSeparator();
+
+ [
+ "11px",
+ "12px",
+ "14px",
+ "16px",
+ "18px",
+ "20px",
+ "22px",
+ "24px"
+
+ ].foreach(function (font) {
+ item = new DlMenuItem({
+ parent: submenu,
+ label: "<span style='font-size:" + font + "'>" + font + "</span>"
+ });
+ item.addEventListener("onSelect", function () {
+ ymacs.getActiveFrame().setStyle({
+ fontSize: font
+ });
+ });
+ });
+
+ layout.packWidget(menu, {
+ pos: "top"
+ });
+ layout.packWidget(ymacs, {
+ pos: "bottom",
+ fill: "*"
+ });
+
+ layout.setSize({
+ x: 500,
+ y: 400
+ });
+
+ } catch (ex) {
+ console.log(ex);
+ }
+
+ DynarchDomUtils.trash($("x-loading"));
+
+ if (!is_gecko && !is_khtml)(function () {
+
+ var dlg = new DlDialog({
+ title: "Information",
+ modal: true,
+ quitBtn: "destroy"
+ });
+
+ var vbox = new DlVbox({
+ parent: dlg,
+ borderSpacing: 5
+ });
+ var tmp = new DlWidget({
+ parent: vbox
+ });
+ tmp.getElement().appendChild($("browser-warning"));
+ var ok = new DlButton({
+ parent: vbox,
+ focusable: true,
+ label: "OK, let's see it"
+ });
+ ok.addEventListener("onClick", dlg.destroy.$(dlg));
+ dlg._focusedWidget = ok;
+
+ dlg.show(true);
+
+ })();
+ },
+
+ });
+
+})(jQuery);
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/savedata.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/savedata.js
new file mode 100644
index 0000000..23ab1ef
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/savedata.js
@@ -0,0 +1,13 @@
+ $.noConflict();
+ jQuery(document).ready(function($) {
+ // Code that uses jQuery's $ can follow here.
+ $("#editdata").click(function(){
+ $("html").css({"margin":"0","padding": "0","overflow":"hidden","height": "100%"});
+ $("#chart").hide();
+ //$("#sidebar").hide();
+ $("#gnoweditor").gnowmacs();
+
+
+ });
+
+ });
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-buffer.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-buffer.js
new file mode 100644
index 0000000..ba6303e
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-buffer.js
@@ -0,0 +1,1079 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-interactive.js
+
+DEFINE_CLASS("Ymacs_Buffer", DlEventProxy, function(D, P){
+
+ D.DEFAULT_EVENTS = [
+ "onLineChange",
+ "onInsertLine",
+ "onDeleteLine",
+ "onPointChange",
+ "onResetCode",
+ "onMessage",
+ "onOverwriteMode",
+ "onOverlayChange",
+ "onOverlayDelete",
+ "beforeInteractiveCommand",
+ "afterInteractiveCommand",
+ "beforeRedraw",
+ "afterRedraw",
+ "finishedEvent",
+ "onProgressChange",
+ "onTextInsert",
+ "onTextDelete"
+ ];
+
+ D.DEFAULT_ARGS = {
+ name : [ "name" , "*scratch*" ],
+ _code : [ "code" , null ],
+ ymacs : [ "ymacs" , null ],
+ tokenizer : [ "tokenizer" , null ],
+ isMinibuffer : [ "isMinibuffer" , false ]
+ };
+
+ var GLOBAL_VARS = {
+ case_fold_search : true,
+ line_movement_requested_col : 0,
+ fill_column : 78,
+ tab_width : 8,
+ indent_level : 8,
+
+ // syntax variables
+ syntax_word : { test: TEST_UNICODE_WORD_CHAR },
+ syntax_word_dabbrev : { test: TEST_DABBREV_WORD_CHAR },
+ syntax_paragraph_sep : /\n\s*\n/g
+ };
+
+ function setq(key, val) {
+ if (typeof key == "string") {
+ if (val === undefined)
+ delete this[key];
+ else
+ this[key] = val;
+ if (val instanceof Function)
+ val.ymacsCommand = key;
+ return val;
+ } else {
+ var changed = {};
+ for (var i in key) {
+ changed[i] = this[i];
+ setq.call(this, i, key[i]);
+ }
+ return changed;
+ }
+ };
+
+ var MAX_UNDO_RECORDS = 50000; // XXX: should we not limit?
+
+ function MRK(x) {
+ return x instanceof Ymacs_Marker ? x.getPosition() : x;
+ };
+
+ function TEST_UNICODE_WORD_CHAR(c) {
+ if (c) {
+ var code = c.charCodeAt(0);
+ return (code >= 48 && code <= 57) || c.toUpperCase() != c.toLowerCase();
+ }
+ };
+
+ function TEST_DABBREV_WORD_CHAR(c) {
+ if (c) {
+ var code = c.charCodeAt(0);
+ return (code >= 48 && code <= 57) || c == "_" || c.toUpperCase() != c.toLowerCase();
+ }
+ };
+
+ P.lastIndexOfRegexp = function(str, re, caret, bound) {
+ str = str.substring(0, caret);
+ re = Ymacs_Regexp.search_backward(re);
+ re.lastIndex = bound || 0;
+ var m = re.exec(str);
+ if (m) {
+ var a = Array.$(m, 2);
+ a.index = m.index + m[1].length;
+ a.after = m.index + m[0].length;
+ a[0] = str.substring(a.index, a.after);
+ this.matchData = a;
+ return a;
+ }
+ };
+
+ D.COMMANDS = P.COMMANDS = {};
+
+ D.newCommands = P.newCommands = function() {
+ return setq.apply(this.COMMANDS, arguments);
+ };
+
+ D.newMode = P.newMode = function(name, activate) {
+ var modevar = "*" + name + "*", hookvar = modevar + "hooks";
+ D.setGlobal(hookvar, []);
+ this.COMMANDS[name] = Ymacs_Interactive("P", function(force){
+ var status = this.getq(modevar);
+ if (status) {
+ // currently active
+ if (force !== true) {
+ // deactivate
+ this.getq(hookvar).foreach(function(hook){
+ hook.call(this, false);
+ }, this);
+ if (status instanceof Function) {
+ // clean-up
+ status.call(this);
+ }
+ this.setq(modevar, null);
+ this.modes.remove(name);
+ }
+ }
+ else {
+ // inactive
+ if (force !== false) {
+ var off = activate.apply(this, arguments);
+ if (!(off instanceof Function))
+ off = true;
+ this.setq(modevar, off);
+ this.modes.push(name);
+ this.getq(hookvar).foreach(function(hook){
+ hook.call(this, true);
+ }, this);
+ }
+ }
+ return status;
+ });
+ };
+
+ D.addModeHook = P.addModeHook = function(name, func) {
+ if (typeof func == "string")
+ func = this.COMMANDS[func];
+ var hookvar = "*" + name + "*hooks";
+ this.getq(hookvar).pushUnique(func);
+ };
+
+ D.removeModeHook = P.removeModeHook = function(name, func) {
+ if (typeof func == "string")
+ func = this.COMMANDS[func];
+ var hookvar = "*" + name + "*hooks";
+ this.getq(hookvar).remove(func);
+ };
+
+ D.FIXARGS = function(args) {
+ if (args.code == null)
+ args.code = "";
+ };
+
+ D.CONSTRUCT = function() {
+ this.__savingExcursion = 0;
+ this.__preventUpdates = 0;
+ this.__preventUndo = 0;
+ this.__undoInProgress = 0;
+ this.__dirtyLines = [];
+ this.__undoQueue = [];
+ this.__redoQueue = [];
+ this.__overlays = {};
+
+ this.markers = [];
+ this.caretMarker = this.createMarker(0, false, "point");
+ this.markMarker = this.createMarker(0, true, "mark");
+ this.matchData = [];
+ this.previousCommand = null;
+ this.currentCommand = null;
+ this.currentKeys = [];
+ this.progress = {};
+
+ this.variables = {};
+ this.globalVariables = GLOBAL_VARS;
+ this.modes = [];
+
+ this.caretMarker.onChange.push(function(pos) {
+ this._rowcol = this.caretMarker.getRowCol();
+ // XXX: this shouldn't be needed
+ if (this.__preventUpdates == 0) {
+ this.callHooks("onPointChange", this._rowcol, this.point());
+ }
+ });
+
+ this._tokenizerEvents = {
+ "onFoundToken": this._on_tokenizerFoundToken.$(this)
+ };
+
+ this._textProperties = new Ymacs_Text_Properties({ buffer: this });
+ this._textProperties.addEventListener("onChange", this._on_textPropertiesChange.$(this));
+
+ this.keymap = [];
+ this.pushKeymap(this.makeDefaultKeymap());
+ this.setCode(this._code);
+ this._lastCommandWasKill = 0;
+ delete this["_code"];
+ };
+
+ /* -----[ dynamic variables ]----- */
+
+ // Who said dynamic scope is bad? Ever since I'm using Lisp I
+ // started considering them one of the most valuable features.
+ // Everybody is using dynamic scope.
+ //
+ // Since we don't have real dynamic scope in JS, we store the
+ // values in a hash and using the withVariables method we can
+ // assign temporary values to them and execute a function.
+
+ P.withVariables = function(vars, cont) {
+ var saved = {}, i, ret;
+ for (i in vars) {
+ saved[i] = this.variables[i];
+ this.variables[i] = vars[i];
+ }
+ try {
+ if (cont instanceof Function)
+ return cont.apply(this, Array.$(arguments, 2));
+ else
+ return this.cmdApply(cont, Array.$(arguments, 2));
+ } finally {
+ for (i in saved) {
+ if (saved[i] === undefined)
+ delete this.variables[i];
+ else
+ this.variables[i] = saved[i];
+ }
+ }
+ };
+
+ P.withCommands = function(cmds, cont) {
+ var saved = this.COMMANDS;
+ this.COMMANDS = Object.makeCopy(saved);
+ Object.merge(this.COMMANDS, cmds);
+ try {
+ if (cont instanceof Function)
+ return cont.apply(this, Array.$(arguments, 2));
+ else
+ return this.cmdApply(cont, Array.$(arguments, 2));
+ } finally {
+ this.COMMANDS = saved;
+ }
+ };
+
+ P.getVariable = function(key) {
+ return (key in this.variables)
+ ? this.variables[key]
+ : GLOBAL_VARS[key];
+ };
+
+ P.setVariable = function() {
+ return setq.apply(this.variables, arguments);
+ };
+
+ D.setq = D.setVariable = D.setGlobal = P.setGlobal = function() {
+ return setq.apply(GLOBAL_VARS, arguments);
+ };
+
+ P.setq = P.setVariable;
+ P.getq = P.getVariable;
+ D.getq = D.getVariable = function(key) {
+ return GLOBAL_VARS[key];
+ };
+
+ /* -----[ public API ]----- */
+
+ P.pushKeymap = function(keymap) {
+ if (keymap instanceof Array) {
+ keymap.foreach(this.pushKeymap, this);
+ } else {
+ this.popKeymap(keymap);
+ this.keymap.push(keymap);
+ keymap.attached(this);
+ }
+ };
+
+ P.popKeymap = function(keymap) {
+ this.keymap.remove(keymap);
+ keymap.detached(this);
+ };
+
+ P.makeDefaultKeymap = function() {
+ return Ymacs_Keymap_Emacs();
+ };
+
+ P.signalError = function(text, html, timeout) {
+ this.callHooks("onMessage", "error", text, html, timeout);
+ };
+
+ P.signalInfo = function(text, html, timeout) {
+ this.callHooks("onMessage", "info", text, html, timeout);
+ };
+
+ P.createMarker = function(pos, before, name) {
+ if (pos == null)
+ pos = this.point();
+ return new Ymacs_Marker({ editor: this, pos: pos, name: name, before: before });
+ };
+
+ P.point = function() {
+ return this.caretMarker.getPosition();
+ };
+
+ P.setCode = function(code) {
+ // this.__code = code = code.replace(/\t/g, " ".x(this.getq("tab_width")));
+ this.__code = code;
+ this.__size = code.length;
+ this.__undoQueue = [];
+ this.__redoQueue = [];
+ this.__overlays = {};
+ this.markers.map("setPosition", 0, true, true);
+ this.code = code.split(/\n/);
+ this._textProperties.reset();
+ if (this.tokenizer) {
+ this.tokenizer.reset();
+ }
+ this.callHooks("onResetCode", this.code);
+ this.caretMarker.setPosition(0, false, true);
+ this.markMarker.setPosition(0, true);
+ };
+
+ P.setTokenizer = function(tok) {
+ if (this.tokenizer != null) {
+ this.tokenizer.removeEventListener(this._tokenizerEvents);
+ }
+ this.tokenizer = tok;
+ if (tok) {
+ tok.addEventListener(this._tokenizerEvents);
+ } else {
+ this._textProperties.reset();
+ this.callHooks("onResetCode", this.code);
+ }
+ };
+
+ P.getCode = function() {
+ return this.__code || (this.__code = this.code.join("\n"));
+ };
+
+ P.getCodeSize = function() {
+ if (this.__size)
+ return this.__size;
+ var i = this.code.length, size = i > 0 ? -1 : 0;
+ while (--i >= 0)
+ size += this.code[i].length + 1;
+ return this.__size = size;
+ };
+
+ P.getLine = function(row) {
+ if (row == null)
+ row = this._rowcol.row;
+ return this.code[row];
+ };
+
+ P.charAtRowCol = function(row, col) {
+ var n = this.code.length;
+ if (row >= n--)
+ return null;
+ var line = this.code[row];
+ if (col == line.length)
+ return row == n && line.charAt(col) || "\n";
+ return line.charAt(col);
+ };
+
+ P.charAt = function(point) {
+ if (point == null)
+ point = this.point();
+ else {
+ point = MRK(point);
+ if (point < 0)
+ point += this.point();
+ }
+ var rc = this._positionToRowCol(point);
+ return this.charAtRowCol(rc.row, rc.col);
+ };
+
+ P.callInteractively = function(func, args, finalArgs) {
+ if (!args)
+ args = []; // make IE happy
+ var cmd;
+ if (!(func instanceof Function)) {
+ cmd = func;
+ func = this.COMMANDS[func];
+ } else {
+ cmd = func.ymacsCommand || null;
+ }
+ if (func.ymacsCallInteractively && !finalArgs) {
+ // after prompting for eventual
+ // arguments, ymacsCallInteractively
+ // will actually call back again
+ // buffer's callInteractively, so we
+ // should STOP here.
+ return func.ymacsCallInteractively.apply(this, args);
+ }
+ this.currentCommand = cmd;
+ // the amount of brain twisting to get
+ // this right is incredible. :-( I give up.
+ if (cmd != "undo") {
+ this.__undoQueue = this.__undoQueue.concat(this.__redoQueue);
+ this.__redoQueue = [];
+ }
+ if (this.previousCommand != cmd) {
+ this.sameCommandCount(0);
+ if (cmd != "undo") {
+ this._placeUndoBoundary();
+ }
+ } else if (cmd != "self_insert_command" || this.sameCommandCount() % 20 == 0) {
+ if (cmd != "undo") {
+ this._placeUndoBoundary();
+ }
+ }
+ this.preventUpdates();
+ try {
+ this.callHooks("beforeInteractiveCommand", cmd, func);
+ if (!func.ymacsMarkExtend)
+ this.clearTransientMark();
+ return func.apply(this, args);
+ } catch(ex) {
+ if (ex instanceof Ymacs_Exception) {
+ this.signalError(ex.message);
+ } else {
+ throw ex;
+ }
+ } finally {
+ this.resumeUpdates();
+ this.callHooks("afterInteractiveCommand", cmd, func);
+ this.previousCommand = cmd;
+ this.sameCommandCount(+1);
+ }
+ };
+
+ P.resetOverwriteMode = function(om) {
+ if (arguments.length == 0)
+ om = this.overwriteMode;
+ this.callHooks("onOverwriteMode", this.overwriteMode = !om);
+ this.signalInfo(om ? "Insert mode" : "Overwrite mode");
+ };
+
+ P.getMinibuffer = function() {
+ return this.whenYmacs(function(ymacs) { return ymacs.minibuffer; });
+ };
+
+ P.getMinibufferFrame = function() {
+ return this.whenYmacs(function(ymacs) { return ymacs.minibuffer_frame; });
+ };
+
+ P.setMinibuffer = function(text) {
+ this.whenMinibuffer(function(mb){
+ mb.setCode(text);
+ mb.cmd("end_of_buffer");
+ });
+ };
+
+ P.cmd = function(cmd) {
+ return this.COMMANDS[cmd].apply(this, Array.$(arguments, 1));
+ };
+
+ P.cmdApply = function(cmd, args) {
+ return this.COMMANDS[cmd].apply(this, args);
+ };
+
+ P.createDialog = function(args) {
+ if (!args.parent) {
+ args.parent = this.getActiveFrame() && this.getActiveFrame().getParentDialog();
+ if (!("noShadows" in args)) {
+ args.noShadows = true;
+ }
+ }
+ var dlg = new DlDialog(args);
+ this.whenActiveFrame(function(frame){
+ dlg.addEventListener("onDestroy", frame.focus.clearingTimeout(0, frame));
+ });
+ return dlg;
+ };
+
+ P.getActiveFrame = function() {
+ return this.whenYmacs("getActiveFrame");
+ };
+
+ // This function receives a string and a continuation. If
+ // there is an object property or variable named $what, then
+ // $cont is called in the context of this object and given the
+ // value of $what as first argument. The returned value is
+ // passed back to caller.
+ //
+ // The continuation can also be a string, in which case it's
+ // assumed to be a method in the value of $what, thus called
+ // on it.
+ //
+ // This is a bit messy, but should work well as long as we
+ // don't use the same name for both an object property and a
+ // variable in this.variables. Otherwise, the property takes
+ // precedence.
+ P.when = function(what, cont) {
+ what = this[what] || this.getq(what);
+ if (what != null) {
+ if (cont instanceof Function)
+ return cont.call(this, what);
+ else {
+ return what[cont].apply(what, Array.$(arguments, 2));
+ }
+ }
+ };
+
+ // XXX: this is way too ugly.
+ P.whenActiveFrame = function() {
+ var fr = this.getActiveFrame(); // miserable hack
+ if (fr.buffer === this) {
+ this.activeFrame = fr;
+ var a = Array.$(arguments);
+ a.unshift("activeFrame");
+ return this.when.apply(this, a);
+ } else {
+ this.activeFrame = null;
+ }
+ };
+
+ P.forAllFrames = function(cont) {
+ this.ymacs.getBufferFrames(this).foreach(cont);
+ };
+
+ P.whenYmacs = function() {
+ var a = Array.$(arguments);
+ a.unshift("ymacs");
+ return this.when.apply(this, a);
+ };
+
+ P.whenMinibuffer = function(cont) {
+ // In fact, we should move when() into some base
+ // object... but which one? JS doesn't have multiple
+ // inheritance, though we could easily "invent" it.
+ return this.whenYmacs(function(ymacs){
+ if (ymacs.minibuffer)
+ return cont.call(this, ymacs.minibuffer);
+ });
+ };
+
+ P.preventUpdates = function() {
+ ++this.__preventUpdates;
+ };
+
+ P.resumeUpdates = function() {
+ if ((this.__preventUpdates = Math.max(this.__preventUpdates - 1, 0)) == 0) {
+ this.redrawDirtyLines();
+ }
+ };
+
+ P.getRegion = function(begin, end) {
+ if (begin == null) begin = this.caretMarker;
+ if (end == null) end = this.markMarker;
+ begin = MRK(begin);
+ end = MRK(end);
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ return { begin: begin, end: end };
+ };
+
+ P.redrawDirtyLines = function() {
+ this.callHooks("beforeRedraw");
+ this.__dirtyLines.foreach(function(draw, row){
+ if (draw) {
+ this.callHooks("onLineChange", row);
+ }
+ }, this);
+ this.__dirtyLines = [];
+ this.callHooks("afterRedraw");
+ };
+
+ P.getOverlays = function() {
+ return this.__overlays;
+ };
+
+ P.getOverlay = function(name) {
+ return this.__overlays[name];
+ };
+
+ P.setOverlay = function(name, props) {
+ var ov = this.__overlays[name], isNew = !ov, tmp;
+ if (isNew)
+ ov = this.__overlays[name] = props;
+ else
+ Object.merge(ov, props);
+ // normalize line/col
+ if (ov.line2 < ov.line1) {
+ tmp = ov.line2; ov.line2 = ov.line1; ov.line1 = tmp;
+ tmp = ov.col2; ov.col2 = ov.col1; ov.col1 = tmp;
+ }
+ else if (ov.line2 == ov.line1 && ov.col2 < ov.col1) {
+ tmp = ov.col2; ov.col2 = ov.col1; ov.col1 = tmp;
+ }
+ this.callHooks("onOverlayChange", name, ov, isNew);
+ };
+
+ P.deleteOverlay = function(name) {
+ delete this.__overlays[name];
+ this.callHooks("onOverlayDelete", name);
+ };
+
+ P.ensureTransientMark = function() {
+ var rc = this._rowcol, tm;
+ if (!this.transientMarker) {
+ this.transientMarker = this.createMarker();
+ this.markMarker.setPosition(this.point());
+ tm = rc;
+ }
+ if (!tm)
+ tm = this.transientMarker.getRowCol();
+ this.setOverlay("selection", {
+ line1 : tm.row,
+ col1 : tm.col,
+ line2 : rc.row,
+ col2 : rc.col
+ });
+ };
+
+ P.clearTransientMark = function() {
+ if (this.transientMarker) {
+ this.transientMarker.destroy();
+ this.transientMarker = null;
+ this.deleteOverlay("selection");
+ }
+ };
+
+ P.deleteTransientRegion = function() {
+ if (this.transientMarker) {
+ this._deleteText(this.caretMarker, this.transientMarker);
+ this.clearTransientMark();
+ this._placeUndoBoundary();
+ return true;
+ }
+ };
+
+ var $sameCommandCount = 0;
+ P.sameCommandCount = function(diff) {
+ if (diff == null)
+ return $sameCommandCount;
+ return $sameCommandCount += diff;
+ };
+
+ var $lastKeyEvent;
+ P.interactiveEvent = function(ev) {
+ if (arguments.length == 0)
+ return $lastKeyEvent;
+ return $lastKeyEvent = ev;
+ };
+
+ P.getPrefixArg = function(noDiscard) {
+ var ret = this.getq("universal_prefix");
+ if (!noDiscard) {
+ this.setq("universal_prefix", undefined);
+ if (!this.isMinibuffer)
+ this.setMinibuffer("");
+ }
+ return ret;
+ };
+
+ P.setPrefixArg = function(val) {
+ return this.setq("universal_prefix", val);
+ };
+
+ P.updateProgress = function(name, val) {
+ if (val == null)
+ delete this.progress[name];
+ else
+ this.progress[name] = val;
+ this.callHooks("onProgressChange");
+ };
+
+ P.renderModelineContent = function(rc) {
+ var ml = String.buffer("-- <b>", this.name.htmlEscape(), "</b> (", rc.row + 1, ",", rc.col, ") ");
+ var pr = [];
+ for (var i in this.progress) {
+ pr.push(i + ": " + this.progress[i]);
+ }
+ if (pr.length > 0) {
+ ml("[", pr.join(", "), "]");
+ }
+ return ml.get();
+ };
+
+ /* -----[ not-so-public API ]----- */
+
+ // BEGIN: undo queue
+
+ P._recordChange = function(type, pos, len, text) {
+ if (len > 0) {
+ var q = this.__undoQueue;
+ q.push({
+ type : type,
+ pos : pos,
+ len : len,
+ text : text
+ });
+ if (q.length > MAX_UNDO_RECORDS)
+ q.shift();
+ }
+ };
+
+ P._placeUndoBoundary = function(q) {
+ q = q || this.__undoQueue;
+ var m = this.markers.map(function(m){
+ return [ m, m.getPosition() ];
+ });
+ var last = q.peek();
+ if (!last || last.type != 3) {
+ q.push({ type: 3, markers: m });
+ } else {
+ last.markers = m;
+ }
+ };
+
+ P._playbackUndo = function(q) {
+ ++this.__undoInProgress;
+ var didit = false, action;
+ while (q.length > 0 && q.peek().type == 3) {
+ action = q.pop();
+ }
+ while (q.length > 0) {
+ action = q.pop();
+ if (action.type == 3) { // boundary
+ // restore markers
+ action.markers.foreach(function(m){
+ m[0].setPosition(m[1]);
+ });
+ break;
+ }
+ didit = true;
+ var pos = action.pos;
+ switch (action.type) {
+ case 1: // insert
+ this._deleteText(pos, pos + action.len);
+ break;
+ case 2: // delete
+ this._insertText(action.text, pos);
+ break;
+ }
+ }
+ --this.__undoInProgress;
+ return didit;
+ };
+
+ // END: undo
+
+ P._replaceLine = function(row, text) {
+ this.code[row] = text;
+ this._textProperties.replaceLine(row, text);
+ if (this.__preventUpdates == 0) {
+ this.callHooks("onLineChange", row);
+ } else {
+ this.__dirtyLines[row] = true;
+ }
+ };
+
+ P._deleteLine = function(row) {
+ this.code.splice(row, 1);
+ this._textProperties.deleteLine(row);
+ if (this.tokenizer)
+ this.tokenizer.quickDeleteLine(row);
+ this.__dirtyLines.splice(row, 1);
+ this.callHooks("onDeleteLine", row);
+ };
+
+ P._insertLine = function(row, text) {
+ this.code.splice(row, 0, text);
+ this._textProperties.insertLine(row);
+ if (this.tokenizer)
+ this.tokenizer.quickInsertLine(row);
+ var drawIt = this.__preventUpdates == 0;
+ this.callHooks("onInsertLine", row, drawIt);
+ if (!drawIt) {
+ if (this.__dirtyLines.length <= row)
+ this.__dirtyLines[row] = true;
+ else
+ this.__dirtyLines.splice(row, 0, true);
+ }
+ };
+
+ P._insertText = function(text, pos) {
+ if (text.length == 0)
+ return;
+ if (pos == null)
+ pos = this.caretMarker.getPosition();
+ pos = MRK(pos);
+ // *** UNDO RECORDING
+ if (this.__preventUndo == 0)
+ this._recordChange(1, pos, text.length);
+ var rc = pos == this.point() ? this._rowcol : this._positionToRowCol(pos),
+ i = rc.row;
+ if (/^\n+$/.test(text) && rc.col == 0) {
+ // handle this case separately, since it's so
+ // frequently used (ENTER pressed) and the
+ // default algorithm messes up colorization
+ // for a fraction of a second, flashing badly.
+ text.length.times(function(j){
+ this._insertLine(i + j, "");
+ }, this);
+ } else {
+ var lines = text.split("\n"), ln = this.code[i], rest = ln.substr(rc.col);
+ if (lines.length > 1) {
+ this._replaceLine(i, ln.substr(0, rc.col) + lines.shift());
+ lines.foreach(function(text){
+ this._insertLine(++i, text);
+ }, this);
+ this._replaceLine(i, this.code[i] + rest);
+ } else {
+ this._replaceLine(i, ln.substr(0, rc.col) + lines[0] + ln.substr(rc.col));
+ }
+ }
+ this._updateMarkers(pos, text.length);
+ this.callHooks("onTextInsert", pos, text);
+ };
+
+ P._deleteText = function(begin, end) {
+ begin = this._boundPosition(MRK(begin));
+ end = this._boundPosition(MRK(end));
+ if (begin == end)
+ return;
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ // *** UNDO RECORDING
+ if (this.__preventUndo == 0)
+ this._recordChange(2, begin, end - begin, this._bufferSubstring(begin, end));
+ var brc = this._positionToRowCol(begin),
+ erc = this._positionToRowCol(end);
+ var line = this.code[brc.row];
+ if (brc.row == erc.row) {
+ // same line, that's easy
+ line = line.substr(0, brc.col) + line.substr(erc.col);
+ this._replaceLine(brc.row, line);
+ } else {
+ // fix first line
+ line = line.substr(0, brc.col) + this.code[erc.row].substr(erc.col);
+ this._replaceLine(brc.row, line);
+ // delete lines in between
+ line = brc.row + 1;
+ (erc.row - brc.row).times(this._deleteLine.$(this, line));
+ }
+ this._updateMarkers(begin, begin - end, begin);
+ this.callHooks("onTextDelete", begin, end);
+ };
+
+ P._replaceText = function(begin, end, text) {
+ this._deleteText(begin, end);
+ this._insertText(text, begin);
+ };
+
+ P._swapAreas = function(a) {
+ a = a.map(MRK).mergeSort();
+ var b1 = a[0],
+ e1 = a[1],
+ b2 = a[2],
+ e2 = a[3],
+ t1 = this._bufferSubstring(b1, e1),
+ t2 = this._bufferSubstring(b2, e2);
+ this._replaceText(b2, e2, t1);
+ this._replaceText(b1, e1, t2);
+ return e2;
+ };
+
+ P._bufferSubstring = function(begin, end) {
+ if (begin == null) begin = this.point();
+ else begin = MRK(begin);
+
+ if (end == null) end = this.getCodeSize();
+ else end = MRK(end);
+
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ // var brc = this._positionToRowCol(begin),
+ // erc = this._positionToRowCol(end);
+ // if (brc.row == erc.row) {
+ // return this.code[brc.row].substring(brc.col, erc.col);
+ // } else return [ this.code[brc.row].substr(brc.col) ].
+ // concat(this.code.slice(brc.row + 1, erc.row)).
+ // concat(this.code[erc.row].substr(0, erc.col)).
+ // join("\n");
+ return this.getCode().substring(begin, end);
+ };
+
+ P._killingAction = function(p1, p2, prepend, noDelete) {
+ p1 = MRK(p1);
+ p2 = MRK(p2);
+ var text = this._bufferSubstring(p1, p2);
+ this._saveKilledText(text, prepend);
+ if (!noDelete)
+ this._deleteText(p1, p2);
+ };
+
+ P._saveKilledText = function(text, prepend) {
+ if (!this._lastCommandWasKill)
+ this.ymacs.killRingToMaster();
+ this.ymacs.pushToKillRing(text, prepend);
+ this._lastCommandWasKill++;
+ };
+
+ P._positionToRowCol = function(pos) {
+ var line = 0, a = this.code, n = a.length;
+ while (pos > 0 && line < n) {
+ var len = a[line].length;
+ if (len >= pos)
+ break;
+ pos -= len + 1; // one for the newline
+ line++;
+ }
+ return { row: line, col: pos };
+ };
+
+ P._rowColToPosition = function(row, col) {
+ var pos = 0, a = this.code, i = Math.min(row, a.length - 1), n = i;
+ if (i < 0)
+ return 0;
+ while (--i >= 0)
+ pos += a[i].length + 1; // one for the newline
+ return pos + Math.min(col, a[n].length);
+ };
+
+ P._boundPosition = function(pos) {
+ if (pos < 0)
+ return 0;
+ return Math.min(pos, this.getCodeSize());
+ };
+
+ P._repositionCaret = function(pos) {
+ var p = this.caretMarker.getPosition();
+ if (pos == null)
+ pos = p;
+ pos = MRK(pos);
+ pos = this._boundPosition(pos);
+ this.caretMarker.setPosition(pos);
+ return pos != p;
+ };
+
+ P._updateMarkers = function(offset, delta, min) {
+ this.__size = null;
+ this.__code = null;
+ // if (this.__undoInProgress == 0) {
+ this.markers.map("editorChange", offset, delta, min || 0);
+ // }
+ if (this.tokenizer) {
+ this.tokenizer.quickUpdate(Math.min(offset, offset + delta));
+ }
+ };
+
+ P._saveExcursion = function(cont, markerBefore) {
+ var tmp = this.createMarker(null, markerBefore);
+ ++this.__savingExcursion;
+ try {
+ return cont.call(this);
+ } finally {
+ --this.__savingExcursion;
+ this.caretMarker.swap(tmp, false, true);
+ tmp.destroy();
+ }
+ };
+
+ P._disableUndo = function(cont) {
+ ++this.__preventUndo;
+ try {
+ return cont.call(this);
+ } finally {
+ --this.__preventUndo;
+ }
+ };
+
+ P._handleKeyEvent = function(ev) {
+ var handled = false;
+ this.interactiveEvent(ev);
+ var lcwk = this._lastCommandWasKill;
+
+ if (this.__nextIsMeta)
+ ev.altKey = true;
+ this.__nextIsMeta = false;
+
+ var key = Ymacs_Keymap.unparseKey(ev);
+ var cc = this.currentKeys;
+ var foundPrefix = false;
+ cc.push(key);
+
+ this.keymap.r_foreach(function(km){
+ var h = km.getHandler(cc);
+ if (h instanceof Array) {
+ this.callInteractively(h[0], h[1]);
+ handled = true;
+ }
+ else if (h) {
+ handled = foundPrefix = true;
+ }
+ else if (key === "ESCAPE") {
+ this.__nextIsMeta = true;
+ handled = true;
+ }
+ else if (km.defaultHandler && cc.length == 1) {
+ handled = this.callInteractively(km.defaultHandler[0], km.defaultHandler[1]);
+ }
+ if (handled)
+ $BREAK();
+ }, this);
+
+ if (!foundPrefix) {
+ if (!handled) {
+ if (cc.length > 1) {
+ this.signalError(cc.join(" ").bold() + " is undefined", true);
+ handled = true;
+ }
+ }
+ cc.splice(0, cc.length);
+ }
+
+ if (this._lastCommandWasKill == lcwk && typeof handled != "object") {
+ // selecting a prefix keymap shouldn't clear the killRing
+ this._lastCommandWasKill = 0;
+ }
+
+ this.callHooks("finishedEvent", handled);
+ this.interactiveEvent(null);
+ return handled;
+ };
+
+ P._on_tokenizerFoundToken = function(row, c1, c2, what) {
+ if (what) {
+ this._textProperties.addLineProps(row, c1, c2, "css", what);
+ } else {
+ this._textProperties.removeLineProps(row, c1, c2, "css");
+ }
+ };
+
+ P._on_textPropertiesChange = function(row) {
+ if (this.__preventUpdates == 0) {
+ this.callHooks("onLineChange", row);
+ } else {
+ this.__dirtyLines[row] = true;
+ }
+ };
+
+ P.formatLineHTML = function(row, caret) {
+ var rc = this._rowcol;
+ if (caret instanceof Ymacs_Marker)
+ rc = caret.getRowCol();
+ caret = row == rc.row ? rc.col : null;
+ return this._textProperties.getLineHTML(row, this.code[row], caret);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-commands-utils.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-commands-utils.js
new file mode 100644
index 0000000..04d3d36
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-commands-utils.js
@@ -0,0 +1,157 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+Ymacs_Buffer.newCommands({
+
+ get_region: function() {
+ return this.getRegion();
+ },
+
+ cperl_lineup: Ymacs_Interactive("r", function(begin, end){
+ this.cmd("save_excursion", function(){
+ var rcend = this._positionToRowCol(end), max = 0, lines = [];
+ this.cmd("goto_char", begin);
+ this.cmd("forward_whitespace", true);
+ var ch = this.charAt();
+ if (ch.toLowerCase() != ch.toUpperCase()) {
+ this.signalError("Cannot lineup here");
+ return;
+ }
+ while (this._rowcol.row <= rcend.row) {
+ var pos = this.getLine().indexOf(ch);
+ if (pos >= 0) {
+ if (pos > max)
+ max = pos;
+ lines.push([ this._rowcol.row, pos ]);
+ }
+ if (!this.cmd("forward_line"))
+ break;
+ }
+ ++max;
+ lines.foreach(function(l){
+ this.cmd("goto_char", this._rowColToPosition(l[0], l[1]));
+ this.cmd("insert", " ".x(max - l[1]));
+ }, this);
+ });
+ }),
+
+ htmlize_region: Ymacs_Interactive("r\nP", function(begin, end, lineNum) {
+ this.tokenizer.finishParsing();
+ var row = this._positionToRowCol(begin).row,
+ html = String.buffer(),
+ line = row, pad;
+ if (lineNum && !lineNum.empty)
+ line = parseInt(lineNum, 10);
+ end = this._positionToRowCol(end).row;
+ pad = String(end).length;
+ while (row <= end) {
+ html("<div class='line'>");
+ if (lineNum)
+ html("<span class='line-number'>", line.zeroPad(pad, " "), "</span>");
+ ++line;
+ html(this._textProperties.getLineHTML(row, this.code[row], null), "</div>\n");
+ ++row;
+ }
+ html = html.get();
+ var tmp = this.ymacs.switchToBuffer("*Htmlize*");
+ tmp.setCode(html);
+ tmp.cmd("xml_mode", true);
+ }),
+
+ execute_extended_command: Ymacs_Interactive("^CM-x ", function(cmd) {
+ this.callInteractively(cmd);
+ }),
+
+ set_variable: Ymacs_Interactive("vSet variable: \nsTo value: ", function(variable, value) {
+ var tmp = parseFloat(value);
+ if (!isNaN(tmp))
+ value = tmp;
+ this.setq(variable, value);
+ }),
+
+ eval_string: Ymacs_Interactive("^MEval string: ", function(code){
+ try {
+ var variables = [
+ this, // buffer
+ this.ymacs // ymacs
+ ];
+ code = new Function("buffer", "ymacs", code);
+ code.apply(this, variables);
+ this.clearTransientMark();
+ } catch(ex) {
+ this.signalError(ex.type + ": " + ex.message);
+ if (window.console)
+ console.log(ex);
+ }
+ }),
+
+ eval_region: Ymacs_Interactive("^r", function(begin, end) {
+ this.cmd("eval_string", this.cmd("buffer_substring", begin, end));
+ }),
+
+ eval_buffer: Ymacs_Interactive(function(){
+ this.cmd("eval_string", this.getCode());
+ }),
+
+ toggle_line_numbers: Ymacs_Interactive("^", function(){
+ this.whenActiveFrame("toggleLineNumbers");
+ }),
+
+ save_file: Ymacs_Interactive("FWrite file: ", function(name){
+ var files = this.ymacs.ls_getFileDirectory(name, "file");
+ files.dir[files.other[0]] = this.getCode();
+ this.ymacs.ls_set(files.store);
+ this.signalInfo("Saved in local storage");
+ }),
+
+ load_file: Ymacs_Interactive("fFind file: ", function(name){
+ var code = this.ymacs.ls_getFileContents(name);
+ var buffer = this.ymacs.createBuffer({ name: name });
+ buffer.setCode(code);
+ this.cmd("switch_to_buffer", name);
+ }),
+
+ delete_file: Ymacs_Interactive("fDelete file: ", function(name){
+ this.ymacs.ls_getFileContents(name);
+ var files = this.ymacs.ls_get();
+ delete files[name];
+ this.ymacs.ls_set(files);
+ }),
+
+ eval_file: Ymacs_Interactive("fEval file: ", function(name){
+ this.cmd("eval_string", this.ymacs.ls_getFileContents(name));
+ })
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-commands.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-commands.js
new file mode 100644
index 0000000..a44e1ff
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-commands.js
@@ -0,0 +1,1517 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+
+Ymacs_Buffer.newCommands({
+
+ forward_char: Ymacs_Interactive("p", function(x) {
+ if (x == null) x = 1;
+ return this.cmd("goto_char", this.point() + x);
+ }),
+
+ backward_char: Ymacs_Interactive("p", function(x) {
+ if (x == null) x = 1;
+ return this.cmd("forward_char", -x);
+ }),
+
+ forward_line: Ymacs_Interactive("p", function(x) {
+ if (x == null) x = 1;
+ var rc = this._rowcol;
+ if (!/^(forward|backward)_line$/.test(this.previousCommand)) {
+ this.setq("line_movement_requested_col", rc.col);
+ }
+ var ret = this.cmd("goto_char",
+ this._rowColToPosition(rc.row + x,
+ Math.max(rc.col,
+ this.getq("line_movement_requested_col")))); // starting to look like Lisp, eh?
+ if (!ret)
+ this.setq("line_movement_requested_col", rc.col);
+ return ret;
+ }),
+
+ backward_line: Ymacs_Interactive("p", function(x) {
+ if (x == null) x = 1;
+ return this.cmd("forward_line", -x);
+ }),
+
+ forward_whitespace: Ymacs_Interactive("P", function(noLine) {
+ var re = noLine ? /[^\x20\t\xA0]/g : /[^\s]/g;
+ if (this.cmd("search_forward_regexp", re)) {
+ this.cmd("backward_char");
+ return true;
+ } else if (!noLine)
+ return this.cmd("end_of_buffer");
+ }),
+
+ backward_whitespace: Ymacs_Interactive("P", function(noLine) {
+ var re = noLine ? /[^\x20\t\xA0]/g : /[^\s]/g;
+ if (this.cmd("search_backward_regexp", re)) {
+ this.cmd("forward_char");
+ return true;
+ } else if (!noLine)
+ return this.cmd("beginning_of_buffer");
+ }),
+
+ beginning_of_line: Ymacs_Interactive(function() {
+ return this.cmd("goto_char", this._rowColToPosition(this._rowcol.row, 0));
+ }),
+
+ back_to_indentation: Ymacs_Interactive(function() {
+ var rc = this._rowcol, line = this.code[rc.row], m = /\S/.exec(line);
+ if (m)
+ return this.cmd("goto_char", this._rowColToPosition(rc.row, m.index));
+ }),
+
+ beginning_of_indentation_or_line: Ymacs_Interactive(function() {
+ return this.cmd("back_to_indentation") || this.cmd("beginning_of_line");
+ }),
+
+ end_of_line: Ymacs_Interactive(function() {
+ var rc = this._rowcol;
+ return this.cmd("goto_char", this._rowColToPosition(rc.row, this.code[rc.row].length));
+ }),
+ wrap : Ymacs_Interactive(function() {
+ var i = 0;
+ this.cmd("end_of_buffer");
+ var st1 = this.caretMarker.getPosition();
+ this.cmd("beginning_of_buffer");
+ if(st1 != 0)
+ {
+ while(i < 50 )
+ {
+ this.cmd("goto_line", i);
+ i= i+1;
+ rc = this._rowcol;
+ var line = this.code[rc.row];
+ var line_size = line.length;
+ if(line_size > 112)
+ {
+ this.cmd("move_to_column", 111);
+ this.cmd("insert", "\n");
+ this.cmd("forward_line");
+ }
+ }
+
+ }
+
+ }),
+
+
+ wrap_at_edge : Ymacs_Interactive(function() {
+ rc = this._rowcol;
+ var line = this.code[rc.row];
+ var str1 = line.length;
+ if(str1 > 112)
+ {
+ this.cmd("insert", "\n");
+ }
+ }),
+
+ wrap_status:Ymacs_Interactive(function() {
+ var one = flag;
+ //alert("inside wrap_status");
+ return one;
+ }),
+
+ word_wrap : Ymacs_Interactive(function() {
+
+ var one1 = this.cmd("wrap_status");
+ if(one1 == "Word Wrap")
+ {
+ var x = 112;
+ rc = this._rowcol;
+ var line = this.code[rc.row];
+ var str1 = line.length;
+ if(str1 > x)
+ {
+ var str2 = line.slice(0,str1-2);
+ var str3 = str2.lastIndexOf(" ");
+ this.cmd("move_to_column", str3+1);
+ this.cmd("insert", "\n");
+ this.cmd("end_of_line");
+ this.cmd("insert", " ");
+ }
+ else
+ {
+ this.cmd("insert", " ");
+ }
+ }
+ else
+ {
+
+ this.cmd("insert", " ");
+ }
+
+
+ }),
+
+
+ wrap1:Ymacs_Interactive(function() {
+ var i = 1;
+ this.cmd("end_of_buffer");
+ var str1 = this.caretMarker.getPosition();
+ //this.cmd("beginning_of_buffer");
+ if(str1 != 0)
+ {
+ while(i < 50 )
+ {
+ this.cmd("goto_line" ,i);
+ i=i+1;
+ rc = this._rowcol;
+ var line = this.code[rc.row];
+ var str2 = line.lastIndexOf(" ");
+ if(str2 > 112)
+ {
+ var str2 = line.slice(0,115);
+ var str3 = str2.lastIndexOf(" ");
+ this.cmd("move_to_column", str3+1);
+ this.cmd("insert", "\n");
+ this.cmd("forward_line");
+ }
+ }
+ }
+
+ }),
+
+
+ beginning_of_buffer: Ymacs_Interactive(function() {
+ return this.cmd("goto_char", 0);
+ }),
+ export_as_html: Ymacs_Interactive(function() {
+ //jQuery.get('/ymacs/test.py', function(data) {
+ //alert("jquery");
+ //window.location= "/home/supriya/ymacs/test.py"
+ //alert("test1");
+
+ //do stuff with the data
+
+
+ //var oShell = new AactiveXObject("WScript.Shell");
+ //shell.Run("/h", 1, true);
+ // $.ajax({
+ // type: "GET",
+ // url: "test.py",
+ // success: function() { alert("ajax"); }
+ //} );
+ //} );
+ //url = "~/test.py"
+ //$.get(url,
+ //function(data){
+ //alert("ajax");
+ //});
+
+
+ }),
+
+
+ end_of_buffer: Ymacs_Interactive(function() {
+ return this.cmd("goto_char", this.getCodeSize());
+ }),
+
+ eob_p: function() {
+ return this.point() == this.getCodeSize();
+ },
+
+ bob_p: function() {
+ return this.point() == 0;
+ },
+
+ eol_p: function() {
+ var rc = this._positionToRowCol(this.point());
+ return rc.col == this.code[rc.line].length;
+ },
+
+ bol_p: function() {
+ return this._positionToRowCol(this.point()).col == 0;
+ },
+
+ backward_delete_char: Ymacs_Interactive("^p", function(n){
+ if (!this.deleteTransientRegion()) {
+ if (n == null) n = 1;
+ var pos = this.point();
+ if (pos > 0)
+ this._deleteText(pos - n, pos);
+ }
+ }),
+
+ delete_char: Ymacs_Interactive("^p", function(n){
+ if (!this.deleteTransientRegion()) {
+ if (n == null) n = 1;
+ var pos = this.point();
+ this._deleteText(pos, pos + n);
+ }
+ }),
+
+ delete_whitespace: Ymacs_Interactive("^P", function(noLine) {
+ if (!this.deleteTransientRegion()) {
+ var p = this.point();
+ if (this.cmd("forward_whitespace", noLine)) {
+ this._deleteText(p, this.point());
+ return true;
+ }
+ }
+ }),
+
+ backward_delete_whitespace: Ymacs_Interactive("^P", function(noLine) {
+ if (!this.deleteTransientRegion()) {
+ var p = this.point();
+ if (this.cmd("backward_whitespace", noLine)) {
+ this._deleteText(this.point(), p);
+ return true;
+ }
+ }
+ }),
+
+ universal_argument: Ymacs_Interactive("^", function(){
+ this.pushKeymap(Ymacs_Keymap_UniversalArgument());
+ if (!this.isMinibuffer)
+ this.setMinibuffer("C-u");
+ }),
+
+ overwrite_mode: Ymacs_Interactive(function() {
+ this.resetOverwriteMode();
+ }),
+
+ self_insert_command: Ymacs_Interactive("^p", function(repeat) {
+ var ev = this.interactiveEvent(),
+ ch = String.fromCharCode(ev.charCode),
+ rc = this._rowcol;
+ if (ev.charCode && ch && !ev.altKey && !ev.ctrlKey) {
+ this.deleteTransientRegion();
+ if (repeat != null)
+ ch = ch.x(repeat);
+ if (this.overwriteMode) {
+ var line = this.code[rc.row], left = line.length - rc.col;
+ if (left > 0)
+ this.cmd("delete_char", Math.min(left, repeat || 1));
+ }
+ this.cmd("insert", ch);
+ ev.domStop = true;
+ return true;
+ }
+ return false;
+ }),
+
+ newline: Ymacs_Interactive("^p", function(n){
+ if (n == null) n = 1;
+ this.deleteTransientRegion();
+ this.cmd("insert", "\n".x(n));
+ }),
+
+
+ newline_and_indent: Ymacs_Interactive("^p", function(n){
+ if (n) {
+ this.cmd("newline", n);
+ } else {
+ this.cmd("backward_delete_whitespace", true);
+ this.cmd("newline");
+ this.cmd("indent_line");
+ }
+ }),
+
+
+// tab is not working on the 1st position of the buffer
+// user should create table from 1st position only
+
+ indent_line: Ymacs_Interactive("P", function(noEmpty) {
+ if (this.tokenizer) {
+ var indent = this.tokenizer.getIndentation(this._rowcol.row, this);
+ var a = " ";
+ if (indent != null) {
+ if (!noEmpty || /\S/.test(this.getLine())) {
+ var pos = this.cmd("save_excursion", function(){
+
+ if (this._rowcol.col != indent) {
+
+
+ var pos1 = this.caretMarker.getPosition();
+ //alert(pos1);
+ this.cmd("beginning_of_line");
+
+ var pos2 = this.caretMarker.getPosition();
+
+ var char1 = this.charAt(pos2);
+ this.cmd("forward_paragraph");
+ this.cmd("backward_line");
+ this.cmd("end_of_line");
+ var para_end1 = this.caretMarker.getPosition();
+ var para_end2 = (para_end1 - 1);
+
+
+ // identifying table or text
+
+ if (char1 == "|"){
+ this.cmd("goto_char",pos1);
+ this.cmd("end_of_line");
+ var end_line1 = this.caretMarker.getPosition();
+ var end_line2 =(end_line1 - 1);
+ for( var a1=1;a1<113;a1=a1+1){
+
+ var pos3 = (pos1 + a1);
+ //alert(pos3);
+ var char2 = this.charAt(pos3);
+ // checks end of the table
+ if (char2 == "|"){
+ if (char2 == "|" && pos3 == para_end2)
+ {this.cmd("goto_char",pos3);
+ //this.point();
+ this.cmd("beginning_of_line");
+ var B11 = this.caretMarker.getPosition();
+ //alert(B1);
+ this.cmd("end_of_line");
+ var P11 = this.caretMarker.getPosition();
+ //alert(P1);
+ var count1=0;
+ for(i=B11;i<=P11;i=i+1)
+ {
+ var c11=this.charAt(i);
+ if(c11=="|")
+ {count1=count1 + 1;}
+
+ }
+
+ var count2 = (count1 - 1);
+ this.cmd("newline");
+ for(i=1;i<=count2;i=i+1)
+ {
+ this.cmd("org_table_create");}
+ this.cmd("insert","|");
+ this.cmd("beginning_of_line");
+ this.cmd("forward_char");
+ }
+ // checks row or table end
+ else if(char2 == "|" && end_line2 == pos3)
+ { this.cmd("forward_line");
+ this.cmd("beginning_of_line");
+ var beg = this.caretMarker.getPosition();
+ var a11= this.charAt(beg);
+ if(a11 == "|"){
+ //alert(a11);
+ var beg1 = (beg + 1);
+ this.cmd("goto_char",beg1);}
+ else
+ {//alert("table-end");
+ this.cmd("goto_char",pos1);
+ var r_count = 1;
+ for(i=0;i<=5;i=i+1)
+ {
+ this.cmd("backward_line");
+ this.cmd("beginning_of_line");
+ var c_row = this.caretMarker.getPosition();
+ this.cmd("goto_char",c_row);
+ var ch_row = this.charAt(c_row);
+ // alert(ch_row);
+
+ if (ch_row == "|")
+ { r_count = r_count + 1 ;
+
+ }else
+ break;
+ }//alert("no_of_rows:" +r_count);
+
+
+ this.cmd("goto_char",pos3);
+ //this.point();
+ this.cmd("beginning_of_line");
+ var B1 = this.caretMarker.getPosition();
+ //alert(B1);
+ this.cmd("end_of_line");
+ var P1 = this.caretMarker.getPosition();
+ //alert(P1);
+ var count=0;
+ for(i=B1;i<=P1;i=i+1)
+ {
+ var c1=this.charAt(i);
+ if(c1=="|")
+ {count=count + 1;}
+
+ }
+ var count_n = (count -1);
+ //alert(count);
+ this.cmd("newline");
+ for(i=1;i<=count_n;i=i+1)
+ {this.cmd("org_table_create");}
+ this.cmd("insert","|");
+ this.cmd("beginning_of_line");
+ this.cmd("forward_char");
+ }
+
+ }
+ else if (char2 == "|")
+ {
+
+ var pos31 = (pos3 + 1);
+ this.cmd("goto_char",pos31);
+
+ }break;}}
+
+
+ }
+ // for text gives 4 spaces
+ else {
+ this.cmd("goto_char",pos1);
+ this.cmd("insert",a);}
+
+ }
+ return this.point();
+ });
+ // when point is before the indentation, go there.
+ if (this.point() < pos)
+ this.cmd("goto_char", pos);
+ }
+ return;
+ }
+ }
+ this.cmd("insert", " ".x(this.getq("indent_line")));
+ }),
+ indent_region: Ymacs_Interactive("r", function(begin, end) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; }
+ this.cmd("save_excursion", function() {
+ var m = this.createMarker(end);
+ this.cmd("goto_char", begin);
+ while (this.point() < m.getPosition()) {
+ this.cmd("indent_line", true);
+ this.cmd("beginning_of_line");
+ if (!this.cmd("forward_line"))
+ break;
+ };
+ m.destroy();
+ });
+ }),
+
+ make_marker: function(pos) {
+ return this.createMarker(pos);
+ },
+
+ looking_at: function(rx) {
+ var pos = rx.lastIndex = this.point();
+ var ret = this.matchData = rx.exec(this.getCode());
+ if (ret)
+ ret.after = rx.lastIndex;
+ return ret && ret.index == pos;
+ },
+
+ looking_back: function(rx) {
+ var m = this.lastIndexOfRegexp(this.getCode(), rx, this.point());
+ return m && m.after == this.point();
+ },
+
+ search_forward: Ymacs_Interactive("sSearch: ", function(str, bound) {
+ var code = this.getCode(), point = this.point();
+ if (this.getq("case_fold_search")) {
+ code = code.toLowerCase();
+ str = str.toLowerCase();
+ }
+ var pos = code.indexOf(str, point);
+ if (pos >= 0 && (bound == null || pos <= bound)) {
+ this.cmd("goto_char", pos + str.length);
+ return true;
+ }
+ }),
+
+ search_backward: Ymacs_Interactive("sSearch backward: ", function(str, bound) {
+ var code = this.getCode(), point = this.point();
+ if (this.getq("case_fold_search")) {
+ code = code.toLowerCase();
+ str = str.toLowerCase();
+ }
+ var pos = code.lastIndexOf(str, point);
+ if (pos == point)
+ pos = code.lastIndexOf(str, point - 1);
+ if (pos >= 0 && pos != point && (bound == null || pos >= bound)) {
+ this.cmd("goto_char", pos);
+ return true;
+ }
+ }),
+
+ make_regexp: function(rx) {
+ if (!(rx instanceof RegExp)) {
+ var matchCase = rx.toLowerCase() != rx.toUpperCase();
+ try {
+ rx = new RegExp(rx, matchCase ? "ig" : "g");
+ } catch(ex) {
+ throw new Ymacs_Exception("Invalid regexp");
+ }
+ }
+ return rx;
+ },
+
+ search_forward_regexp: Ymacs_Interactive("sRegExp search: ", function(rx) {
+ rx = this.cmd("make_regexp", rx);
+ var code = this.getCode(),
+ pos = rx.lastIndex = this.point(),
+ ret = this.matchData = rx.exec(code);
+ if (ret && rx.lastIndex != pos) {
+ ret.after = rx.lastIndex;
+ this.cmd("goto_char", rx.lastIndex);
+ return true;
+ }
+ }),
+
+ search_backward_regexp: Ymacs_Interactive("sBackward RegExp search: ", function(rx) {
+ rx = this.cmd("make_regexp", rx);
+ var m = this.lastIndexOfRegexp(this.getCode(), rx, this.point());
+ if (m && m.index != this.point()) {
+ this.cmd("goto_char", m.index);
+ return true;
+ }
+ }),
+
+ forward_word: Ymacs_Interactive_X(function(){
+ var word = this.getq("syntax_word"), end = false;
+ while (!end && !word.test(this.charAt()))
+ if (!this.cmd("forward_char"))
+ end = true;
+ while (!end && word.test(this.charAt()))
+ if (!this.cmd("forward_char"))
+ end = true;
+ }),
+
+ backward_word: Ymacs_Interactive_X(function(){
+ var word = this.getq("syntax_word"), end = false;
+ while (!end && !word.test(this.charAt(-1)))
+ if (!this.cmd("backward_char"))
+ end = true;
+ while (!end && word.test(this.charAt(-1)))
+ if (!this.cmd("backward_char"))
+ end = true;
+ }),
+
+ forward_paragraph: Ymacs_Interactive_X(function(){
+ this.cmd("forward_whitespace");
+ if (this.cmd("search_forward_regexp", this.getq("syntax_paragraph_sep")))
+ this.cmd("goto_char", this.cmd("match_beginning") + 1);
+ else
+ this.cmd("end_of_buffer");
+ }),
+
+ backward_paragraph: Ymacs_Interactive_X(function(){
+ this.cmd("backward_whitespace");
+ if (this.cmd("search_backward_regexp", this.getq("syntax_paragraph_sep")))
+ this.cmd("goto_char", this.cmd("match_end") - 1);
+ else
+ this.cmd("beginning_of_buffer");
+ }),
+
+ transpose_words: Ymacs_Interactive_X(function() {
+ // if we're in the middle of a word, some
+ // weird things happen; better skip it, just
+ // like Emacs does.
+ this.cmd("backward_char");
+ if (this.getq("syntax_word").test(this.charAt()))
+ this.cmd("forward_word");
+
+ var a = [];
+ this.cmd("forward_word"); a.push(this.point());
+ this.cmd("backward_word"); a.push(this.point());
+ this.cmd("backward_word"); a.push(this.point());
+ this.cmd("forward_word"); a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ transpose_lines: Ymacs_Interactive_X(function() {
+ var a = [];
+ //alert(a[0]);
+ this.cmd("backward_line");
+ this.cmd("beginning_of_line"); a.push(this.point());
+ this.cmd("end_of_line"); a.push(this.point());
+ this.cmd("forward_char"); a.push(this.point());
+ this.cmd("end_of_line"); a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ transpose_para: Ymacs_Interactive_X(function() {
+ var a = [];
+ //alert(a[0]);
+ this.cmd("backward_paragraph");
+ // this.cmd("backward_line");
+ this.cmd("forward_line"); a.push(this.point());
+ this.cmd("forward_paragraph");
+ this.cmd("backward_char"); a.push(this.point());
+ this.cmd("forward_whitespace"); a.push(this.point());
+ this.cmd("forward_paragraph");
+ this.cmd("backward_char");a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ transpose_text: Ymacs_Interactive_X(function() {
+ var a = [];
+ //alert(a[0]);
+ this.cmd("beginning_of_line");
+ this.cmd("backward_paragraph");
+ this.cmd("forward_line");
+ this.cmd("forward_char");
+ this.cmd("forward_char"); a.push(this.point());
+ this.cmd("forward_paragraph");
+ this.cmd("backward_char"); a.push(this.point());
+ this.cmd("forward_whitespace");
+ this.cmd("forward_char");
+ this.cmd("forward_char");a.push(this.point());
+ this.cmd("forward_paragraph");
+ this.cmd("backward_char");a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ transpose_chars: Ymacs_Interactive_X(function() {
+ var pos = this.point();
+ if (this.cmd("backward_char"))
+ this.cmd("goto_char", this._swapAreas([ pos - 1, pos, pos, pos + 1 ]));
+ }),
+
+ kill_word: Ymacs_Interactive_X(function() {
+ var pos = this.point();
+ this.cmd("forward_word");
+ var pos2 = this.point();
+ this._killingAction(pos, pos2, false);
+ }),
+
+ backward_kill_word: Ymacs_Interactive_X(function() {
+ var pos = this.point();
+ this.cmd("backward_word");
+ var pos2 = this.point();
+ this._killingAction(pos, pos2, true);
+ }),
+
+ _apply_operation_on_word: function (op, cc) {
+ var pos = this.point();
+ if (this.getq("syntax_word").test(this.charAt())) {
+ var pos2 = this.cmd("save_excursion", function(){
+ this.cmd("forward_word");
+ return this.point();
+ });
+ var word = op.call(this._bufferSubstring(pos, pos2));
+ this._deleteText(pos, pos2);
+ this._insertText(word);
+ } else {
+ this.cmd("forward_word");
+ this.cmd("backward_word");
+ if (pos != this.point())
+ this.cmd(cc);
+ }
+ },
+
+ capitalize_word: Ymacs_Interactive_X(function() {
+ this.cmd("_apply_operation_on_word", function() {
+ return this.charAt(0).toUpperCase() + this.substr(1).toLowerCase();
+ }, "capitalize_word");
+ }),
+
+ downcase_word: Ymacs_Interactive_X(function() {
+ this.cmd("_apply_operation_on_word", String.prototype.toLowerCase, "downcase_word");
+ }),
+
+ upcase_word: Ymacs_Interactive_X(function() {
+ this.cmd("_apply_operation_on_word", String.prototype.toUpperCase, "upcase_word");
+ }),
+
+ goto_char: Ymacs_Interactive("NGoto char: ", function(pos){
+ return this._repositionCaret(pos);
+ }),
+
+ goto_line: Ymacs_Interactive("NGoto line: ", function(row){
+ var pos = this._rowColToPosition(row - 1, 0);
+ return this.cmd("goto_char", pos);
+ }),
+
+ move_to_column: Ymacs_Interactive("NMove to column: ", function(col, force){
+ var rc = this._positionToRowCol(this.point());
+ var text = this.code[rc.row];
+ if (text.length < col) {
+ if (force) {
+ this.cmd("end_of_line");
+ this.cmd("insert", " ".x(col - text.length));
+ } else {
+ this.cmd("end_of_line");
+ }
+ } else {
+ this.cmd("goto_char", this._rowColToPosition(rc.row, col));
+ }
+ }),
+
+ delete_region: Ymacs_Interactive("r", function(begin, end){
+ this._deleteText(begin, end);
+ }),
+
+ insert: Ymacs_Interactive("sInsert text: ", function(){
+ return this._insertText(Array.$(arguments).join(""));
+ }),
+
+ keyboard_quit: Ymacs_Interactive("^p", Function.noop),
+
+ buffer_substring: function(begin, end) {
+ if (arguments.length == 0) {
+ var r = this.getRegion();
+ begin = r.begin;
+ end = r.end;
+ }
+ return this._bufferSubstring(begin, end);
+ },
+
+ kill_line: Ymacs_Interactive_X(function() {
+ var pos = this.point(),
+ rc = this._rowcol,
+ line = this.code[rc.row],
+ end = pos + line.length - rc.col;
+ if (rc.row < this.code.length - 1 && this.cmd("looking_at", /\s*$/mg))
+ end++;
+ this._killingAction(pos, end);
+ }),
+
+ save_excursion: function() {
+ return this._saveExcursion.apply(this, arguments);
+ },
+
+ prevent_undo: function() {
+ return this._disableUndo.apply(this, arguments);
+ },
+
+ point: function() {
+ return this.caretMarker.getPosition();
+ },
+
+ kill_region: Ymacs_Interactive("r", function(begin, end){
+ this._killingAction(begin, end);
+ }),
+
+ copy_region_as_kill: Ymacs_Interactive("r", function(begin, end){
+ this._killingAction(begin, end, false, true);
+ }),
+
+ yank: Ymacs_Interactive("^P", function(atStart){
+ this.deleteTransientRegion();
+ var point = this.point();
+ this._insertText(this.ymacs.killRingText());
+ this.cmd("set_mark_command", point);
+ if (atStart)
+ this.cmd("exchange_point_and_mark");
+ }),
+
+ yank_pop: Ymacs_Interactive(function() {
+ if (/^yank/.test(this.previousCommand)) {
+ this.ymacs.rotateKillRing(false);
+ this._deleteText(this.caretMarker, this.markMarker);
+ this.cmd("yank");
+ } else {
+ this.signalError("Previous command was not a yank");
+ }
+ }),
+
+ yank_shift: Ymacs_Interactive(function() {
+ if (/^yank/.test(this.previousCommand)) {
+ this.ymacs.rotateKillRing(true);
+ this._deleteText(this.caretMarker, this.markMarker);
+ this.cmd("yank");
+ } else {
+ this.signalError("Previous command was not a yank");
+ }
+ }),
+
+ mark: function() {
+ return this.markMarker.getPosition();
+ },
+
+ set_mark_command: Ymacs_Interactive("d", function(x){
+ if (this.currentCommand == "set_mark_command")
+ this.signalInfo("Mark set", null, 1000);
+ this.markMarker.setPosition(x);
+ }),
+
+ exchange_point_and_mark: Ymacs_Interactive("^", function(){
+ this.caretMarker.swap(this.markMarker);
+ }),
+
+ mark_whole_buffer: Ymacs_Interactive(function(){
+ this.clearTransientMark();
+ this.cmd("end_of_buffer");
+ this.ensureTransientMark();
+ this.cmd("beginning_of_buffer");
+ this.ensureTransientMark();
+ }),
+
+ // <XXX>: the following two kind of suck
+
+ recenter_top_bottom: Ymacs_Interactive(function() {
+ this.whenActiveFrame(function(frame){
+ frame.ensureCaretVisible(true);
+ frame.centerOnCaret();
+ });
+ }),
+
+ ensure_caret_visible: Ymacs_Interactive(function() {
+ this.whenActiveFrame(function(frame){
+ // frame.centerOnCaretIfNotVisible();
+ frame.ensureCaretVisible(true);
+ frame.centerOnCaret();
+ });
+ }),
+
+ // </XXX>
+
+ /* -----[ paragraphs ]----- */
+
+ fill_paragraph: Ymacs_Interactive("P", function(noPrefix) {
+ this.cmd("save_excursion", function(){
+ if (!this.cmd("looking_at", this.getq("syntax_paragraph_sep")))
+ this.cmd("forward_paragraph");
+ var eop = this.createMarker(this.point() - 1);
+ this.cmd("backward_paragraph");
+ if (this.point() > 0)
+ this.cmd("forward_char");
+
+ // identify the prefix to use for each line
+ var prefix = "", del = false;
+ if (this.cmd("looking_at", /\s*([-]|[0-9]+\.|\(?[a-z][\).])?\s+/ig)) {
+ prefix = " ".x(this.matchData[0].length);
+ del = /\s*[#>;\s]*\s*/g;
+ }
+ else if (this.cmd("looking_at", /\s*[#>;*\s]+\s*/g)) {
+ prefix = this.matchData[0];
+ del = /\s*[#>;\s]*\s*/g;
+ }
+
+ if (noPrefix) {
+ this._deleteText(this.point(), this.point() + this.matchData[0].length);
+ prefix = "";
+ }
+
+ // remove newlines first
+ while (true) {
+ this.cmd("end_of_line");
+ this.cmd("backward_delete_whitespace");
+ if (this.point() >= eop.getPosition())
+ break;
+ this._replaceText(this.point(), this.point() + 1, " ");
+ if (del && this.cmd("looking_at", del)) {
+ this._deleteText(this.point(), this.point() + this.matchData[0].length);
+ }
+ }
+
+ this.cmd("beginning_of_line");
+
+ // main operation
+ while (this.point() < eop.getPosition()) {
+ var p = this.point();
+ if (!this.cmd("search_forward_regexp", /\s/g))
+ break;
+ if (this.point() > eop.getPosition()) {
+ this.cmd("goto_char", eop);
+ }
+ if (this._rowcol.col > this.getq("fill_column")) {
+ this.cmd("goto_char", p);
+ this.cmd("backward_delete_whitespace");
+ this.cmd("newline");
+ this.cmd("insert", prefix);
+ }
+ }
+
+ eop.destroy();
+
+ this.cmd("recenter_top_bottom");
+ });
+ }),
+
+ fill_paragraph_no_prefix: Ymacs_Interactive(function() {
+ return this.cmd("fill_paragraph", true);
+ }),
+
+ // this looks at the style of the current paragraph and starts
+ // a similar one, i.e. using same indentation level and prefix
+ // (list-like prefixes are incremented)
+
+
+
+
+
+ sub_bullet: Ymacs_Interactive(function() {
+ this.cmd("backward_line");
+ if (this.point() > 1)
+ this.cmd("forward_char");
+
+ // identify the prefix to use for each line
+ var prefix = "*";
+ if (this.cmd("looking_at", /(\s*)([+#-])(\s)([a-z]+)/g)) {
+
+ prefix = this.matchData[1]+this.matchData[2];
+ //alert(prefix);
+
+ }
+
+ this.cmd("forward_line");
+ if (this.cmd("eob_p"))
+ this.cmd("newline");
+ // this.cmd("newline");
+
+ this.cmd("insert",prefix);
+
+ if (!this.cmd("looking_at", /\n/g)) {
+ this.cmd("newline");
+ this.cmd("backward_char");
+ };
+ }),
+
+ start_next_paragraph: Ymacs_Interactive(function() {
+ this.cmd("backward_paragraph");
+ if (this.point() > 1)
+ this.cmd("forward_char");
+
+ // identify the prefix to use for each line
+ var prefix = "*";
+ if (this.cmd("looking_at", /(\s*)([0-9]+)(\.)(\s+)/g)) {
+ prefix = this.matchData[1] +
+ (parseInt(this.matchData[2], 10) + 1) +
+ this.matchData[3];//+this.matchdata[4];//+this.matchdata[5];
+
+ }
+ else if (this.cmd("looking_at", /(\s*\(?)([a-z])([\.\)]\s+)/ig)) {
+ prefix = this.matchData[1] +
+ String.fromCharCode(this.matchData[2].charCodeAt(0) + 1) +
+ this.matchData[3];//+this.matchdata[4];//+this.matchdata[5];
+
+ }
+
+
+ else if (this.cmd("looking_at", /[#>;*-]+/g)) {
+ prefix = this.matchData[0];
+
+ }
+ this.cmd("forward_paragraph");
+ if (this.cmd("eob_p"))
+ this.cmd("newline");
+ this.cmd("newline");
+
+ this.cmd("insert",prefix," ");
+
+ if (!this.cmd("looking_at", /\n/g)) {
+ this.cmd("newline");
+ this.cmd("backward_char");
+ };
+ }),
+
+ scroll_down: Ymacs_Interactive_X(function() {
+ this.whenActiveFrame(function(frame){
+ var hl = frame.heightInLines();
+ this.cmd("forward_line", Math.round(hl / 1.33));
+ this.cmd("recenter_top_bottom");
+ });
+ }),
+
+ scroll_up: Ymacs_Interactive_X(function() {
+ this.whenActiveFrame(function(frame){
+ var hl = frame.heightInLines();
+ this.cmd("backward_line", Math.round(hl / 1.33));
+ this.cmd("recenter_top_bottom");
+ });
+ }),
+
+ nuke_trailing_whitespace: Ymacs_Interactive(function() {
+ this.cmd("save_excursion", function(){
+ this.cmd("goto_char", 0);
+ while (this._rowcol.row < this.code.length) {
+ var line = this.code[this._rowcol.row],
+ m = /\s+$/.exec(line);
+ if (m) {
+ this.cmd("beginning_of_line");
+ this._deleteText(this.point() + m.index, this.point() + line.length);
+ }
+ if (!this.cmd("forward_line"))
+ break;
+ }
+ });
+ }),
+
+ match_string: function(n) {
+ return this.matchData[n];
+ },
+
+ match_beginning: function() {
+ return this.matchData.index;
+ },
+
+ match_end: function() {
+ return this.matchData.index + this.matchData[0].length;
+ },
+
+ undo: Ymacs_Interactive_X(function() {
+ var q = this.__undoQueue;
+ this.__undoQueue = this.__redoQueue;
+ this._placeUndoBoundary();
+ if (!this._playbackUndo(q)) {
+ this.signalError("No further undo information");
+ }
+ this.__undoQueue = q;
+ }),
+
+ center_line: Ymacs_Interactive("p", function(n){
+ if (n == null) n = 1;
+ n.times(function(i){
+ if (i > 0)
+ this.cmd("forward_line");
+ this.cmd("save_excursion", function(){
+ this.cmd("end_of_line");
+ this.cmd("backward_delete_whitespace", true);
+ this.cmd("beginning_of_line");
+ this.cmd("delete_whitespace", true);
+ var line = this.code[this._rowcol.row];
+ var indent = Math.floor((this.getq("fill_column") - line.length) / 2);
+ this.cmd("insert", " ".x(indent));
+ });
+ }, this);
+ }),
+
+ /* -----[ dabbrev ]----- */
+
+ dabbrev_expand: Ymacs_Interactive_X(function() {
+ if (this.previousCommand != "dabbrev_expand")
+ this.setq("dabbrev_context", null);
+
+ var ctx = this.getq("dabbrev_context");
+ if (!ctx) {
+ ctx = this.setq("dabbrev_context", {});
+ var p1 = this.cmd("save_excursion", function(){
+ this.cmd("bind_variables", {
+ syntax_word: this.getq("syntax_word_dabbrev")
+ }, "backward_word");
+ return this.point();
+ });
+ if (p1 == this.point())
+ return this.signalError("Nothing to expand");
+ ctx.search = this.cmd("buffer_substring", p1, this.point());
+ ctx.point = p1;
+ ctx.length = this.point() - p1;
+ ctx.lastSearch = p1;
+ ctx.encountered = {};
+ ctx.forward = false;
+ ctx.buffer = this;
+ ctx.startBuffer = this;
+ }
+ var expansion;
+
+ // in the following excursion, *this* is ctx.buffer,
+ // not necessarily the currently active buffer. It's
+ // purpose is to determine the next expansion and
+ // setup the context so that the next invocation would
+ // continue.
+ ctx.buffer.cmd("save_excursion", function repeat(){
+ var word = this.getq("syntax_word_dabbrev");
+ var p1;
+ var found = false;
+ this.cmd("goto_char", ctx.lastSearch);
+ // console.log("last at: %d", ctx.lastSearch);
+ if (!ctx.forward) {
+ while (this.cmd("search_backward", ctx.search)) {
+ if (!word.test(this.charAt(-1))) {
+ found = true;
+ break;
+ }
+ }
+ if (found) {
+ p1 = this.point();
+ ctx.lastSearch = p1;
+ this.cmd("goto_char", p1 + ctx.search.length);
+ } else {
+ ctx.forward = true;
+ ctx.lastSearch = ctx.point + ctx.length;
+ repeat.call(this);
+ return;
+ }
+ } else {
+ while (this.cmd("search_forward", ctx.search))
+ if (!word.test(this.charAt(-ctx.search.length - 1))) {
+ found = true;
+ break;
+ }
+ if (found) {
+ ctx.lastSearch = this.point();
+ p1 = this.point() - ctx.search.length;
+ } else {
+ ctx.buffer = this.whenYmacs("getNextBuffer", this);
+ if (ctx.buffer === ctx.startBuffer) {
+ expansion = ctx.search;
+ ctx.startBuffer.signalError("No more completions");
+ ctx.lastSearch = ctx.point + ctx.length;
+ ctx.startBuffer.setq("dabbrev_context", null);
+ return;
+ } else {
+ ctx.lastSearch = 0;
+ ctx.buffer.cmd("save_excursion", repeat);
+ return;
+ }
+ }
+ }
+ if (p1 != null) {
+ // console.log("%s at %d, next from %d", ctx.search, p1, ctx.lastSearch);
+ this.cmd("bind_variables", {
+ syntax_word: this.getq("syntax_word_dabbrev")
+ }, "forward_word");
+ expansion = this.cmd("buffer_substring", p1, this.point());
+ if (Object.HOP(ctx.encountered, expansion))
+ repeat.call(this);
+ }
+ });
+ if (expansion != null) {
+ this._replaceText(ctx.point, ctx.point + ctx.length, expansion);
+ ctx.length = expansion.length;
+ ctx.encountered[expansion] = true;
+ }
+ }),
+
+ /* -----[ frames and buffers ]----- */
+
+ split_frame_vertically: Ymacs_Interactive("p", function(percent) {
+ if (percent == null) percent = "50%";
+ else percent += "%";
+ this.whenActiveFrame("vsplit", percent);
+ }),
+
+ split_frame_horizontally: Ymacs_Interactive("p", function(percent) {
+ if (percent == null) percent = "50%";
+ else percent += "%";
+ this.whenActiveFrame("hsplit", percent);
+ }),
+
+ delete_other_frames: Ymacs_Interactive(function() {
+ this.whenActiveFrame("deleteOtherFrames");
+ }),
+
+ delete_frame: Ymacs_Interactive(function() {
+ this.whenActiveFrame("deleteFrame");
+ }),
+
+ other_frame: Ymacs_Interactive(function() {
+ this.whenYmacs("focusOtherFrame");
+ }),
+
+ windmove: function(dir) {
+ this.whenYmacs(function(ymacs){
+ var f = ymacs.getFrameInDirection(dir);
+ if (f) f.focus();
+ });
+ },
+
+ next_buffer: Ymacs_Interactive(function() {
+ this.whenYmacs("switchToNextBuffer", this.sameCommandCount() + 1);
+ }),
+
+ previous_buffer: Ymacs_Interactive(function() {
+ this.whenYmacs("switchToPreviousBuffer", this.sameCommandCount() + 1);
+ }),
+
+ switch_to_buffer: Ymacs_Interactive("BSwitch to buffer: ", function(name) {
+ this.whenYmacs(function(ymacs){
+ ymacs.switchToBuffer(name);
+ });
+ }),
+
+ kill_buffer: Ymacs_Interactive(function() {
+ this.whenYmacs(function(ymacs){
+ ymacs.killBuffer(this);
+ });
+ }),
+
+ rename_buffer: Ymacs_Interactive("sRename current buffer to: ", function(name){
+ this.whenYmacs(function(ymacs){
+ ymacs.renameBuffer(this, name);
+ });
+ }),
+
+ /* -----[ other ]----- */
+
+ delete_region_or_line: Ymacs_Interactive("^", function() {
+ if (!this.deleteTransientRegion()) {
+ this.cmd("beginning_of_line");
+ var pos = this.point();
+ if (this.cmd("forward_line") || this.cmd("end_of_line")) {
+ this._deleteText(pos, this.point());
+ return true;
+ }
+ }
+ }),
+ delete_line: Ymacs_Interactive("^", function() {
+
+
+ this.cmd("beginning_of_line");
+ var pos = this.point();
+ alert(pos);
+ this.cmd("end_of_line");
+ var pos1 = this.point();
+ alert(pos1);
+ this._replaceText(pos, pos1,"");
+ return true;
+
+
+
+
+
+ }),
+
+
+
+ // http://mihai.bazon.net/blog/close-last-xml-tag-emacs
+ close_last_xml_tag: Ymacs_Interactive_X(function() {
+ var tag, quote;
+ this.cmd("save_excursion", function() {
+ var skip = 1;
+ while (skip != 0 && this.cmd("search_backward_regexp", /<\x2f?([a-zA-Z0-9:_-]+)/g)) {
+ tag = this.cmd("match_string", 1);
+ if (this.cmd("looking_at", /<\x2f/g)) {
+ ++skip;
+ }
+ else if (!this.cmd("looking_at", /<[^\x2f][^>]*?\x2f>/g)) {
+ --skip;
+ }
+ }
+ if (skip != 0)
+ tag = null;
+ });
+ if (tag) {
+ this.cmd("insert", "</", tag, ">");
+ } else {
+ throw new Ymacs_Exception("Couldn't find a tag to close");
+ }
+ }),
+
+ bind_variables: function() {
+ return this.withVariables.apply(this, arguments);
+ },
+
+ for_region: Ymacs_Interactive("^r\nCExecute command within region: ", function(begin, end, func) {
+ if (end < begin) { var tmp = begin; begin = end; end = tmp; } // MACROS! I WANT MACROS! EVAL SUCKS. x-(
+ if (!(func instanceof Function))
+ func = this.COMMANDS[func];
+ this.clearTransientMark();
+ this.cmd("goto_char", begin);
+ begin = this.createMarker(begin, true);
+ end = this.createMarker(end);
+ this.withCommands(
+ {
+ goto_char: function(pos){
+ if (pos >= begin.getPosition() && pos <= end.getPosition())
+ return this._repositionCaret(pos);
+ throw "YMACS_RESTRICT";
+ }
+ },
+ function() {
+ try {
+ while (true) {
+ var tmp = this.point();
+ func.call(this);
+ if (this.point() == tmp && !this.cmd("forward_line"))
+ break;
+ }
+ } catch(ex) {
+ if (ex !== "YMACS_RESTRICT")
+ throw ex;
+ } finally {
+ begin.destroy();
+ end.destroy();
+ }
+ }
+ );
+ })
+
+});
+
+/* -----[ rectangle functions (vertical editing) ]----- */
+
+(function(){
+
+ function apply_on_rectangle(buffer, begin, end, func) {
+ buffer.cmd("save_excursion", function(){
+ var p1 = this._positionToRowCol(begin),
+ p2 = this._positionToRowCol(end),
+ width = Math.abs(p2.col - p1.col);
+ for (var line = p1.row; line <= p2.row; ++line) {
+ this.cmd("goto_char", this._rowColToPosition(line, 0));
+ var text = this.code[line],
+ c1 = p1.col,
+ c2 = p2.col,
+ p = this.point(), ws = 0;
+ if (c1 > c2) {
+ var tmp = c1;
+ c1 = c2;
+ c2 = tmp;
+ }
+ if (c1 > text.length) {
+ ws = c1 - text.length;
+ c1 = text.length;
+ }
+ if (c2 > text.length) {
+ c2 = text.length;
+ }
+ func.call(this, p + c1, p + c2, ws, width);
+ }
+ }, begin == buffer.point());
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ string_rectangle: Ymacs_Interactive("r\nsString rectangle: ", function(begin, end, string) {
+ apply_on_rectangle(this, begin, end, function(c1, c2, ws){
+ if (ws > 0) {
+ this._insertText(" ".x(ws), c1);
+ } else {
+ this._deleteText(c1, c2);
+ }
+ this._insertText(string, c1 + ws);
+ });
+ }),
+
+ kill_rectangle: Ymacs_Interactive("r", function(begin, end){
+ var text = [];
+ apply_on_rectangle(this, begin, end, function(c1, c2, ws, width){
+ var str = this._bufferSubstring(c1, c2);
+ if (c2 - c1 < width)
+ str += " ".x(width - c2 + c1);
+ text.push(str);
+ this._deleteText(c1, c2);
+ });
+ this.setq("killed_rectangle", text);
+ }),
+
+ clear_rectangle: Ymacs_Interactive("r", function(begin, end){
+ this.cmd("string_rectangle", begin, end,
+ " ".x(Math.abs(this._positionToRowCol(end).col -
+ this._positionToRowCol(begin).col)));
+ }),
+
+ insert_rectangle: function(point, rect) {
+ var col = this._positionToRowCol(point).col;
+ this.cmd("set_mark_command", point);
+ rect.foreach(function(text, i){
+ if (i > 0) {
+ if (!this.cmd("forward_line")) {
+ this.cmd("end_of_line");
+ this.cmd("newline");
+ }
+ this.cmd("move_to_column", col, true);
+ }
+ this.cmd("insert", text);
+ }, this);
+ },
+
+ yank_rectangle: Ymacs_Interactive("d", function(point){
+ var kr = this.getq("killed_rectangle");
+ if (kr == null)
+ throw new Ymacs_Exception("No killed rectangle");
+ this.cmd("insert_rectangle", point, kr);
+ })
+
+ });
+
+})();
+
+/* -----[ commands to help using the system clipboard ]----- */
+
+(function(){
+
+ // <XXX>
+ // this should be moved some level up if it proves to be more
+ // generally useful
+ function modalTextarea(title, text, cont) {
+ var dlg = this.createDialog({ title : title,
+ quitBtn : "destroy",
+ modal : true });
+ var entry = new DlEntry({ parent: dlg, type: "textarea", fillParent: true, value: text });
+ dlg._focusedWidget = entry;
+ dlg.setSize({ x: 350, y: 250 });
+ entry.addEventListener("onKeyPress", function(ev){
+ if (ev.keyCode != DlKeyboard.ESCAPE) {
+ // var code = entry.getValue().replace(/\t/g, " ");
+ var code = entry.getValue();
+ dlg.destroy();
+ cont.delayed(0, this, code);
+ // XXX Without a delay here, be it zero, stars will align in such a way that
+ // yank_from_operating_system will move the caret in some bizarre position after
+ // inserting the pasted text.
+ // cont.call(this, code);
+ }
+ }.clearingTimeout(0, this));
+ dlg.show(true);
+ entry.select();
+ };
+ // </XXX>
+
+ Ymacs_Buffer.newCommands({
+
+ yank_from_operating_system: Ymacs_Interactive(function() {
+ modalTextarea.call(this, "Paste below (press CTRL-V)", null, function(code){
+ this._saveKilledText(code);
+ this.cmd("yank");
+ this.cmd("recenter_top_bottom");
+ });
+ }),
+
+ copy_for_operating_system: Ymacs_Interactive("r", function(begin, end) {
+ modalTextarea.call(this, "Press CTRL-C", this.cmd("buffer_substring"), function(){
+ this.cmd("copy_region_as_kill", begin, end);
+ });
+ }),
+
+ kill_for_operating_system: Ymacs_Interactive("r", function(begin, end) {
+ modalTextarea.call(this, "Press CTRL-C or CTRL-X", this.cmd("buffer_substring"), function(){
+ this.cmd("kill_region", begin, end);
+ });
+ })
+
+ });
+
+})();
+
+/* -----[ transient mark extension commands ]----- */
+
+[
+ "forward_char",
+ "forward_word",
+ "forward_line",
+ "forward_paragraph",
+ "forward_sexp",
+ "beginning_of_line",
+ "beginning_of_indentation_or_line",
+ "beginning_of_buffer",
+ "backward_char",
+ "backward_word",
+ "backward_line",
+ "backward_paragraph",
+ "backward_sexp",
+ "end_of_line",
+ "end_of_buffer"
+
+].foreach(function(cmd) {
+ Ymacs_Buffer.COMMANDS[cmd + "_mark"] = Ymacs_Interactive("^", function(){
+ this.ensureTransientMark();
+ this.cmdApply(cmd, arguments);
+ this.ensureTransientMark();
+ });
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-exception.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-exception.js
new file mode 100644
index 0000000..9a3f9bb
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-exception.js
@@ -0,0 +1,36 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+function Ymacs_Exception(why) {
+ this.message = why;
+};
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-frame.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-frame.js
new file mode 100644
index 0000000..c2c83cd
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-frame.js
@@ -0,0 +1,696 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs.js
+
+DEFINE_CLASS("Ymacs_Frame", DlContainer, function(D, P, DOM) {
+
+ var DBL_CLICK_SPEED = 300;
+
+ var EX = DlException.stopEventBubbling;
+
+ var LINE_DIV = DOM.createElement("div", null, { className: "line", innerHTML: "<br/>" });
+
+ var BLINK_TIMEOUT = 225;
+
+ D.DEFAULT_EVENTS = [ "onPointChange" ];
+
+ D.DEFAULT_ARGS = {
+ highlightCurrentLine : [ "highlightCurrentLine" , true ],
+ buffer : [ "buffer" , null ],
+ ymacs : [ "ymacs" , null ],
+ isMinibuffer : [ "isMinibuffer" , false ],
+
+ // override in DlWidget
+ _focusable : [ "focusable" , true ],
+ _fillParent : [ "fillParent" , true ]
+ };
+
+ D.CONSTRUCT = function() {
+ this.__blinkCaret = this.__blinkCaret.$(this);
+ this.__caretId = Dynarch.ID();
+ this.redrawModelineWithTimer = this.redrawModeline.clearingTimeout(0, this);
+
+ this.getElement().innerHTML = HTML;
+
+ this.addEventListener({
+ onDestroy : this._on_destroy,
+ onFocus : this._on_focus,
+ onBlur : this._on_blur,
+ onMouseDown : this._on_mouseDown,
+ onKeyDown : this._on_keyDown,
+ onKeyPress : this._on_keyPress,
+ onKeyPress : this._on_keyPress,
+ onKeyUp : this._on_keyUp,
+ onResize : this._on_resize
+ });
+
+ this._dragSelectCaptures = {
+ onMouseOver : EX,
+ onMouseOut : EX,
+ onMouseEnter : EX,
+ onMouseLeave : EX,
+ onMouseMove : _dragSelect_onMouseMove.$(this),
+ onMouseUp : _dragSelect_onMouseUp.$(this)
+ };
+
+ this._bufferEvents = {
+ onLineChange : this._on_bufferLineChange.$(this),
+ onInsertLine : this._on_bufferInsertLine.$(this),
+ onDeleteLine : this._on_bufferDeleteLine.$(this),
+ onPointChange : this._on_bufferPointChange.$(this),
+ onResetCode : this._on_bufferResetCode.$(this),
+ onOverwriteMode : this._on_bufferOverwriteMode.$(this),
+ onProgressChange : this._on_bufferProgressChange.$(this),
+ beforeInteractiveCommand : this._on_bufferBeforeInteractiveCommand.$(this),
+ afterInteractiveCommand : this._on_bufferAfterInteractiveCommand.$(this),
+ onOverlayDelete : this._on_bufferOverlayDelete.$(this)
+ };
+
+ this._moreBufferEvents = {
+ onMessage : this._on_bufferMessage.$(this),
+ onOverlayChange : this._on_bufferOverlayChange.$(this),
+ afterInteractiveCommand : this.ensureCaretVisible.$(this)
+ };
+
+ var buffer = this.buffer;
+ this.buffer = null;
+ if (buffer)
+ this.setBuffer(buffer);
+ if (!this.isMinibuffer && this.ymacs.cf_lineNumbers)
+ this.toggleLineNumbers();
+ };
+
+ var HTML = String.buffer(
+ "<div class='Ymacs-frame-overlays'>",
+ "<div class='Ymacs-frame-content'></div>",
+ "</div>",
+ "<div class='Ymacs_Modeline'></div>"
+ ).get();
+
+ P.focus = function(exitAllowed) {
+ D.BASE.focus.call(this);
+ if (exitAllowed instanceof Function) {
+ this.removeEventListener("onBlur", this.__exitFocusHandler);
+ this.addEventListener("onBlur", this.__exitFocusHandler = function(){
+ if (exitAllowed.call(this.buffer)) {
+ this.removeEventListener("onBlur", this.__exitFocusHandler);
+ } else {
+ this.focus.delayed(2, this, null);
+ }
+ });
+ }
+ };
+
+ P.blur = function(force) {
+ if (force)
+ this.removeEventListener("onBlur", this.__exitFocusHandler);
+ D.BASE.blur.call(this);
+ };
+
+ P.getOverlaysContainer = function() {
+ return this.getElement().firstChild;
+ };
+
+ P.getModelineElement = function() {
+ return this.getElement().childNodes[1];
+ };
+
+ P.getContentElement = function() {
+ return this.getElement().firstChild.firstChild;
+ };
+
+ P.getCaretElement = function() {
+ return document.getElementById(this.__caretId);
+ };
+
+ P.getLineDivElement = function(row) {
+ return this.getContentElement().childNodes[row] || null;
+ };
+
+ P.ensureCaretVisible = function() {
+ this._redrawCaret();
+
+ var caret = this.getCaretElement();
+ if (!caret)
+ return;
+ var div = this.getOverlaysContainer(), line = this.getLineDivElement(this.buffer._rowcol.row);
+
+ // vertical
+ var diff = line.offsetTop + line.offsetHeight - (div.scrollTop + div.clientHeight);
+ if (diff > 0) {
+ div.scrollTop += diff;
+ } else {
+ diff = line.offsetTop - div.scrollTop;
+ if (diff < 0) {
+ div.scrollTop += diff;
+ }
+ }
+
+ // horizontal
+ diff = caret.offsetLeft + caret.offsetWidth - (div.scrollLeft + div.clientWidth);
+ // if (caret.offsetLeft + caret.offsetWidth < div.clientWidth)
+ // div.scrollLeft = 0;
+ if (diff > 0) {
+ div.scrollLeft += diff;
+ } else {
+ diff = caret.offsetLeft - div.scrollLeft;
+ if (diff < 0)
+ div.scrollLeft += diff;
+ }
+ };
+
+ P.setBuffer = function(buffer) {
+ if (this.buffer) {
+ if (this.caretMarker && !this.isMinibuffer) {
+ this.caretMarker.destroy();
+ this.caretMarker = null;
+ }
+ this.buffer.removeEventListener(this._bufferEvents);
+ this.buffer.removeEventListener(this._moreBufferEvents);
+ }
+ this.buffer = buffer;
+ if (buffer) {
+ this.buffer.addEventListener(this._bufferEvents);
+ if (this.focusInside()) {
+ buffer.addEventListener(this._moreBufferEvents);
+ }
+ if (this.isMinibuffer) {
+ this.caretMarker = buffer.caretMarker;
+ } else {
+ this.caretMarker = buffer.createMarker(buffer.caretMarker.getPosition());
+ }
+ this._redrawBuffer();
+ this._redrawCaret(true);
+ this.centerOnCaret();
+ }
+ };
+
+ P.centerOnCaret = function() {
+ this.centerOnLine(this.buffer._rowcol.row);
+ };
+
+ P.centerOnLine = function(row) {
+ var line = this.getLineDivElement(row), div = this.getOverlaysContainer();
+ div.scrollTop = Math.round(line.offsetTop - div.clientHeight / 2 + line.offsetHeight / 2);
+ // this._redrawBuffer();
+ };
+
+ P.setModelineContent = function(html) {
+ this.getModelineElement().innerHTML = html;
+ };
+
+ P.deleteOtherFrames = function() {
+ this.ymacs.keepOnlyFrame(this);
+ };
+
+ P.deleteFrame = function() {
+ this.ymacs.deleteFrame(this);
+ };
+
+ P.vsplit = function(percent) {
+ if (percent == null) percent = "50%";
+ var cont = this.parent,
+ fr = this.ymacs.createFrame({ buffer: this.buffer }),
+ layout = new DlLayout(),
+ rb = new DlResizeBar({ widget: this, keepPercent: true, horiz: true, className: "Ymacs-splitbar-horiz" });
+ if (this._resizeBar)
+ this._resizeBar._widget = layout;
+ this._resizeBar = rb;
+ cont.replaceWidget(this, layout);
+ layout.packWidget(this, { pos: "top", fill: percent });
+ layout.packWidget(rb, { pos: "top" });
+ layout.packWidget(fr, { pos: "top", fill: "*" });
+ cont.__doLayout();
+ fr.centerOnCaret();
+ };
+
+ P.hsplit = function(percent) {
+ if (percent == null) percent = "50%";
+ var cont = this.parent,
+ fr = this.ymacs.createFrame({ buffer: this.buffer }),
+ layout = new DlLayout(),
+ rb = new DlResizeBar({ widget: this, keepPercent: true, className: "Ymacs-splitbar-vert" });
+ if (this._resizeBar)
+ this._resizeBar._widget = layout;
+ this._resizeBar = rb;
+ cont.replaceWidget(this, layout);
+ layout.packWidget(this, { pos: "left", fill: percent });
+ layout.packWidget(rb, { pos: "left" });
+ layout.packWidget(fr, { pos: "left", fill: "*" });
+ cont.__doLayout();
+ fr.centerOnCaret();
+ };
+
+ P.toggleLineNumbers = function() {
+ this.condClass(this.__lineNumbers =! this.__lineNumbers, "Ymacs-line-numbers");
+ };
+
+ function insertInText(div, col, el) {
+ // this is for empty lines
+ if (/^br$/i.test(div.firstChild.tagName)) {
+ div.insertBefore(el, div.firstChild);
+ return el;
+ }
+ var len = 0, OUT = {};
+ function walk(div) {
+ for (var i = div.firstChild; i; i = i.nextSibling) {
+ if (i.nodeType == 3 /* TEXT */) {
+ var clen = i.length;
+ if (len + clen > col) {
+ var pos = col - len; // here we should insert it, relative to the current node
+ var next = i.splitText(pos);
+ div.insertBefore(el, next);
+ throw OUT;
+ }
+ else if (len + clen == col) {
+ // this case is simpler; it could have been treated
+ // above, but let's optimize a bit since there's no need
+ // to split the text.
+ div.insertBefore(el, i.nextSibling);
+ throw OUT;
+ }
+ len += clen;
+ }
+ else if (i.nodeType == 1 /* ELEMENT */) {
+ walk(i); // recurse
+ }
+ }
+ };
+ try {
+ walk(div);
+ }
+ catch(ex) {
+ if (ex === OUT)
+ return el;
+ throw ex;
+ }
+ };
+
+ P.setMarkerAtPos = function(row, col) {
+ if (!row.tagName) // accept an element as well
+ row = this.getLineDivElement(row);
+ if (row)
+ return insertInText(row, col, DOM.createElement("span"));
+ };
+
+ P.__restartBlinking = function() {
+ this.__stopBlinking();
+ if (this.focusInside()) {
+ this.__caretTimer = setTimeout(this.__blinkCaret, 2 * BLINK_TIMEOUT);
+ }
+ };
+
+ P.__stopBlinking = function() {
+ clearTimeout(this.__caretTimer);
+ this.__showCaret();
+ };
+
+ P.__blinkCaret = function() {
+ DOM.condClass(this.getCaretElement(), this.BLINKING = ! this.BLINKING, "Ymacs-caret");
+ this.__caretTimer = setTimeout(this.__blinkCaret, BLINK_TIMEOUT);
+ };
+
+ P.__showCaret = function() {
+ DOM.addClass(this.getCaretElement(), "Ymacs-caret");
+ };
+
+ P._unhoverLine = function() {
+ if (this.__hoverLine != null) {
+ DOM.delClass(this.getLineDivElement(this.__hoverLine), "Ymacs-current-line");
+ this.__hoverLine = null;
+ }
+ };
+
+ P._redrawCaret = function(force) {
+ var isActive = this.ymacs.getActiveFrame() === this;
+ if (!force && !isActive)
+ return;
+
+ if (isActive && !this.isMinibuffer)
+ this.caretMarker.setPosition(this.buffer.caretMarker.getPosition());
+
+ var rc = this.buffer._rowcol;
+
+ if (this.highlightCurrentLine) {
+ this._unhoverLine();
+ DOM.addClass(this.getLineDivElement(rc.row), "Ymacs-current-line");
+ this.__hoverLine = rc.row;
+ }
+
+ // redraw the line where the caret was previously, so that it disappears from there
+ if (this.__prevCaretLine != null) {
+ this._on_bufferLineChange(this.__prevCaretLine);
+ }
+
+ // redraw current line if it's different
+ if (this.__prevCaretLine != rc.row) {
+ this.__prevCaretLine = rc.row;
+ this._on_bufferLineChange(rc.row);
+ }
+
+ // var caret = this.getCaretElement();
+ // if (caret)
+ // DOM.strip(caret);
+ // this._on_bufferLineChange(rc.row);
+
+ if (isActive)
+ this.__restartBlinking();
+
+ this.callHooks("onPointChange", rc.row, rc.col);
+ this.redrawModelineWithTimer(rc);
+ };
+
+ P._getLineHTML = function(row) {
+ var html = this.buffer.formatLineHTML(row, this.caretMarker);
+ // taking advantage of the fact that a literal > entered by the user will never appear in
+ // the generated HTML, since special HTMl characters are escaped.
+ var pos = html.indexOf("Ymacs-caret'>");
+ if (pos >= 0) {
+ html = html.substr(0, pos + 12)
+ + " id='" + this.__caretId + "'"
+ + html.substr(pos + 12);
+ }
+ return html;
+ };
+
+ P._redrawBuffer = function() {
+ this.setContent(this.buffer.code.map(function(line, i){
+ return this._getLineHTML(i).htmlEmbed("div", "line");
+ }, this).join(""));
+ };
+
+ P.coordinatesToRowCol = function(x, y) {
+ function findLine(r1, r2) {
+ if (r1 == r2)
+ return r1;
+ var row = Math.floor((r1 + r2) / 2),
+ div = self.getLineDivElement(row),
+ y1 = div.offsetTop,
+ y2 = y1 + div.offsetHeight - 1;
+ if (y2 < y)
+ return findLine(row + 1, r2);
+ if (y < y1)
+ return findLine(r1, row - 1);
+ return row;
+ };
+ function findCol(c1, c2) {
+ if (c1 == c2)
+ return c1;
+ var col = Math.floor((c1 + c2) / 2);
+ var p1 = self.coordinates(row, col),
+ p2 = self.coordinates(row, col + 1);
+ if (p2.x < x)
+ return findCol(col + 1, c2);
+ if (x < p1.x)
+ return findCol(c1, col - 1);
+ return col;
+ };
+ var self = this,
+ row = findLine(0, this.buffer.code.length - 1),
+ col = findCol(0, this.buffer.code[row].length);
+ return { row: row, col: col };
+ };
+
+ P.coordinates = function(row, col) {
+ var div = this.getLineDivElement(row);
+ var span = this.setMarkerAtPos(div, col);
+ var ret = { x: span.offsetLeft, y: div.offsetTop, h: div.offsetHeight };
+ DOM.trash(span);
+ return ret;
+ };
+
+ P.heightInLines = function() {
+ return Math.floor(this.getOverlaysContainer().clientHeight / this.getContentElement().firstChild.offsetHeight);
+ };
+
+ P.setOuterSize = P.setSize = function(sz) {
+ D.BASE.setOuterSize.apply(this, arguments);
+ DOM.setOuterSize(this.getOverlaysContainer(), sz.x, sz.y - this.getModelineElement().offsetHeight);
+ DOM.setOuterSize(this.getModelineElement(), sz.x);
+ };
+
+ P.redrawModeline = function(rc) {
+ this.setModelineContent(this.buffer.renderModelineContent(rc || this.caretMarker.getRowCol()));
+ };
+
+ /* -----[ event handlers ]----- */
+
+ P._on_bufferLineChange = function(row) {
+ var div = this.getLineDivElement(row);
+ if (div) {
+ //console.log("Redrawing line %d [%s]", row, this.buffer.code[row]);
+ div.innerHTML = this._getLineHTML(row);
+ }
+ };
+
+ P._on_bufferInsertLine = function(row, drawIt) {
+ var div = LINE_DIV.cloneNode(true);
+ this.getContentElement().insertBefore(div, this.getLineDivElement(row));
+ if (drawIt) {
+ div.innerHTML = this._getLineHTML(row);
+ }
+ };
+
+ P._on_bufferDeleteLine = function(row) {
+ DOM.trash(this.getLineDivElement(row));
+ };
+
+ P._on_bufferPointChange = function(rc, pos) {
+ this._redrawCaret();
+ };
+
+ P._on_bufferResetCode = function() {
+ this._redrawBuffer();
+ };
+
+ P._on_bufferOverwriteMode = function(om) {
+ this.condClass(om, "Ymacs-overwrite-mode");
+ };
+
+ P._on_bufferMessage = function(type, text, html, timeout) {
+ var anchor = this.isMinibuffer ? this.ymacs : this;
+ var popup = Ymacs_Message_Popup.get(0);
+ popup.popup({
+ content : html ? text : text.htmlEscape(),
+ widget : anchor,
+ anchor : anchor.getElement(),
+ align : { prefer: "CC", fallX1: "CC", fallX2: "CC", fallY1: "CC", fallY2: "CC" }
+ });
+ popup.hide(timeout || 5000);
+ };
+
+ P._on_bufferBeforeInteractiveCommand = function() {
+ this._unhoverLine();
+ Ymacs_Message_Popup.clearAll();
+ };
+
+ P._on_bufferAfterInteractiveCommand = function() {};
+
+ P._on_bufferProgressChange = function() {
+ this.redrawModelineWithTimer(null);
+ };
+
+ P.getOverlayId = function(name) {
+ return this.id + "-ovl-" + name;
+ };
+
+ P.getOverlayHTML = function(name, props) {
+ if (props.line1 == props.line2 && props.col1 == props.col2) {
+ this._on_bufferOverlayDelete(name, props);
+ return null;
+ }
+ var p1 = this.coordinates(props.line1, props.col1);
+ var p2 = this.coordinates(props.line2, props.col2);
+ var p0 = this.__lineNumbers ? this.coordinates(props.line1, 0) : { x: 0, y: 0 };
+ p1.x -= p0.x;
+ p2.x -= p0.x;
+ var str = String.buffer(
+ "<div id='", this.getOverlayId(name), "' class='Ymacs_Overlay ", name,
+ "' style='top:", p1.y, "px;left:", p0.x, "px'>"
+ );
+ if (props.line1 == props.line2) {
+ str("<div class='", name, "' style='margin-left:", p1.x,
+ "px; width:", p2.x - p1.x, "px;height:", p2.h, "px;'>&nbsp;</div>");
+ } else {
+ str("<div class='", name, "' style='margin-left:", p1.x, "px;height:", p1.h, "px;'>&nbsp;</div>");
+ if (props.line2 - props.line1 > 1)
+ str("<div class='", name, "' style='height:", p2.y - p1.y - p1.h, "px'></div>");
+ str("<div class='", name, "' style='width:", p2.x, "px;height:", p2.h, "px;'>&nbsp;</div>");
+ }
+ str("</div>");
+ return str.get();
+ };
+
+ P.getOverlaysCount = function() {
+ return this.getOverlaysContainer().childNodes.length - 1; // XXX: subtract the div.content; we need to revisit this if we add new elements.
+ };
+
+ P._on_bufferOverlayChange = function(name, props, isNew) {
+ var div = this.getOverlayHTML(name, props);
+ if (div) {
+ div = DOM.createFromHtml(div);
+ var p = this.getOverlaysContainer(),
+ old = !isNew && $(this.getOverlayId(name));
+ old ? p.replaceChild(div, old) : p.appendChild(div);
+ // this.condClass(this.getOverlaysCount() > 0, "Ymacs_Frame-hasOverlays");
+ }
+ };
+
+ P._on_bufferOverlayDelete = function(name, props, isNew) {
+ DOM.trash($(this.getOverlayId(name)));
+ // this.condClass(this.getOverlaysCount() > 0, "Ymacs_Frame-hasOverlays");
+ };
+
+ /* -----[ self events ]----- */
+
+ P._on_destroy = function() {
+ this.setBuffer(null);
+ this.__stopBlinking();
+ };
+
+ P._on_focus = function() {
+ window.focus();
+ // console.log("FOCUS for %s", this.buffer.name);
+ this.ymacs.setActiveFrame(this, true);
+ this.addClass("Ymacs_Frame-active");
+ if (!this.isMinibuffer) {
+ this.buffer.cmd("goto_char", this.caretMarker.getPosition());
+ }
+ this.buffer.addEventListener(this._moreBufferEvents);
+ this.__restartBlinking();
+ };
+
+ P._on_blur = function() {
+ // console.log("BLUR for %s", this.buffer.name);
+ if (!this.isMinibuffer) {
+ this.caretMarker.setPosition(this.buffer.caretMarker.getPosition());
+ }
+ this.buffer.removeEventListener(this._moreBufferEvents);
+ this.__stopBlinking();
+ };
+
+ var CLICK_COUNT = 0, CLICK_COUNT_TIMER = null, CLICK_LAST_TIME = null;
+ function CLEAR_CLICK_COUNT() { CLICK_COUNT = null };
+
+ P._on_mouseDown = function(ev) {
+ clearTimeout(CLICK_COUNT_TIMER);
+ CLICK_COUNT++;
+ CLICK_COUNT_TIMER = CLEAR_CLICK_COUNT.delayed(DBL_CLICK_SPEED);
+
+ this.__restartBlinking();
+ var pos = ev.computePos(this.getContentElement()),
+ rc = this.coordinatesToRowCol(pos.x, pos.y),
+ buf = this.buffer;
+
+ buf.clearTransientMark();
+ buf.cmd("goto_char", buf._rowColToPosition(rc.row, rc.col));
+ buf.callInteractively("keyboard_quit");
+ if (CLICK_COUNT == 1) {
+ buf.ensureTransientMark();
+ DlEvent.captureGlobals(this._dragSelectCaptures);
+ }
+ else if (CLICK_COUNT == 2) {
+ buf.cmd("backward_word");
+ buf.cmd("forward_word_mark");
+ }
+ else if (CLICK_COUNT == 3) {
+ buf.cmd("beginning_of_line");
+ buf.cmd("end_of_line_mark");
+ }
+ else if (CLICK_COUNT == 4) {
+ buf.cmd("backward_paragraph");
+ buf.cmd("forward_whitespace");
+ buf.cmd("beginning_of_line");
+ buf.cmd("forward_paragraph_mark");
+ }
+
+ EX();
+ };
+
+ function _dragSelect_onMouseMove(ev) {
+ var pos = ev.computePos(this.getContentElement()),
+ rc = this.coordinatesToRowCol(pos.x, pos.y);
+ this.buffer.cmd("goto_char", this.buffer._rowColToPosition(rc.row, rc.col));
+ this.buffer.ensureTransientMark();
+ this.ensureCaretVisible();
+ };
+
+ function _dragSelect_onMouseUp(ev) {
+ DlEvent.releaseGlobals(this._dragSelectCaptures);
+ };
+
+ P._on_keyDown = function(ev) {
+ if (!is_gecko) {
+ var ki = window.KEYBOARD_INSANITY, code = ev.keyCode;
+ if (code in ki.modifiers)
+ EX();
+ if ((code in ki.letters || code in ki.digits || code in ki.symbols) && !(ev.ctrlKey || ev.altKey)) {
+ return; // to be handled by the upcoming keypress event
+ }
+ ev.charCode = ki.getCharCode(code, ev.shiftKey);
+ if (ev.charCode)
+ ev.keyCode = 0;
+ if (this.buffer._handleKeyEvent(ev))
+ EX();
+ }
+ };
+ P._on_keyPress = function(ev) {
+ if (!is_gecko)
+ ev.keyCode = 0;
+ if (this.buffer._handleKeyEvent(ev))
+ EX();
+ var one = this.buffer.cmd("wrap_status");
+ if(one =="Wrap At Edge")
+ {
+ this.buffer.cmd("wrap_at_edge");
+ }
+ };
+
+
+ P._on_keyUp = function(ev) {
+ };
+
+ P._on_resize = function() {
+ this.centerOnCaret.delayed(1, this);
+ };
+
+});
+
+DEFINE_CLASS("Ymacs_Message_Popup", DlPopup, function(D, P) {
+ D.FIXARGS = function(args) {
+ args.focusable = false;
+ args.autolink = false;
+ args.zIndex = 5000;
+ };
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-interactive.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-interactive.js
new file mode 100644
index 0000000..565c264
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-interactive.js
@@ -0,0 +1,286 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-exception.js
+
+(function(){
+
+ /*
+ * Ymacs_Interactive(args_description, function_reference)
+ *
+ * This is a wrapper that makes it easy to define "interactive" commands. Pass two arguments: arguments
+ * description (args), and a function (func). args can be null, or a string, an array or a function. When null
+ * it is assumed that the function should not receive any arguments. When an array or a string, it contains
+ * some argument descriptions similar to Emacs:
+ *
+ * http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes
+ *
+ * (note that Emacs does not take a list for this argument).
+ *
+ * Ymacs_Interactive returns func. When not called interactively, the code should supply all the required
+ * arguments and the function is called with no performance penalty. To call it interactively, use
+ * func.ymacsCallInteractively(), which will read arguments from the minibuffer according to their description.
+ */
+
+ window.Ymacs_Interactive = function(args, func) {
+ if (arguments.length == 1) {
+ func = args;
+ args = null;
+ } else {
+ var documentation;
+ if (!(func instanceof Function)) {
+ documentation = func;
+ func = arguments[2];
+ func.ymacsDoc = documentation;
+ }
+ }
+ func.ymacsInteractive = true;
+ if (args instanceof Function) {
+ func.ymacsGetArgs = args;
+ }
+ else if (args != null) {
+ if (!(args instanceof Array)) {
+ var m = /^[\^\@\*]+/.exec(args);
+ if (m) {
+ m = m[0];
+ args = args.substr(m.length);
+ if (m.indexOf("^") >= 0) {
+ func.ymacsMarkExtend = true;
+ }
+ if (m.indexOf("*") >= 0) {
+ func.ymacsWarnReadonly = true;
+ }
+ if (m.indexOf("@") >= 0) {
+ func.ymacsSelectFrame = true;
+ }
+ }
+ if (args)
+ args = args.split(/\n+/);
+ }
+ if (args) {
+ var collect,
+ execute = function() {
+ collect.append(Array.$(arguments));
+ return this.callInteractively(func, collect, true);
+ };
+ while (args.length > 0) {
+ execute = createArgumentFunction(args.pop(), function(next) {
+ collect.append(Array.$(arguments, 1));
+ next.call(this);
+ }.$(null, execute));
+ }
+ func.ymacsCallInteractively = function(){
+ collect = [];
+ return execute.call(this);
+ };
+ }
+ }
+ return func;
+ };
+
+ window.Ymacs_Interactive_X = function(func) {
+ return Ymacs_Interactive("p", function(n){
+ if (n == null) n = 1;
+ n.times(func, this);
+ });
+ };
+
+ var $TRUE = (function(){});
+ $TRUE.toString = function() { return "" };
+ $TRUE.empty = true;
+
+ /* -----[ argument reader functions ]----- */
+
+ function prompt(arg) {
+ var pr = this.getPrefixArg(true /* noDiscard */);
+ if (pr) {
+ arg = pr + " " + arg;
+ }
+ this.cmd("minibuffer_prompt", arg);
+ };
+
+ function read_function_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_function", cont);
+ // XXX: enforce it!
+ };
+
+ function read_existing_buffer_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_buffer", cont);
+ // XXX: enforce it!
+ };
+
+ function read_buffer_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_buffer", cont);
+ };
+
+ function read_character(arg, cont) {
+
+ };
+
+ function read_command_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_command", cont);
+ // XXX: enforce it!
+ };
+
+ function get_point(arg, cont) {
+ cont.call(this, this.point());
+ };
+
+ function get_mouse_event(arg, cont) {
+
+ };
+
+ function irrelevant(arg, cont) {
+ cont.call(this, null);
+ };
+
+ function read_key_sequence(arg, cont) {
+
+ };
+
+ function read_key_sequence2(arg, cont) {
+
+ };
+
+ function get_mark(arg, cont) {
+ cont.call(this, this.markMarker.getPosition());
+ };
+
+ function read_arbitrary_text(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_string", null, cont);
+ };
+
+ function read_number(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_number", cont);
+ };
+
+ function read_number_or_prefix(arg, cont) {
+ var n = parseInt(this.getPrefixArg(), 10);
+ if (!isNaN(n))
+ cont.call(this, n);
+ else
+ read_number.call(this, arg, cont);
+ };
+
+ function get_numeric_prefix(arg, cont) {
+ var n = parseInt(this.getPrefixArg(), 10);
+ if (isNaN(n))
+ n = null;
+ cont.call(this, n);
+ };
+
+ function get_raw_prefix(arg, cont) {
+ arg = this.getPrefixArg();
+ if (arg === "")
+ arg = $TRUE;
+ cont.call(this, arg);
+ };
+
+ function get_point_and_mark(arg, cont) {
+ var r = this.getRegion();
+ cont.call(this, r.begin, r.end);
+ };
+
+ function read_key_sequence3(arg, cont) {
+
+ };
+
+ function read_variable_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_variable", cont);
+ };
+
+ function read_existing_file_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_existing_file", cont);
+ };
+
+ function read_file_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_file", cont);
+ };
+
+ function read_file_or_directory_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_file_or_directory", cont);
+ };
+
+ function read_existing_directory_name(arg, cont) {
+ prompt.call(this, arg);
+ this.cmd("minibuffer_read_directory", cont);
+ };
+
+ var ARG_READERS = {
+ a: read_function_name,
+ b: read_existing_buffer_name,
+ B: read_buffer_name,
+ c: read_character,
+ C: read_command_name,
+ d: get_point,
+ e: get_mouse_event,
+ i: irrelevant,
+ k: read_key_sequence,
+ K: read_key_sequence2,
+ m: get_mark,
+ M: read_arbitrary_text,
+ n: read_number,
+ N: read_number_or_prefix,
+ p: get_numeric_prefix,
+ P: get_raw_prefix,
+ r: get_point_and_mark,
+ s: read_arbitrary_text,
+ U: read_key_sequence3,
+ v: read_variable_name,
+
+ f: read_existing_file_name,
+ F: read_file_name,
+ G: read_file_or_directory_name,
+ D: read_existing_directory_name
+
+ // S: no reader for interned symbols in Ymacs
+ // no x, X, z and Z either
+ };
+
+ function createArgumentFunction(arg, cont) {
+ var code = arg.charAt(0);
+ arg = arg.substr(1);
+ return ARG_READERS[code].$(null, arg, cont);
+ };
+
+})();
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keyboard.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keyboard.js
new file mode 100644
index 0000000..c15fd35
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keyboard.js
@@ -0,0 +1,106 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// This file tries to define some keyboard constants based on the
+// sheer insanity of browser inconsistencies described here:
+//
+// http://unixpapa.com/js/key.html
+//
+// Kudos for that work!
+
+(function(){
+
+ var letters = {};
+ for (var i = 65; i <= 90; ++i)
+ letters[i] = [ i, i + 32 ];
+ letters[32] = [ 32, 32 ];
+
+ var modifiers = [ 16, 17, 18, 20, 144 ].toHash(true);
+
+ var digit_charcodes = [
+ [ 49, 33 ],
+ [ 50, 64 ],
+ [ 51, 35 ],
+ [ 52, 36 ],
+ [ 53, 37 ],
+ [ 54, 94 ],
+ [ 55, 38 ],
+ [ 56, 42 ],
+ [ 57, 40 ],
+ [ 48, 41 ]
+ ];
+
+ var digits = [ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 ].toHash(function(k, i) {
+ return digit_charcodes[i];
+ });
+
+ var symbol_charcodes = [
+ [ 59, 58 ],
+ [ 61, 43 ],
+ [ 44, 60 ],
+ [ 45, 95 ],
+ [ 46, 62 ],
+ [ 47, 63 ],
+ [ 96, 126 ],
+ [ 91, 123 ],
+ [ 92, 124 ],
+ [ 93, 125 ],
+ [ 39, 34 ]
+ ];
+
+ var symbols = ( is_gecko ? [ 59, 61, 188, 109, 190, 191, 192, 219, 220, 221, 222 ]
+ : is_opera ? [ 59, 61, 44, 45, 46, 47, 96, 91, 92, 93, 39 ]
+ : [ 186, 187, 188, 189, 190, 191, 192, 219, 220, 221, 222 ] ).toHash(function(k, i) {
+ return symbol_charcodes[i];
+ });
+
+ var arrows = [ 37, 38, 39, 40 ].toHash(true);
+
+ var specials = [ 45, 46, 36, 35, 33, 34, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123 ].toHash(true);
+
+ function getCharCode(code, shift) {
+ var a = letters[code] || digits[code] || symbols[code];
+ return a ? shift ? a[1] : a[0] : null;
+ };
+
+ window.KEYBOARD_INSANITY = {
+ letters : letters,
+ modifiers : modifiers,
+ digits : digits,
+ symbols : symbols,
+ arrows : arrows,
+ specials : specials,
+ getCharCode : getCharCode
+ };
+
+})();
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap-emacs.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap-emacs.js
new file mode 100644
index 0000000..64c9891
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap-emacs.js
@@ -0,0 +1,264 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-keymap.js
+
+// This is the default keymap, as configured in
+// Ymacs_Buffer::makeDefaultKeymap. It follows closely the standard
+// Emacs keybindings, with some small deviations that match my taste
+// (search for "my stuff" below).
+
+// It would be nice to have more options, such as an Eclipse keymap,
+// or Visual Studio -- but I'm not familiar with any of them.
+// Contributions welcome.
+
+// A keymap inherits from Ymacs_Keymap and should define its bindings
+// in D.KEYS. They can also define a defaultHandler property to take
+// whatever action they consider necessary -- for example the Isearch
+// keymap will, by default, print the entered character in the
+// minibuffer and trigger a search action. Isearch mode is almost
+// completely defined in a keymap -- with the minor note that
+// isearch_forward and isearch_backward are assigned below to key
+// combinations; once pressed, they will push the Isearch keymap onto
+// the buffer's keymap stack, and it will be used until isearch is
+// ended.
+
+/* KEY DEFINITIONS. A key is generally defined in standard Emacs
+ notation, with the following notes:
+
+ - it is possible to define multiple keys at once for the same
+ operation, by using the "&&" combination (separate with spaces
+ from the actual keys)
+
+ - some special characters are named literally; their names contain
+ more than one character. The available names are defined in
+ DlKeyboard (see keyboard.js in DynarchLIB). Examples:
+ ARROW_RIGHT, PAGE_UP, etc. but also SPACE and DASH.
+
+ Normally you would define commands using Ymacs_Buffer.newCommands
+ (see ymacs-commands.js) and specify the command name for key
+ bindings, but you can specify a function as well, if you want:
+
+ "C-8": function() {
+ alert("You pressed CTRL-8");
+ }
+
+ It is advised to define commands for more than simple cases, for
+ two reasons:
+
+ 1. they can be used for "non-interactive" calls too
+
+ 2. the command name is saved in this.currentCommand /
+ this.previousCommand, which is useful in a number of cases.
+
+*/
+
+DEFINE_SINGLETON("Ymacs_Keymap_Emacs", Ymacs_Keymap, function(D, P){
+
+ var TMPL_INFO = String.template(
+ "<table>",
+ "<tr><td style='text-align: right; font-weight: bold'>Char:</td><td><tt> $ch </tt></td></tr>",
+ "<tr><td style='text-align: right; font-weight: bold'>Char code:</td><td> $code / 0x$codeHex </td></tr>",
+ "<tr><td style='text-align: right; font-weight: bold'>Position:</td><td> $point </td></tr>",
+ "<tr><td style='text-align: right; font-weight: bold'>Mark:</td><td> $mark </td></tr>",
+ "<tr><td style='text-align: right; font-weight: bold'>Buffer size:</td><td> $sizeKB </td></tr>",
+ "</table>"
+ );
+
+ D.KEYS = {
+ // movement
+ "ARROW_UP && C-p" : "backward_line",
+ "ARROW_DOWN && C-n" : "forward_line",
+ "ARROW_LEFT && C-b" : "backward_char",
+ "ARROW_RIGHT && C-f" : "forward_char",
+ "HOME" : "beginning_of_indentation_or_line",
+ "END && C-e" : "end_of_line",
+ "C-c C-c" : "sub_bullet",
+ "C-a" : "beginning_of_line",
+ "C-HOME && M-<" : "beginning_of_buffer",
+ "C-END && M->" : "end_of_buffer",
+ "C-ARROW_RIGHT && M-f" : "forward_word",
+ "C-ARROW_LEFT && M-b" : "backward_word",
+ "C-ARROW_DOWN" : "forward_paragraph",
+ "C-ARROW_UP" : "backward_paragraph",
+ "C-l" : "recenter_top_bottom",
+ "PAGE_UP && M-v" : "scroll_up",
+ "PAGE_DOWN && C-v" : "scroll_down",
+
+ // transient mark
+ "S-ARROW_UP && S-C-p" : "backward_line_mark",
+ "S-ARROW_DOWN && S-C-n" : "forward_line_mark",
+ "S-ARROW_LEFT && S-C-b" : "backward_char_mark",
+ "S-ARROW_RIGHT && S-C-f" : "forward_char_mark",
+ "S-C-ARROW_RIGHT && S-M-f" : "forward_word_mark",
+ "S-C-ARROW_LEFT && S-M-b" : "backward_word_mark",
+ "S-C-ARROW_DOWN" : "forward_paragraph_mark",
+ "S-C-ARROW_UP" : "backward_paragraph_mark",
+ "S-HOME" : "beginning_of_indentation_or_line_mark",
+ "S-C-a" : "beginning_of_line_mark",
+ "S-END" : "end_of_line_mark",
+ "S-C-HOME" : "beginning_of_buffer_mark",
+ "S-C-END" : "end_of_buffer_mark",
+
+ // basic editing
+ "BACKSPACE" : "backward_delete_char",
+ "DELETE && C-d" : "delete_char",
+ "ENTER && C-m" : "newline",
+ "M-d && C-DELETE" : "kill_word",
+ "C-BACKSPACE && M-BACKSPACE && M-DELETE" : "backward_kill_word",
+ "C-k" : "kill_line",
+ "C-y && S-INSERT" : "yank",
+ "M-y" : "yank_pop",
+ "C-SPACE" : "set_mark_command",
+ "C-x C-x" : "exchange_point_and_mark",
+ "C-w" : "kill_region",
+ "M-t" : "transpose_words",
+ "C-t" : "transpose_chars",
+ "C-x C-t" : "transpose_lines",
+ "M-w" : "copy_region_as_kill",
+ "M-c" : "capitalize_word",
+ "M-u" : "upcase_word",
+ "M-l" : "downcase_word",
+ "F11" : "nuke_trailing_whitespace",
+ "TAB" : "indent_line",
+ "C-M-\\" : "indent_region",
+ "M-q" : "fill_paragraph",
+ "C-/ && C-x u && C-_ && C-z" : "undo",
+ "INSERT" : "overwrite_mode",
+ "M-s" : "center_line",
+ "M-/" : "dabbrev_expand",
+ "C-s" : "isearch_forward",
+ "C-r" : "isearch_backward",
+ "M-C-s" : "isearch_forward_regexp",
+ "M-C-r" : "isearch_backward_regexp",
+ "C-u" : "universal_argument",
+ "M-g" : "goto_line",
+ "C-x h" : "mark_whole_buffer",
+ "C-g" : "keyboard_quit",
+
+ // vertical editing
+ "C-x r t" : "string_rectangle",
+ "C-x r c" : "clear_rectangle",
+ "C-x r k" : "kill_rectangle",
+ "C-x r y" : "yank_rectangle",
+
+ // buffers
+ "C-x C-ARROW_RIGHT && C-x ARROW_RIGHT && C-TAB" : "next_buffer",
+ "C-x C-ARROW_LEFT && C-x ARROW_LEFT && C-S-TAB" : "previous_buffer",
+ "C-x b" : "switch_to_buffer",
+ "C-x k" : "kill_buffer",
+
+ // frames
+ "C-x 0" : "delete_frame",
+ "C-x 1" : "delete_other_frames",
+ "C-x 2" : "split_frame_vertically",
+ "C-x 3" : "split_frame_horizontally",
+ "C-x o" : "other_frame",
+ "C-x l" : "toggle_line_numbers",
+ "C-c C-o" : "org-open-at-point",
+ //"C-c C-l" : "Links",
+
+ // eval
+ "M-x" : "execute_extended_command",
+
+ // necessary evil
+ "C-S-y" : "yank_from_operating_system",
+ "M-S-w" : "copy_for_operating_system",
+ "C-S-w" : "kill_for_operating_system",
+
+ // my stuff, sorry if these have different meanings in the standard Emacs keys
+ "M-S-y" : "yank_shift", // that's the reverse of yank_shift
+ "C-c /" : "close_last_xml_tag",
+ "S-BACKSPACE" : "backward_delete_whitespace",
+ "S-DELETE" : "delete_whitespace",
+ "C-M-d" : "delete_region_or_line",
+ "M-ENTER" : "start_next_paragraph",
+ "M-S-q" : "fill_paragraph_no_prefix",
+ "C-M-|" : "cperl_lineup",
+ "C-F4" : "kill_buffer",
+ "M-ARROW_LEFT" : [ "windmove", "left" ],
+ "M-ARROW_RIGHT" : [ "windmove", "right" ],
+ "M-ARROW_UP" : [ "windmove", "up" ],
+ "M-ARROW_DOWN" : [ "windmove", "down" ],
+
+ // others
+ "C-x =": function() {
+ var ch = this.charAt(), chname = ch;
+ if (ch == " ")
+ chname = "<SPACE>";
+ else if (ch == "\n")
+ chname = "<NEWLINE>";
+ else if (ch == "-")
+ chname = "<DASH>";
+
+ this.signalInfo(TMPL_INFO({
+ ch : chname.htmlEscape(),
+ code : ch.charCodeAt(0),
+ codeHex : ch.charCodeAt().hex(),
+ point : this.point(),
+ mark : this.markMarker.getPosition(),
+ size : this.getCodeSize(),
+ sizeKB : this.getCodeSize().formatBytes(2)
+ }), true);
+ }
+ };
+
+ P.defaultHandler = [ "self_insert_command" ];
+
+});
+
+DEFINE_SINGLETON("Ymacs_Keymap_UniversalArgument", Ymacs_Keymap, function(D, P){
+
+ P.defaultHandler = [ Ymacs_Interactive("^", function(){
+ var ev = this.interactiveEvent(),
+ ch = String.fromCharCode(ev.charCode),
+ prefix = this.getPrefixArg(true);
+ if (ev.charCode && (/^[0-9]$/.test(ch) || (ch === "-" && prefix === "")) && !ev.altKey && !ev.ctrlKey) {
+ prefix += ch;
+ this.setPrefixArg(prefix);
+ if (!this.isMinibuffer) {
+ this.whenMinibuffer(function(mb){
+ mb.cmd("insert", " ", ch);
+ });
+ }
+ return true;
+ }
+ this.popKeymap(Ymacs_Keymap_UniversalArgument());
+ return false;
+ }) ];
+
+ P.attached = function(buffer) {
+ buffer.setPrefixArg("");
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap-isearch.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap-isearch.js
new file mode 100644
index 0000000..593b772
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap-isearch.js
@@ -0,0 +1,181 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-keymap.js
+
+DEFINE_SINGLETON("Ymacs_Keymap_ISearch", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "C-g && ESCAPE": [ "isearch_abort", true ],
+ "C-w": "isearch_yank_word_or_char",
+ "C-s": "isearch_forward",
+ "C-r": "isearch_backward",
+ "BACKSPACE": function() {
+ if (this.getMinibuffer().point() > this._isearchContext.mbMark.getPosition()) {
+ this.getMinibuffer().cmd("backward_delete_char");
+ this.cmd("goto_char", this._isearchContext.point);
+ updateIsearch.call(this, this._isearchContext.forward);
+ }
+ },
+ "ENTER": "isearch_abort"
+ };
+
+ D.CONSTRUCT = function() {
+ this.defaultHandler = [ "isearch_printing_char" ];
+ };
+
+ function initIsearch(fw) {
+ if (!this._isearchContext) {
+ this.pushKeymap(Ymacs_Keymap_ISearch());
+ this.cmd("set_mark_command", this.point());
+ this.setMinibuffer(fw ? "I-Search: " : "I-Search backward: ");
+ this._isearchContext = {
+ forward : fw,
+ point : this.point(),
+ mbMark : this.getMinibuffer().createMarker(null, true)
+ };
+ return true;
+ }
+ };
+
+ function updateIsearch(fw) {
+ this._isearchContext.forward = fw;
+ this._isearchContext.point = this.point();
+ var text = getText(this);
+ if (!/\S/.test(text) && this._isearchLastText) {
+ this.getMinibuffer()._placeUndoBoundary();
+ this.getMinibuffer().cmd("insert", this._isearchLastText);
+ text = this._isearchLastText;
+ }
+ return doSearch.call(this, text);
+ };
+
+ function doSearch(text) {
+ if (text == null)
+ text = getText(this);
+ var found = this.cmd("bind_variables", { case_fold_search: text == text.toLowerCase() },
+ this.cmd,
+ this._isearchContext.forward ? "search_forward" : "search_backward",
+ text);
+ if (found) {
+ this.cmd("ensure_caret_visible");
+ var rc_begin = this._positionToRowCol(this.point() + (this._isearchContext.forward ? -1 : 1) * text.length);
+ this.setOverlay("isearch", {
+ line1: rc_begin.row, line2: this._rowcol.row,
+ col1: rc_begin.col, col2: this._rowcol.col
+ });
+ }
+ return found;
+ };
+
+ function getText(o) {
+ return o.cmd("isearch_get_search_text");
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ isearch_get_search_text: Ymacs_Interactive(function() {
+ if (this._isearchContext) {
+ return this.getMinibuffer()._bufferSubstring(this._isearchContext.mbMark);
+ }
+ }),
+
+ isearch_forward: Ymacs_Interactive(function() {
+ if (!initIsearch.call(this, true)) {
+ if (!updateIsearch.call(this, true))
+ this.signalError("No more forward occurrences of the search text");
+ }
+ }),
+
+ isearch_forward_regexp: Ymacs_Interactive(function() {
+ this.signalError("Not implemented, but should be easy. Volunteers?");
+ }),
+
+ isearch_backward_regexp: Ymacs_Interactive(function() {
+ this.signalError("Not implemented, but should be easy. Volunteers?");
+ }),
+
+ isearch_backward: Ymacs_Interactive(function() {
+ if (!initIsearch.call(this, false)) {
+ if (!updateIsearch.call(this, false))
+ this.signalError("No more backward occurrences of the search text");
+ }
+ }),
+
+ isearch_yank_word_or_char: Ymacs_Interactive(function() {
+ var pos = this.point(),
+ pos2 = this.cmd("save_excursion", function(){
+ this.cmd("forward_word");
+ return this.point();
+ });
+ if (pos2 != pos) {
+ var word = this._bufferSubstring(pos, pos2);
+ this.getMinibuffer()._placeUndoBoundary();
+ this.getMinibuffer().cmd("insert", word.toLowerCase());
+ word = getText(this);
+ if (this._isearchContext.forward)
+ this.cmd("goto_char", pos2 - word.length);
+ doSearch.call(this, word);
+ }
+ }),
+
+ isearch_printing_char: Ymacs_Interactive(function() {
+ var ev = this.interactiveEvent();
+ if (ev.charCode && !ev.ctrlKey && !ev.altKey) {
+ this.getMinibuffer().cmd("self_insert_command");
+ this.cmd("goto_char", this._isearchContext.point);
+ doSearch.call(this, getText(this));
+ return ev.domStop = true;
+ } else if (ev.keyCode != 0 || ev.ctrlKey || ev.altKey) {
+ this.cmd("isearch_abort");
+ return false;
+ }
+ }),
+
+ isearch_abort: Ymacs_Interactive(function(cancelled) {
+ if (!cancelled)
+ this._isearchLastText = getText(this);
+ this.setMinibuffer("");
+ this.popKeymap(Ymacs_Keymap_ISearch());
+ this._isearchContext.mbMark.destroy();
+ this._isearchContext = null;
+ if (cancelled)
+ this.cmd("exchange_point_and_mark");
+ this.deleteOverlay("isearch");
+ this.deleteOverlay("isearch-lazy");
+ return true;
+ })
+
+ });
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap.js
new file mode 100644
index 0000000..142570a
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-keymap.js
@@ -0,0 +1,167 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+DEFINE_CLASS("Ymacs_Keymap", null, function(D, P){
+
+ var REVERSE_KEYS = {};
+ Object.foreach(DlKeyboard, function(val, key) {
+ if (typeof val == "number")
+ REVERSE_KEYS[val] = key;
+ });
+
+ D.CONSTRUCT = function() {
+ this.definitions = Object.makeCopy(this.__originalDefs);
+ };
+
+ P.FINISH_OBJECT_DEF = function() {
+ this.__originalDefs = {};
+ var keys = this.constructor.KEYS;
+ if (keys)
+ this.defineKeys(keys);
+ };
+
+ P.parseKey = function(str) {
+ var key = {};
+ var a = str.split(/-/);
+ a.reverse();
+ a.foreach(function(c, i){
+ if (i == 0) {
+ if (typeof DlKeyboard[c] == "number")
+ key.keyCode = DlKeyboard[c];
+ else {
+ a[i] = c.toLowerCase();
+ key.charCode = a[i].charCodeAt(0);
+ }
+ } else switch(c) {
+ case "C": key.ctrlKey = true; break;
+ case "M": key.metaKey = true; break;
+ case "S": key.shiftKey = true; break;
+ }
+ });
+ a.reverse();
+ var c = a.pop();
+ key.str = a.sort().join("-");
+ if (key.str)
+ key.str += "-";
+ key.str += c;
+ return key;
+ };
+
+ D.unparseKey = function(ev) {
+ var key, modifiers = [];
+ if (ev.keyCode in REVERSE_KEYS)
+ key = REVERSE_KEYS[ev.keyCode];
+ else if (ev.charCode) {
+ if (ev.charCode == 32)
+ key = "SPACE";
+ else if (ev.charCode == 45)
+ key = "DASH";
+ else if (ev.charCode == 58)
+ key = "COLON";
+ else if (ev.charCode == 41)
+ key = "CLOSED ROUND BRACKET";
+ else if (ev.charCode == 125)
+ key = "CLOSED CURLY BRACKET";
+ else
+ key = String.fromCharCode(ev.charCode).toLowerCase();
+ }
+ if (ev.ctrlKey)
+ modifiers.push("C");
+ if (ev.altKey)
+ modifiers.push("M");
+ if (ev.shiftKey && (ev.charCode && /^[a-zA-Z0-9]$/.test(key) || ev.keyCode))
+ modifiers.push("S");
+ modifiers.sort();
+ modifiers = modifiers.join("-");
+ if (modifiers)
+ modifiers += "-";
+ return modifiers + key;
+ };
+
+ P.defineKey = function(key, func, args) {
+ if (func instanceof Array) {
+ args = func.slice(1);
+ func = func[0];
+ }
+ key = key.trim().split(/\s*&&\s*/);
+ if (key.length > 1) {
+ key.foreach(function(key){
+ this.defineKey(key, func, args);
+ }, this);
+ } else {
+ key = key[0].trim();
+ var dfn = this.definitions || this.__originalDefs;
+ if (key.indexOf(" ") >= 0) {
+ var a = key.split(/\s+/);
+ key = a.pop();
+ a.foreach(function(key){
+ key = this.parseKey(key).str;
+ if (!dfn[key])
+ dfn[key] = {};
+ dfn = dfn[key];
+ }, this);
+ }
+ key = this.parseKey(key);
+ dfn[key.str] = [ func, args ];
+ }
+ };
+
+ P.defineKeys = function(map) {
+ Object.foreach(map, function(func, key){
+ this.defineKey(key, func);
+ }, this);
+ };
+
+ P.getHandler = function(keys) {
+ var handler = null, def = this.definitions;
+ keys.foreach(function(key){
+ var tmp = handler ? handler[key] : def[key];
+ if (tmp) {
+ handler = tmp;
+ if (handler instanceof Array)
+ $BREAK();
+ }
+ else if (handler) {
+ handler = null;
+ $BREAK();
+ }
+ });
+ return handler;
+ };
+
+ P.attached = Function.noop;
+ P.detached = Function.noop;
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-marker.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-marker.js
new file mode 100644
index 0000000..ca9c1c0
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-marker.js
@@ -0,0 +1,105 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+/* -----[ markers are objects that hold a position which is
+ automatically maintained as text is inserted or
+ removed ]----- */
+
+DEFINE_CLASS("Ymacs_Marker", null, function(D, P){
+
+ D.DEFAULT_ARGS = {
+ position : [ "pos" , null ],
+ editor : [ "editor" , null ],
+ before : [ "before" , false ],
+ name : [ "name" , null ]
+ };
+
+ D.CONSTRUCT = function() {
+ this.editor.markers.push(this);
+ this.rowcol = null;
+ this.onChange = [];
+ };
+
+ P.destroy = function() {
+ this.editor.markers.remove(this);
+ this.editor = null;
+ };
+
+ P.editorChange = function(pos, diff, min) {
+ var p = this.position;
+ if (this.before)
+ --p;
+ if (diff != 0 && pos <= p) {
+ this.rowcol = null;
+ this.position += diff;
+ if (this.position < min)
+ this.position = min;
+ this.callHooks(this.onChange, this.position);
+ }
+ };
+
+ P.callHooks = function(a, arg) {
+ for (var i = a.length; --i >= 0;)
+ a[i].call(this.editor, arg);
+ };
+
+ P.getPosition = function() {
+ return this.position;
+ };
+
+ P.setPosition = function(pos, noHooks, force) {
+ if (force || this.position != pos) {
+ this.rowcol = null;
+ this.position = pos;
+ if (!noHooks)
+ this.callHooks(this.onChange, this.position);
+ }
+ };
+
+ P.getRowCol = function() {
+ return this.rowcol || (this.rowcol = this.editor._positionToRowCol(this.position));
+ };
+
+ P.updateMarkers = function(delta) {
+ this.editor._updateMarkers(this.getPosition(), delta);
+ };
+
+ P.swap = function(other, noHooks, force) {
+ var tmp = this.getPosition();
+ this.setPosition(other.getPosition(), noHooks, force);
+ other.setPosition(tmp, noHooks, force);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-minibuffer.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-minibuffer.js
new file mode 100644
index 0000000..01fd0f2
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-minibuffer.js
@@ -0,0 +1,429 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+// @require ymacs-keymap.js
+
+Ymacs_Buffer.newMode("minibuffer_mode", function(){
+ var marker = this.createMarker(0, true);
+ var changed_vars = this.setq({
+ minibuffer_end_marker: marker
+ });
+ var keymap = Ymacs_Keymap_Minibuffer();
+ this.pushKeymap(keymap);
+ return function() {
+ this.setq(changed_vars);
+ marker.destroy();
+ this.popKeymap(keymap);
+ };
+});
+
+(function(){
+
+ var $popupActive = false;
+ var $menu = null, $item = null;
+ function popupCompletionMenu(frame, list) {
+ if ($menu)
+ $menu.destroy();
+ $menu = new DlVMenu({});
+ list.foreach(function(item){
+ var data = item;
+ if (typeof item != "string") {
+ data = item.completion;
+ item = item.label;
+ }
+ new DlMenuItem({ parent: $menu, label: item.htmlEscape(), data: data });
+ });
+ var popup = Ymacs_Completion_Popup.get();
+ popup.popup({
+ timeout: 0,
+ content: $menu,
+ align: {
+ prefer: "Tr",
+ fallX1: "_r",
+ fallX2: "_L",
+ fallY1: "B_",
+ fallY2: "T_"
+ },
+ anchor: frame.getCaretElement(),
+ widget: frame,
+ onHide: function() {
+ $popupActive = false;
+ // $menu.destroy();
+ $item = null;
+ $menu = null;
+ },
+ isContext: true
+ });
+ $popupActive = true;
+ };
+
+ function read_with_continuation(completions, cont, validate) {
+ this.whenMinibuffer(function(mb){
+ var changed_vars = mb.setq({
+ completion_list: completions,
+ minibuffer_validation: function(what){
+ if (what == null)
+ what = mb.cmd("minibuffer_contents");
+ if (validate)
+ return validate.call(this, mb, what);
+ return true; // accept anything by default
+ }.$(this),
+ minibuffer_continuation: function(what){
+ mb.setq(changed_vars);
+ if (cont)
+ cont.call(this, what);
+ }.$(this)
+ });
+ });
+ };
+
+ function filename_completion(mb, str) {
+ var info = this.ymacs.ls_getFileDirectory(str),
+ dir = info.dir,
+ other = info.other,
+ path = info.path,
+ last = other[0];
+ if (other.length != 1)
+ throw new Ymacs_Exception("Not found");
+ if (typeof dir[last] == "string")
+ return [ path.concat([ last ]).join("/") ]; // fully completed
+ var completions = [];
+ for (var i in dir) {
+ if (i.indexOf(last) == 0) {
+ completions.push(i);
+ }
+ }
+ var prefix = completions.common_prefix();
+ if (prefix != last) {
+ if (completions.length == 1 && typeof dir[prefix] != "string")
+ prefix += "/";
+ mb.cmd("minibuffer_replace_input", path.concat([ prefix ]).join("/"));
+ }
+ else if (completions.length == 1) {
+ // XXX: do we ever get here?
+ throw new Ymacs_Exception("Single completion");
+ }
+ else if (completions.length == 0) {
+ throw new Ymacs_Exception("No completions");
+ }
+ else {
+ completions = completions.map(function(name){
+ if (typeof dir[name] != "string")
+ name += "/";
+ return {
+ label: name,
+ completion: path.concat([ name ]).join("/")
+ };
+ });
+ popupCompletionMenu(this.getMinibufferFrame(), completions);
+ }
+ return null;
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ minibuffer_prompt: function(prompt, nofocus) {
+ this.whenMinibuffer(function(mb){
+ var f = this.getMinibufferFrame();
+ mb.setCode("");
+ mb.cmd("prevent_undo", function(){
+ mb.cmd("insert", prompt);
+ });
+ mb.getq("minibuffer_end_marker").setPosition(mb.point());
+ f._redrawCaret(true);
+ if (!nofocus)
+ f.focus();
+ });
+ },
+
+ minibuffer_read_number: function(cont) {
+ read_with_continuation.call(this, null, cont, function(mb, text){
+ var n = parseInt(text, 10);
+ if (isNaN(n))
+ mb.signalError("Please enter a number");
+ return !isNaN(n);
+ });
+ },
+
+ minibuffer_read_command: function(cont) {
+ var commandNames = Array.hashKeys(this.COMMANDS).grep(function(cmd){
+ return this.COMMANDS[cmd].ymacsInteractive;
+ }, this).sort();
+ read_with_continuation.call(this, commandNames, cont, function(mb, name){
+ var cmd = this.COMMANDS[name],
+ ret = cmd && cmd.ymacsInteractive;
+ if (!ret) {
+ mb.signalError("No such command: " + name);
+ }
+ return ret;
+ });
+ },
+
+ minibuffer_read_function: function(cont) {
+ var commandNames = Array.hashKeys(this.COMMANDS).sort();
+ read_with_continuation.call(this, commandNames, cont, function(mb, name){
+ var cmd = this.COMMANDS[name],
+ ret = !!cmd;
+ if (!ret)
+ mb.signalError("No such function: " + name);
+ return ret;
+ });
+ },
+
+ minibuffer_read_buffer: function(cont) {
+ this.whenYmacs(function(ymacs){
+ var bufferNames = ymacs.buffers.map("name");
+ bufferNames.push(bufferNames.shift());
+ read_with_continuation.call(this, bufferNames, cont);
+ handle_tab.call(this);
+ });
+ },
+
+ minibuffer_read_string: function(completions, cont) {
+ read_with_continuation.call(this, completions, cont);
+ },
+
+ minibuffer_read_variable: function(cont) {
+ var tmp = this.globalVariables;
+ Object.merge(tmp, this.variables);
+ var completions = Array.hashKeys(tmp).grep(function(name){
+ return !/^\*/.test(name);
+ }).sort();
+ read_with_continuation.call(this, completions, cont
+ // XXX: seems like a good idea, but it doesn't work
+ // XXX: need to refactor the signalInfo stuff. It doesn't show up
+ // currently because the buffer frame is not active, or something...
+ // , function(mb, name){
+ // var val = this.getq(name);
+ // mb.signalInfo("Current value of " + name + ": " + val);
+ // return true;
+ // }
+ );
+ },
+
+ minibuffer_read_existing_file: function(cont) {
+ var dir = this.ymacs.ls_getFileDirectory(this.name).path.join("/");
+ if (dir) dir += "/";
+ this.cmd("minibuffer_replace_input", dir);
+ read_with_continuation.call(this, filename_completion, cont, function(mb, name){
+ var ret = this.ymacs.ls_getFileContents(name, true);
+ if (!ret)
+ mb.signalError("No such file: " + name);
+ return ret;
+ });
+ },
+
+ minibuffer_read_file: function(cont) {
+ var dir = this.ymacs.ls_getFileDirectory(this.name).path.join("/");
+ if (dir) dir += "/";
+ read_with_continuation.call(this, filename_completion, cont);
+ },
+
+ minibuffer_read_file_or_directory: function(cont) {
+ var dir = this.ymacs.ls_getFileDirectory(this.name).path.join("/");
+ if (dir) dir += "/";
+ read_with_continuation.call(this, filename_completion, cont);
+ },
+
+ minibuffer_read_directory: function(cont) {
+ var dir = this.ymacs.ls_getFileDirectory(this.name).path.join("/");
+ if (dir) dir += "/";
+ read_with_continuation.call(this, filename_completion, cont);
+ },
+
+ minibuffer_prompt_end: function() {
+ return this.whenMinibuffer(function(mb){
+ return mb.getq("minibuffer_end_marker").getPosition();
+ });
+ },
+
+ minibuffer_contents: function() {
+ return this.whenMinibuffer(function(mb){
+ return mb._bufferSubstring(mb.getq("minibuffer_end_marker"));
+ });
+ },
+
+ minibuffer_replace_input: function(value) {
+ this.whenMinibuffer(function(mb){
+ mb._replaceText(mb.getq("minibuffer_end_marker"), mb.getCodeSize(), value);
+ this.getMinibufferFrame()._redrawCaret(true);
+ });
+ },
+
+ minibuffer_complete: function() {
+ this.whenMinibuffer(function(mb){
+ var a = mb.getq("completion_list"),
+ str = mb.cmd("minibuffer_contents"),
+ re = str.replace(/([\[\]\(\)\{\}\.\*\+\?\|\\])/g, "\\$1").replace(/([_-])/g, "[^_-]*[_-]");
+ re = new RegExp("^" + re, "i");
+ if (a instanceof Function) {
+ a = a.call(this, mb, str, re);
+ if (!a)
+ return;
+ }
+ else if (a && a.length > 0) {
+ a = a.grep(function(cmd){
+ return re.test(cmd);
+ });
+ }
+ if (!a || a.length == 0) {
+ mb.signalError("No completions");
+ }
+ else {
+ var prefix = a.common_prefix();
+ if (prefix != str) {
+ mb.cmd("minibuffer_replace_input", prefix);
+ }
+ else if (a.length == 1) {
+ mb.signalError("Sole completion");
+ }
+ else {
+ popupCompletionMenu(this.getMinibufferFrame(), a);
+ }
+ }
+ });
+ },
+
+ minibuffer_complete_and_exit: function() {
+ this.whenMinibuffer(function(mb){
+ if (mb.getq("minibuffer_validation").call(mb)) {
+ mb.cmd("minibuffer_keyboard_quit", this.getq("minibuffer_continuation"));
+ }
+ });
+ },
+
+ minibuffer_keyboard_quit: function(cont) {
+ this.whenMinibuffer(function(mb){
+ var text = this.cmd("minibuffer_contents");
+ mb.setCode("");
+ this.ymacs.getActiveFrame().focus();
+ (function(text){
+ if (cont)
+ cont.call(this, text);
+ this.getPrefixArg();
+ }).delayed(1, this, text);
+ });
+ DlPopup.clearAllPopups();
+ }
+
+ });
+
+ function handle_completion(how) {
+ var old_item = $item, w;
+ switch (how) {
+ case "next":
+ if ($item == null)
+ $item = -1;
+ $item = $menu.children().rotateIndex(++$item);
+ break;
+ case "prev":
+ if ($item == null)
+ $item = 0;
+ $item = $menu.children().rotateIndex(--$item);
+ break;
+ }
+ if (old_item != null) {
+ w = $menu.children(old_item);
+ w.callHooks("onMouseLeave");
+ }
+ old_item = $item;
+ w = $menu.children($item);
+ w.callHooks("onMouseEnter");
+ };
+
+ function handle_arrow_down() {
+ if ($popupActive) {
+ return handle_completion.call(this, "next");
+ }
+ };
+
+ function handle_arrow_up() {
+ if ($popupActive) {
+ return handle_completion.call(this, "prev");
+ }
+ };
+
+ function handle_enter() {
+ if ($popupActive) {
+ if ($item != null) {
+ this.cmd("minibuffer_replace_input", $menu.children()[$item].userData);
+ DlPopup.clearAllPopups();
+ } else {
+ this.signalError("Select something...");
+ }
+ } else {
+ this.cmd("minibuffer_complete_and_exit");
+ }
+ };
+
+ function handle_tab() {
+ if (!$popupActive)
+ this.cmd("minibuffer_complete");
+ handle_arrow_down.call(this); // autoselect the first one anyway
+ };
+
+ function handle_s_tab() {
+ handle_arrow_up.call(this);
+ };
+
+ function handle_escape() {
+ if ($popupActive) {
+ DlPopup.clearAllPopups();
+ } else {
+ this.cmd("minibuffer_keyboard_quit");
+ }
+ };
+
+ DEFINE_SINGLETON("Ymacs_Keymap_Minibuffer", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "C-g" : "minibuffer_keyboard_quit",
+ "TAB" : handle_tab,
+ "S-TAB" : handle_s_tab,
+ "ARROW_DOWN" : handle_arrow_down,
+ "ARROW_UP" : handle_arrow_up,
+ "ENTER" : handle_enter,
+ "ESCAPE" : handle_escape
+ };
+
+ P.defaultHandler = [ function() {
+ DlPopup.clearAllPopups();
+ return false; // say it's not handled though
+ } ];
+
+ });
+
+})();
+
+DEFINE_CLASS("Ymacs_Completion_Popup", DlCompletionPopup);
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-css.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-css.js
new file mode 100644
index 0000000..40cb87a
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-css.js
@@ -0,0 +1,263 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+Ymacs_Tokenizer.define("css", function(stream, tok){
+
+ var PARSER = {
+ next : next,
+ copy : copy,
+ indentation : indentation
+ };
+
+ var $parens = [];
+ var $passedParens = [];
+ var $cont = [];
+ var $inString = null;
+ var $inComment = null;
+
+ function copy() {
+ var c = resume.context = {
+ parens : $parens.slice(0),
+ passedParens : $passedParens.slice(0),
+ cont : $cont.slice(0),
+ inString : $inString,
+ inComment : $inComment
+ };
+ function resume() {
+ $parens = c.parens.slice(0);
+ $passedParens = c.passedParens.slice(0);
+ $cont = c.cont.slice(0);
+ $inString = c.inString;
+ $inComment = c.inComment;
+ return PARSER;
+ };
+ return resume;
+ };
+
+ function INDENT_LEVEL() {
+ return tok.buffer.getq("indent_level");
+ };
+
+ var OPEN_PAREN = {
+ "(" : ")",
+ "{" : "}",
+ "[" : "]"
+ };
+
+ var CLOSE_PAREN = {
+ ")" : "(",
+ "}" : "{",
+ "]" : "["
+ };
+
+ function isOpenParen(ch) {
+ return OPEN_PAREN[ch];
+ };
+
+ function isCloseParen(ch) {
+ return CLOSE_PAREN[ch];
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function readComment() {
+ var line = stream.lineText(), pos = line.indexOf("*/", stream.col);
+ var m = /^\s*\*+/.exec(line.substr(stream.col));
+ if (m) {
+ foundToken(stream.col, stream.col += m[0].length, "mcomment-starter");
+ }
+ if (pos >= 0) {
+ $cont.pop();
+ $inComment = null;
+ foundToken(stream.col, pos, "mcomment");
+ foundToken(pos, pos += 2, "mcomment-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, "mcomment");
+ stream.col = line.length;
+ }
+ };
+
+ function readString(end, type) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, type);
+ foundToken(stream.col, ++stream.col, type + "-stopper");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), tmp;
+ if (stream.lookingAt("/*")) {
+ $inComment = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, stream.col += 2, "mcomment-starter");
+ $cont.push(readComment);
+ }
+ else if (ch === '"' || ch === "'") {
+ $inString = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch, "string"));
+ }
+ else if ((tmp = isOpenParen(ch))) {
+ $parens.push({ line: stream.line, col: stream.col, type: ch });
+ foundToken(stream.col, ++stream.col, "open-paren");
+ }
+ else if ((tmp = isCloseParen(ch))) {
+ var p = $parens.pop();
+ if (!p || p.type != tmp) {
+ foundToken(stream.col, ++stream.col, "error");
+ } else {
+ // circular reference; poor browsers will leak. mwuhahahaha
+ p.closed = { line: stream.line, col: stream.col, opened: p };
+ $passedParens.push(p);
+ foundToken(stream.col, ++stream.col, "close-paren");
+ }
+ }
+ else if ((tmp = stream.lookingAt(/^([a-zA-z-]+):/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "keyword");
+ foundToken(stream.col, ++stream.col, "operator");
+ }
+ else if ((tmp = stream.lookingAt(/^([0-9.]+)(px|pt|em|ex|in|cm|mm|%)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "number");
+ foundToken(stream.col, stream.col += tmp[2].length, "type");
+ }
+ else if ((tmp = stream.lookingAt(/^(\.[a-zA-Z0-9_:-]+)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "function-name");
+ }
+ else if ((tmp = stream.lookingAt(/^(#[a-zA-Z0-9_:-]+)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "constant");
+ }
+ else if ((tmp = stream.lookingAt(/^(@[a-zA-Z0-9_:-]+)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "builtin");
+ }
+ else if ((tmp = stream.lookingAt(/^(url|none|auto|bold|italic|normal|inherit|print|screen|all)/))) {
+ foundToken(stream.col, stream.col += tmp[1].length, "builtin");
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ function indentation() {
+ // no indentation for continued strings
+ if ($inString)
+ return 0;
+
+ var row = stream.line;
+ var currentLine = stream.lineText();
+ var indent = 0;
+
+ if ($inComment) {
+ var commentStartLine = stream.lineText($inComment.line);
+ indent = $inComment.c1 + 1;
+ if (!/^\s*\*/.test(currentLine)) {
+ // align with the first non-whitespace and non-asterisk character in the comment
+ var re = /[^\s*]/g;
+ re.lastIndex = $inComment.c1 + 1;
+ var m = re.exec(commentStartLine);
+ if (m)
+ indent = m.index;
+ }
+ return indent;
+ }
+
+ var p = $parens.peek();
+ if (p) {
+ // check if the current line closes the paren
+ var re = new RegExp("^\\s*\\" + OPEN_PAREN[p.type]);
+ var thisLineCloses = re.test(currentLine);
+
+ // Check if there is text after the opening paren. If so, indent to that column.
+ var line = stream.lineText(p.line);
+ re = /\S/g;
+ re.lastIndex = p.col + 1;
+ var m = re.exec(line);
+ if (m) {
+ // but if this line closes the paren, better use the column of the open paren
+ indent = thisLineCloses ? p.col : m.index;
+ }
+ else {
+ // Otherwise we should indent to one level more than the indentation of the line
+ // containing the opening paren.
+ indent = stream.lineIndentation(p.line) + INDENT_LEVEL();
+
+ // but if this line closes the paren, then back one level
+ if (thisLineCloses)
+ indent -= INDENT_LEVEL();
+ }
+ }
+
+ return indent;
+ };
+
+ return PARSER;
+
+});
+
+DEFINE_SINGLETON("Ymacs_Keymap_CSS", Ymacs_Keymap);
+Ymacs_Keymap_CSS().defineKeys({
+ "ENTER" : "newline_and_indent",
+ ": && } && )" : "c_insert_and_indent"
+});
+
+Ymacs_Buffer.newMode("css_mode", function(){
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "css" }));
+ var was_paren_match = this.cmd("paren_match_mode", true);
+ this.pushKeymap(Ymacs_Keymap_CSS());
+
+ return function() {
+ this.setTokenizer(tok);
+ if (!was_paren_match)
+ this.cmd("paren_match_mode", false);
+ this.popKeymap(Ymacs_Keymap_CSS());
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-js.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-js.js
new file mode 100644
index 0000000..1265bc6
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-js.js
@@ -0,0 +1,431 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+/* -----[ This defines the tokenizer ]----- */
+
+(function(){
+
+ var KEYWORDS = "abstract break case catch class const \
+continue debugger default delete do else \
+enum export extends final finally for \
+function goto if implements import in \
+instanceof interface native new package \
+private protected public return static \
+super switch synchronized throw \
+throws transient try typeof var void let \
+yield volatile while with".qw();
+
+ var KEYWORDS_TYPE = "boolean byte char double float int long short void \
+Array Date Function Math Number Object RegExp String".qw();
+
+ var KEYWORDS_CONST = "false null undefined Infinity NaN true arguments this".qw();
+
+ var KEYWORDS_BUILTIN = "Infinity NaN \
+Packages decodeURI decodeURIComponent \
+encodeURI encodeURIComponent eval isFinite isNaN parseFloat \
+parseInt undefined window document alert prototype constructor".qw();
+
+ var ALLOW_REGEXP_AFTER = /[\[({,;+\-*=?&|!:][\x20\t\n\xa0]*$|return\s+$|typeof\s+$/;
+
+ function isLetter(ch) {
+ return ch.toLowerCase() != ch.toUpperCase();
+ };
+
+ function isNameStart(ch) {
+ return ch && (isLetter(ch) || /^[_$]$/.test(ch));
+ };
+
+ function isNameChar(ch) {
+ return ch && (isLetter(ch) || /^[0-9_$]$/.test(ch));
+ };
+
+ var OPEN_PAREN = {
+ "(" : ")",
+ "{" : "}",
+ "[" : "]"
+ };
+
+ var CLOSE_PAREN = {
+ ")" : "(",
+ "}" : "{",
+ "]" : "["
+ };
+
+ function isOpenParen(ch) {
+ return OPEN_PAREN[ch];
+ };
+
+ function isCloseParen(ch) {
+ return CLOSE_PAREN[ch];
+ };
+
+ function JS_PARSER(KEYWORDS, KEYWORDS_TYPE, KEYWORDS_CONST, KEYWORDS_BUILTIN, stream, tok) {
+
+ var $cont = [],
+ $parens = [],
+ $passedParens = [],
+ $inComment = null,
+ $inString = null,
+ PARSER = {
+ next : next,
+ copy : copy,
+ indentation : indentation
+ };
+
+ function INDENT_LEVEL() {
+ return stream.buffer.getq("indent_level");
+ };
+
+ function copy() {
+ var context = restore.context = {
+ cont : $cont.slice(0),
+ inComment : $inComment,
+ inString : $inString,
+ parens : $parens.slice(0),
+ passedParens : $passedParens.slice(0)
+ };
+ function restore() {
+ $cont = context.cont.slice(0);
+ $inComment = context.inComment;
+ $inString = context.inString;
+ $parens = context.parens.slice(0);
+ $passedParens = context.passedParens.slice(0);
+ return PARSER;
+ };
+ return restore;
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function readName() {
+ var col = stream.col, ch = stream.get(),
+ name = ch;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (!isNameChar(ch))
+ break;
+ name += ch;
+ stream.nextCol();
+ }
+ return ch && { line: stream.line, c1: col, c2: stream.col, id: name };
+ };
+
+ function readComment() {
+ var line = stream.lineText(), pos = line.indexOf("*/", stream.col);
+ var m = /^\s*\*+/.exec(line.substr(stream.col));
+ if (m) {
+ foundToken(stream.col, stream.col += m[0].length, "mcomment-starter");
+ }
+ if (pos >= 0) {
+ $cont.pop();
+ $inComment = null;
+ foundToken(stream.col, pos, "mcomment");
+ foundToken(pos, pos += 2, "mcomment-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, "mcomment");
+ stream.col = line.length;
+ }
+ };
+
+ function readString(end, type) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, type);
+ foundToken(stream.col, ++stream.col, type + "-stopper");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ // function readLiteralRegexp() {
+ // var m;
+ // if (readString("/", "regexp") && (m = stream.lookingAt(/^[gmsiy]+/)))
+ // foundToken(stream.col, stream.col += m[0].length, "regexp-modifier");
+ // };
+
+ function readLiteralRegexp() {
+ var ch, esc = false, inset = 0, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (isOpenParen(ch) && !esc && !inset)
+ inset++;
+ if (isCloseParen(ch) && !esc) {
+ inset--;
+ if (inset < 0)
+ inset = 0;
+ }
+ if (ch === "/" && !esc && !inset) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, "regexp");
+ foundToken(stream.col, ++stream.col, "regexp-stopper");
+ var m = stream.lookingAt(/^[gmsiy]+/);
+ if (m)
+ foundToken(stream.col, stream.col += m[0].length, "regexp-modifier");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, "regexp");
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), m, tmp;
+ if (stream.lookingAt("/*")) {
+ $inComment = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, stream.col += 2, "mcomment-starter");
+ $cont.push(readComment);
+ }
+ else if (stream.lookingAt("//")) {
+ foundToken(stream.col, stream.col += 2, "comment-starter");
+ foundToken(stream.col, stream.col = stream.lineLength(), "comment");
+ }
+ else if (ch === '"' || ch === "'") {
+ $inString = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch, "string"));
+ }
+ else if ((m = stream.lookingAt(/^0x[0-9a-f]+|^[0-9]*\.?[0-9]+/))) {
+ foundToken(stream.col, stream.col += m[0].length, "number");
+ }
+ else if (isNameStart(ch) && (tmp = readName())) {
+ var type = tmp.id in KEYWORDS ? "keyword"
+ : tmp.id in KEYWORDS_TYPE ? "type"
+ : tmp.id in KEYWORDS_CONST ? "constant"
+ : tmp.id in KEYWORDS_BUILTIN ? "builtin"
+ : null;
+ foundToken(tmp.c1, tmp.c2, type);
+ }
+ else if ((tmp = isOpenParen(ch))) {
+ $parens.push({ line: stream.line, col: stream.col, type: ch });
+ foundToken(stream.col, ++stream.col, "open-paren");
+ }
+ else if ((tmp = isCloseParen(ch))) {
+ var p = $parens.pop();
+ if (!p || p.type != tmp) {
+ foundToken(stream.col, ++stream.col, "error");
+ } else {
+ // circular reference; poor browsers will leak. mwuhahahaha
+ p.closed = { line: stream.line, col: stream.col, opened: p };
+ $passedParens.push(p);
+ foundToken(stream.col, ++stream.col, "close-paren");
+ }
+ }
+ else if (ch === "/" && ALLOW_REGEXP_AFTER.test(stream.textBefore())) {
+ foundToken(stream.col, ++stream.col, "regexp-starter");
+ $cont.push(readLiteralRegexp);
+ }
+ else if ((m = stream.lookingAt(/^\s+$/))) {
+ foundToken(stream.col, stream.col += m[0].length, "trailing-whitespace");
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ function indentation() {
+
+ // no indentation for continued strings
+ if ($inString)
+ return 0;
+
+ var row = stream.line;
+ var currentLine = stream.lineText();
+ var indent = 0;
+
+ if ($inComment) {
+ var commentStartLine = stream.lineText($inComment.line);
+ indent = $inComment.c1 + 1;
+ if (!/^\s*\*/.test(currentLine)) {
+ // align with the first non-whitespace and non-asterisk character in the comment
+ var re = /[^\s*]/g;
+ re.lastIndex = $inComment.c1 + 1;
+ var m = re.exec(commentStartLine);
+ if (m)
+ indent = m.index;
+ }
+ return indent;
+ }
+
+ var p = $parens.peek();
+ if (p) {
+ // check if the current line closes the paren
+ var re = new RegExp("^\\s*\\" + OPEN_PAREN[p.type]);
+ var thisLineCloses = re.test(currentLine);
+
+ // Check if there is text after the opening paren. If so, indent to that column.
+ var line = stream.lineText(p.line);
+ re = /\S/g;
+ re.lastIndex = p.col + 1;
+ var m = re.exec(line);
+ if (m) {
+ // but if this line closes the paren, better use the column of the open paren
+ indent = thisLineCloses ? p.col : m.index;
+ }
+ else {
+ // Otherwise we should indent to one level more than the indentation of the line
+ // containing the opening paren.
+ indent = stream.lineIndentation(p.line) + INDENT_LEVEL();
+
+ // but if this line closes the paren, then back one level
+ if (thisLineCloses)
+ indent -= INDENT_LEVEL();
+ }
+ }
+
+ // Some more adjustments for continued statements. Since we don't really have a
+ // rigorous parser, we have to rely on other regexps here, which sucks but will do for
+ // now.
+
+ if (row > 0) {
+ var before = stream.textBefore();
+ if (/\)\s*$/.test(before) && $passedParens.length > 0) {
+ // Ends in a paren, could be an if, while or for which demands smart
+ // indentation on the current line, let's check it out.
+
+ // Note that the passedParen saved for that close paren is actually
+ // the opening one, which suits us greatly.
+ p = $passedParens.peek();
+ var stmtLine = stream.lineText(p.line);
+ if (/^\s*(if|for|while)\W/.test(stmtLine))
+ indent += INDENT_LEVEL();
+ }
+ else if (/\Welse\s*$/.test(before)) {
+ indent += INDENT_LEVEL();
+ }
+ }
+
+ // switch labels use half the indent level, which is my favorite
+ if (/^\s*(case|default)\W/.test(currentLine))
+ indent -= INDENT_LEVEL() / 2;
+
+ return indent;
+ };
+
+ return PARSER;
+
+ };
+
+ Ymacs_Tokenizer.define("js", JS_PARSER.$C(
+ KEYWORDS.toHash(true),
+ KEYWORDS_TYPE.toHash(true),
+ KEYWORDS_CONST.toHash(true),
+ KEYWORDS_BUILTIN.toHash(true)
+ ));
+
+ /* -----[ DynarchLIB ]----- */
+
+ var DL_KEYWORDS_BUILTIN = KEYWORDS_BUILTIN.concat("\
+DEFINE_CLASS DEFINE_SINGLETON DEFINE_HIDDEN_CLASS \
+DEFAULT_ARGS DEFAULT_EVENTS \
+FIXARGS CONSTRUCT BEFORE_BASE FINISH_OBJECT_DEF \
+D P $".qw());
+
+ Ymacs_Tokenizer.define("js-dynarchlib", JS_PARSER.$C(
+ KEYWORDS.toHash(true),
+ KEYWORDS_TYPE.toHash(true),
+ KEYWORDS_CONST.toHash(true),
+ DL_KEYWORDS_BUILTIN.toHash(true)
+ ));
+
+})();
+
+/* -----[ Keymap for C-like language mode ]----- */
+
+DEFINE_SINGLETON("Ymacs_Keymap_CLanguages", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "ENTER" : "newline_and_indent",
+ "} && ) && ] && : && ; && { && ( && [ && *" : "c_insert_and_indent"
+ // "{" : "c_electric_block"
+ };
+
+});
+
+/* -----[ Mode entry point ]----- */
+
+Ymacs_Buffer.newMode("javascript_mode", function(useDL) {
+ var tok = this.tokenizer;
+ var keymap = Ymacs_Keymap_CLanguages();
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: useDL ? "js-dynarchlib" : "js" }));
+ this.pushKeymap(keymap);
+ var was_paren_match = this.cmd("paren_match_mode", true);
+
+ return function() {
+ this.setTokenizer(tok);
+ this.popKeymap(keymap);
+ if (!was_paren_match)
+ this.cmd("paren_match_mode", false);
+ };
+
+});
+
+Ymacs_Buffer.newCommands({
+
+ javascript_dl_mode: Ymacs_Interactive(function() {
+ return this.cmd("javascript_mode", true);
+ }),
+
+ c_electric_block: Ymacs_Interactive(function() {
+ this.cmd("indent_line");
+ this.cmd("insert", "{\n\n}");
+ this.cmd("indent_line");
+ this.cmd("backward_line", 1);
+ this.cmd("indent_line");
+ }),
+
+ c_insert_and_indent: Ymacs_Interactive(function() {
+ var ret;
+ if ((ret = this.cmd("self_insert_command"))) {
+ this.cmd("indent_line");
+ return ret;
+ }
+ })
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-lisp.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-lisp.js
new file mode 100644
index 0000000..dede250
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-lisp.js
@@ -0,0 +1,419 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+(function(){
+
+ Ymacs_Buffer.newCommands({
+
+ lisp_open_paren: Ymacs_Interactive(function(what) {
+ if (what == null)
+ what = "(";
+ what += isOpenParen(what);
+ this.cmd("insert", what);
+ this.cmd("backward_char");
+ }),
+
+ lisp_close_paren: Ymacs_Interactive(function(what) {
+ var re = new RegExp("\\s*\\" + what, "ig");
+ if (this.cmd("looking_at", re))
+ this._deleteText(this.point(), this.matchData.after);
+ this.cmd("insert", what);
+ }),
+
+ lisp_close_all_parens: Ymacs_Interactive(function() {
+ var p = this.tokenizer.getParserForLine(this._rowcol.row);
+ if (p) {
+ // this kind of sucks, we need to rewind the stream to that location..
+ var s = this.tokenizer.stream;
+ s.line = this._rowcol.row;
+ s.col = 0;
+ try {
+ while (s.col < this._rowcol.col)
+ p.next();
+ } catch(ex) {}
+ p = p.copy().context.parens; // these are still-to-close
+ p.r_foreach(function(p){
+ this.cmd("lisp_close_paren", isOpenParen(p.type));
+ }, this);
+ }
+ })
+
+ });
+
+ // XXX: much of the parser is actually copied from ymacs-mode-js.js. I should somehow unify
+ // the duplicate code.
+
+ var SPECIAL_FORMS = "\
+deftype defstruct defclass \
+defmacro defun defmethod defgeneric defpackage in-package defreadtable in-readtable \
+when cond unless etypecase typecase ctypecase \
+lambda let load-time-value quote macrolet \
+progn prog1 prog2 progv go flet the \
+if throw eval-when multiple-value-prog1 unwind-protect let* \
+ignore-errors handler-case case \
+labels function symbol-macrolet block tagbody catch locally \
+return return-from setq multiple-value-call".qw().toHash();
+
+ var COMMON_MACROS = "loop do while".qw().toHash();
+
+ var CONSTANTS = "t nil".qw().toHash();
+
+ var OPEN_PAREN = {
+ "(" : ")",
+ "{" : "}",
+ "[" : "]"
+ };
+
+ var CLOSE_PAREN = {
+ ")" : "(",
+ "}" : "{",
+ "]" : "["
+ };
+
+ var DEFINES_FUNCTION = "defun defgeneric defmethod".qw().toHash();
+
+ var DEFINES_TYPE = "deftype defclass defstruct".qw().toHash();
+
+ var FORM_ARGS = {
+ "if" : "3+",
+ "when" : "1*",
+ "lambda" : "1*",
+ "unless" : "1*",
+ "defun" : "2*",
+ "defgeneric" : "2*",
+ "defmethod" : "2*",
+ "defclass" : "2*",
+ "defmacro" : "2*",
+ "progn" : "0*",
+ "prog1" : "0*",
+ "prog2" : "0*",
+ "let" : "1*"
+ };
+
+ function isOpenParen(ch) {
+ return OPEN_PAREN[ch];
+ };
+
+ function isCloseParen(ch) {
+ return CLOSE_PAREN[ch];
+ };
+
+ function isConstituent(ch) {
+ return ch.toLowerCase() != ch.toUpperCase() ||
+ /^[-0-9!#$%&*+./:<=>?@\[\]\^_\{\}~]$/i.test(ch);
+ };
+
+ function isConstituentStart(ch) {
+ return ch != "#" && isConstituent(ch);
+ };
+
+ // the tokenizer function
+ Ymacs_Tokenizer.define("lisp", function(stream, tok){
+
+ var $cont = [],
+ $inString = false,
+ $inComment = false,
+ $quote = null,
+ $parens = [],
+ $passedParens = [],
+ $backList = [],
+ $list = [],
+ PARSER = { next: next, copy: copy, indentation: indentation };
+
+ function copy() {
+ var context = restore.context = {
+ cont : $cont.slice(0),
+ quote : $quote,
+ inString : $inString,
+ inComment : $inComment,
+ parens : $parens.slice(0),
+ passedParens : $passedParens.slice(0),
+ backList : $backList.slice(0),
+ list : $list.slice(0)
+ };
+ function restore() {
+ $cont = context.cont.slice(0);
+ $inString = context.inString;
+ $quote = context.quote;
+ $inComment = context.inComment;
+ $parens = context.parens.slice(0);
+ $passedParens = context.passedParens.slice(0);
+ $backList = context.backList.slice(0),
+ $list = context.list.slice(0);
+ return PARSER;
+ };
+ return restore;
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function newArg(what) {
+ if (what == null)
+ what = { c1: stream.col };
+ $list.push(what);
+ };
+
+ function INDENT_LEVEL() { return stream.buffer.getq("indent_level"); };
+
+ function readName() {
+ var col = stream.col, ch = stream.get(),
+ name = ch;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (!isConstituent(ch))
+ break;
+ name += ch;
+ stream.nextCol();
+ }
+ return ch && { line: stream.line, c1: col, c2: stream.col, id: name.toLowerCase() };
+ };
+
+ function readString(end, type) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ $inString = null;
+ foundToken(start, stream.col, type);
+ foundToken(stream.col, ++stream.col, type + "-stopper");
+ return true;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, type);
+ };
+
+ function readComment() {
+ var line = stream.lineText(), pos = line.indexOf("|#", stream.col);
+ var m = /^\s*\|+/.exec(line.substr(stream.col));
+ if (m) {
+ foundToken(stream.col, stream.col += m[0].length, "mcomment-starter");
+ }
+ if (pos >= 0) {
+ $cont.pop();
+ $inComment = null;
+ foundToken(stream.col, pos, "mcomment");
+ foundToken(pos, pos += 2, "mcomment-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, "mcomment");
+ stream.col = line.length;
+ }
+ };
+
+ function isForm(form) {
+ var f = $list && $list.length > 0 && $list[0].id;
+ if (f) {
+ f = f.toLowerCase();
+ if (form == null)
+ return f;
+ return typeof form == "string" ? f == form : f in form;
+ }
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), tmp;
+ if ((tmp = stream.lookingAt(/^#\\(Space|Newline|.?)/i))) {
+ newArg();
+ foundToken(stream.col, stream.col += tmp[0].length, "constant");
+ }
+ else if (stream.lookingAt(/^#\x27[^(]/)) {
+ newArg();
+ stream.col += 2;
+ tmp = readName();
+ foundToken(tmp.c1, tmp.c2, "function-name");
+ }
+ else if (stream.lookingAt("#|")) {
+ $inComment = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, stream.col += 2, "mcomment-starter");
+ $cont.push(readComment);
+ }
+ else if ((tmp = stream.lookingAt(/^;+/))) {
+ foundToken(stream.col, stream.col += tmp[0].length, "comment-starter");
+ foundToken(stream.col, stream.col = stream.lineLength(), "comment");
+ }
+ else if (ch === '"') {
+ newArg();
+ $inString = { line: stream.line, c1: stream.col };
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch, "string"));
+ }
+ else if ((tmp = stream.lookingAt(/^[+-]?(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*)(\x2f(#x[0-9a-f]+|#o[0-7]+|#b[01]+|[0-9]*\.?[0-9]+e?[0-9]*))?/))) { // Dude, WTF...
+ newArg();
+ foundToken(stream.col, stream.col += tmp[0].length, "number");
+ }
+ else if ((tmp = isOpenParen(ch))) {
+ newArg();
+ $backList.push($list);
+ $list = [];
+ $parens.push({ line: stream.line, col: stream.col, type: ch });
+ foundToken(stream.col, ++stream.col, "open-paren");
+ }
+ else if ((tmp = isCloseParen(ch))) {
+ var p = $parens.pop();
+ if (!p || p.type != tmp) {
+ foundToken(stream.col, ++stream.col, "error");
+ } else {
+ p.closed = { line: stream.line, col: stream.col, opened: p };
+ $passedParens.push(p);
+ $list = $backList.pop();
+ foundToken(stream.col, ++stream.col, "close-paren");
+ }
+ }
+ else if (isConstituentStart(ch) && (tmp = readName())) {
+ var type = ch == ":" ? "lisp-keyword"
+ : tmp.id in SPECIAL_FORMS ? "keyword"
+ : tmp.id in COMMON_MACROS ? "builtin"
+ : tmp.id in CONSTANTS ? "constant"
+ : null;
+ if (!type) {
+ // perhaps function name?
+ if (isForm(DEFINES_FUNCTION) && $list.length == 1) {
+ type = "function-name";
+ }
+ else if (isForm(DEFINES_TYPE) && $list.length == 1) {
+ type = "type";
+ }
+ // there are a lot of macros starting with "with-", so let's highlight this
+ else if (/^with-/i.test(tmp.id)) {
+ type = "builtin";
+ }
+ }
+ newArg(tmp);
+ foundToken(tmp.c1, tmp.c2, type);
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ function indentation() {
+ // no indentation for continued strings
+ if ($inString)
+ return 0;
+
+ var currentLine = stream.lineText();
+ var indent = 0;
+
+ var p = $parens.peek();
+ if (p) {
+ var line = stream.lineText(p.line);
+ indent = p.col + 1;
+ var nextNonSpace;
+ if (isConstituentStart(line.charAt(indent))) {
+ indent = p.col + INDENT_LEVEL();
+ var re = /\s\S/g;
+ re.lastIndex = p.col;
+ nextNonSpace = re.exec(line);
+ if (nextNonSpace) {
+ nextNonSpace = nextNonSpace.index + 1;
+ }
+ }
+ if ($list && $list.length) {
+ // console.log($list);
+ var currentForm = isForm();
+ if (currentForm) {
+ currentForm = currentForm.replace(/\*$/, "");
+ var formArgs = FORM_ARGS[currentForm];
+ if (!formArgs && /^with/.test(currentForm)) {
+ // "with" macros usually take one argument, then &body
+ formArgs = "1*";
+ }
+ if (!formArgs) {
+ formArgs = "1+"; // kind of sucky now
+ }
+ if (formArgs) {
+ var n = parseInt(formArgs, 10);
+ var hasRest = /\+$/.test(formArgs);
+ var hasBody =/\*$/.test(formArgs);
+ // console.log("Expecting %d arguments, got %d already (rest=%o, body=%o)", n, $list.length - 1, hasRest, hasBody);
+ if ($list.length - 1 < n || hasRest) {
+ // still in the arguments
+ if (nextNonSpace)
+ indent = nextNonSpace;
+ else
+ indent += INDENT_LEVEL();
+ }
+ }
+ }
+ }
+ }
+
+ return indent;
+ };
+
+ return PARSER;
+ });
+
+})();
+
+DEFINE_SINGLETON("Ymacs_Keymap_LispMode", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "ENTER" : "newline_and_indent",
+ "(" : [ "lisp_open_paren", "(" ],
+ ")" : [ "lisp_close_paren", ")" ],
+ "C-c ] && C-c C-]" : "lisp_close_all_parens"
+ };
+
+});
+
+Ymacs_Buffer.newMode("lisp_mode", function() {
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "lisp" }));
+ var changed_vars = this.setq({
+ indent_level: 2
+ });
+ var keymap = Ymacs_Keymap_LispMode();
+ this.pushKeymap(keymap);
+ var was_paren_match = this.cmd("paren_match_mode", true);
+
+ return function() {
+ this.setTokenizer(tok);
+ this.setq(changed_vars);
+ this.popKeymap(keymap);
+ if (!was_paren_match)
+ this.cmd("paren_match_mode", false);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-markdown.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-markdown.js
new file mode 100644
index 0000000..42a92b9
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-markdown.js
@@ -0,0 +1,89 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+Ymacs_Tokenizer.define("markdown", function(stream, tok) {
+
+ var PARSER = { next: next, copy: copy };
+
+ function copy() {
+ var context = restore.context = {
+ };
+ function restore() {
+ return PARSER;
+ };
+ return restore;
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function next() {
+ stream.checkStop();
+ var tmp;
+ if (stream.col == 0 && (tmp = stream.lookingAt(/^(#+)/))) {
+ foundToken(0, stream.col = stream.lineLength(), "markdown-heading" + tmp[0].length);
+ }
+ else if (stream.line > 0 && stream.col == 0 && (tmp = stream.lookingAt(/^[=-]+$/)) && /\S/.test(stream.lineText(stream.line - 1))) {
+ tmp = tmp[0].charAt(0) == "=" ? 1 : 2;
+ tmp = "markdown-heading" + tmp;
+ tok.onToken(stream.line - 1, 0, stream.lineLength(stream.line - 1), tmp);
+ foundToken(0, stream.col = stream.lineLength(), tmp);
+ }
+ else if (stream.col == 0 && (tmp = stream.lookingAt(/^[>\s]*/))) {
+ tmp = tmp[0].replace(/\s+/g, "").length;
+ if (tmp > 3)
+ tmp = "";
+ tmp = "markdown-blockquote" + tmp;
+ foundToken(0, stream.col = stream.lineLength(), tmp);
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ return PARSER;
+
+});
+
+Ymacs_Buffer.newMode("markdown_mode", function() {
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "markdown" }));
+ return function() {
+ this.setTokenizer(tok);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-paren-match.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-paren-match.js
new file mode 100644
index 0000000..cdeeb8f
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-paren-match.js
@@ -0,0 +1,301 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+// @require ymacs-tokenizer.js
+
+DEFINE_SINGLETON("Ymacs_Keymap_ParenMatch", Ymacs_Keymap, function(D, P) {
+
+ D.KEYS = {
+ "C-c \\" : "goto_matching_paren",
+ "C-M-q" : "indent_sexp",
+ "C-M-f && C-M-n" : "forward_sexp",
+ "C-M-b && C-M-p" : "backward_sexp",
+ "C-M-u && M-a" : "backward_up_list",
+ "M-e && C-M-ARROW_UP" : "up_list",
+ "C-M-ARROW_DOWN" : "down_list",
+ "M-C-k" : "kill_sexp",
+ "M-C-SPACE" : "mark_sexp",
+ "M-C-t" : "transpose_sexps",
+ "M-(" : [ "paredit_wrap_round", "(" ],
+ "M-[" : [ "paredit_wrap_round", "[" ],
+ "M-{" : [ "paredit_wrap_round", "{" ],
+ 'M-"' : [ "paredit_wrap_round", '"', true ],
+ "M-'" : [ "paredit_wrap_round", "'", true ]
+ };
+
+ /* -----[ new commands ]----- */
+
+ function compareRowCol(p1, p2) {
+ return (p1.line < p2.line)
+ ? -1
+ : p1.line > p2.line
+ ? 1
+ : p1.col - p2.col;
+ };
+
+ var PARENS = {
+ "(" : ")",
+ "[" : "]",
+ "{" : "}",
+ '"' : { close: '"', backslash: /[\x22\\]/g },
+ "'" : { close: "'", backslash: /[\x27\\]/g }
+ };
+
+ function ERROR(o) {
+ throw new Ymacs_Exception("Balanced expression not found");
+ };
+
+ function getPP(p) {
+ var pp = p.context.passedParens;
+ return pp instanceof Function ? pp() : pp;
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ matching_paren: function() {
+ var p = this.tokenizer.getLastParser(), rc = this._rowcol;
+ if (p) {
+ var parens = getPP(p);
+ return parens.foreach(function(p){
+ var match = p.closed;
+ if (p.line == rc.row && p.col == rc.col) {
+ $RETURN( this._rowColToPosition(match.line, match.col + 1) );
+ } else if (match.line == rc.row && match.col == rc.col - 1) {
+ $RETURN( this._rowColToPosition(p.line, p.col) );
+ }
+ }, this);
+ }
+ },
+
+ indent_sexp: Ymacs_Interactive(function() {
+ var pos = this.cmd("matching_paren");
+ if (pos != null) {
+ this.cmd("indent_region", this.point(), pos);
+ } else {
+ ERROR(this);
+ }
+ }),
+
+ goto_matching_paren: Ymacs_Interactive(function() {
+ var pos = this.cmd("matching_paren");
+ if (pos != null) {
+ this.cmd("goto_char", pos);
+ return true;
+ }
+ }),
+
+ forward_sexp: Ymacs_Interactive(function() {
+ var rc = this._rowcol, p = this.tokenizer.finishParsing();
+ if (p) {
+ // find next paren
+ var parens = getPP(p).mergeSort(compareRowCol);
+ var next = parens.foreach(function(p){
+ if (p.line > rc.row || (p.line == rc.row && p.col >= rc.col)) {
+ $RETURN(p);
+ }
+ });
+ if (!next || !next.closed) {
+ ERROR(this);
+ return;
+ }
+ var start = this._rowColToPosition(next.line, next.col);
+ if ((this._rowcol.row == next.line && this._rowcol.col == next.col)
+ || !/\S/.test(this._bufferSubstring(null, start)))
+ this.cmd("goto_char", this._rowColToPosition(next.closed.line, next.closed.col) + 1);
+ else
+ this.cmd("goto_char", start);
+ return true;
+ }
+ }),
+
+ backward_sexp: Ymacs_Interactive(function() {
+ var rc = this._rowcol, p = this.tokenizer.finishParsing();
+ if (p) {
+ // find next paren
+ var parens = getPP(p).grep("closed").map("closed").mergeSort(compareRowCol);
+ var prev = parens.r_foreach(function(p){
+ if (p.line < rc.row || (p.line == rc.row && p.col < rc.col))
+ $RETURN(p);
+ });
+ if (!prev) {
+ ERROR(this);
+ return;
+ }
+ this.cmd("goto_char", this._rowColToPosition(prev.opened.line, prev.opened.col));
+ return true;
+ }
+ }),
+
+ mark_sexp: Ymacs_Interactive("^r", function(begin, end){
+ this.cmd("save_excursion", function(){
+ if (this.transientMarker)
+ this.cmd("goto_char", end);
+ this.ensureTransientMark();
+ this.cmd("forward_sexp");
+ this.cmd("set_mark_command", this.point());
+ this.transientMarker.swap(this.caretMarker);
+ });
+ this.ensureTransientMark();
+ }),
+
+ kill_sexp: Ymacs_Interactive(function() {
+ this._killingAction(
+ this.point(),
+ this.cmd("save_excursion", function() {
+ this.cmd("forward_sexp");
+ return this.point();
+ })
+ );
+ }),
+
+ transpose_sexps: Ymacs_Interactive(function() {
+ var a = [];
+ this.cmd("forward_sexp"); a.push(this.point());
+ this.cmd("backward_sexp"); a.push(this.point());
+ this.cmd("backward_sexp"); a.push(this.point());
+ this.cmd("forward_sexp"); a.push(this.point());
+ this.cmd("goto_char", this._swapAreas(a));
+ }),
+
+ paredit_wrap_round: Ymacs_Interactive("^", function(paren, nosexp){
+ if (!paren)
+ paren = "(";
+ var closing = PARENS[paren],
+ r = this.transientMarker
+ ? this.getRegion()
+ : this.cmd("save_excursion", function(){
+ var begin = this.point();
+ if (!nosexp)
+ this.cmd("forward_sexp");
+ return { begin: begin, end: this.point() };
+ }),
+ txt = this._bufferSubstring(r.begin, r.end),
+ before = this.point() < r.end;
+ if (typeof closing != "string") {
+ txt = txt.replace(closing.backslash, function(s){
+ return "\\" + s;
+ });
+ closing = closing.close;
+ }
+ var m = this.createMarker(r.end);
+ this.cmd("save_excursion", function(){
+ this._replaceText(r.begin, r.end, paren + txt + closing);
+ }, before);
+ this.cmd("forward_char", before ? 1 : -1);
+ this.clearTransientMark();
+ this.cmd("indent_region", r.begin, m.getPosition());
+ m.destroy();
+ }),
+
+ down_list: Ymacs_Interactive(function(){
+ var rc = this._rowcol, p = this.tokenizer.finishParsing();
+ if (p) {
+ var lc = { line: rc.row, col: rc.col };
+ p = getPP(p).grep("closed").mergeSort(compareRowCol).grep_first(function(p){
+ return compareRowCol(p, lc) >= 0;
+ });
+ if (p != null) {
+ this.cmd("goto_char", this._rowColToPosition(p.line, p.col) + 1);
+ } else {
+ ERROR(this);
+ }
+ }
+ }),
+
+ backward_up_list: Ymacs_Interactive(function(){
+ var rc = this._rowcol, p = this.tokenizer.finishParsing();
+ if (p) {
+ var lc = { line: rc.row, col: rc.col };
+ p = getPP(p).grep("closed").mergeSort(compareRowCol).grep_last(function(p){
+ return compareRowCol(p, lc) < 0 && compareRowCol(p.closed, lc) >= 0;
+ });
+ if (p != null) {
+ this.cmd("goto_char", this._rowColToPosition(p.line, p.col));
+ } else {
+ ERROR(this);
+ }
+ }
+ }),
+
+ up_list: Ymacs_Interactive(function(){
+ this.cmd("backward_up_list");
+ this.cmd("forward_sexp");
+ })
+
+ });
+
+ Ymacs_Buffer.newMode("paren_match_mode", function(){
+
+ var keymap = Ymacs_Keymap_ParenMatch();
+ this.pushKeymap(keymap);
+
+ var active = false,
+ clearOvl = function() {
+ if (active)
+ this.deleteOverlay("match-paren");
+ }.clearingTimeout(500, this);
+
+ var events = {
+ beforeInteractiveCommand: function() {
+ clearOvl.doItNow();
+ },
+ afterInteractiveCommand: function() {
+ var p = this.tokenizer.getLastParser(), rc = this._rowcol;
+ if (p) {
+ getPP(p).foreach(function(p){
+ var match = p.closed;
+ if ((p.line == rc.row && p.col == rc.col) ||
+ (match.line == rc.row && match.col == rc.col - 1)) {
+ active = true;
+ this.setOverlay("match-paren", {
+ line1: p.line, line2: match.line,
+ col1: p.col, col2: match.col + 1
+ });
+ clearOvl();
+ }
+ }, this);
+ }
+ }.clearingTimeout(100)
+ };
+ this.addEventListener(events);
+
+ return function() {
+ clearOvl.doItNow();
+ this.popKeymap(keymap);
+ this.removeEventListener(events);
+ };
+
+ });
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-xml.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-xml.js
new file mode 100644
index 0000000..0e0ed47
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-mode-xml.js
@@ -0,0 +1,474 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-tokenizer.js
+
+Ymacs_Tokenizer.define("xml", function(stream, tok) {
+
+ var $tags = [],
+ $cont = [],
+ $inTag = null,
+ $inComment = null,
+ PARSER = { next: next, copy: copy, indentation: indentation };
+
+ function copy() {
+ var _tags = $tags.slice(0),
+ _cont = $cont.slice(0),
+ _inTag = $inTag,
+ _inComment = $inComment;
+ function resume() {
+ $cont = _cont.slice(0);
+ $tags = _tags.slice(0);
+ $inTag = _inTag;
+ $inComment = _inComment;
+ return PARSER;
+ };
+ return resume;
+ };
+
+ function INDENT_LEVEL() {
+ return stream.buffer.getq("indent_level");
+ };
+
+ function foundToken(c1, c2, type) {
+ tok.onToken(stream.line, c1, c2, type);
+ };
+
+ function isLetter(ch) {
+ return ch.toLowerCase() != ch.toUpperCase();
+ };
+
+ function isNameStart(ch) {
+ return ch && (isLetter(ch) || /^[:_-]$/.test(ch));
+ };
+
+ function isNameChar(ch) {
+ return ch && (isLetter(ch) || /^[0-9_-]$/.test(ch));
+ };
+
+ function readName() {
+ var col = stream.col, ch = stream.get(),
+ name = ch;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (!isNameChar(ch))
+ break;
+ name += ch;
+ stream.nextCol();
+ }
+ return ch && { line: stream.line, c1: col, c2: stream.col, id: name };
+ };
+
+ function readString(end) {
+ var ch, esc = false, start = stream.col;
+ while (!stream.eol()) {
+ ch = stream.peek();
+ if (ch === end && !esc) {
+ $cont.pop();
+ foundToken(start, stream.col, "string");
+ foundToken(stream.col, ++stream.col, "string-stopper");
+ return;
+ }
+ esc = !esc && ch === "\\";
+ stream.nextCol();
+ }
+ foundToken(start, stream.col, "string");
+ };
+
+ function readTag() {
+ var ch = stream.peek(), name;
+ if (stream.lookingAt(/^\x2f>/)) {
+ $cont.pop();
+ $inTag = null;
+ foundToken(stream.col, ++stream.col, "xml-closetag-slash");
+ foundToken(stream.col, ++stream.col, "xml-close-bracket");
+ }
+ else if (ch === ">") {
+ $cont.pop();
+ $tags.push($inTag);
+ $inTag = null;
+ foundToken(stream.col, ++stream.col, "xml-close-bracket");
+ }
+ else if (isNameStart(ch) && (name = readName())) {
+ foundToken(name.c1, name.c2, "xml-attribute");
+ }
+ else if (ch === '"' || ch === "'") {
+ foundToken(stream.col, ++stream.col, "string-starter");
+ $cont.push(readString.$C(ch));
+ }
+ else foundToken(stream.col, ++stream.col, null);
+ };
+
+ function readComment(type, end) {
+ var line = stream.lineText(), pos = line.indexOf(end, stream.col);
+ if (pos >= 0) {
+ $cont.pop();
+ foundToken(stream.col, pos, type);
+ $inComment = null;
+ foundToken(pos, pos += end.length, type + "-stopper");
+ stream.col = pos;
+ } else {
+ foundToken(stream.col, line.length, type);
+ stream.col = line.length;
+ }
+ };
+
+ function readCloseBracket() {
+ var m = stream.lookingAt(/^([\s\xA0]*)(>?)/);
+ if (m && m[0]) {
+ if (m[1])
+ foundToken(stream.col, stream.col += m[1].length, null);
+ if (m[2]) {
+ foundToken(stream.col, stream.col += m[2].length, "xml-close-bracket");
+ $cont.pop();
+ }
+ } else {
+ foundToken(stream.col, ++stream.col, "error");
+ }
+ };
+
+ function next() {
+ stream.checkStop();
+ if ($cont.length > 0)
+ return $cont.peek()();
+ var ch = stream.peek(), m;
+ if (stream.lookingAt("<![CDATA[")) {
+ foundToken(stream.col, stream.col += 9, "xml-cdata-starter");
+ $inComment = { line: stream.line, c1: stream.col };
+ $cont.push(readComment.$C("xml-cdata", "]]>"));
+ }
+ else if (stream.lookingAt("<!--")) {
+ foundToken(stream.col, stream.col += 4, "mcomment-starter");
+ $inComment = { line: stream.line, c1: stream.col };
+ $cont.push(readComment.$C("mcomment", "-->"));
+ }
+ else if (stream.lookingAt(/^<\x2f/) && isNameStart(stream.peek(+2))) {
+ foundToken(stream.col, ++stream.col, "xml-open-bracket");
+ foundToken(stream.col, ++stream.col, "xml-closetag-slash");
+ var tag = readName(), prev = $tags.pop();
+ foundToken(tag.c1, tag.c2, ( prev && prev.id == tag.id
+ ? "xml-close-tag"
+ : "error" ));
+ $cont.push(readCloseBracket);
+ }
+ else if (ch === "<" && isNameStart(stream.peek(+1))) {
+ foundToken(stream.col, ++stream.col, "xml-open-bracket");
+ var tag = readName();
+ foundToken(tag.c1, tag.c2, "xml-open-tag");
+ $inTag = tag;
+ $cont.push(readTag);
+ }
+ else if ((m = stream.lookingAt(/^&.*?;/))) {
+ foundToken(stream.col, ++stream.col, "xml-entity-starter");
+ foundToken(stream.col, stream.col += m[0].length - 2, "xml-entity");
+ foundToken(stream.col, ++stream.col, "xml-entity-stopper");
+ }
+ else if (ch === "&") {
+ foundToken(stream.col, ++stream.col, "error");
+ }
+ else {
+ foundToken(stream.col, ++stream.col, null);
+ }
+ };
+
+ function indentation() {
+ var indent, lastTag;
+ if ($inComment) {
+ indent = stream.lineIndentation($inComment.line) + INDENT_LEVEL();
+ }
+ else if ($inTag) {
+ indent = $inTag.c1 + $inTag.id.length + 1;
+ }
+ else if ((lastTag = $tags.peek())) {
+ indent = stream.lineIndentation(lastTag.line) + INDENT_LEVEL();
+ // if current line begins with a closing tag, back one level
+ if (/^\s*<\x2f/.test(stream.lineText()))
+ indent -= INDENT_LEVEL();
+ }
+ return indent;
+ };
+
+ return PARSER;
+
+});
+
+DEFINE_SINGLETON("Ymacs_Keymap_XML", Ymacs_Keymap, function(D, P){
+
+ D.KEYS = {
+ "C-c /" : "xml_close_tag",
+ "C-ENTER" : "xml_zen_expand",
+ "ENTER" : "newline_and_indent"
+ };
+
+});
+
+Ymacs_Buffer.newMode("xml_mode", function(){
+
+ var tok = this.tokenizer;
+ this.setTokenizer(new Ymacs_Tokenizer({ buffer: this, type: "xml" }));
+ var keymap = Ymacs_Keymap_XML();
+ this.pushKeymap(keymap);
+ var changed_vars = this.setq({ indent_level: 2 });
+ return function() {
+ this.setTokenizer(tok);
+ this.popKeymap(keymap);
+ this.setq(changed_vars);
+ };
+
+});
+
+(function(){
+
+ DEFINE_SINGLETON("Ymacs_Keymap_XML_Zen", Ymacs_Keymap, function(D, P){
+ D.KEYS = {
+ "TAB" : "xml_zen_next_poi",
+ "S-TAB" : "xml_zen_prev_poi",
+ "C-g" : "xml_zen_stop"
+ };
+ });
+
+ var MODE_TYPE = 1, MODE_CLASS = 2, MODE_ID = 3, MODE_REPEAT = 4, MODE_ATTR = 5;
+
+ function zen_render(el, html) {
+ var n = el.repeat || 1;
+ for (var i = 1; i <= n; ++i) {
+ if (i > 1)
+ html("\n");
+ html("<", el.type);
+ if (el.id) {
+ html(' id="', el.id.replace(/\$/g, i), '"');
+ }
+ if (el.klass) {
+ html(' class="', el.klass.replace(/\$/g, i), '"');
+ }
+ if (el.attributes) {
+ el.attributes.foreach(function(attr){
+ html(" ", attr, '="|"');
+ });
+ }
+ html(">");
+ if (el.child) {
+ html("\n");
+ zen_render(el.child, html);
+ html("\n");
+ } else {
+ html("|");
+ }
+ html("</", el.type, ">");
+ if (el.next) {
+ html("\n");
+ zen_render(el.next, html);
+ }
+ }
+ };
+
+ function zen_parse(str, i) {
+ var el = { type: "" }, mode = MODE_TYPE;
+ OUTER: while (i < str.length) {
+ var ch = str.charAt(i++);
+ switch (ch) {
+
+ case "#":
+ mode = MODE_ID;
+ el.id = "";
+ break;
+
+ case ".":
+ mode = MODE_CLASS;
+ if (el.klass != null) {
+ el.klass += " ";
+ } else {
+ el.klass = "";
+ }
+ break;
+
+ case ":":
+ mode = MODE_ATTR;
+ if (el.attributes == null)
+ el.attributes = [];
+ el.attributes.push("");
+ break;
+
+ case "*":
+ mode = MODE_REPEAT;
+ el.repeat = "";
+ break;
+
+ case ">":
+ el.child = zen_parse(str, i);
+ i = el.child.i;
+ break OUTER;
+
+ case "(":
+ el.child = zen_parse(str, i);
+ i = el.child.i;
+ break;
+
+ case ")":
+ break OUTER;
+
+ case "+":
+ el.next = zen_parse(str, i);
+ i = el.next.i;
+ break OUTER;
+
+ default:
+ switch (mode) {
+ case MODE_TYPE:
+ el.type += ch;
+ break;
+ case MODE_CLASS:
+ el.klass += ch;
+ break;
+ case MODE_ID:
+ el.id += ch;
+ break;
+ case MODE_REPEAT:
+ el.repeat = parseInt(String(el.repeat) + ch, 10);
+ break;
+ case MODE_ATTR:
+ el.attributes.push(el.attributes.pop() + ch);
+ break;
+ }
+ }
+ }
+
+ el.i = i;
+ return el;
+ };
+
+ function maybe_stop_zen() {
+ var point = this.point(),
+ a = this.getq("xml_zen_markers"),
+ start = a[0],
+ end = a.peek();
+ if (point < start.getPosition() || point > end.getPosition() ||
+ end.getPosition() == a.peek(1).getPosition()) {
+ this.cmd("xml_zen_stop");
+ }
+ };
+
+ Ymacs_Buffer.newCommands({
+
+ xml_close_tag: Ymacs_Interactive(function() {
+ this.cmd("close_last_xml_tag");
+ this.cmd("indent_line");
+ }),
+
+ xml_zen_expand: Ymacs_Interactive(function() {
+ this.cmd("xml_zen_stop");
+ var html = String.buffer(),
+ start = this.cmd("save_excursion", function() {
+ this.cmd("backward_whitespace");
+ while (!this.cmd("looking_back", /[\x20\xa0\s\t\n;&]/))
+ if (!this.cmd("backward_char"))
+ break;
+ return this.point();
+ }),
+ point = this.point();
+
+ try {
+ zen_render(
+ zen_parse(
+ this.cmd("buffer_substring", start, point).trim(), 0
+ ),
+ html
+ );
+ } catch(ex) {
+ throw new Ymacs_Exception("The Zen is not strong today :-/");
+ }
+
+ html = html.get();
+ this.cmd("delete_region", start, point);
+ this.cmd("insert", html);
+ start = this.createMarker(start, false, "xml_zen");
+
+ // locate points of interest
+ var end = this.createMarker(this.point(), true, "xml_zen"), markers = [];
+ this.cmd("goto_char", start.getPosition());
+ while (this.cmd("search_forward", "|", end.getPosition())) {
+ this.cmd("backward_delete_char");
+ markers.push(this.createMarker(this.point(), true, "xml_zen_start"));
+ markers.push(this.createMarker(this.point(), false, "xml_zen_end"));
+ }
+
+ this.cmd("indent_region", start.getPosition(), end.getPosition());
+
+ var count = markers.length;
+ if (count > 0) {
+ // move to first POI
+ this.cmd("goto_char", markers[0]);
+ markers.unshift(start);
+ markers.push(end);
+ this.setq("xml_zen_markers", markers);
+ this.pushKeymap(Ymacs_Keymap_XML_Zen());
+ this.addEventListener("afterInteractiveCommand", maybe_stop_zen);
+ } else {
+ start.destroy();
+ end.destroy();
+ }
+ }),
+
+ xml_zen_stop: Ymacs_Interactive(function(){
+ var tmp = this.getq("xml_zen_markers");
+ if (tmp) {
+ tmp.map("destroy");
+ this.setq("xml_zen_markers", null);
+ }
+ this.popKeymap(Ymacs_Keymap_XML_Zen());
+ this.removeEventListener("afterInteractiveCommand", maybe_stop_zen);
+ }),
+
+ xml_zen_next_poi: Ymacs_Interactive(function(){
+ var markers = this.getq("xml_zen_markers"), pos = this.point();
+ markers.foreach(function(m){
+ if (m.getPosition() > pos) {
+ this.cmd("goto_char", m.getPosition());
+ $BREAK();
+ }
+ }, this);
+ }),
+
+ xml_zen_prev_poi: Ymacs_Interactive(function(){
+ var markers = this.getq("xml_zen_markers"), pos = this.point();
+ markers.r_foreach(function(m){
+ if (m.getPosition() < pos) {
+ this.cmd("goto_char", m.getPosition());
+ $BREAK();
+ }
+ }, this);
+ })
+
+ });
+
+})();
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-regexp.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-regexp.js
new file mode 100644
index 0000000..cf793af
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-regexp.js
@@ -0,0 +1,96 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs.js
+
+window.Ymacs_Regexp = (function(){
+
+ var SEARCH_BACKWARD = {};
+
+ // var LOOKING_BACK = {};
+
+ function getPatternAndFlags(rx) {
+ if (rx instanceof RegExp)
+ rx = rx.toString();
+ var pos = rx.lastIndexOf("/"), flags = "";
+ flags = rx.substr(pos + 1);
+ rx = rx.substring(1, pos);
+ return { pattern: rx, flags: flags };
+ };
+
+ return {
+
+ // Prepends to the regexp a token that will greedily eat any characters in
+ // front of the pattern. This is useful to get the last occurrence of the
+ // pattern in a string. The returned regexp is cached, so it's not
+ // reconstructed a second time.
+ //
+ // A function using such regexp must be aware that m.index will always be zero,
+ // because it matches from the beginning of the string. To find the index of
+ // the real match, it should use m[0].length (where m is an array returned by
+ // rx.exec()).
+ search_backward: function(rx) {
+ var key = rx.toString();
+ var cached = SEARCH_BACKWARD[key];
+ if (!cached) {
+ rx = getPatternAndFlags(key);
+ rx.flags = rx.flags.replace(/g/g, "") + "g"; // make sure it's global
+ cached = new RegExp("([^]*)(" + rx.pattern + ")", rx.flags);
+ SEARCH_BACKWARD[key] = cached;
+ }
+ cached.lastIndex = 0;
+ return cached;
+ }
+
+ // Returns a regexp that has the "$" appended, so that it would match only at
+ // the end of the string. This should be faster than using search_backward and
+ // checking the lastIndex, since the JS regexp engine can optimize it, knowing
+ // that it should match only at the end of the string. Well, I hope.
+ //
+ // Update: it's not faster, and it's buggy. Don't use this.
+ //
+ // looking_back: function(rx) {
+ // var key = rx.toString();
+ // var cached = LOOKING_BACK[key];
+ // if (!cached) {
+ // rx = getPatternAndFlags(key);
+ // rx.pattern = rx.pattern.replace(/\$*$/, "$");
+ // cached = new RegExp(rx.pattern, rx.flags);
+ // LOOKING_BACK[key] = cached;
+ // }
+ // return cached;
+ // }
+
+ };
+
+})();
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-textprop.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-textprop.js
new file mode 100644
index 0000000..0290838
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-textprop.js
@@ -0,0 +1,168 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+DEFINE_CLASS("Ymacs_Text_Properties", DlEventProxy, function(D, P){
+
+ D.DEFAULT_EVENTS = [ "onChange" ];
+
+ D.DEFAULT_ARGS = {
+ buffer: [ "buffer", null ]
+ };
+
+ D.CONSTRUCT = P.reset = function() {
+ this.props = [];
+ };
+
+ P.insertLine = function(row) {
+ if (this.props.length < row)
+ this.props[row] = null;
+ else {
+ this.props.splice(row, 0, null);
+ }
+ };
+
+ P.deleteLine = function(row) {
+ this.props.splice(row, 1);
+ };
+
+ P.replaceLine = function(row, text) {
+ var p = this.props[row];
+ if (p && p.length > text.length) {
+ // remove extra-properties
+ p.splice(text.length, p.length);
+ }
+ };
+
+ P.addLineProps = function(row, i, j, prop, val) {
+ var p = this.props, o, changed = false;
+ if (i < j) {
+ p = p[row] || (p[row] = []);
+ while (i < j) {
+ o = p[i] || (p[i] = {});
+ if (o[prop] != val)
+ changed = true;
+ o[prop] = val;
+ ++i;
+ }
+ if (changed)
+ this.callHooks("onChange", row);
+ }
+ return changed;
+ };
+
+ P.removeLineProps = function(row, i, j, prop) {
+ var p = this.props[row], o, changed = false;
+ if (p && i < j) {
+ while (i < j) {
+ o = p[i];
+ if (o && prop in o) {
+ changed = true;
+ delete o[prop];
+ }
+ ++i;
+ }
+ if (changed)
+ this.callHooks("onChange", row);
+ }
+ return changed;
+ };
+
+ // this uses the "css" text property to intercalate <span class="$css"> ... </span> tags in the given text.
+ // "css" properties are added as the tokenizer parses the code and sends onFoundToken events.
+ //
+ // XXX: this function will be called a lot of times; seems complicated for what it does. Figure out if it can be
+ // optimized.
+ //
+ // Update: the mess got bigger once I decided to embed the caret in the text, rather than have it absolutely
+ // positioned (which seems to be the only practical way to position the cursor at the correct location). It is
+ // ESSENTIAL that the start tag of the element that defines the caret ends with "Ymacs-caret'>", so that the
+ // frame widget can find it.
+ P.getLineHTML = function(row, text, caret) {
+ var p = this.props[row];
+ if (caret === null) {
+ if (text == "")
+ return "<br/>";
+ if (!p || p.length == 0) {
+ return text.htmlEscape();
+ }
+ } else {
+ if (text == "")
+ return "<span class='Ymacs-caret'>&nbsp;</span>";
+ if (!p || p.length == 0) {
+ if (caret === text.length)
+ return text.htmlEscape() + "<span class='Ymacs-caret'>&nbsp;</span>";
+ return text.substr(0, caret).htmlEscape() +
+ "<span class='Ymacs-caret'>" +
+ text.charAt(caret).htmlEscape() +
+ "</span>" +
+ text.substr(caret + 1).htmlEscape();
+ }
+ }
+ var i = 0, n = text.length, last = null, o, ret = "", ch;
+ while (i < n) {
+ o = p[i];
+ o = o && o.css;
+ if (i === caret) {
+ o = o ? o + " Ymacs-caret" : "Ymacs-caret";
+ }
+ if (o && o != last) {
+ if (last)
+ ret += "</span>";
+ ret += "<span class='" + o + "'>";
+ }
+ else if (!o && last) {
+ ret += "</span>";
+ }
+ last = o;
+ // XXX: Should have used a hash rather than a
+ // switch statement? I'm not sure but I have
+ // a feeling that switch is faster.
+ ch = text.charAt(i);
+ switch (ch) {
+ case "<" : ret += "&lt;"; break;
+ case ">" : ret += "&gt;"; break;
+ case "&" : ret += "&amp;"; break;
+ default : ret += ch; break;
+ }
+ ++i;
+ }
+ if (last)
+ ret += "</span>";
+ if (i === caret) {
+ // caret is at EOL
+ ret += "<span class='Ymacs-caret'>&nbsp;</span>";
+ }
+ return ret;
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-tokenizer.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-tokenizer.js
new file mode 100644
index 0000000..986f6bc
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs-tokenizer.js
@@ -0,0 +1,335 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+// @require ymacs-buffer.js
+
+DEFINE_CLASS("Ymacs_Stream", null, function(D, P){
+
+ D.DEFAULT_ARGS = {
+ buffer : [ "buffer" , null ],
+ line : [ "line" , 0 ],
+ col : [ "col" , 0]
+ };
+
+ P.nextCol = function() {
+ ++this.col;
+ };
+
+ P.prevCol = function() {
+ --this.col;
+ };
+
+ P.nextLine = function() {
+ ++this.line;
+ this.col = 0;
+ };
+
+ P.prevLine = function() {
+ --this.line;
+ this.col = 0;
+ };
+
+ P.peek = function(n) {
+ if (n == null) n = 0;
+ return this.buffer.code[this.line].charAt(this.col + n);
+ };
+
+ P.get = function() {
+ var ch = this.peek();
+ this.nextCol();
+ return ch;
+ };
+
+ P.lineText = function(row) {
+ if (row == null)
+ row = this.line;
+ return this.buffer.code[row];
+ };
+
+ P.lineIndentation = function(row) {
+ return /^\s*/.exec(this.lineText(row))[0].length;
+ };
+ P.lookingAt = function(what) {
+ var line = this.buffer.code[this.line];
+ if (what instanceof RegExp) {
+ return what.exec(line.substr(this.col));
+ } else {
+ return line.substr(this.col, what.length) == what;
+ }
+ };
+
+
+ P.textBefore = function(pos) {
+ if (pos == null)
+ pos = this.buffer._rowColToPosition(this.line, this.col);
+ return this.buffer.getCode().substr(0, pos);
+ };
+
+ P.textAfter = function(pos) {
+ if (pos == null)
+ pos = this.buffer._rowColToPosition(this.line, this.col);
+ return this.buffer.getCode().substr(pos);
+ };
+
+ P.substring = function(start, end) {
+ return this.buffer.getCode().substring(start, end);
+ };
+
+ P.substr = function(start, end) {
+ return this.buffer.getCode().substr(start, end);
+ };
+
+ P.eol = function() {
+ return this.col == this.buffer.code[this.line].length;
+ };
+
+ P.eof = function() {
+ var n = this.buffer.code.length, l = this.line;
+ return l >= n || l == n - 1 && this.eol();
+ };
+
+ P.length = function() {
+ return this.buffer.code.length;
+ };
+
+ P.lineLength = function(line) {
+ if (line == null)
+ line = this.line;
+ return this.buffer.code[line].length;
+ };
+
+ P.save = function() {
+ return { buffer: this.buffer, line: this.line, col: this.col };
+ };
+
+ P.restore = function(state) {
+ this.buffer = state.buffer;
+ this.line = state.line;
+ this.col = state.col;
+ };
+
+ P.checkStop = function() {
+ if (this.eof()) throw this.EOF;
+ if (this.eol()) throw this.EOL;
+ };
+
+ P.EOL = new (function(){});
+
+ P.EOF = new (function(){});
+
+});
+
+DEFINE_CLASS("Ymacs_Tokenizer", DlEventProxy, function(D, P){
+
+ var LANGUAGES = {};
+
+ D.define = function(name, func) {
+ LANGUAGES[name.toLowerCase()] = func;
+ };
+
+ D.DEFAULT_EVENTS = [ "onFoundToken" ];
+
+ D.DEFAULT_ARGS = {
+ buffer : [ "buffer", null ],
+ type : [ "type", null ]
+ };
+
+ D.FIXARGS = function(args) {
+ if (typeof args.type == "string")
+ args.type = LANGUAGES[args.type.toLowerCase()];
+ };
+
+ D.CONSTRUCT = function() {
+ var smallest = null;
+ var timer = null;
+ this.quickUpdate = function(offset) {
+ var row = this.buffer._positionToRowCol(offset).row;
+ this.parsers.splice(row - 1, this.parsers.length + 1);
+
+ if (smallest != null) {
+ smallest = Math.min(row, smallest);
+ } else {
+ smallest = row;
+ }
+ clearTimeout(timer);
+ timer = function(){
+ this._do_quickUpdate(smallest);
+ smallest = null;
+ }.delayed(1, this);
+ };
+ this._stopQuickUpdate = function() {
+ clearTimeout(timer);
+ clearTimeout(this.timerUpdate);
+ };
+ this.reset();
+ };
+
+ P.reset = function() {
+ this.stream = new Ymacs_Stream({ buffer: this.buffer });
+ this.theParser = this.type(this.stream, this);
+ this.parsers = [];
+ this.parsers[-1] = this.theParser.copy();
+ this.timerUpdate = null;
+ this.quickUpdate(0);
+ };
+
+ P.getLanguage = function(name) {
+ return LANGUAGES[name](this.stream, this);
+ };
+
+ P.showProgress = function(p) {
+ if (p != null) {
+ p = Math.round(p / this.stream.length() * 100) + "%";
+ }
+ this.buffer.updateProgress("Syntax highlighting", p);
+ };
+
+ P._do_quickUpdate = function(row) {
+ this._stopQuickUpdate();
+ var s = this.stream, p, a = this.parsers, n;
+ s.line = row - 1;
+ while (!(p = a[s.line]))
+ s.prevLine();
+ s.nextLine();
+ p = p();
+ var iteration = 0;
+ var first = true;
+ var doit = function() {
+ this.buffer.preventUpdates();
+ n = first ? 3 : 20;
+ if (++iteration > 10)
+ this.showProgress(this.stream.line);
+ while (true) {
+ try {
+ while (true) p.next();
+ }
+ catch(ex) {
+ if (ex === s.EOL) {
+ a[s.line] = p.copy();
+ s.nextLine();
+ if (--n == 0) {
+ this.buffer.resumeUpdates();
+ this.timerUpdate = setTimeout(doit, first ? 500 : 50);
+ first = false;
+ return;
+ }
+ }
+ else if (ex === s.EOF) {
+ a[s.line] = p.copy();
+ this.buffer.resumeUpdates();
+ if (p.on_EOF)
+ p.on_EOF();
+ break;
+ }
+ else throw ex;
+ }
+ }
+ this.showProgress();
+ }.$(this);
+ doit();
+ };
+
+ P.quickInsertLine = function(row) {
+ this.parsers.splice(row, this.parsers.length + 1);
+ };
+
+ P.quickDeleteLine = function(row) {
+ this.parsers.splice(row, this.parsers.length + 1);
+ };
+
+ P.onToken = function(line, c1, c2, type) {
+ this.callHooks("onFoundToken", line, c1, c2, type);
+ };
+
+ P.getParserForLine = function(row) {
+ this._stopQuickUpdate();
+ var s = this.stream, p, a = this.parsers, n;
+ var currentLine = s.line;
+ s.line = row - 1;
+ while (!(p = a[s.line]))
+ s.prevLine();
+ s.nextLine();
+ p = p();
+ try {
+ this.buffer.preventUpdates();
+ while (true) {
+ if (s.line == row) {
+ return p;
+ }
+ try {
+ while (true) p.next();
+ } catch(ex) {
+ if (ex === s.EOL) {
+ a[s.line] = p.copy();
+ s.nextLine();
+ }
+ else if (ex === s.EOF) {
+ break;
+ }
+ else {
+ throw ex;
+ }
+ }
+ }
+ } finally {
+ this.buffer.resumeUpdates();
+ // if (currentLine < s.length()) {
+ // // resume lazy tokenizer if it was interrupted
+ // this.timerUpdate = this._do_quickUpdate.delayed(50, this, Math.min(row, currentLine));
+ // }
+ if (s.line < s.length())
+ this.timerUpdate = this._do_quickUpdate.delayed(50, this, s.line);
+ }
+ };
+
+ P.reparseAll = function() {
+ this.parsers.splice(0, this.parsers.length);
+ return this.finishParsing();
+ };
+
+ P.finishParsing = function() {
+ this.getParserForLine(this.stream.length());
+ return this.getLastParser();
+ };
+
+ P.getLastParser = function() {
+ return this.parsers.peek();
+ };
+
+ P.getIndentation = function(row, buffer) {
+ var p = this.getParserForLine(row);
+ if (p && p.indentation instanceof Function)
+ return p.indentation(buffer);
+ };
+
+});
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs.js b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs.js
new file mode 100644
index 0000000..cf58706
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/ymacs.js
@@ -0,0 +1,559 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. All rights reserved.
+//>
+//> Redistribution and use in source and binary forms, with or without
+//> modification, are permitted provided that the following conditions are
+//> met:
+//>
+//> * Redistributions of source code must retain the above copyright
+//> notice, this list of conditions and the following disclaimer.
+//>
+//> * Redistributions in binary form must reproduce the above copyright
+//> notice, this list of conditions and the following disclaimer in
+//> the documentation and/or other materials provided with the
+//> distribution.
+//>
+//> * Neither the name of Dynarch.com nor the names of its contributors
+//> may be used to endorse or promote products derived from this
+//> software without specific prior written permission.
+//>
+//> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+//> EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+//> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+//> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE
+//> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+//> CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+//> SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+//> INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+//> CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+//> THE POSSIBILITY OF SUCH DAMAGE.
+
+DEFINE_CLASS("Ymacs", DlLayout, function(D, P, DOM){
+
+ D.DEFAULT_EVENTS = [
+ "onBufferSwitch",
+ "onCreateBuffer",
+ "onDeleteBuffer"
+ ];
+
+ D.DEFAULT_ARGS = {
+ buffers : [ "buffers" , null ],
+ frames : [ "frames" , null ],
+
+ // default options
+ cf_lineNumbers: [ "lineNumbers", false ],
+
+ // override in DlWidget
+ _focusable : [ "focusable" , true ]
+ };
+
+ D.FIXARGS = function(args) {
+ if (!args.buffers)
+ args.buffers = [];
+ if (!args.frames)
+ args.frames = [];
+ };
+
+ D.CONSTRUCT = function() {
+ this.buffers.foreach(function(b){
+ b.ymacs = this;
+ }, this);
+
+ /* -----[ variables ]----- */
+ this.killRing = [];
+ this.killMasterOfRings = [];
+ this.progress = {};
+
+ /* -----[ minibuffer ]----- */
+ this.minibuffer = this.createBuffer({ hidden: true, isMinibuffer: true });
+ this.minibuffer.cmd("minibuffer_mode");
+ this.minibuffer_frame = this.createFrame({
+ isMinibuffer : true,
+ buffer : this.minibuffer,
+ hidden : true,
+ highlightCurrentLine : false,
+ className : "Ymacs_Minibuffer"
+ });
+
+ /* -----[ main content ]----- */
+ if (this.buffers.length == 0)
+ this.createBuffer();
+
+ var frame = this.createFrame({ buffer: this.buffers[0] });
+
+ this.packWidget(this.minibuffer_frame, { pos: "bottom" });
+ this.packWidget(frame, { pos: "top", fill: "*" });
+
+ // this.__activeFrameEvents = {
+ // // onPointChange: this._on_activeFramePointChange.$(this)
+ // };
+
+ this.setActiveFrame(frame);
+ frame._redrawCaret();
+ };
+
+ P.pushToKillRing = function(text, prepend) {
+ prepend ? this.killRing.unshift(text)
+ : this.killRing.push(text);
+ };
+
+ P.killRingToMaster = function() {
+ if (this.killRing.length && (this.killMasterOfRings.length == 0 ||
+ this.killMasterOfRings.peek().join("") != this.killRing.join("")))
+ this.killMasterOfRings.push(this.killRing);
+ this.killRing = [];
+ };
+
+ P.killRingText = function() {
+ return this.killRing.join("");
+ };
+
+ P.rotateKillRing = function(push) {
+ if (push) {
+ this.killMasterOfRings.push(this.killRing);
+ this.killRing = this.killMasterOfRings.shift();
+ } else {
+ this.killMasterOfRings.unshift(this.killRing);
+ this.killRing = this.killMasterOfRings.pop();
+ }
+ };
+
+ P.getBuffer = function(buf) {
+ if (!(buf instanceof Ymacs_Buffer)) {
+ buf = this.buffers.grep_first(function(b){
+ return b.name == buf;
+ });
+ }
+ return buf;
+ };
+
+ P.killBuffer = function(buf) {
+ buf = this.getBuffer(buf);
+ this.callHooks("onDeleteBuffer", buf);
+ if (this.buffers.length > 1) {
+ if (this.getActiveBuffer() === buf)
+ this.switchToNextBuffer();
+ } else {
+ // make a brand new buffer
+ this.switchToBuffer(this.createBuffer());
+ }
+ this.buffers.remove(buf);
+ buf.destroy();
+ };
+
+ P.renameBuffer = function(buf, name) {
+ buf = this.getBuffer(buf);
+ buf.name = name;
+ buf.callHooks("onProgressChange");
+ };
+
+ P._do_switchToBuffer = function(buf) {
+ this.getActiveFrame().setBuffer(buf);
+ this.callHooks("onBufferSwitch", buf);
+ };
+
+ P.switchToBuffer = function(maybeName) {
+ var buf = this.getBuffer(maybeName), a = this.buffers;
+ if (!buf) {
+ // create new buffer
+ buf = this.createBuffer({ name: maybeName });
+ }
+ a.remove(buf);
+ a.unshift(buf);
+ this._do_switchToBuffer(buf);
+ return buf;
+ };
+
+ P.switchToNextBuffer = function(n) {
+ var a = this.buffers;
+ if (a.length > 1) {
+ var buf = a.shift();
+ a.push(buf);
+ this._do_switchToBuffer(a[0]);
+ }
+ };
+
+ P.switchToPreviousBuffer = function(n) {
+ var a = this.buffers;
+ if (a.length > 1) {
+ var buf = a.pop();
+ a.unshift(buf);
+ this._do_switchToBuffer(buf);
+ }
+ };
+
+ P.getNextBuffer = function(buf, n) {
+ if (n == null) n = 1;
+ var a = this.buffers;
+ return a[a.rotateIndex(a.find(buf) + n)];
+ };
+
+ P.getPrevBuffer = function(buf, n) {
+ if (n == null) n = 1;
+ var a = this.buffers;
+ return a[a.rotateIndex(a.find(buf) - n)];
+ };
+
+ P.getBufferFrames = function(buf) {
+ buf = this.getBuffer(buf);
+ return this.frames.grep(function(f){
+ return f.buffer === buf;
+ });
+ };
+
+ P.createBuffer = function(args) {
+ if (!args) args = {};
+ Object.merge(args, { ymacs: this });
+ var buf = new Ymacs_Buffer(args);
+ if (!args.hidden)
+ this.buffers.push(buf);
+ //
+ // XXX: although this seems the right way to do it,
+ // instead of doing it in killBuffer, for some
+ // reason we never get this event. Should
+ // investigate.
+ //
+ // buf.addEventListener("onDestroy", function(buf){
+ // console.log("got here, %s, %s", this.getActiveBuffer().name, buf.name);
+ // if (this.getActiveBuffer() === buf)
+ // this.switchToPreviousBuffer();
+ // this.buffers.remove(buf);
+ // }.$(this, buf));
+ //
+
+ this.callHooks("onCreateBuffer", buf);
+
+ return buf;
+ };
+
+ P.createFrame = function(args) {
+ if (!args) args = {};
+ Object.merge(args, { ymacs: this });
+ var frame = new Ymacs_Frame(args);
+ if (!args.hidden)
+ this.frames.unshift(frame);
+ frame.addEventListener("onDestroy", function(frame) {
+ this.frames.remove(frame);
+ }.$(this, frame));
+ return frame;
+ };
+
+ P.keepOnlyFrame = function(frame) {
+ if (this.frames.length > 1) {
+ var p = frame.parent;
+ while (p.parent != this)
+ p = p.parent;
+ this.replaceWidget(p, frame);
+ p.destroy();
+ this.setActiveFrame(frame);
+ this.doLayout();
+ }
+ };
+
+ P.deleteFrame = function(frame) {
+ if (this.frames.length > 1) {
+ var p = frame.parent, other = p.children().grep_first(function(f){
+ return f instanceof DlLayout || f instanceof Ymacs_Frame && f !== frame;
+ });
+ p.parent.replaceWidget(p, other);
+ p.destroy();
+ try {
+ DOM.walk(other.getElement(), function(el){
+ el = DlWidget.getFromElement(el);
+ if (el && el instanceof Ymacs_Frame)
+ throw el;
+ });
+ } catch(ex) {
+ if (!(ex instanceof Ymacs_Frame))
+ throw ex;
+ other = ex;
+ }
+ this.setActiveFrame(other);
+ this.doLayout();
+ }
+ };
+
+ P.focusOtherFrame = function() {
+ this.setActiveFrame(this.frames[0]);
+ };
+
+ P.focus = function() {
+ D.BASE.focus.apply(this, arguments);
+ this.frames.peek().focus();
+ };
+
+ P.setActiveFrame = function(frame, nofocus) {
+ if (!frame.isMinibuffer) {
+ var old = this.getActiveFrame();
+ if (old) {
+ old.delClass("Ymacs_Frame-active");
+ }
+ this.frames.remove(frame);
+ this.frames.push(frame);
+ }
+ if (!nofocus)
+ frame.focus();
+ };
+
+ P.getActiveFrame = function() {
+ return this.frames.peek();
+ };
+
+ P.getActiveBuffer = function() {
+ var frame = this.getActiveFrame();
+ return frame ? frame.buffer : this.buffers.peek();
+ };
+
+ P.setColorTheme = function(themeId) {
+ this.delClass(/Ymacs-Theme-[^\s]*/g);
+ if (!(themeId instanceof Array))
+ themeId = [ themeId ];
+ themeId.foreach(function(themeId){
+ this.addClass("Ymacs-Theme-" + themeId);
+ }, this);
+ };
+
+ P.getFrameInDirection = function(dir, pos, frame) {
+ if (!frame)
+ frame = this.getActiveFrame();
+ var caret = frame.getCaretElement();
+ if (!pos)
+ pos = DOM.getPos(caret);
+ if (!pos.sz)
+ pos.sz = DOM.getOuterSize(caret);
+ var byx = this.frames.mergeSort(function(a, b){ return a.getPos().x - b.getPos().x });
+ var byy = this.frames.mergeSort(function(a, b){ return a.getPos().y - b.getPos().y });
+ return this["_get_frameInDir_" + dir](byx, byy, pos, frame);
+
+ };
+
+ function selectClosestFrameX(byx, pos) {
+
+ if (byx.length > 0) {
+ var x = byx.peek().getPos().x, a = [ byx.pop() ];
+ while (byx.length > 0 && byx.peek().getPos().x == x)
+ a.push(byx.pop());
+ return a.minElement(function(f){
+ return Math.abs(pos.y - f.getPos().y - f.getSize().y/2);
+
+ });
+ }
+ };
+
+ function selectClosestFrameY(byy, pos) {
+ if (byy.length > 0) {
+ var y = byy.peek().getPos().y, a = [ byy.pop() ];
+ while (byy.length > 0 && byy.peek().getPos().y == y)
+ a.push(byy.pop());
+ return a.minElement(function(f){
+ return Math.abs(pos.x - f.getPos().x - f.getSize().x/2);
+
+ });
+
+}
+ };
+
+ P._get_frameInDir_left = function(byx, byy, pos, frame) {
+ byx = byx.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+ ymacs.getActiveBuffer().cmd("backward_delete_char");
+ return (f !== frame) && (p.x < pos.x) && (p.y - pos.sz.y <= pos.y) && (p.y + s.y > pos.y);
+ });
+ return selectClosestFrameX(byx, pos);
+ };
+
+ P._get_frameInDir_right = function(byx, byy, pos, frame) {
+ byx.reverse();
+ byx = byx.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+ var temp = "*";
+ ymacs.getActiveBuffer().cmd("insert",temp);
+ return (f !== frame) && (p.x > pos.x) && (p.y - pos.sz.y <= pos.y) && (p.y + s.y > pos.y);
+ });
+ return selectClosestFrameX(byx, pos);
+ };
+
+ P._get_frameInDir_up = function(byx, byy, pos, frame) {
+ byy = byy.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+ var prefix1,prefix2,pretemp1,pretemp2;
+ var temp1; var p1;
+ var temp2;
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp1 = ymacs.getActiveBuffer().matchData[0];
+ // ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char"); p1= ymacs.getActiveBuffer().point();
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp2 = ymacs.getActiveBuffer().matchData[0];
+ if (temp1.length > temp2.length)
+ {
+ alert("Cannot move past superior level or buffer limit");
+ }
+ else {
+ ymacs.getActiveBuffer().cmd("forward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[^*]+/g))
+ {
+ ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p1);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+ else
+ {
+ ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p1);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+ }
+ }
+ }
+ else if (ymacs.getActiveBuffer().cmd("looking_at", /([0-9]+)(\.\s+)([a-z]+)+/g))
+ {
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ ymacs.getActiveBuffer().cmd("transpose_text");
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ }
+
+
+ else
+ {
+ ymacs.getActiveBuffer().cmd("transpose_lines");
+ ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+ return (f !== frame) && (p.y < pos.y) && (p.x - pos.sz.x <= pos.x) && (p.x + s.x > pos.x);
+ });
+ return selectClosestFrameY(byy, pos);
+ };
+
+ P._get_frameInDir_down = function(byx, byy, pos, frame) {
+ byy.reverse();
+ byy = byy.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+
+ var p2;
+ var temp1;
+ var temp2;
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp1 = ymacs.getActiveBuffer().matchData[0];
+ // ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char");
+ p2= ymacs.getActiveBuffer().point();
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp2 = ymacs.getActiveBuffer().matchData[0];
+ if (temp1.length > temp2.length)
+ {
+ alert("Cannot move past superior level or buffer limit");
+ }
+ else {
+ /* ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char"); */
+ ymacs.getActiveBuffer().cmd("forward_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[^*]+/g))
+ { ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p2);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+ else
+ { ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p2);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+} }}
+ else if (ymacs.getActiveBuffer().cmd("looking_at", /([0-9]+)(\.\s+)([a-z]+)+/g))
+ {
+
+ ymacs.getActiveBuffer().cmd("forward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ // ymacs.getActiveBuffer().cmd("beginning_of_line");
+ ymacs.getActiveBuffer().cmd("transpose_text");
+
+ }
+
+
+ else
+ {
+ ymacs.getActiveBuffer().cmd("forward_line");
+ ymacs.getActiveBuffer().cmd("transpose_lines");
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+ return (f !== frame) && (p.y > pos.y) && (p.x - pos.sz.x <= pos.x) && (p.x + s.x > pos.x);
+ });
+ return selectClosestFrameY(byy, pos);
+ };
+
+ /* -----[ local storage ]----- */
+
+ function ensureLocalStorage() {
+ if (!(window.localStorage && window.localStorage.getItem))
+ throw new Ymacs_Exception("Local storage facility not available in this browser");
+ };
+
+ P.ls_get = function() {
+ ensureLocalStorage();
+ return DlJSON.decode(localStorage.getItem(".ymacs") || "{}", true);
+ };
+
+ P.ls_set = function(src) {
+ ensureLocalStorage();
+ localStorage.setItem(".ymacs", DlJSON.encode(src));
+ };
+
+ P.ls_getFileContents = function(name, nothrow) {
+ var info = this.ls_getFileDirectory(name), other = info.other, code;
+ if (other.length == 1) {
+ code = info.dir[other[0]];
+ }
+ if (code == null && !nothrow) {
+ throw new Ymacs_Exception("File not found");
+ }
+ return code;
+ };
+
+ P.ls_getFileDirectory = function(name, create) {
+ var store, dir = store = this.ls_get();
+ name = name.replace(/^[~\x2f]+/, "").split(/\x2f+/);
+ var path = [], other = [];
+ while (name.length > 0) {
+ var part = name.shift();
+ if (dir.hasOwnProperty(part) && (typeof dir[part] != "string")) {
+ dir = dir[part];
+ path.push(part);
+ }
+ else {
+ other.push(part);
+ }
+ };
+ if (create) {
+ var n = create == "file" ? 1 : 0;
+ while (other.length > n) {
+ dir = dir[other.shift()] = {};
+ }
+ this.ls_set(store);
+ }
+ return { store: store, dir: dir, path: path, other: other };
+ };
+
+});