From 2138d4ef32c56cc79f50f69952ac74d0b3cb069c Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 28 Sep 2017 00:52:50 +0800 Subject: [PATCH] new editor!! Code mirror editor~ --- app/build.gradle | 9 +- .../assets/editor/beautify/beautify.min.js | 1 + .../main/assets/editor/codemirror/.bower.json | 32 + app/src/main/assets/editor/codemirror/AUTHORS | 689 ++ .../assets/editor/codemirror/CHANGELOG.md | 1234 +++ .../assets/editor/codemirror/CONTRIBUTING.md | 92 + app/src/main/assets/editor/codemirror/LICENSE | 21 + .../main/assets/editor/codemirror/README.md | 35 + .../codemirror/addon/comment/comment.js | 213 + .../addon/comment/continuecomment.js | 83 + .../editor/codemirror/addon/dialog/dialog.css | 32 + .../editor/codemirror/addon/dialog/dialog.js | 157 + .../codemirror/addon/display/autorefresh.js | 47 + .../codemirror/addon/display/fullscreen.css | 6 + .../codemirror/addon/display/fullscreen.js | 41 + .../editor/codemirror/addon/display/panel.js | 123 + .../codemirror/addon/display/placeholder.js | 62 + .../editor/codemirror/addon/display/rulers.js | 51 + .../codemirror/addon/edit/closebrackets.js | 207 + .../editor/codemirror/addon/edit/closetag.js | 169 + .../codemirror/addon/edit/continuelist.js | 51 + .../codemirror/addon/edit/matchbrackets.js | 140 + .../editor/codemirror/addon/edit/matchtags.js | 66 + .../codemirror/addon/edit/trailingspace.js | 27 + .../codemirror/addon/fold/brace-fold.js | 105 + .../codemirror/addon/fold/comment-fold.js | 59 + .../editor/codemirror/addon/fold/foldcode.js | 152 + .../codemirror/addon/fold/foldgutter.css | 20 + .../codemirror/addon/fold/foldgutter.js | 146 + .../codemirror/addon/fold/indent-fold.js | 48 + .../codemirror/addon/fold/markdown-fold.js | 49 + .../editor/codemirror/addon/fold/xml-fold.js | 182 + .../codemirror/addon/hint/anyword-hint.js | 41 + .../editor/codemirror/addon/hint/css-hint.js | 60 + .../editor/codemirror/addon/hint/html-hint.js | 348 + .../codemirror/addon/hint/javascript-hint.js | 491 + .../codemirror/addon/hint/show-hint.css | 36 + .../editor/codemirror/addon/hint/show-hint.js | 443 + .../editor/codemirror/addon/hint/sql-hint.js | 284 + .../editor/codemirror/addon/hint/xml-hint.js | 110 + .../addon/lint/coffeescript-lint.js | 47 + .../editor/codemirror/addon/lint/css-lint.js | 40 + .../editor/codemirror/addon/lint/html-lint.js | 53 + .../codemirror/addon/lint/javascript-lint.js | 141 + .../editor/codemirror/addon/lint/json-lint.js | 37 + .../editor/codemirror/addon/lint/lint.css | 73 + .../editor/codemirror/addon/lint/lint.js | 252 + .../editor/codemirror/addon/lint/yaml-lint.js | 41 + .../editor/codemirror/addon/merge/merge.css | 113 + .../editor/codemirror/addon/merge/merge.js | 998 ++ .../editor/codemirror/addon/mode/loadmode.js | 64 + .../editor/codemirror/addon/mode/multiplex.js | 123 + .../codemirror/addon/mode/multiplex_test.js | 33 + .../editor/codemirror/addon/mode/overlay.js | 90 + .../editor/codemirror/addon/mode/simple.js | 216 + .../codemirror/addon/runmode/colorize.js | 40 + .../addon/runmode/runmode-standalone.js | 158 + .../codemirror/addon/runmode/runmode.js | 72 + .../codemirror/addon/runmode/runmode.node.js | 185 + .../addon/scroll/annotatescrollbar.js | 122 + .../codemirror/addon/scroll/scrollpastend.js | 48 + .../addon/scroll/simplescrollbars.css | 66 + .../addon/scroll/simplescrollbars.js | 152 + .../codemirror/addon/search/jump-to-line.js | 49 + .../addon/search/match-highlighter.js | 165 + .../addon/search/matchesonscrollbar.css | 8 + .../addon/search/matchesonscrollbar.js | 97 + .../editor/codemirror/addon/search/search.js | 252 + .../codemirror/addon/search/searchcursor.js | 289 + .../codemirror/addon/selection/active-line.js | 72 + .../addon/selection/mark-selection.js | 119 + .../addon/selection/selection-pointer.js | 98 + .../editor/codemirror/addon/tern/tern.css | 87 + .../editor/codemirror/addon/tern/tern.js | 717 ++ .../editor/codemirror/addon/tern/worker.js | 44 + .../editor/codemirror/addon/wrap/hardwrap.js | 144 + .../main/assets/editor/codemirror/bower.json | 17 + .../codemirror/component-tools/bower.json | 17 + .../codemirror/component-tools/build.sh | 31 + .../codemirror/component-tools/update.py | 38 + .../assets/editor/codemirror/keymap/emacs.js | 416 + .../editor/codemirror/keymap/sublime.js | 613 ++ .../assets/editor/codemirror/keymap/vim.js | 5154 +++++++++ .../editor/codemirror/lib/codemirror.css | 342 + .../editor/codemirror/lib/codemirror.js | 9634 +++++++++++++++++ .../assets/editor/codemirror/mode/apl/apl.js | 174 + .../codemirror/mode/asciiarmor/asciiarmor.js | 74 + .../editor/codemirror/mode/asn.1/asn.1.js | 204 + .../codemirror/mode/asterisk/asterisk.js | 196 + .../codemirror/mode/brainfuck/brainfuck.js | 85 + .../editor/codemirror/mode/clike/clike.js | 789 ++ .../editor/codemirror/mode/clojure/clojure.js | 306 + .../editor/codemirror/mode/cmake/cmake.js | 97 + .../editor/codemirror/mode/cobol/cobol.js | 255 + .../mode/coffeescript/coffeescript.js | 359 + .../codemirror/mode/commonlisp/commonlisp.js | 124 + .../editor/codemirror/mode/crystal/crystal.js | 433 + .../assets/editor/codemirror/mode/css/css.js | 831 ++ .../editor/codemirror/mode/cypher/cypher.js | 150 + .../main/assets/editor/codemirror/mode/d/d.js | 218 + .../editor/codemirror/mode/dart/dart.js | 157 + .../editor/codemirror/mode/diff/diff.js | 47 + .../editor/codemirror/mode/django/django.js | 356 + .../codemirror/mode/dockerfile/dockerfile.js | 79 + .../assets/editor/codemirror/mode/dtd/dtd.js | 142 + .../editor/codemirror/mode/dylan/dylan.js | 352 + .../editor/codemirror/mode/ebnf/ebnf.js | 195 + .../assets/editor/codemirror/mode/ecl/ecl.js | 206 + .../editor/codemirror/mode/eiffel/eiffel.js | 160 + .../assets/editor/codemirror/mode/elm/elm.js | 205 + .../editor/codemirror/mode/erlang/erlang.js | 619 ++ .../editor/codemirror/mode/factor/factor.js | 85 + .../assets/editor/codemirror/mode/fcl/fcl.js | 173 + .../editor/codemirror/mode/forth/forth.js | 180 + .../editor/codemirror/mode/fortran/fortran.js | 188 + .../assets/editor/codemirror/mode/gas/gas.js | 345 + .../assets/editor/codemirror/mode/gfm/gfm.js | 129 + .../editor/codemirror/mode/gherkin/gherkin.js | 178 + .../assets/editor/codemirror/mode/go/go.js | 187 + .../editor/codemirror/mode/groovy/groovy.js | 230 + .../editor/codemirror/mode/haml/haml.js | 161 + .../codemirror/mode/handlebars/handlebars.js | 62 + .../mode/haskell-literate/haskell-literate.js | 43 + .../editor/codemirror/mode/haskell/haskell.js | 267 + .../editor/codemirror/mode/haxe/haxe.js | 515 + .../mode/htmlembedded/htmlembedded.js | 28 + .../codemirror/mode/htmlmixed/htmlmixed.js | 152 + .../editor/codemirror/mode/http/http.js | 113 + .../assets/editor/codemirror/mode/idl/idl.js | 290 + .../codemirror/mode/javascript/javascript.js | 847 ++ .../editor/codemirror/mode/jinja2/jinja2.js | 142 + .../assets/editor/codemirror/mode/jsx/jsx.js | 148 + .../editor/codemirror/mode/julia/julia.js | 418 + .../codemirror/mode/livescript/livescript.js | 280 + .../assets/editor/codemirror/mode/lua/lua.js | 159 + .../codemirror/mode/markdown/markdown.js | 859 ++ .../mode/mathematica/mathematica.js | 176 + .../editor/codemirror/mode/mbox/mbox.js | 129 + .../assets/editor/codemirror/mode/meta.js | 216 + .../editor/codemirror/mode/mirc/mirc.js | 193 + .../editor/codemirror/mode/mllike/mllike.js | 208 + .../codemirror/mode/modelica/modelica.js | 245 + .../editor/codemirror/mode/mscgen/mscgen.js | 175 + .../editor/codemirror/mode/mumps/mumps.js | 148 + .../editor/codemirror/mode/nginx/nginx.js | 178 + .../editor/codemirror/mode/nsis/nsis.js | 95 + .../codemirror/mode/ntriples/ntriples.js | 195 + .../editor/codemirror/mode/octave/octave.js | 139 + .../assets/editor/codemirror/mode/oz/oz.js | 252 + .../editor/codemirror/mode/pascal/pascal.js | 109 + .../editor/codemirror/mode/pegjs/pegjs.js | 114 + .../editor/codemirror/mode/perl/perl.js | 837 ++ .../assets/editor/codemirror/mode/php/php.js | 234 + .../assets/editor/codemirror/mode/pig/pig.js | 178 + .../codemirror/mode/powershell/powershell.js | 398 + .../codemirror/mode/properties/properties.js | 78 + .../codemirror/mode/protobuf/protobuf.js | 68 + .../assets/editor/codemirror/mode/pug/pug.js | 591 + .../editor/codemirror/mode/puppet/puppet.js | 220 + .../editor/codemirror/mode/python/python.js | 334 + .../main/assets/editor/codemirror/mode/q/q.js | 139 + .../main/assets/editor/codemirror/mode/r/r.js | 183 + .../assets/editor/codemirror/mode/rpm/rpm.js | 109 + .../assets/editor/codemirror/mode/rst/rst.js | 557 + .../editor/codemirror/mode/ruby/ruby.js | 296 + .../editor/codemirror/mode/rust/rust.js | 72 + .../assets/editor/codemirror/mode/sas/sas.js | 303 + .../editor/codemirror/mode/sass/sass.js | 454 + .../editor/codemirror/mode/scheme/scheme.js | 249 + .../editor/codemirror/mode/shell/shell.js | 142 + .../editor/codemirror/mode/sieve/sieve.js | 193 + .../editor/codemirror/mode/slim/slim.js | 575 + .../codemirror/mode/smalltalk/smalltalk.js | 168 + .../editor/codemirror/mode/smarty/smarty.js | 225 + .../editor/codemirror/mode/solr/solr.js | 104 + .../assets/editor/codemirror/mode/soy/soy.js | 356 + .../editor/codemirror/mode/sparql/sparql.js | 180 + .../mode/spreadsheet/spreadsheet.js | 112 + .../assets/editor/codemirror/mode/sql/sql.js | 488 + .../editor/codemirror/mode/stex/stex.js | 251 + .../editor/codemirror/mode/stylus/stylus.js | 771 ++ .../editor/codemirror/mode/swift/swift.js | 210 + .../assets/editor/codemirror/mode/tcl/tcl.js | 139 + .../editor/codemirror/mode/textile/textile.js | 469 + .../codemirror/mode/tiddlywiki/tiddlywiki.css | 14 + .../codemirror/mode/tiddlywiki/tiddlywiki.js | 308 + .../editor/codemirror/mode/tiki/tiki.css | 26 + .../editor/codemirror/mode/tiki/tiki.js | 312 + .../editor/codemirror/mode/toml/toml.js | 88 + .../editor/codemirror/mode/tornado/tornado.js | 68 + .../editor/codemirror/mode/troff/troff.js | 84 + .../codemirror/mode/ttcn-cfg/ttcn-cfg.js | 214 + .../editor/codemirror/mode/ttcn/ttcn.js | 283 + .../editor/codemirror/mode/turtle/turtle.js | 162 + .../editor/codemirror/mode/twig/twig.js | 141 + .../assets/editor/codemirror/mode/vb/vb.js | 275 + .../codemirror/mode/vbscript/vbscript.js | 350 + .../codemirror/mode/velocity/velocity.js | 201 + .../editor/codemirror/mode/verilog/verilog.js | 675 ++ .../editor/codemirror/mode/vhdl/vhdl.js | 189 + .../assets/editor/codemirror/mode/vue/vue.js | 77 + .../editor/codemirror/mode/webidl/webidl.js | 195 + .../assets/editor/codemirror/mode/xml/xml.js | 394 + .../editor/codemirror/mode/xquery/xquery.js | 448 + .../editor/codemirror/mode/yacas/yacas.js | 204 + .../mode/yaml-frontmatter/yaml-frontmatter.js | 68 + .../editor/codemirror/mode/yaml/yaml.js | 118 + .../assets/editor/codemirror/mode/z80/z80.js | 116 + .../assets/editor/codemirror/rollup.config.js | 18 + .../editor/codemirror/src/codemirror.js | 3 + .../editor/codemirror/src/display/Display.js | 106 + .../editor/codemirror/src/display/focus.js | 47 + .../editor/codemirror/src/display/gutters.js | 34 + .../src/display/highlight_worker.js | 55 + .../codemirror/src/display/line_numbers.js | 48 + .../codemirror/src/display/mode_state.js | 22 + .../codemirror/src/display/operations.js | 205 + .../codemirror/src/display/scroll_events.js | 115 + .../codemirror/src/display/scrollbars.js | 192 + .../codemirror/src/display/scrolling.js | 184 + .../codemirror/src/display/selection.js | 156 + .../codemirror/src/display/update_display.js | 260 + .../codemirror/src/display/update_line.js | 188 + .../codemirror/src/display/update_lines.js | 62 + .../codemirror/src/display/view_tracking.js | 153 + .../editor/codemirror/src/edit/CodeMirror.js | 214 + .../editor/codemirror/src/edit/commands.js | 178 + .../src/edit/deleteNearSelection.js | 30 + .../editor/codemirror/src/edit/drop_events.js | 119 + .../codemirror/src/edit/fromTextArea.js | 61 + .../codemirror/src/edit/global_events.js | 44 + .../editor/codemirror/src/edit/key_events.js | 155 + .../editor/codemirror/src/edit/legacy.js | 62 + .../assets/editor/codemirror/src/edit/main.js | 69 + .../editor/codemirror/src/edit/methods.js | 539 + .../codemirror/src/edit/mouse_events.js | 407 + .../editor/codemirror/src/edit/options.js | 190 + .../editor/codemirror/src/edit/utils.js | 7 + .../src/input/ContentEditableInput.js | 517 + .../codemirror/src/input/TextareaInput.js | 350 + .../editor/codemirror/src/input/indent.js | 71 + .../editor/codemirror/src/input/input.js | 135 + .../editor/codemirror/src/input/keymap.js | 145 + .../editor/codemirror/src/input/keynames.js | 17 + .../editor/codemirror/src/input/movement.js | 110 + .../editor/codemirror/src/line/highlight.js | 270 + .../editor/codemirror/src/line/line_data.js | 337 + .../assets/editor/codemirror/src/line/pos.js | 40 + .../codemirror/src/line/saw_special_spans.js | 10 + .../editor/codemirror/src/line/spans.js | 372 + .../editor/codemirror/src/line/utils_line.js | 85 + .../src/measurement/position_measurement.js | 699 ++ .../codemirror/src/measurement/widgets.js | 26 + .../assets/editor/codemirror/src/model/Doc.js | 432 + .../src/model/change_measurement.js | 61 + .../editor/codemirror/src/model/changes.js | 330 + .../editor/codemirror/src/model/chunk.js | 167 + .../codemirror/src/model/document_data.js | 111 + .../editor/codemirror/src/model/history.js | 228 + .../codemirror/src/model/line_widget.js | 78 + .../editor/codemirror/src/model/mark_text.js | 292 + .../editor/codemirror/src/model/selection.js | 82 + .../codemirror/src/model/selection_updates.js | 208 + .../assets/editor/codemirror/src/modes.js | 96 + .../codemirror/src/util/StringStream.js | 86 + .../assets/editor/codemirror/src/util/bidi.js | 212 + .../editor/codemirror/src/util/browser.js | 33 + .../assets/editor/codemirror/src/util/dom.js | 97 + .../editor/codemirror/src/util/event.js | 103 + .../codemirror/src/util/feature_detection.js | 84 + .../assets/editor/codemirror/src/util/misc.js | 150 + .../codemirror/src/util/operation_group.js | 72 + .../editor/codemirror/theme/3024-day.css | 41 + .../editor/codemirror/theme/3024-night.css | 39 + .../assets/editor/codemirror/theme/abcdef.css | 32 + .../codemirror/theme/ambiance-mobile.css | 5 + .../editor/codemirror/theme/ambiance.css | 74 + .../editor/codemirror/theme/base16-dark.css | 38 + .../editor/codemirror/theme/base16-light.css | 38 + .../assets/editor/codemirror/theme/bespin.css | 34 + .../editor/codemirror/theme/blackboard.css | 32 + .../assets/editor/codemirror/theme/cobalt.css | 25 + .../editor/codemirror/theme/colorforth.css | 33 + .../editor/codemirror/theme/dracula.css | 40 + .../editor/codemirror/theme/duotone-dark.css | 35 + .../editor/codemirror/theme/duotone-light.css | 36 + .../editor/codemirror/theme/eclipse.css | 23 + .../editor/codemirror/theme/elegant.css | 13 + .../editor/codemirror/theme/erlang-dark.css | 34 + .../editor/codemirror/theme/hopscotch.css | 34 + .../editor/codemirror/theme/icecoder.css | 43 + .../editor/codemirror/theme/isotope.css | 34 + .../editor/codemirror/theme/lesser-dark.css | 47 + .../editor/codemirror/theme/liquibyte.css | 95 + .../editor/codemirror/theme/material.css | 53 + .../assets/editor/codemirror/theme/mbo.css | 37 + .../editor/codemirror/theme/mdn-like.css | 46 + .../editor/codemirror/theme/midnight.css | 43 + .../editor/codemirror/theme/monokai.css | 36 + .../assets/editor/codemirror/theme/neat.css | 12 + .../assets/editor/codemirror/theme/neo.css | 43 + .../assets/editor/codemirror/theme/night.css | 27 + .../editor/codemirror/theme/panda-syntax.css | 85 + .../editor/codemirror/theme/paraiso-dark.css | 38 + .../editor/codemirror/theme/paraiso-light.css | 38 + .../codemirror/theme/pastel-on-dark.css | 52 + .../editor/codemirror/theme/railscasts.css | 34 + .../editor/codemirror/theme/rubyblue.css | 25 + .../assets/editor/codemirror/theme/seti.css | 44 + .../editor/codemirror/theme/solarized.css | 169 + .../editor/codemirror/theme/the-matrix.css | 30 + .../theme/tomorrow-night-bright.css | 35 + .../theme/tomorrow-night-eighties.css | 38 + .../assets/editor/codemirror/theme/ttcn.css | 64 + .../editor/codemirror/theme/twilight.css | 32 + .../editor/codemirror/theme/vibrant-ink.css | 34 + .../editor/codemirror/theme/xq-dark.css | 53 + .../editor/codemirror/theme/xq-light.css | 43 + .../assets/editor/codemirror/theme/yeti.css | 44 + .../editor/codemirror/theme/zenburn.css | 37 + app/src/main/assets/editor/index.html | 52 + .../com/stardust/app/NotAskAgainDialog.java | 4 +- .../tasker/TaskerScriptEditActivity.java | 46 +- .../scriptdroid/ui/edit/CodeMirrorEditor.java | 230 + .../scriptdroid/ui/edit/EditActivity.java | 320 +- .../scriptdroid/ui/edit/ScriptEditView.java | 117 - .../ui/edit/ViewSampleActivity.java | 32 +- .../ui/edit/completion/CodeCompletion.java | 221 - .../ui/edit/completion/CodeCompletions.java | 42 + .../completion/InputMethodEnhanceBar.java | 107 +- .../ui/edit/editor920/Editor920Activity.java | 104 - .../ui/edit/editor920/Editor920Utils.java | 27 - .../ui/settings/AboutActivity.java | 2 +- .../theme/ThemeColorManagerCompat.java | 2 - app/src/main/res/drawable/divider_drak.xml | 23 - app/src/main/res/layout/activity_edit.xml | 21 +- app/src/main/res/layout/content_edit.xml | 52 +- .../main/res/layout/fragment_task_manager.xml | 2 +- app/src/main/res/menu/menu_drawer.xml | 16 - app/src/main/res/menu/menu_editor.xml | 4 +- app/src/main/res/values/attrs.xml | 86 - app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/theme_editor.xml | 85 - .../stardust/scriptdroid/ExampleUnitTest.java | 24 - .../java/com/stardust/util/HashUtils.java | 25 + 345 files changed, 70614 insertions(+), 1064 deletions(-) create mode 100644 app/src/main/assets/editor/beautify/beautify.min.js create mode 100644 app/src/main/assets/editor/codemirror/.bower.json create mode 100644 app/src/main/assets/editor/codemirror/AUTHORS create mode 100644 app/src/main/assets/editor/codemirror/CHANGELOG.md create mode 100644 app/src/main/assets/editor/codemirror/CONTRIBUTING.md create mode 100644 app/src/main/assets/editor/codemirror/LICENSE create mode 100644 app/src/main/assets/editor/codemirror/README.md create mode 100644 app/src/main/assets/editor/codemirror/addon/comment/comment.js create mode 100644 app/src/main/assets/editor/codemirror/addon/comment/continuecomment.js create mode 100644 app/src/main/assets/editor/codemirror/addon/dialog/dialog.css create mode 100644 app/src/main/assets/editor/codemirror/addon/dialog/dialog.js create mode 100644 app/src/main/assets/editor/codemirror/addon/display/autorefresh.js create mode 100644 app/src/main/assets/editor/codemirror/addon/display/fullscreen.css create mode 100644 app/src/main/assets/editor/codemirror/addon/display/fullscreen.js create mode 100644 app/src/main/assets/editor/codemirror/addon/display/panel.js create mode 100644 app/src/main/assets/editor/codemirror/addon/display/placeholder.js create mode 100644 app/src/main/assets/editor/codemirror/addon/display/rulers.js create mode 100644 app/src/main/assets/editor/codemirror/addon/edit/closebrackets.js create mode 100644 app/src/main/assets/editor/codemirror/addon/edit/closetag.js create mode 100644 app/src/main/assets/editor/codemirror/addon/edit/continuelist.js create mode 100644 app/src/main/assets/editor/codemirror/addon/edit/matchbrackets.js create mode 100644 app/src/main/assets/editor/codemirror/addon/edit/matchtags.js create mode 100644 app/src/main/assets/editor/codemirror/addon/edit/trailingspace.js create mode 100644 app/src/main/assets/editor/codemirror/addon/fold/brace-fold.js create mode 100644 app/src/main/assets/editor/codemirror/addon/fold/comment-fold.js create mode 100644 app/src/main/assets/editor/codemirror/addon/fold/foldcode.js create mode 100644 app/src/main/assets/editor/codemirror/addon/fold/foldgutter.css create mode 100644 app/src/main/assets/editor/codemirror/addon/fold/foldgutter.js create mode 100644 app/src/main/assets/editor/codemirror/addon/fold/indent-fold.js create mode 100644 app/src/main/assets/editor/codemirror/addon/fold/markdown-fold.js create mode 100644 app/src/main/assets/editor/codemirror/addon/fold/xml-fold.js create mode 100644 app/src/main/assets/editor/codemirror/addon/hint/anyword-hint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/hint/css-hint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/hint/html-hint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/hint/javascript-hint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/hint/show-hint.css create mode 100644 app/src/main/assets/editor/codemirror/addon/hint/show-hint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/hint/sql-hint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/hint/xml-hint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/lint/coffeescript-lint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/lint/css-lint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/lint/html-lint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/lint/javascript-lint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/lint/json-lint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/lint/lint.css create mode 100644 app/src/main/assets/editor/codemirror/addon/lint/lint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/lint/yaml-lint.js create mode 100644 app/src/main/assets/editor/codemirror/addon/merge/merge.css create mode 100644 app/src/main/assets/editor/codemirror/addon/merge/merge.js create mode 100644 app/src/main/assets/editor/codemirror/addon/mode/loadmode.js create mode 100644 app/src/main/assets/editor/codemirror/addon/mode/multiplex.js create mode 100644 app/src/main/assets/editor/codemirror/addon/mode/multiplex_test.js create mode 100644 app/src/main/assets/editor/codemirror/addon/mode/overlay.js create mode 100644 app/src/main/assets/editor/codemirror/addon/mode/simple.js create mode 100644 app/src/main/assets/editor/codemirror/addon/runmode/colorize.js create mode 100644 app/src/main/assets/editor/codemirror/addon/runmode/runmode-standalone.js create mode 100644 app/src/main/assets/editor/codemirror/addon/runmode/runmode.js create mode 100644 app/src/main/assets/editor/codemirror/addon/runmode/runmode.node.js create mode 100644 app/src/main/assets/editor/codemirror/addon/scroll/annotatescrollbar.js create mode 100644 app/src/main/assets/editor/codemirror/addon/scroll/scrollpastend.js create mode 100644 app/src/main/assets/editor/codemirror/addon/scroll/simplescrollbars.css create mode 100644 app/src/main/assets/editor/codemirror/addon/scroll/simplescrollbars.js create mode 100644 app/src/main/assets/editor/codemirror/addon/search/jump-to-line.js create mode 100644 app/src/main/assets/editor/codemirror/addon/search/match-highlighter.js create mode 100644 app/src/main/assets/editor/codemirror/addon/search/matchesonscrollbar.css create mode 100644 app/src/main/assets/editor/codemirror/addon/search/matchesonscrollbar.js create mode 100644 app/src/main/assets/editor/codemirror/addon/search/search.js create mode 100644 app/src/main/assets/editor/codemirror/addon/search/searchcursor.js create mode 100644 app/src/main/assets/editor/codemirror/addon/selection/active-line.js create mode 100644 app/src/main/assets/editor/codemirror/addon/selection/mark-selection.js create mode 100644 app/src/main/assets/editor/codemirror/addon/selection/selection-pointer.js create mode 100644 app/src/main/assets/editor/codemirror/addon/tern/tern.css create mode 100644 app/src/main/assets/editor/codemirror/addon/tern/tern.js create mode 100644 app/src/main/assets/editor/codemirror/addon/tern/worker.js create mode 100644 app/src/main/assets/editor/codemirror/addon/wrap/hardwrap.js create mode 100644 app/src/main/assets/editor/codemirror/bower.json create mode 100644 app/src/main/assets/editor/codemirror/component-tools/bower.json create mode 100644 app/src/main/assets/editor/codemirror/component-tools/build.sh create mode 100644 app/src/main/assets/editor/codemirror/component-tools/update.py create mode 100644 app/src/main/assets/editor/codemirror/keymap/emacs.js create mode 100644 app/src/main/assets/editor/codemirror/keymap/sublime.js create mode 100644 app/src/main/assets/editor/codemirror/keymap/vim.js create mode 100644 app/src/main/assets/editor/codemirror/lib/codemirror.css create mode 100644 app/src/main/assets/editor/codemirror/lib/codemirror.js create mode 100644 app/src/main/assets/editor/codemirror/mode/apl/apl.js create mode 100644 app/src/main/assets/editor/codemirror/mode/asciiarmor/asciiarmor.js create mode 100644 app/src/main/assets/editor/codemirror/mode/asn.1/asn.1.js create mode 100644 app/src/main/assets/editor/codemirror/mode/asterisk/asterisk.js create mode 100644 app/src/main/assets/editor/codemirror/mode/brainfuck/brainfuck.js create mode 100644 app/src/main/assets/editor/codemirror/mode/clike/clike.js create mode 100644 app/src/main/assets/editor/codemirror/mode/clojure/clojure.js create mode 100644 app/src/main/assets/editor/codemirror/mode/cmake/cmake.js create mode 100644 app/src/main/assets/editor/codemirror/mode/cobol/cobol.js create mode 100644 app/src/main/assets/editor/codemirror/mode/coffeescript/coffeescript.js create mode 100644 app/src/main/assets/editor/codemirror/mode/commonlisp/commonlisp.js create mode 100644 app/src/main/assets/editor/codemirror/mode/crystal/crystal.js create mode 100644 app/src/main/assets/editor/codemirror/mode/css/css.js create mode 100644 app/src/main/assets/editor/codemirror/mode/cypher/cypher.js create mode 100644 app/src/main/assets/editor/codemirror/mode/d/d.js create mode 100644 app/src/main/assets/editor/codemirror/mode/dart/dart.js create mode 100644 app/src/main/assets/editor/codemirror/mode/diff/diff.js create mode 100644 app/src/main/assets/editor/codemirror/mode/django/django.js create mode 100644 app/src/main/assets/editor/codemirror/mode/dockerfile/dockerfile.js create mode 100644 app/src/main/assets/editor/codemirror/mode/dtd/dtd.js create mode 100644 app/src/main/assets/editor/codemirror/mode/dylan/dylan.js create mode 100644 app/src/main/assets/editor/codemirror/mode/ebnf/ebnf.js create mode 100644 app/src/main/assets/editor/codemirror/mode/ecl/ecl.js create mode 100644 app/src/main/assets/editor/codemirror/mode/eiffel/eiffel.js create mode 100644 app/src/main/assets/editor/codemirror/mode/elm/elm.js create mode 100644 app/src/main/assets/editor/codemirror/mode/erlang/erlang.js create mode 100644 app/src/main/assets/editor/codemirror/mode/factor/factor.js create mode 100644 app/src/main/assets/editor/codemirror/mode/fcl/fcl.js create mode 100644 app/src/main/assets/editor/codemirror/mode/forth/forth.js create mode 100644 app/src/main/assets/editor/codemirror/mode/fortran/fortran.js create mode 100644 app/src/main/assets/editor/codemirror/mode/gas/gas.js create mode 100644 app/src/main/assets/editor/codemirror/mode/gfm/gfm.js create mode 100644 app/src/main/assets/editor/codemirror/mode/gherkin/gherkin.js create mode 100644 app/src/main/assets/editor/codemirror/mode/go/go.js create mode 100644 app/src/main/assets/editor/codemirror/mode/groovy/groovy.js create mode 100644 app/src/main/assets/editor/codemirror/mode/haml/haml.js create mode 100644 app/src/main/assets/editor/codemirror/mode/handlebars/handlebars.js create mode 100644 app/src/main/assets/editor/codemirror/mode/haskell-literate/haskell-literate.js create mode 100644 app/src/main/assets/editor/codemirror/mode/haskell/haskell.js create mode 100644 app/src/main/assets/editor/codemirror/mode/haxe/haxe.js create mode 100644 app/src/main/assets/editor/codemirror/mode/htmlembedded/htmlembedded.js create mode 100644 app/src/main/assets/editor/codemirror/mode/htmlmixed/htmlmixed.js create mode 100644 app/src/main/assets/editor/codemirror/mode/http/http.js create mode 100644 app/src/main/assets/editor/codemirror/mode/idl/idl.js create mode 100644 app/src/main/assets/editor/codemirror/mode/javascript/javascript.js create mode 100644 app/src/main/assets/editor/codemirror/mode/jinja2/jinja2.js create mode 100644 app/src/main/assets/editor/codemirror/mode/jsx/jsx.js create mode 100644 app/src/main/assets/editor/codemirror/mode/julia/julia.js create mode 100644 app/src/main/assets/editor/codemirror/mode/livescript/livescript.js create mode 100644 app/src/main/assets/editor/codemirror/mode/lua/lua.js create mode 100644 app/src/main/assets/editor/codemirror/mode/markdown/markdown.js create mode 100644 app/src/main/assets/editor/codemirror/mode/mathematica/mathematica.js create mode 100644 app/src/main/assets/editor/codemirror/mode/mbox/mbox.js create mode 100644 app/src/main/assets/editor/codemirror/mode/meta.js create mode 100644 app/src/main/assets/editor/codemirror/mode/mirc/mirc.js create mode 100644 app/src/main/assets/editor/codemirror/mode/mllike/mllike.js create mode 100644 app/src/main/assets/editor/codemirror/mode/modelica/modelica.js create mode 100644 app/src/main/assets/editor/codemirror/mode/mscgen/mscgen.js create mode 100644 app/src/main/assets/editor/codemirror/mode/mumps/mumps.js create mode 100644 app/src/main/assets/editor/codemirror/mode/nginx/nginx.js create mode 100644 app/src/main/assets/editor/codemirror/mode/nsis/nsis.js create mode 100644 app/src/main/assets/editor/codemirror/mode/ntriples/ntriples.js create mode 100644 app/src/main/assets/editor/codemirror/mode/octave/octave.js create mode 100644 app/src/main/assets/editor/codemirror/mode/oz/oz.js create mode 100644 app/src/main/assets/editor/codemirror/mode/pascal/pascal.js create mode 100644 app/src/main/assets/editor/codemirror/mode/pegjs/pegjs.js create mode 100644 app/src/main/assets/editor/codemirror/mode/perl/perl.js create mode 100644 app/src/main/assets/editor/codemirror/mode/php/php.js create mode 100644 app/src/main/assets/editor/codemirror/mode/pig/pig.js create mode 100644 app/src/main/assets/editor/codemirror/mode/powershell/powershell.js create mode 100644 app/src/main/assets/editor/codemirror/mode/properties/properties.js create mode 100644 app/src/main/assets/editor/codemirror/mode/protobuf/protobuf.js create mode 100644 app/src/main/assets/editor/codemirror/mode/pug/pug.js create mode 100644 app/src/main/assets/editor/codemirror/mode/puppet/puppet.js create mode 100644 app/src/main/assets/editor/codemirror/mode/python/python.js create mode 100644 app/src/main/assets/editor/codemirror/mode/q/q.js create mode 100644 app/src/main/assets/editor/codemirror/mode/r/r.js create mode 100644 app/src/main/assets/editor/codemirror/mode/rpm/rpm.js create mode 100644 app/src/main/assets/editor/codemirror/mode/rst/rst.js create mode 100644 app/src/main/assets/editor/codemirror/mode/ruby/ruby.js create mode 100644 app/src/main/assets/editor/codemirror/mode/rust/rust.js create mode 100644 app/src/main/assets/editor/codemirror/mode/sas/sas.js create mode 100644 app/src/main/assets/editor/codemirror/mode/sass/sass.js create mode 100644 app/src/main/assets/editor/codemirror/mode/scheme/scheme.js create mode 100644 app/src/main/assets/editor/codemirror/mode/shell/shell.js create mode 100644 app/src/main/assets/editor/codemirror/mode/sieve/sieve.js create mode 100644 app/src/main/assets/editor/codemirror/mode/slim/slim.js create mode 100644 app/src/main/assets/editor/codemirror/mode/smalltalk/smalltalk.js create mode 100644 app/src/main/assets/editor/codemirror/mode/smarty/smarty.js create mode 100644 app/src/main/assets/editor/codemirror/mode/solr/solr.js create mode 100644 app/src/main/assets/editor/codemirror/mode/soy/soy.js create mode 100644 app/src/main/assets/editor/codemirror/mode/sparql/sparql.js create mode 100644 app/src/main/assets/editor/codemirror/mode/spreadsheet/spreadsheet.js create mode 100644 app/src/main/assets/editor/codemirror/mode/sql/sql.js create mode 100644 app/src/main/assets/editor/codemirror/mode/stex/stex.js create mode 100644 app/src/main/assets/editor/codemirror/mode/stylus/stylus.js create mode 100644 app/src/main/assets/editor/codemirror/mode/swift/swift.js create mode 100644 app/src/main/assets/editor/codemirror/mode/tcl/tcl.js create mode 100644 app/src/main/assets/editor/codemirror/mode/textile/textile.js create mode 100644 app/src/main/assets/editor/codemirror/mode/tiddlywiki/tiddlywiki.css create mode 100644 app/src/main/assets/editor/codemirror/mode/tiddlywiki/tiddlywiki.js create mode 100644 app/src/main/assets/editor/codemirror/mode/tiki/tiki.css create mode 100644 app/src/main/assets/editor/codemirror/mode/tiki/tiki.js create mode 100644 app/src/main/assets/editor/codemirror/mode/toml/toml.js create mode 100644 app/src/main/assets/editor/codemirror/mode/tornado/tornado.js create mode 100644 app/src/main/assets/editor/codemirror/mode/troff/troff.js create mode 100644 app/src/main/assets/editor/codemirror/mode/ttcn-cfg/ttcn-cfg.js create mode 100644 app/src/main/assets/editor/codemirror/mode/ttcn/ttcn.js create mode 100644 app/src/main/assets/editor/codemirror/mode/turtle/turtle.js create mode 100644 app/src/main/assets/editor/codemirror/mode/twig/twig.js create mode 100644 app/src/main/assets/editor/codemirror/mode/vb/vb.js create mode 100644 app/src/main/assets/editor/codemirror/mode/vbscript/vbscript.js create mode 100644 app/src/main/assets/editor/codemirror/mode/velocity/velocity.js create mode 100644 app/src/main/assets/editor/codemirror/mode/verilog/verilog.js create mode 100644 app/src/main/assets/editor/codemirror/mode/vhdl/vhdl.js create mode 100644 app/src/main/assets/editor/codemirror/mode/vue/vue.js create mode 100644 app/src/main/assets/editor/codemirror/mode/webidl/webidl.js create mode 100644 app/src/main/assets/editor/codemirror/mode/xml/xml.js create mode 100644 app/src/main/assets/editor/codemirror/mode/xquery/xquery.js create mode 100644 app/src/main/assets/editor/codemirror/mode/yacas/yacas.js create mode 100644 app/src/main/assets/editor/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js create mode 100644 app/src/main/assets/editor/codemirror/mode/yaml/yaml.js create mode 100644 app/src/main/assets/editor/codemirror/mode/z80/z80.js create mode 100644 app/src/main/assets/editor/codemirror/rollup.config.js create mode 100644 app/src/main/assets/editor/codemirror/src/codemirror.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/Display.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/focus.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/gutters.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/highlight_worker.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/line_numbers.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/mode_state.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/operations.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/scroll_events.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/scrollbars.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/scrolling.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/selection.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/update_display.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/update_line.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/update_lines.js create mode 100644 app/src/main/assets/editor/codemirror/src/display/view_tracking.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/CodeMirror.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/commands.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/deleteNearSelection.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/drop_events.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/fromTextArea.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/global_events.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/key_events.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/legacy.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/main.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/methods.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/mouse_events.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/options.js create mode 100644 app/src/main/assets/editor/codemirror/src/edit/utils.js create mode 100644 app/src/main/assets/editor/codemirror/src/input/ContentEditableInput.js create mode 100644 app/src/main/assets/editor/codemirror/src/input/TextareaInput.js create mode 100644 app/src/main/assets/editor/codemirror/src/input/indent.js create mode 100644 app/src/main/assets/editor/codemirror/src/input/input.js create mode 100644 app/src/main/assets/editor/codemirror/src/input/keymap.js create mode 100644 app/src/main/assets/editor/codemirror/src/input/keynames.js create mode 100644 app/src/main/assets/editor/codemirror/src/input/movement.js create mode 100644 app/src/main/assets/editor/codemirror/src/line/highlight.js create mode 100644 app/src/main/assets/editor/codemirror/src/line/line_data.js create mode 100644 app/src/main/assets/editor/codemirror/src/line/pos.js create mode 100644 app/src/main/assets/editor/codemirror/src/line/saw_special_spans.js create mode 100644 app/src/main/assets/editor/codemirror/src/line/spans.js create mode 100644 app/src/main/assets/editor/codemirror/src/line/utils_line.js create mode 100644 app/src/main/assets/editor/codemirror/src/measurement/position_measurement.js create mode 100644 app/src/main/assets/editor/codemirror/src/measurement/widgets.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/Doc.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/change_measurement.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/changes.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/chunk.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/document_data.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/history.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/line_widget.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/mark_text.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/selection.js create mode 100644 app/src/main/assets/editor/codemirror/src/model/selection_updates.js create mode 100644 app/src/main/assets/editor/codemirror/src/modes.js create mode 100644 app/src/main/assets/editor/codemirror/src/util/StringStream.js create mode 100644 app/src/main/assets/editor/codemirror/src/util/bidi.js create mode 100644 app/src/main/assets/editor/codemirror/src/util/browser.js create mode 100644 app/src/main/assets/editor/codemirror/src/util/dom.js create mode 100644 app/src/main/assets/editor/codemirror/src/util/event.js create mode 100644 app/src/main/assets/editor/codemirror/src/util/feature_detection.js create mode 100644 app/src/main/assets/editor/codemirror/src/util/misc.js create mode 100644 app/src/main/assets/editor/codemirror/src/util/operation_group.js create mode 100644 app/src/main/assets/editor/codemirror/theme/3024-day.css create mode 100644 app/src/main/assets/editor/codemirror/theme/3024-night.css create mode 100644 app/src/main/assets/editor/codemirror/theme/abcdef.css create mode 100644 app/src/main/assets/editor/codemirror/theme/ambiance-mobile.css create mode 100644 app/src/main/assets/editor/codemirror/theme/ambiance.css create mode 100644 app/src/main/assets/editor/codemirror/theme/base16-dark.css create mode 100644 app/src/main/assets/editor/codemirror/theme/base16-light.css create mode 100644 app/src/main/assets/editor/codemirror/theme/bespin.css create mode 100644 app/src/main/assets/editor/codemirror/theme/blackboard.css create mode 100644 app/src/main/assets/editor/codemirror/theme/cobalt.css create mode 100644 app/src/main/assets/editor/codemirror/theme/colorforth.css create mode 100644 app/src/main/assets/editor/codemirror/theme/dracula.css create mode 100644 app/src/main/assets/editor/codemirror/theme/duotone-dark.css create mode 100644 app/src/main/assets/editor/codemirror/theme/duotone-light.css create mode 100644 app/src/main/assets/editor/codemirror/theme/eclipse.css create mode 100644 app/src/main/assets/editor/codemirror/theme/elegant.css create mode 100644 app/src/main/assets/editor/codemirror/theme/erlang-dark.css create mode 100644 app/src/main/assets/editor/codemirror/theme/hopscotch.css create mode 100644 app/src/main/assets/editor/codemirror/theme/icecoder.css create mode 100644 app/src/main/assets/editor/codemirror/theme/isotope.css create mode 100644 app/src/main/assets/editor/codemirror/theme/lesser-dark.css create mode 100644 app/src/main/assets/editor/codemirror/theme/liquibyte.css create mode 100644 app/src/main/assets/editor/codemirror/theme/material.css create mode 100644 app/src/main/assets/editor/codemirror/theme/mbo.css create mode 100644 app/src/main/assets/editor/codemirror/theme/mdn-like.css create mode 100644 app/src/main/assets/editor/codemirror/theme/midnight.css create mode 100644 app/src/main/assets/editor/codemirror/theme/monokai.css create mode 100644 app/src/main/assets/editor/codemirror/theme/neat.css create mode 100644 app/src/main/assets/editor/codemirror/theme/neo.css create mode 100644 app/src/main/assets/editor/codemirror/theme/night.css create mode 100644 app/src/main/assets/editor/codemirror/theme/panda-syntax.css create mode 100644 app/src/main/assets/editor/codemirror/theme/paraiso-dark.css create mode 100644 app/src/main/assets/editor/codemirror/theme/paraiso-light.css create mode 100644 app/src/main/assets/editor/codemirror/theme/pastel-on-dark.css create mode 100644 app/src/main/assets/editor/codemirror/theme/railscasts.css create mode 100644 app/src/main/assets/editor/codemirror/theme/rubyblue.css create mode 100644 app/src/main/assets/editor/codemirror/theme/seti.css create mode 100644 app/src/main/assets/editor/codemirror/theme/solarized.css create mode 100644 app/src/main/assets/editor/codemirror/theme/the-matrix.css create mode 100644 app/src/main/assets/editor/codemirror/theme/tomorrow-night-bright.css create mode 100644 app/src/main/assets/editor/codemirror/theme/tomorrow-night-eighties.css create mode 100644 app/src/main/assets/editor/codemirror/theme/ttcn.css create mode 100644 app/src/main/assets/editor/codemirror/theme/twilight.css create mode 100644 app/src/main/assets/editor/codemirror/theme/vibrant-ink.css create mode 100644 app/src/main/assets/editor/codemirror/theme/xq-dark.css create mode 100644 app/src/main/assets/editor/codemirror/theme/xq-light.css create mode 100644 app/src/main/assets/editor/codemirror/theme/yeti.css create mode 100644 app/src/main/assets/editor/codemirror/theme/zenburn.css create mode 100644 app/src/main/assets/editor/index.html create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/edit/CodeMirrorEditor.java delete mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/edit/ScriptEditView.java delete mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/CodeCompletion.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/CodeCompletions.java delete mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/edit/editor920/Editor920Activity.java delete mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/edit/editor920/Editor920Utils.java delete mode 100644 app/src/main/res/drawable/divider_drak.xml delete mode 100644 app/src/main/res/menu/menu_drawer.xml delete mode 100644 app/src/main/res/values/theme_editor.xml create mode 100644 common/src/main/java/com/stardust/util/HashUtils.java diff --git a/app/build.gradle b/app/build.gradle index 41e07dd3..b3511299 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,7 +20,7 @@ android { buildTypes { debug { shrinkResources false - minifyEnabled true + minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { @@ -124,6 +124,7 @@ dependencies { compile 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1' compile 'com.yqritc:recyclerview-flexibledivider:1.4.0' compile 'com.wang.avi:library:2.1.3' + compile 'org.apache.commons:commons-lang3:3.5' // RxJava compile "io.reactivex.rxjava2:rxjava:2.1.0" compile 'io.reactivex.rxjava2:rxandroid:2.0.1' @@ -132,6 +133,8 @@ dependencies { compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' + //JDeferred + compile 'org.jdeferred:jdeferred-android-aar:1.2.6' //Picasso compile 'com.squareup.picasso:picasso:2.5.2' // Tasker Plugin @@ -145,10 +148,6 @@ dependencies { compile 'com.makeramen:roundedimageview:2.2.1' compile 'com.rengwuxian.materialedittext:library:2.0.3' compile 'org.msgpack:msgpack-core:0.8.11' - compile(name: '920-common-release', ext: 'aar') - compile(name: '920-styles-release', ext: 'aar') - compile(name: '920-file_explorer-release', ext: 'aar') - compile(name: '920-app-debug', ext: 'aar') compile project(':automator') compile project(':common') compile project(':autojs') diff --git a/app/src/main/assets/editor/beautify/beautify.min.js b/app/src/main/assets/editor/beautify/beautify.min.js new file mode 100644 index 00000000..4ee7ecac --- /dev/null +++ b/app/src/main/assets/editor/beautify/beautify.min.js @@ -0,0 +1 @@ +!function(){var e=function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(e,t){var n="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",i=new RegExp("["+n+"]"),r=new RegExp("["+n+"̀-ͯ҃-֑҇-ׇֽֿׁׂׅׄؐ-ؚؠ-ىٲ-ۓۧ-ۨۻ-ۼܰ-݊ࠀ-ࠔࠛ-ࠣࠥ-ࠧࠩ-࠭ࡀ-ࡗࣤ-ࣾऀ-ःऺ-़ा-ॏ॑-ॗॢ-ॣ०-९ঁ-ঃ়া-ৄেৈৗয়-ৠਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢ-ૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୟ-ୠ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఁ-ఃె-ైొ-్ౕౖౢ-ౣ౦-౯ಂಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢ-ೣ೦-೯ംഃെ-ൈൗൢ-ൣ൦-൯ංඃ්ා-ුූෘ-ෟෲෳิ-ฺเ-ๅ๐-๙ິ-ູ່-ໍ໐-໙༘༙༠-༩༹༵༷ཁ-ཇཱ-྄྆-྇ྍ-ྗྙ-ྼ࿆က-ဩ၀-၉ၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟ᜎ-ᜐᜠ-ᜰᝀ-ᝐᝲᝳក-ឲ៝០-៩᠋-᠍᠐-᠙ᤠ-ᤫᤰ-᤻ᥑ-ᥭᦰ-ᧀᧈ-ᧉ᧐-᧙ᨀ-ᨕᨠ-ᩓ᩠-᩿᩼-᪉᪐-᪙ᭆ-ᭋ᭐-᭙᭫-᭳᮰-᮹᯦-᯳ᰀ-ᰢ᱀-᱉ᱛ-ᱽ᳐-᳒ᴀ-ᶾḁ-ἕ‌‍‿⁀⁔⃐-⃥⃜⃡-⃰ⶁ-ⶖⷠ-ⷿ〡-〨゙゚Ꙁ-ꙭꙴ-꙽ꚟ꛰-꛱ꟸ-ꠀ꠆ꠋꠣ-ꠧꢀ-ꢁꢴ-꣄꣐-꣙ꣳ-ꣷ꤀-꤉ꤦ-꤭ꤰ-ꥅꦀ-ꦃ꦳-꧀ꨀ-ꨧꩀ-ꩁꩌ-ꩍ꩐-꩙ꩻꫠ-ꫩꫲ-ꫳꯀ-ꯡ꯬꯭꯰-꯹ﬠ-ﬨ︀-️︠-︦︳︴﹍-﹏0-9_]");t.newline=/[\n\r\u2028\u2029]/,t.lineBreak=new RegExp("\r\n|"+t.newline.source),t.allLineBreaks=new RegExp(t.lineBreak.source,"g"),t.isIdentifierStart=function(e){return e<65?36===e||64===e:e<91||(e<97?95===e:e<123||e>=170&&i.test(String.fromCharCode(e)))},t.isIdentifierChar=function(e){return e<48?36===e:e<58||!(e<65)&&(e<91||(e<97?95===e:e<123||e>=170&&r.test(String.fromCharCode(e))))}},function(e,t,n){function i(e,t){if(!t.multiline_frame&&t.mode!==h.ForInitializer&&t.mode!==h.Conditional){var n=t.start_line_index;e.remove_indent(n)}}function r(e,t){for(var n=0;nn&&(n=e.line_indent_level)),{mode:t,parent:e,last_text:e?e.last_text:"",last_word:e?e.last_word:"",declaration_statement:!1,declaration_assignment:!1,multiline_frame:!1,inline_frame:!1,if_block:!1,else_block:!1,do_block:!1,do_while:!1,import_block:!1,in_case_statement:!1,in_case:!1,case_body:!1,indentation_level:n,line_indent_level:e?e.line_indent_level:n,start_line_index:L.get_line_number(),ternary_depth:0}}function f(e,t){for(var n=e.newlines,i=Q.keep_array_indentation&&k(W.mode),r=B,_=0;_0,t);else if(Q.max_preserve_newlines&&n>Q.max_preserve_newlines&&(n=Q.max_preserve_newlines),Q.preserve_newlines&&e.newlines>1){x(!1,t);for(var o=1;o=Q.wrap_line_length&&x(!1,!0)}}}function x(e,t){if(!t&&";"!==W.last_text&&","!==W.last_text&&"="!==W.last_text&&"TK_OPERATOR"!==M)for(var n=C(1);!(W.mode!==h.Statement||W.if_block&&n&&"TK_RESERVED"===n.type&&"else"===n.text||W.do_block);)O();L.add_new_line(e)&&(W.multiline_frame=!0)}function R(){L.just_added_newline()&&(Q.keep_array_indentation&&k(W.mode)&&B.wanted_newline?(L.current_line.push(B.whitespace_before),L.space_before_token=!1):L.set_indent(W.indentation_level)&&(W.line_indent_level=W.indentation_level))}function K(e){if(L.raw)L.add_raw_token(B);else{if(Q.comma_first&&"TK_COMMA"===M&&L.just_added_newline()&&","===L.previous_line.last()){var t=L.previous_line.pop();L.previous_line.is_empty()&&(L.previous_line.push(t),L.trim(!0),L.current_line.pop(),L.trim()),R(),L.add_token(","),L.space_before_token=!0}e=e||B.text,R(),L.add_token(e)}}function m(){W.indentation_level+=1}function b(){W.indentation_level>0&&(!W.parent||W.indentation_level>W.parent.indentation_level)&&(W.indentation_level-=1)}function v(e){W?(z.push(W),X=W):X=n(null,e),W=n(X,e)}function k(e){return e===h.ArrayLiteral}function w(e){return r(e,[h.Expression,h.ForInitializer,h.Conditional])}function O(){z.length>0&&(X=W,W=z.pop(),X.mode!==h.Statement||Q.unindent_chained_methods||i(L,X))}function S(){return W.parent.mode===h.ObjectLiteral&&W.mode===h.Statement&&(":"===W.last_text&&0===W.ternary_depth||"TK_RESERVED"===M&&r(W.last_text,["get","set"]))}function y(){return!!("TK_RESERVED"===M&&r(W.last_text,["var","let","const"])&&"TK_WORD"===B.type||"TK_RESERVED"===M&&"do"===W.last_text||"TK_RESERVED"===M&&r(W.last_text,q)&&!B.wanted_newline||"TK_RESERVED"===M&&"else"===W.last_text&&("TK_RESERVED"!==B.type||"if"!==B.text||B.comments_before.length)||"TK_END_EXPR"===M&&(X.mode===h.ForInitializer||X.mode===h.Conditional)||"TK_WORD"===M&&W.mode===h.BlockStatement&&!W.in_case&&"--"!==B.text&&"++"!==B.text&&"function"!==I&&"TK_WORD"!==B.type&&"TK_RESERVED"!==B.type||W.mode===h.ObjectLiteral&&(":"===W.last_text&&0===W.ternary_depth||"TK_RESERVED"===M&&r(W.last_text,["get","set"])))&&(v(h.Statement),Q.unindent_chained_methods||m(),f(B,!0),S()||E("TK_RESERVED"===B.type&&r(B.text,["do","for","if","while"])),!0)}function g(e,t){for(var n=0;n=$.length?null:$[t]}function N(){if("TK_RESERVED"===B.type&&(r(B.text,["set","get"])&&W.mode!==h.ObjectLiteral?B.type="TK_WORD":r(B.text,["as","from"])&&!W.import_block?B.type="TK_WORD":W.mode===h.ObjectLiteral&&":"===C(1).text&&(B.type="TK_WORD")),y()?"TK_RESERVED"===M&&r(W.last_text,["var","let","const"])&&"TK_WORD"===B.type&&(W.declaration_statement=!0):!B.wanted_newline||w(W.mode)||"TK_OPERATOR"===M&&"--"!==W.last_text&&"++"!==W.last_text||"TK_EQUALS"===M||!Q.preserve_newlines&&"TK_RESERVED"===M&&r(W.last_text,["var","let","const","set","get"])?f(B):(f(B),x()),W.do_block&&!W.do_while){if("TK_RESERVED"===B.type&&"while"===B.text)return L.space_before_token=!0,K(),L.space_before_token=!0,void(W.do_while=!0);x(),W.do_block=!1}if(W.if_block)if(W.else_block||"TK_RESERVED"!==B.type||"else"!==B.text){for(;W.mode===h.Statement;)O();W.if_block=!1,W.else_block=!1}else W.else_block=!0;return"TK_RESERVED"===B.type&&("case"===B.text||"default"===B.text&&W.in_case_statement)?(x(),(W.case_body||Q.jslint_happy)&&(b(),W.case_body=!1),K(),W.in_case=!0,void(W.in_case_statement=!0)):("TK_COMMA"!==M&&"TK_START_EXPR"!==M&&"TK_EQUALS"!==M&&"TK_OPERATOR"!==M||S()||E(),"TK_RESERVED"===B.type&&"function"===B.text?((r(W.last_text,["}",";"])||L.just_added_newline()&&!r(W.last_text,["(","[","{",":","=",","])&&"TK_OPERATOR"!==M)&&(L.just_added_blankline()||B.comments_before.length||(x(),x(!0))),"TK_RESERVED"===M||"TK_WORD"===M?"TK_RESERVED"===M&&(r(W.last_text,["get","set","new","export","async"])||r(W.last_text,q))?L.space_before_token=!0:"TK_RESERVED"===M&&"default"===W.last_text&&"export"===I?L.space_before_token=!0:x():"TK_OPERATOR"===M||"="===W.last_text?L.space_before_token=!0:(W.multiline_frame||!w(W.mode)&&!k(W.mode))&&x(),K(),void(W.last_word=B.text)):(F="NONE","TK_END_BLOCK"===M?X.inline_frame?F="SPACE":"TK_RESERVED"===B.type&&r(B.text,["else","catch","finally","from"])?"expand"===Q.brace_style||"end-expand"===Q.brace_style||"none"===Q.brace_style&&B.wanted_newline?F="NEWLINE":(F="SPACE",L.space_before_token=!0):F="NEWLINE":"TK_SEMICOLON"===M&&W.mode===h.BlockStatement?F="NEWLINE":"TK_SEMICOLON"===M&&w(W.mode)?F="SPACE":"TK_STRING"===M?F="NEWLINE":"TK_RESERVED"===M||"TK_WORD"===M||"*"===W.last_text&&(r(I,["function","yield"])||W.mode===h.ObjectLiteral&&r(I,["{",","]))?F="SPACE":"TK_START_BLOCK"===M?F=W.inline_frame?"SPACE":"NEWLINE":"TK_END_EXPR"===M&&(L.space_before_token=!0,F="NEWLINE"),"TK_RESERVED"===B.type&&r(B.text,P.line_starters)&&")"!==W.last_text&&(F=W.inline_frame||"else"===W.last_text||"export"===W.last_text?"SPACE":"NEWLINE"),"TK_RESERVED"===B.type&&r(B.text,["else","catch","finally"])?("TK_END_BLOCK"!==M||X.mode!==h.BlockStatement||"expand"===Q.brace_style||"end-expand"===Q.brace_style||"none"===Q.brace_style&&B.wanted_newline)&&!W.inline_frame?x():(L.trim(!0),"}"!==L.current_line.last()&&x(),L.space_before_token=!0):"NEWLINE"===F?"TK_RESERVED"===M&&A(W.last_text)?L.space_before_token=!0:"TK_END_EXPR"!==M?"TK_START_EXPR"===M&&"TK_RESERVED"===B.type&&r(B.text,["var","let","const"])||":"===W.last_text||("TK_RESERVED"===B.type&&"if"===B.text&&"else"===W.last_text?L.space_before_token=!0:x()):"TK_RESERVED"===B.type&&r(B.text,P.line_starters)&&")"!==W.last_text&&x():W.multiline_frame&&k(W.mode)&&","===W.last_text&&"}"===I?x():"SPACE"===F&&(L.space_before_token=!0),K(),W.last_word=B.text,void("TK_RESERVED"===B.type&&("do"===B.text?W.do_block=!0:"if"===B.text?W.if_block=!0:"import"===B.text?W.import_block=!0:W.import_block&&"TK_RESERVED"===B.type&&"from"===B.text&&(W.import_block=!1)))))}var L,V,P,B,M,I,j,W,X,z,F,U,Q,$=[],Z="";U={TK_START_EXPR:function(){y()||f(B);var e=h.Expression;if("["===B.text){if("TK_WORD"===M||")"===W.last_text)return"TK_RESERVED"===M&&r(W.last_text,P.line_starters)&&(L.space_before_token=!0),v(e),K(),m(),void(Q.space_in_paren&&(L.space_before_token=!0));e=h.ArrayLiteral,k(W.mode)&&("["!==W.last_text&&(","!==W.last_text||"]"!==I&&"}"!==I)||Q.keep_array_indentation||x())}else"TK_RESERVED"===M&&"for"===W.last_text?e=h.ForInitializer:"TK_RESERVED"===M&&r(W.last_text,["if","while"])&&(e=h.Conditional);";"===W.last_text||"TK_START_BLOCK"===M?x():"TK_END_EXPR"===M||"TK_START_EXPR"===M||"TK_END_BLOCK"===M||"."===W.last_text?E(B.wanted_newline):"TK_RESERVED"===M&&"("===B.text||"TK_WORD"===M||"TK_OPERATOR"===M?"TK_RESERVED"===M&&("function"===W.last_word||"typeof"===W.last_word)||"*"===W.last_text&&(r(I,["function","yield"])||W.mode===h.ObjectLiteral&&r(I,["{",","]))?Q.space_after_anon_function&&(L.space_before_token=!0):"TK_RESERVED"!==M||!r(W.last_text,P.line_starters)&&"catch"!==W.last_text||Q.space_before_conditional&&(L.space_before_token=!0):L.space_before_token=!0,"("===B.text&&"TK_RESERVED"===M&&"await"===W.last_word&&(L.space_before_token=!0),"("===B.text&&("TK_EQUALS"!==M&&"TK_OPERATOR"!==M||S()||E()),"("===B.text&&"TK_WORD"!==M&&"TK_RESERVED"!==M&&E(),v(e),K(),Q.space_in_paren&&(L.space_before_token=!0),m()},TK_END_EXPR:function(){for(;W.mode===h.Statement;)O();f(B),W.multiline_frame&&E("]"===B.text&&k(W.mode)&&!Q.keep_array_indentation),Q.space_in_paren&&("TK_START_EXPR"!==M||Q.space_in_empty_paren?L.space_before_token=!0:(L.trim(),L.space_before_token=!1)),"]"===B.text&&Q.keep_array_indentation?(K(),O()):(O(),K()),i(L,X),W.do_while&&X.mode===h.Conditional&&(X.mode=h.Expression,W.do_block=!1,W.do_while=!1)},TK_START_BLOCK:function(){f(B);var e=C(1),t=C(2);v(t&&(r(t.text,[":",","])&&r(e.type,["TK_STRING","TK_WORD","TK_RESERVED"])||r(e.text,["get","set","..."])&&r(t.type,["TK_WORD","TK_RESERVED"]))?r(I,["class","interface"])?h.BlockStatement:h.ObjectLiteral:"TK_OPERATOR"===M&&"=>"===W.last_text?h.BlockStatement:r(M,["TK_EQUALS","TK_START_EXPR","TK_COMMA","TK_OPERATOR"])||"TK_RESERVED"===M&&r(W.last_text,["return","throw","import","default"])?h.ObjectLiteral:h.BlockStatement);var n=!e.comments_before.length&&"}"===e.text&&"function"===W.last_word&&"TK_END_EXPR"===M;if(Q.brace_preserve_inline){var i=0,_=null;W.inline_frame=!0;do{if(i+=1,(_=C(i)).wanted_newline){W.inline_frame=!1;break}}while("TK_EOF"!==_.type&&("TK_END_BLOCK"!==_.type||_.opened!==B))}("expand"===Q.brace_style||"none"===Q.brace_style&&B.wanted_newline)&&!W.inline_frame?"TK_OPERATOR"!==M&&(n||"TK_EQUALS"===M||"TK_RESERVED"===M&&A(W.last_text)&&"else"!==W.last_text)?L.space_before_token=!0:x(!1,!0):(!k(X.mode)||"TK_START_EXPR"!==M&&"TK_COMMA"!==M||(("TK_COMMA"===M||Q.space_in_paren)&&(L.space_before_token=!0),("TK_COMMA"===M||"TK_START_EXPR"===M&&W.inline_frame)&&(E(),X.multiline_frame=X.multiline_frame||W.multiline_frame,W.multiline_frame=!1)),"TK_OPERATOR"!==M&&"TK_START_EXPR"!==M&&("TK_START_BLOCK"!==M||W.inline_frame?L.space_before_token=!0:x())),K(),m()},TK_END_BLOCK:function(){for(f(B);W.mode===h.Statement;)O();var e="TK_START_BLOCK"===M;W.inline_frame&&!e?L.space_before_token=!0:"expand"===Q.brace_style?e||x():e||(k(W.mode)&&Q.keep_array_indentation?(Q.keep_array_indentation=!1,x(),Q.keep_array_indentation=!0):x()),O(),K()},TK_WORD:N,TK_RESERVED:N,TK_SEMICOLON:function(){y()?L.space_before_token=!1:f(B);for(var e=C(1);!(W.mode!==h.Statement||W.if_block&&e&&"TK_RESERVED"===e.type&&"else"===e.text||W.do_block);)O();W.import_block&&(W.import_block=!1),K()},TK_STRING:function(){y()?L.space_before_token=!0:(f(B),"TK_RESERVED"===M||"TK_WORD"===M||W.inline_frame?L.space_before_token=!0:"TK_COMMA"===M||"TK_START_EXPR"===M||"TK_EQUALS"===M||"TK_OPERATOR"===M?S()||E():x()),K()},TK_EQUALS:function(){y()||f(B),W.declaration_statement&&(W.declaration_assignment=!0),L.space_before_token=!0,K(),L.space_before_token=!0},TK_OPERATOR:function(){var e="*"===B.text&&("TK_RESERVED"===M&&r(W.last_text,["function","yield"])||r(M,["TK_START_BLOCK","TK_COMMA","TK_END_BLOCK","TK_SEMICOLON"])),t=r(B.text,["-","+"])&&(r(M,["TK_START_BLOCK","TK_START_EXPR","TK_EQUALS","TK_OPERATOR"])||r(W.last_text,P.line_starters)||","===W.last_text);if(y()||f(B,!e),"TK_RESERVED"===M&&A(W.last_text))return L.space_before_token=!0,void K();if("*"!==B.text||"TK_DOT"!==M)if("::"!==B.text){if("TK_OPERATOR"===M&&r(Q.operator_position,d)&&E(),":"===B.text&&W.in_case)return W.case_body=!0,m(),K(),x(),void(W.in_case=!1);var n=!0,i=!0,_=!1;if(":"===B.text?0===W.ternary_depth?n=!1:(W.ternary_depth-=1,_=!0):"?"===B.text&&(W.ternary_depth+=1),!t&&!e&&Q.preserve_newlines&&r(B.text,P.positionable_operators)){var a=":"===B.text,o=a&&_,s=a&&!_;switch(Q.operator_position){case u.before_newline:return L.space_before_token=!s,K(),a&&!o||E(),void(L.space_before_token=!0);case u.after_newline:return L.space_before_token=!0,!a||o?C(1).wanted_newline?x(!1,!0):E():L.space_before_token=!1,K(),void(L.space_before_token=!0);case u.preserve_newline:return s||E(),n=!(L.just_added_newline()||s),L.space_before_token=n,K(),void(L.space_before_token=!0)}}if(e){E(),n=!1;var l=C(1);i=l&&r(l.type,["TK_WORD","TK_RESERVED"])}else"..."===B.text?(E(),n="TK_START_BLOCK"===M,i=!1):(r(B.text,["--","++","!","~"])||t)&&(n=!1,i=!1,!B.wanted_newline||"--"!==B.text&&"++"!==B.text||x(!1,!0),";"===W.last_text&&w(W.mode)&&(n=!0),"TK_RESERVED"===M?n=!0:"TK_END_EXPR"===M?n=!("]"===W.last_text&&("--"===B.text||"++"===B.text)):"TK_OPERATOR"===M&&(n=r(B.text,["--","-","++","+"])&&r(W.last_text,["--","-","++","+"]),r(B.text,["+","-"])&&r(W.last_text,["--","++"])&&(i=!0)),(W.mode!==h.BlockStatement||W.inline_frame)&&W.mode!==h.Statement||"{"!==W.last_text&&";"!==W.last_text||x());L.space_before_token=L.space_before_token||n,K(),L.space_before_token=i}else K();else K()},TK_COMMA:function(){f(B,!0),K(),L.space_before_token=!0,W.declaration_statement?(w(W.parent.mode)&&(W.declaration_assignment=!1),W.declaration_assignment?(W.declaration_assignment=!1,x(!1,!0)):Q.comma_first&&E()):W.mode===h.ObjectLiteral||W.mode===h.Statement&&W.parent.mode===h.ObjectLiteral?(W.mode===h.Statement&&O(),W.inline_frame||x()):Q.comma_first&&E()},TK_BLOCK_COMMENT:function(e){if(L.raw)return L.add_raw_token(B),void(B.directives&&"end"===B.directives.preserve&&(L.raw=Q.test_output_raw));if(B.directives)return x(!1,e),K(),"start"===B.directives.preserve&&(L.raw=!0),void x(!1,!0);if(!l.newline.test(B.text)&&!B.wanted_newline)return L.space_before_token=!0,K(),void(L.space_before_token=!0);var t,n=T(B.text),i=!1,r=!1,_=B.whitespace_before,o=_.length;for(x(!1,e),n.length>1&&(i=g(n.slice(1),"*"),r=D(n.slice(1),_)),K(n[0]),t=1;to?K(n[t].substring(o)):L.add_token(n[t]);x(!1,e)},TK_COMMENT:function(e){B.wanted_newline?x(!1,e):L.trim(!0),L.space_before_token=!0,K(),x(!1,e)},TK_DOT:function(){y()||f(B,!0),"TK_RESERVED"===M&&A(W.last_text)?L.space_before_token=!0:E(")"===W.last_text&&Q.break_chained_methods),K()},TK_UNKNOWN:function(e){K(),"\n"===B.text[B.text.length-1]&&x(!1,e)},TK_EOF:function(){for(;W.mode===h.Statement;)O();f(B)}},t=s(t=t||{},"js"),Q={},"expand-strict"===t.brace_style?t.brace_style="expand":"collapse-preserve-inline"===t.brace_style?t.brace_style="collapse,preserve-inline":void 0!==t.braces_on_own_line?t.brace_style=t.braces_on_own_line?"expand":"collapse":t.brace_style||(t.brace_style="collapse");var G=t.brace_style.split(/[^a-zA-Z0-9_\-]+/);for(Q.brace_style=G[0],Q.brace_preserve_inline=!!G[1]&&G[1],Q.indent_size=t.indent_size?parseInt(t.indent_size,10):4,Q.indent_char=t.indent_char?t.indent_char:" ",Q.eol=t.eol?t.eol:"auto",Q.preserve_newlines=void 0===t.preserve_newlines||t.preserve_newlines,Q.unindent_chained_methods=void 0!==t.unindent_chained_methods&&t.unindent_chained_methods,Q.break_chained_methods=void 0!==t.break_chained_methods&&t.break_chained_methods,Q.max_preserve_newlines=void 0===t.max_preserve_newlines?0:parseInt(t.max_preserve_newlines,10),Q.space_in_paren=void 0!==t.space_in_paren&&t.space_in_paren,Q.space_in_empty_paren=void 0!==t.space_in_empty_paren&&t.space_in_empty_paren,Q.jslint_happy=void 0!==t.jslint_happy&&t.jslint_happy,Q.space_after_anon_function=void 0!==t.space_after_anon_function&&t.space_after_anon_function,Q.keep_array_indentation=void 0!==t.keep_array_indentation&&t.keep_array_indentation,Q.space_before_conditional=void 0===t.space_before_conditional||t.space_before_conditional,Q.unescape_strings=void 0!==t.unescape_strings&&t.unescape_strings,Q.wrap_line_length=void 0===t.wrap_line_length?0:parseInt(t.wrap_line_length,10),Q.e4x=void 0!==t.e4x&&t.e4x,Q.end_with_newline=void 0!==t.end_with_newline&&t.end_with_newline,Q.comma_first=void 0!==t.comma_first&&t.comma_first,Q.operator_position=o(t.operator_position),Q.test_output_raw=void 0!==t.test_output_raw&&t.test_output_raw,Q.jslint_happy&&(Q.space_after_anon_function=!0),t.indent_with_tabs&&(Q.indent_char="\t",Q.indent_size=1),"auto"===Q.eol&&(Q.eol="\n",e&&l.lineBreak.test(e||"")&&(Q.eol=e.match(l.lineBreak)[0])),Q.eol=Q.eol.replace(/\\r/,"\r").replace(/\\n/,"\n"),j="";Q.indent_size>0;)j+=Q.indent_char,Q.indent_size-=1;var Y=0;if(e&&e.length){for(;" "===e.charAt(Y)||"\t"===e.charAt(Y);)Y+=1;Z=e.substring(0,Y),e=e.substring(Y)}M="TK_START_BLOCK",I="",(L=new c(j,Z)).raw=Q.test_output_raw,z=[],v(h.BlockStatement),this.beautify=function(){for(P=new p(e,Q,j),$=P.tokenize(),V=0,B=C();B;)U[B.type](),I=W.last_text,M=B.type,W.last_text=B.text,V+=1,B=C();return L.get_code(Q.end_with_newline,Q.eol)};var q=["break","continue","return","throw","yield"]}},function(e,t){e.exports.InputScanner=function(e){var t=e,n=t.length,i=0;this.back=function(){i-=1},this.hasNext=function(){return i=0&&e=0&&e0&&(n-=1,t-=e.indent_length)},this.trim=function(){for(;" "===this.last();)i.pop(),t-=1;r=0===i.length},this.toString=function(){var t="";return this._empty||(n>=0&&(t=e.indent_cache[n]),t+=i.join("")),t}}e.exports.Output=function(e,t){t=t||"",this.indent_cache=[t],this.baseIndentLength=t.length,this.indent_length=e.length,this.raw=!1;var i=[];this.baseIndentString=t,this.indent_string=e,this.previous_line=null,this.current_line=null,this.space_before_token=!1,this.add_outputline=function(){this.previous_line=this.current_line,this.current_line=new n(this),i.push(this.current_line)},this.add_outputline(),this.get_line_number=function(){return i.length},this.add_new_line=function(e){return!(1===this.get_line_number()&&this.just_added_newline()||!e&&this.just_added_newline()||(this.raw||this.add_outputline(),0))},this.get_code=function(e,t){var n=i.join("\n").replace(/[\r\n\t ]+$/,"");return e&&(n+="\n"),"\n"!==t&&(n=n.replace(/[\n]/g,t)),n},this.set_indent=function(e){if(i.length>1){for(;e>=this.indent_cache.length;)this.indent_cache.push(this.indent_cache[this.indent_cache.length-1]+this.indent_string);return this.current_line.set_indent(e),!0}return this.current_line.set_indent(0),!1},this.add_raw_token=function(e){for(var t=0;t1&&this.current_line.is_empty();)i.pop(),this.current_line=i[i.length-1],this.current_line.trim();this.previous_line=i.length>1?i[i.length-2]:null},this.just_added_newline=function(){return this.current_line.is_empty()},this.just_added_blankline=function(){return!!this.just_added_newline()&&(1===i.length||i[i.length-2].is_empty())}}},function(e,t){e.exports.Token=function(e,t,n,i,r){this.type=e,this.text=t,this.comments_before=[],this.comments_after=[],this.newlines=n||0,this.wanted_newline=n>0,this.whitespace_before=i||"",this.parent=r||null,this.opened=null,this.directives=null}},function(e,t,n){var i=n(1).Beautifier;e.exports=function(e,t){return new i(e,t).beautify()}},function(e,t,n){function i(e){return e.replace(/^\s+|\s+$/g,"")}function r(e,t){for(var n=0;n/g;if("`"===s||"'"===s||'"'===s||("/"===s||t.e4x&&"<"===s&&K.test(N,-1))&&("TK_RESERVED"===k.type&&r(k.text,["return","case","throw","else","do","typeof","yield"])||"TK_END_EXPR"===k.type&&")"===k.text&&k.parent&&"TK_RESERVED"===k.parent.type&&r(k.parent.text,["if","while","for"])||r(k.type,["TK_COMMENT","TK_START_EXPR","TK_START_BLOCK","TK_END_BLOCK","TK_OPERATOR","TK_EQUALS","TK_EOF","TK_SEMICOLON","TK_COMMA"]))){var L=s,V=!1,P=!1;if(e=s,"/"===L)for(var B=!1;K.hasNext()&&(V||B||K.peek()!==L)&&!K.testChar(o.newline);)e+=K.peek(),V?V=!1:(V="\\"===K.peek(),"["===K.peek()?B=!0:"]"===K.peek()&&(B=!1)),K.next();else if(t.e4x&&"<"===L){var M=/[\s\S]*?<(\/?)([-a-zA-Z:0-9_.]+|{[\s\S]+?}|!\[CDATA\[[\s\S]*?\]\])(\s+{[\s\S]+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{[\s\S]+?}))*\s*(\/?)\s*>/g;K.back();var I="",j=K.match(N);if(j){for(var W=j[2].replace(/^{\s+/,"{").replace(/\s+}$/,"}"),X=0===W.indexOf("{"),z=0;j;){var F=!!j[1],U=j[2];if(!(j[j.length-1]||"![CDATA["===U.slice(0,8))&&(U===W||X&&U.replace(/^{\s+/,"{").replace(/\s+}$/,"}"))&&(F?--z:++z),I+=j[0],z<=0)break;j=K.match(M)}return j||(I+=K.match(/[\s\S]*/g)[0]),I=I.replace(o.allLineBreaks,"\n"),[I,"TK_STRING"]}}else{var Q=function(t,n,i){for(var r;K.hasNext()&&(r=K.peek(),V||r!==t&&(n||!o.newline.test(r)));)(V||n)&&o.newline.test(r)?("\r"===r&&"\n"===K.peek(1)&&(K.next(),r=K.peek()),e+="\n"):e+=r,V?("x"!==r&&"u"!==r||(P=!0),V=!1):V="\\"===r,K.next(),i&&-1!==e.indexOf(i,e.length-i.length)&&("`"===t?Q("}",n,"`"):Q("`",n,"${"),K.hasNext()&&(e+=K.next()))};"`"===L?Q("`",!0,"${"):Q(L)}if(P&&t.unescape_strings&&(e=l(e)),K.peek()===L&&(e+=L,K.next(),"/"===L))for(;K.hasNext()&&o.isIdentifierStart(K.peekCharCode());)e+=K.next();return[e,"TK_STRING"]}if("#"===s){if(0===R.length&&"!"===K.peek()){for(e=s;K.hasNext()&&"\n"!==s;)s=K.next(),e+=s;return[i(e)+"\n","TK_UNKNOWN"]}var $="#";if(K.hasNext()&&K.testChar(p)){do{$+=s=K.next()}while(K.hasNext()&&"#"!==s&&"="!==s);return"#"===s||("["===K.peek()&&"]"===K.peek(1)?($+="[]",K.next(),K.next()):"{"===K.peek()&&"}"===K.peek(1)&&($+="{}",K.next(),K.next())),[$,"TK_WORD"]}}if("<"===s&&("?"===K.peek()||"%"===K.peek())){K.back();var Z=K.match(S);if(Z)return s=Z[0],s=s.replace(o.allLineBreaks,"\n"),[s,"TK_STRING"]}if("<"===s&&K.match(/\!--/g)){for(s="\x3c!--";K.hasNext()&&!K.testChar(o.newline);)s+=K.next();return x=!0,[s,"TK_COMMENT"]}if("-"===s&&x&&K.match(/->/g))return x=!1,["--\x3e","TK_COMMENT"];if("."===s)return"."===K.peek()&&"."===K.peek(1)?(s+=K.next()+K.next(),[s,"TK_OPERATOR"]):[s,"TK_DOT"];if(r(s,h)){for(;K.hasNext()&&r(s+K.peek(),h)&&(s+=K.next(),K.hasNext()););return","===s?[s,"TK_COMMA"]:"="===s?[s,"TK_EQUALS"]:[s,"TK_OPERATOR"]}return[s,"TK_UNKNOWN"]}function l(e){for(var t="",n=0,i=new _(e),r=null;i.hasNext();)if((r=i.match(/([\s]|[^\\]|\\\\)+/g))&&(t+=r[0]),"\\"===i.peek()){if(i.next(),"x"===i.peek())r=i.match(/x([0-9A-Fa-f]{2})/g);else{if("u"!==i.peek()){t+="\\",i.hasNext()&&(t+=i.next());continue}r=i.match(/u([0-9A-Fa-f]{4})/g)}if(!r)return e;if((n=parseInt(r[1],16))>126&&n<=255&&0===r[0].indexOf("x"))return e;if(n>=0&&n<32){t+="\\"+r[0];continue}t+=34===n||39===n||92===n?"\\"+String.fromCharCode(n):String.fromCharCode(n)}return t}var c="\n\r\t ".split(""),p=/[0-9]/,f=/[01]/,u=/[01234567]/,d=/[0123456789abcdefABCDEF]/;this.positionable_operators="!= !== % & && * ** + - / : < << <= == === > >= >> >>> ? ^ | ||".split(" ");var h=this.positionable_operators.concat("! %= &= *= **= ++ += , -- -= /= :: <<= = => >>= >>>= ^= |= ~ ...".split(" "));this.line_starters="continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export".split(",");var T,E,x,R,K,m=this.line_starters.concat(["do","in","of","else","get","set","new","catch","finally","typeof","yield","async","await","from","as"]),b=/([\s\S]*?)((?:\*\/)|$)/g,v=/([^\n\r\u2028\u2029]*)/g,k=/\/\* beautify( \w+[:]\w+)+ \*\//g,w=/ (\w+)[:](\w+)/g,O=/([\s\S]*?)((?:\/\*\sbeautify\signore:end\s\*\/)|$)/g,S=/((<\?php|<\?=)[\s\S]*?\?>)|(<%[\s\S]*?%>)/g;this.tokenize=function(){K=new _(e),x=!1,R=[];for(var t,n,i,r=null,o=[],l=[];!n||"TK_EOF"!==n.type;){for(i=s(),t=new a(i[1],i[0],T,E);"TK_COMMENT"===t.type||"TK_BLOCK_COMMENT"===t.type||"TK_UNKNOWN"===t.type;)"TK_BLOCK_COMMENT"===t.type&&(t.directives=i[2]),l.push(t),i=s(),t=new a(i[1],i[0],T,E);l.length&&(t.comments_before=l,l=[]),"TK_START_BLOCK"===t.type||"TK_START_EXPR"===t.type?(t.parent=n,o.push(r),r=t):("TK_END_BLOCK"===t.type||"TK_END_EXPR"===t.type)&&r&&("]"===t.text&&"["===r.text||")"===t.text&&"("===r.text||"}"===t.text&&"{"===r.text)&&(t.parent=r.parent,t.opened=r,r=o.pop()),R.push(t),n=t}return R}}}]);"function"==typeof define&&define.amd?define([],function(){return{js_beautify:e}}):"undefined"!=typeof exports?exports.js_beautify=e:"undefined"!=typeof window?window.js_beautify=e:"undefined"!=typeof global&&(global.js_beautify=e)}(); \ No newline at end of file diff --git a/app/src/main/assets/editor/codemirror/.bower.json b/app/src/main/assets/editor/codemirror/.bower.json new file mode 100644 index 00000000..0b76ad07 --- /dev/null +++ b/app/src/main/assets/editor/codemirror/.bower.json @@ -0,0 +1,32 @@ +{ + "name": "codemirror", + "main": [ + "lib/codemirror.js", + "lib/codemirror.css" + ], + "ignore": [ + "**/.*", + "node_modules", + "components", + "bin", + "demo", + "doc", + "test", + "index.html", + "package.json", + "mode/*/*test.js", + "mode/*/*.html" + ], + "homepage": "https://github.com/components/codemirror", + "version": "5.30.0", + "_release": "5.30.0", + "_resolution": { + "type": "version", + "tag": "5.30.0", + "commit": "13706af84d4be6a880af86faaf42c010f4d0861f" + }, + "_source": "https://github.com/components/codemirror.git", + "_target": "^5.30.0", + "_originalSource": "codemirror", + "_direct": true +} \ No newline at end of file diff --git a/app/src/main/assets/editor/codemirror/AUTHORS b/app/src/main/assets/editor/codemirror/AUTHORS new file mode 100644 index 00000000..12643570 --- /dev/null +++ b/app/src/main/assets/editor/codemirror/AUTHORS @@ -0,0 +1,689 @@ +List of CodeMirror contributors. Updated before every release. + +4r2r +Aaron Brooks +Abdelouahab +Abe Fettig +Adam Ahmed +Adam King +Adam Particka +adanlobato +Adán Lobato +Adrian Aichner +Adrian Heine +Adrien Bertrand +aeroson +Ahmad Amireh +Ahmad M. Zawawi +ahoward +Akeksandr Motsjonov +Alasdair Smith +Alberto González Palomo +Alberto Pose +Albert Xing +Alexander Pavlov +Alexander Schepanovski +Alexander Shvets +Alexander Solovyov +Alexandre Bique +alexey-k +Alex Piggott +Aliaksei Chapyzhenka +Allen Sarkisyan +Ami Fischman +Amin Shali +Amin Ullah Khan +amshali@google.com +Amsul +amuntean +Amy +Ananya Sen +anaran +AndersMad +Anders Nawroth +Anderson Mesquita +Anders Wåglund +Andrea G +Andreas Reischuck +Andres Taylor +Andre von Houck +Andrew Cheng +Andrey Fedorov +Andrey Klyuchnikov +Andrey Lushnikov +Andrey Shchekin +Andy Joslin +Andy Kimball +Andy Li +Angelo +angelozerr +angelo.zerr@gmail.com +Ankit +Ankit Ahuja +Ansel Santosa +Anthony Dugois +anthonygego +Anthony Gégo +Anthony Grimes +Anton Kovalyov +Apollo Zhu +AQNOUCH Mohammed +Aram Shatakhtsyan +areos +Arnab Bose +Arsène von Wyss +Arthur Müller +Arun Narasani +as3boyan +asolove +atelierbram +AtomicPages LLC +Atul Bhouraskar +Aurelian Oancea +Axel Lewenhaupt +Barret Rennie +Basarat Ali Syed +Bastian Müller +belhaj +Bem Jones-Bey +benbro +Beni Cherniavsky-Paskin +Benjamin DeCoste +Benjamin Young +Ben Keen +Ben Miller +Ben Mosher +Bernhard Sirlinger +Bert Chang +Bharad +BigBlueHat +Billy Moon +binny +B Krishna Chaitanya +Blaine G +blukat29 +boomyjee +borawjm +Brad Metcalf +Brandon Frohs +Brandon Wamboldt +Brett Zamir +Brian Grinstead +Brian Sletten +brrd +Bruce Mitchener +Bryan Massoth +Caitlin Potter +Calin Barbat +callodacity +Camilo Roca +Chad Jolly +Chandra Sekhar Pydi +Charles Skelton +Cheah Chu Yeow +Chris Coyier +Chris Ford +Chris Granger +Chris Houseknecht +Chris Lohfink +Chris Morgan +Chris Smith +Christian Gruen +Christian Oyarzun +Christian Petrov +Christopher Brown +Christopher Kramer +Christopher Mitchell +Christopher Pfohl +Chunliang Lyu +ciaranj +CodeAnimal +CodeBitt +coderaiser +Cole R Lawrence +ComFreek +Curtis Gagliardi +dagsta +daines +Dale Jung +Dan Bentley +Dan Heberden +Daniel, Dao Quang Minh +Daniele Di Sarli +Daniel Faust +Daniel Huigens +Daniel Kesler +Daniel KJ +Daniel Neel +Daniel Parnell +Daniel Thwaites +Danila Malyutin +Danny Yoo +darealshinji +Darius Roberts +Dave Brondsema +Dave Myers +David Barnett +David H. Bronke +David Mignot +David Pathakjee +David Vázquez +David Whittington +deebugger +Deep Thought +Devin Abbott +Devon Carew +Dick Choi +dignifiedquire +Dimage Sapelkin +Dmitry Kiselyov +domagoj412 +Dominator008 +Domizio Demichelis +Doug Wikle +Drew Bratcher +Drew Hintz +Drew Khoury +Drini Cami +Dror BG +duralog +dwelle +eborden +edsharp +ekhaled +Elisée +Emmanuel Schanzer +Enam Mijbah Noor +Eric Allam +Erik Welander +eustas +Fabien Dubosson +Fabien O'Carroll +Fabio Zendhi Nagao +Faiza Alsaied +Fauntleroy +fbuchinger +feizhang365 +Felipe Lalanne +Felix Raab +ficristo +Filip Noetzel +Filip Stollár +flack +Florian Felten +ForbesLindesay +Forbes Lindesay +Ford_Lawnmower +Forrest Oliphant +Franco Catena +Frank Wiegand +Fredrik Borg +Gabriel Gheorghian +Gabriel Horner +Gabriel Nahmias +galambalazs +Gary Sheng +Gautam Mehta +Gavin Douglas +gekkoe +Geordie Hall +George Stephanis +geowarin +Gerard Braad +Gergely Hegykozi +Giovanni Calò +Glebov Boris +Glenn Jorde +Glenn Ruehle +Golevka +Google Inc. +Gordon Smith +Grant Skinner +greengiant +Gregory Koberger +Grzegorz Mazur +Guillaume Massé +Guillaume Massé +guraga +Gustavo Rodrigues +Hakan Tunc +Hans Engel +Hardest +Harshvardhan Gupta +Hasan Karahan +Hector Oswaldo Caballero +Hendrik Wallbaum +Herculano Campos +Hiroyuki Makino +hitsthings +Hocdoc +Hugues Malphettes +Ian Beck +Ian Davies +Ian Dickinson +Ian Wehrman +Ian Wetherbee +Ice White +ICHIKAWA, Yuji +idleberg +ilvalle +Ingo Richter +Irakli Gozalishvili +Ivan Kurnosov +Ivoah +Jacob Lee +Jaimin +Jake Peyser +Jakob Miland +Jakub Vrana +Jakub Vrána +James Campos +James Howard +James Thorne +Jamie Hill +Jamie Morris +Jan Jongboom +jankeromnes +Jan Keromnes +Jan Odvarko +Jan Schär +Jan T. Sott +Jared Dean +Jared Forsyth +Jared Jacobs +Jason +Jason Barnabe +Jason Grout +Jason Johnston +Jason San Jose +Jason Siefken +Jaydeep Solanki +Jean Boussier +Jeff Blaisdell +Jeff Hanke +Jeff Jenkins +jeffkenton +Jeff Pickhardt +jem (graphite) +Jeremy Parmenter +Jim +Jim Avery +JobJob +jochenberger +Jochen Berger +Joel Einbinder +joelpinheiro +Johan Ask +John Connor +John-David Dalton +John Engler +John Lees-Miller +John Snelson +John Van Der Loo +Jon Ander Peñalba +Jonas Döbertin +Jonas Helfer +Jonathan Malmaud +Jon Gacnik +jongalloway +Jon Malmaud +Jon Sangster +Joost-Wim Boekesteijn +Joseph Pecoraro +Josh Barnes +Josh Cohen +Josh Soref +Joshua Newman +Josh Watzman +jots +jsoojeon +ju1ius +Juan Benavides Romero +Jucovschi Constantin +Juho Vuori +Julien Rebetez +Justin Andresen +Justin Hileman +jwallers@gmail.com +kaniga +karevn +Kayur Patel +Kazuhito Hokamura +Ken Newman +ken restivo +Ken Rockot +Kevin Earls +Kevin Kwok +Kevin Muret +Kevin Sawicki +Kevin Ushey +Klaus Silveira +Koh Zi Han, Cliff +komakino +Konstantin Lopuhin +koops +Kris Ciccarello +ks-ifware +kubelsmieci +KwanEsq +Kyle Kelley +KyleMcNutt +Lanfei +Lanny +Laszlo Vidacs +leaf corcoran +Leonid Khachaturov +Leon Sorokin +Leonya Khachaturov +Liam Newman +Libo Cannici +LloydMilligan +LM +lochel +Lorenzo Stoakes +Louis Mauchet +Luca Fabbri +Luciano Longo +Lu Fangjian +Luke Browning +Luke Granger-Brown +Luke Stagner +lynschinzer +M1cha +Madhura Jayaratne +Maksim Lin +Maksym Taran +Malay Majithia +Manideep +Manuel Rego Casasnovas +Marat Dreizin +Marcel Gerber +Marcelo Camargo +Marco Aurélio +Marco Munizaga +Marcus Bointon +Marek Rudnicki +Marijn Haverbeke +Mário Gonçalves +Mario Pietsch +Mark Anderson +Mark Lentczner +Marko Bonaci +Mark Peace +Markus Bordihn +Martin Balek +Martín Gaitán +Martin Hasoň +Martin Hunt +Martin Laine +Martin Zagora +Mason Malone +Mateusz Paprocki +Mathias Bynens +mats cronqvist +Matt Gaide +Matthew Bauer +Matthew Beale +matthewhayes +Matthew Rathbone +Matthias Bussonnier +Matthias BUSSONNIER +Matt McDonald +Matt Pass +Matt Sacks +mauricio +Maximilian Hils +Maxim Kraev +Max Kirsch +Max Schaefer +Max Xiantu +mbarkhau +McBrainy +mce2 +melpon +Metatheos +Micah Dubinko +Michael +Michael Goderbauer +Michael Grey +Michael Kaminsky +Michael Lehenbauer +Michael Walker +Michael Zhou +Michal Čihař +Michal Dorner +Mighty Guava +Miguel Castillo +mihailik +Mike +Mike Brevoort +Mike Diaz +Mike Ivanov +Mike Kadin +Mike Kobit +MinRK +Miraculix87 +misfo +mkaminsky11 +mloginov +Moritz Schwörer +Moshe Wajnberg +mps +ms +mtaran-google +Mu-An Chiou +mzabuawala +Narciso Jaramillo +Nathan Williams +ndr +nerbert +NetworkNode +nextrevision +ngn +nguillaumin +Ng Zhi An +Nicholas Bollweg +Nicholas Bollweg (Nick) +Nick Kreeger +Nick Small +Nicolas Kick +Nicolò Ribaudo +Niels van Groningen +nightwing +Nikita Beloglazov +Nikita Vasilyev +Nikolay Kostov +nilp0inter +Nisarg Jhaveri +nlwillia +noragrossman +Norman Rzepka +opl- +Oreoluwa Onatemowo +Oskar Segersvärd +pablo +pabloferz +Pablo Zubieta +Page +paladox +Panupong Pasupat +paris +Paris +Paris Kasidiaris +Patil Arpith +Patrick Stoica +Patrick Strawderman +Paul Garvin +Paul Ivanov +Paul Masson +Pavel +Pavel Feldman +Pavel Petržela +Pavel Strashkin +Paweł Bartkiewicz +peteguhl +peter +Peter Flynn +peterkroon +Peter Kroon +Philipp A +Philip Stadermann +Pierre Gerold +Piët Delport +Pieter Ouwerkerk +Pontus Melke +prasanthj +Prasanth J +Prayag Verma +Radek Piórkowski +Rahul +Rahul Anand +ramwin1 +Randall Mason +Randy Burden +Randy Edmunds +Rasmus Erik Voel Jensen +Rasmus Schultz +ray ratchup +Ray Ratchup +Remi Nyborg +Renaud Durlin +Richard Denton +Richard van der Meer +Richard Z.H. Wang +Rishi Goomar +Robert Brignull +Robert Crossfield +Roberto Abdelkader Martínez Pérez +robertop23 +Robert Plummer +Rrandom +Rrrandom +Ruslan Osmanov +Ryan Petrello +Ryan Prior +sabaca +Sam Lee +Sam Rawlins +Samuel Ainsworth +Sam Wilson +sandeepshetty +Sander AKA Redsandro +Sander Verweij +santec +Sarah McAlear and Wenlin Zhang +Sascha Peilicke +satamas +satchmorun +sathyamoorthi +Saul Costa +S. Chris Colbert +SCLINIC\jdecker +Scott Aikin +Scott Goodhew +Sebastian Wilzbach +Sebastian Zaha +Sergey Goder +Sergey Tselovalnikov +Se-Won Kim +shaund +shaun gilchrist +Shawn A +Shea Bunge +sheopory +Shil S +Shiv Deepak +Shmuel Englard +Shubham Jain +Siamak Mokhtari +silverwind +Simon Edwards +sinkuu +snasa +soliton4 +sonson +spastorelli +srajanpaliwal +Stanislav Oaserele +Stas Kobzar +Stefan Borsje +Steffen Beyer +Steffen Bruchmann +Steffen Kowalski +Stephen Lavelle +Steve Champagne +Steve Hoover +Steve O'Hara +stoskov +Stu Kennedy +Sungho Kim +sverweij +Taha Jahangir +takamori +Tako Schotanus +Takuji Shimokawa +Takuya Matsuyama +Tarmil +TDaglis +tel +Tentone +tfjgeorge +Thaddee Tyl +thanasis +TheHowl +themrmax +think +Thomas Dvornik +Thomas Kluyver +Thomas Schmid +Tim Alby +Tim Baumann +Timothy Farrell +Timothy Gu +Timothy Hatcher +TobiasBg +Todd Berman +Todd Kennedy +Tomas-A +Tomas Varaneckas +Tom Erik Støwer +Tom Klancer +Tom MacWright +Tony Jian +Travis Heppe +Triangle717 +Tristan Tarrant +TSUYUSATO Kitsune +twifkak +Tyler Long +VapidWorx +Vestimir Markov +vf +Victor Bocharsky +Vincent Woo +Volker Mische +Weiyan Shao +wenli +Wes Cossick +Wesley Wiser +Weston Ruter +Will Binns-Smith +Will Dean +William Jamieson +William Stein +Willy +Wojtek Ptak +Wu Cheng-Han +Xavier Mendez +Yassin N. Hassan +YNH Webdev +Yunchi Luo +Yuvi Panda +Yvonnick Esnault +Zac Anger +Zachary Dremann +Zeno Rocha +Zhang Hao +Ziv +zziuni +魏鹏刚 diff --git a/app/src/main/assets/editor/codemirror/CHANGELOG.md b/app/src/main/assets/editor/codemirror/CHANGELOG.md new file mode 100644 index 00000000..ff7d6e23 --- /dev/null +++ b/app/src/main/assets/editor/codemirror/CHANGELOG.md @@ -0,0 +1,1234 @@ +## 5.30.0 (2017-09-20) + +### Bug fixes + +Fixed a number of issues with drawing right-to-left selections and mouse selection in bidirectional text. + +[search addon](http://codemirror.net/demo/search/): Fix crash when restarting search after doing empty search. + +[mark-selection addon](http://cm/doc/manual.html#addon_mark-selection): Fix off-by-one bug. + +[tern addon](http://codemirror.net/demo/tern.html): Fix bad request made when editing at the bottom of a large document. + +[javascript mode](http://codemirror.net/mode/javascript/): Improve parsing in a number of corner cases. + +[markdown mode](http://codemirror.net/mode/markdown/): Fix crash when a sub-mode doesn't support indentation, allow uppercase X in task lists. + +[gfm mode](http://codemirror.net/mode/gfm/): Don't highlight SHA1 'hashes' without numbers to avoid false positives. + +[soy mode](http://codemirror.net/mode/soy/): Support injected data and `@param` in comments. + +### New features + +[simple mode addon](http://codemirror.net/demo/simplemode.html): Allow groups in regexps when `token` isn't an array. + +## 5.29.0 (2017-08-24) + +### Bug fixes + +Fix crash in contentEditable input style when editing near a bookmark. + +Make sure change origins are preserved when splitting changes on [read-only marks](http://codemirror.net/doc/manual.html#mark_readOnly). + +[javascript mode](http://codemirror.net/mode/javascript/): More support for TypeScript syntax. + +[d mode](http://codemirror.net/mode/d/): Support nested comments. + +[python mode](http://codemirror.net/mode/python/): Improve tokenizing of operators. + +[markdown mode](http://codemirror.net/mode/markdown/): Further improve CommonMark conformance. + +[css mode](http://codemirror.net/mode/css/): Don't run comment tokens through the mode's state machine. + +[shell mode](http://codemirror.net/mode/shell/): Allow strings to span lines. + +[search addon](http://codemirror.net/demo/search/): Fix crash in persistent search when `extraKeys` is null. + +## 5.28.0 (2017-07-21) + +### Bug fixes + +Fix copying of, or replacing editor content with, a single dash character when copying a big selection in some corner cases. + +Make [`"goLineLeft"`](http://codemirror.net/doc/manual.html#command_goLineLeft)/`"goLineRight"` behave better on wrapped lines. + +[sql mode](http://codemirror.net/mode/sql/): Fix tokenizing of multi-dot operator and allow digits in subfield names. + +[searchcursor addon](http://codemirror.net/doc/manual.html#addon_searchcursor): Fix infinite loop on some composed character inputs. + +[markdown mode](http://codemirror.net/mode/markdown/): Make list parsing more CommonMark-compliant. + +[gfm mode](http://codemirror.net/mode/gfm/): Highlight colon syntax for emoji. + +### New features + +Expose [`startOperation`](http://codemirror.net/doc/manual.html#startOperation) and `endOperation` for explicit operation management. + +[sublime bindings](http://codemirror.net/demo/sublime.html): Add extend-selection (Ctrl-Alt- or Cmd-Shift-Up/Down). + +## 5.27.4 (2017-06-29) + +### Bug fixes + +Fix crash when using mode lookahead. + +[markdown mode](http://codemirror.net/mode/markdown/): Don't block inner mode's indentation support. + +## 5.27.2 (2017-06-22) + +### Bug fixes + +Fix crash in the [simple mode](http://codemirror.net/demo/simplemode.html)< addon. + +## 5.27.0 (2017-06-22) + +### Bug fixes + +Fix infinite loop in forced display update. + +Properly disable the hidden textarea when `readOnly` is `"nocursor"`. + +Calling the `Doc` constructor without `new` works again. + +[sql mode](http://codemirror.net/mode/sql/): Handle nested comments. + +[javascript mode](http://codemirror.net/mode/javascript/): Improve support for TypeScript syntax. + +[markdown mode](http://codemirror.net/mode/markdown/): Fix bug where markup was ignored on indented paragraph lines. + +[vim bindings](http://codemirror.net/demo/vim.html): Referencing invalid registers no longer causes an uncaught exception. + +[rust mode](http://codemirror.net/mode/rust/): Add the correct MIME type. + +[matchbrackets addon](http://codemirror.net/doc/manual.html#addon_matchbrackets): Document options. + +### New features + +Mouse button clicks can now be bound in keymaps by using names like `"LeftClick"` or `"Ctrl-Alt-MiddleTripleClick"`. When bound to a function, that function will be passed the position of the click as second argument. + +The behavior of mouse selection and dragging can now be customized with the [`configureMouse`](http://codemirror.net/doc/manual.html#option_configureMouse) option. + +Modes can now look ahead across line boundaries with the [`StringStream`](http://codemirror.net/doc/manual.html#StringStream)`.lookahead` method. + +Introduces a `"type"` token type, makes modes that recognize types output it, and add styling for it to the themes. + +New [`pasteLinesPerSelection`](http://codemirror.net/doc/manual.html#option_pasteLinesPerSelection) option to control the behavior of pasting multiple lines into multiple selections. + +[searchcursor addon](http://codemirror.net/doc/manual.html#addon_searchcursor): Support multi-line regular expression matches, and normalize strings when matching. + +## 5.26.0 (2017-05-22) + +### Bug fixes + +In textarea-mode, don't reset the input field during composition. + +More careful restoration of selections in widgets, during editor redraw. + +[javascript mode](http://codemirror.net/mode/javascript/): More TypeScript parsing fixes. + +[julia mode](http://codemirror.net/mode/julia/): Fix issue where the mode gets stuck. + +[markdown mode](http://codemirror.net/mode/markdown/): Understand cross-line links, parse all bracketed things as links. + +[soy mode](http://codemirror.net/mode/soy/): Support single-quoted strings. + +[go mode](http://codemirror.net/mode/go/): Don't try to indent inside strings or comments. + +### New features + +[vim bindings](http://codemirror.net/demo/vim.html): Parse line offsets in line or range specs. + +## 5.25.2 (2017-04-20) + +### Bug fixes + +Better handling of selections that cover the whole viewport in contentEditable-mode. + +No longer accidentally scroll the editor into view when calling `setValue`. + +Work around Chrome Android bug when converting screen coordinates to editor positions. + +Make sure long-clicking a selection sets a cursor and doesn't show the editor losing focus. + +Fix issue where pointer events were incorrectly disabled on Chrome's overlay scrollbars. + +[javascript mode](http://codemirror.net/mode/javascript/): Recognize annotations and TypeScript-style type parameters. + +[shell mode](http://codemirror.net/mode/shell/): Handle nested braces. + +[markdown mode](http://codemirror.net/mode/markdown/): Make parsing of strong/em delimiters CommonMark-compliant. + +## 5.25.0 (2017-03-20) + +### Bug fixes + +In contentEditable-mode, properly locate changes that repeat a character when inserted with IME. + +Fix handling of selections bigger than the viewport in contentEditable mode. + +Improve handling of changes that insert or delete lines in contentEditable mode. + +Count Unicode control characters 0x80 to 0x9F as special (non-printing) chars. + +Fix handling of shadow DOM roots when finding the active element. + +Add `role=presentation` to more DOM elements to improve screen reader support. + +[merge addon](http://codemirror.net/doc/manual.html#addon_merge): Make aligning of unchanged chunks more robust. + +[comment addon](http://codemirror.net/doc/manual.html#addon_comment): Fix comment-toggling on a block of text that starts and ends in a (differnet) block comment. + +[javascript mode](http://codemirror.net/mode/javascript/): Improve support for TypeScript syntax. + +[r mode](http://codemirror.net/mode/r/): Fix indentation after semicolon-less statements. + +[shell mode](http://codemirror.net/mode/shell/): Properly handle escaped parentheses in parenthesized expressions. + +[markdown mode](http://codemirror.net/mode/markdown/): Fix a few bugs around leaving fenced code blocks. + +[soy mode](http://codemirror.net/mode/soy/): Improve indentation. + +### New features + +[lint addon](http://codemirror.net/doc/manual.html#addon_lint): Support asynchronous linters that return promises. + +[continuelist addon](http://codemirror.net/doc/manual.html#addon_continuelist): Support continuing task lists. + +[vim bindings](http://codemirror.net/demo/vim.html): Make Y behave like yy. + +[sql mode](http://codemirror.net/mode/sql/): Support sqlite dialect. + +## 5.24.2 (2017-02-22) + +### Bug fixes + +[javascript mode](http://codemirror.net/mode/javascript/): Support computed class method names. + +[merge addon](http://codemirror.net/doc/manual.html#addon_merge): Improve aligning of unchanged code in the presence of marks and line widgets. + +## 5.24.0 (2017-02-20) + +### Bug fixes + +A cursor directly before a line-wrapping break is now drawn before or after the line break depending on which direction you arrived from. + +Visual cursor motion in line-wrapped right-to-left text should be much more correct. + +Fix bug in handling of read-only marked text. + +[shell mode](http://codemirror.net/mode/shell/): Properly tokenize nested parentheses. + +[python mode](http://codemirror.net/mode/python/): Support underscores in number literals. + +[sass mode](http://codemirror.net/mode/sass/): Uses the full list of CSS properties and keywords from the CSS mode, rather than defining its own incomplete subset. + +[css mode](http://codemirror.net/mode/css/): Expose `lineComment` property for LESS and SCSS dialects. Recognize vendor prefixes on pseudo-elements. + +[julia mode](http://codemirror.net/mode/julia/): Properly indent `elseif` lines. + +[markdown mode](http://codemirror.net/mode/markdown/): Properly recognize the end of fenced code blocks when inside other markup. + +[scala mode](http://codemirror.net/mode/clike/): Improve handling of operators containing #, @, and : chars. + +[xml mode](http://codemirror.net/mode/xml/): Allow dashes in HTML tag names. + +[javascript mode](http://codemirror.net/mode/javascript/): Improve parsing of async methods, TypeScript-style comma-separated superclass lists. + +[indent-fold addon](http://codemirror.net/demo/folding.html): Ignore comment lines. + +### New features + +Positions now support a `sticky` property which determines whether they should be associated with the character before (value `"before"`) or after (value `"after"`) them. + +[vim bindings](http://codemirror.net/demo/vim.html): Make it possible to remove built-in bindings through the API. + +[comment addon](http://codemirror.net/doc/manual.html#addon_comment): Support a per-mode useInnerComments option to optionally suppress descending to the inner modes to get comment strings. + +### Breaking changes + +The [sass mode](http://codemirror.net/mode/sass/) now depends on the [css mode](http://codemirror.net/mode/css/). + +## 5.23.0 (2017-01-19) + +### Bug fixes + +Presentation-related elements DOM elements are now marked as such to help screen readers. + +[markdown mode](http://codemirror.net/mode/markdown/): Be more picky about what HTML tags look like to avoid false positives. + +### New features + +`findModeByMIME` now understands `+json` and `+xml` MIME suffixes. + +[closebrackets addon](http://codemirror.net/doc/manual.html#addon_closebrackets): Add support for an `override` option to ignore language-specific defaults. + +[panel addon](http://codemirror.net/doc/manual.html#addon_panel): Add a `stable` option that auto-scrolls the content to keep it in the same place when inserting/removing a panel. + +## 5.22.2 (2017-01-12) + +### Bug fixes + +Include rollup.config.js in NPM package, so that it can be used to build from source. + +## 5.22.0 (2016-12-20) + +### Bug fixes + +[sublime bindings](http://codemirror.net/demo/sublime.html): Make `selectBetweenBrackets` work with multiple cursors. + +[javascript mode](http://codemirror.net/mode/javascript/): Fix issues with parsing complex TypeScript types, imports, and exports. + +A contentEditable editor instance with autofocus enabled no longer crashes during initializing. + +### New features + +[emacs bindings](http://codemirror.net/demo/emacs.html): Export `CodeMirror.emacs` to allow other addons to hook into Emacs-style functionality. + +[active-line addon](http://codemirror.net/doc/manual.html#addon_active-line): Add `nonEmpty` option. + +New event: [`optionChange`](http://codemirror.net/doc/manual.html#event_optionChange). + +## 5.21.0 (2016-11-21) + +### Bug fixes + +Tapping/clicking the editor in [contentEditable mode](http://codemirror.net/doc/manual.html#option_inputStyle) on Chrome now puts the cursor at the tapped position. + +Fix various crashes and misbehaviors when reading composition events in [contentEditable mode](http://codemirror.net/doc/manual.html#option_inputStyle). + +Catches and ignores an IE 'Unspecified Error' when creating an editor in an iframe before there is a ``. + +[merge addon](http://codemirror.net/doc/manual.html#addon_merge): Fix several issues in the chunk-aligning feature. + +[verilog mode](http://codemirror.net/mode/verilog): Rewritten to address various issues. + +[julia mode](http://codemirror.net/mode/julia): Recognize Julia 0.5 syntax. + +[swift mode](http://codemirror.net/mode/swift): Various fixes and adjustments to current syntax. + +[markdown mode](http://codemirror.net/mode/markdown): Allow lists without a blank line above them. + +### New features + +The [`setGutterMarker`](http://codemirror.net/doc/manual.html#setGutterMarker), [`clearGutter`](http://codemirror.net/doc/manual.html#clearGutter), and [`lineInfo`](http://codemirror.net/doc/manual.html#lineInfo) methods are now available on `Doc` objects. + +The [`heightAtLine`](http://codemirror.net/doc/manual.html#heightAtLine) method now takes an extra argument to allow finding the height at the top of the line's line widgets. + +[ruby mode](http://codemirror.net/mode/ruby): `else` and `elsif` are now immediately indented. + +[vim bindings](http://codemirror.net/demo/vim.html): Bind Ctrl-T and Ctrl-D to in- and dedent in insert mode. + +## 5.20.2 (2016-10-21) + +### Bug fixes + +Fix `CodeMirror.version` returning the wrong version number. + +## 5.20.0 (2016-10-20) + +### Bug fixes + +Make `newlineAndIndent` command work with multiple cursors on the same line. + +Make sure keypress events for backspace are ignored. + +Tokens styled with overlays no longer get a nonsense `cm-cm-overlay` class. + +Line endings for pasted content are now normalized to the editor's [preferred ending](http://codemirror.net/doc/manual.html#option_lineSeparator). + +[javascript mode](http://codemirror.net/mode/javascript): Improve support for class expressions. Support TypeScript optional class properties, the `abstract` keyword, and return type declarations for arrow functions. + +[css mode](http://codemirror.net/mode/css): Fix highlighting of mixed-case keywords. + +[closebrackets addon](http://codemirror.net/doc/manual.html#addon_closebrackets): Improve behavior when typing a quote before a string. + +### New features + +The core is now maintained as a number of small files, using ES6 syntax and modules, under the `src/` directory. A git checkout no longer contains a working `codemirror.js` until you `npm build` (but when installing from NPM, it is included). + +The [`refresh`](http://codemirror.net/doc/manual.html#event_refresh) event is now documented and stable. + +## 5.19.0 (2016-09-20) + +### Bugfixes + +[erlang mode](http://codemirror.net/mode/erlang): Fix mode crash when trying to read an empty context. + +[comment addon](http://codemirror.net/doc/manual.html#addon_comment): Fix broken behavior when toggling comments inside a comment. + +xml-fold addon: Fix a null-dereference bug. + +Page up and page down now do something even in single-line documents. + +Fix an issue where the cursor position could be off in really long (~8000 character) tokens. + +### New features + +[javascript mode](http://codemirror.net/mode/javascript): Better indentation when semicolons are missing. Better support for TypeScript classes, optional parameters, and the `type` keyword. + +The [`blur`](http://codemirror.net/doc/manual.html#event_blur) and [`focus`](http://codemirror.net/doc/manual.html#event_focus) events now pass the DOM event to their handlers. + +## 5.18.2 (2016-08-23) + +### Bugfixes + +[vue mode](http://codemirror.net/mode/vue): Fix outdated references to renamed Pug mode dependency. + +## 5.18.0 (2016-08-22) + +### Bugfixes + +Make sure [gutter backgrounds](http://codemirror.net/doc/manual.html#addLineClass) stick to the rest of the gutter during horizontal scrolling. + +The contenteditable [`inputStyle`](http://codemirror.net/doc/manual.html#option_inputStyle) now properly supports pasting on pre-Edge IE versions. + +[javascript mode](http://codemirror.net/mode/javascript): Fix some small parsing bugs and improve TypeScript support. + +[matchbrackets addon](http://codemirror.net/doc/manual.html#addon_matchbrackets): Fix bug where active highlighting was left in editor when the addon was disabled. + +[match-highlighter addon](http://codemirror.net/doc/manual.html#addon_match-highlighter): Only start highlighting things when the editor gains focus. + +[javascript-hint addon](http://codemirror.net/doc/manual.html#addon_javascript-hint): Also complete non-enumerable properties. + +### New features + +The [`addOverlay`](http://codemirror.net/doc/manual.html#addOverlay) method now supports a `priority` option to control the order in which overlays are applied. + +MIME types that end in `+json` now default to the JSON mode when the MIME itself is not defined. + +### Breaking changes + +The mode formerly known as Jade was renamed to [Pug](http://codemirror.net/mode/pug). + +The [Python mode](http://codemirror.net/mode/python) now defaults to Python 3 (rather than 2) syntax. + +## 5.17.0 (2016-07-19) + +### Bugfixes + +Fix problem with wrapped trailing whitespace displaying incorrectly. + +Prevent IME dialog from overlapping typed content in Chrome. + +Improve measuring of characters near a line wrap. + +[javascript mode](http://codemirror.net/mode/javascript): Improve support for `async`, allow trailing commas in `import` lists. + +[vim bindings](http://codemirror.net/demo/vim.html): Fix backspace in replace mode. + +[sublime bindings](http://codemirror.net/demo/sublime.html): Fix some key bindings on OS X to match Sublime Text. + +### New features + +[markdown mode](http://codemirror.net/mode/markdown): Add more classes to image links in highlight-formatting mode. + +## 5.16.0 (2016-06-20) + +### Bugfixes + +Fix glitches when dragging content caused by the drop indicator receiving mouse events. + +Make Control-drag work on Firefox. + +Make clicking or selection-dragging at the end of a wrapped line select the right position. + +[show-hint addon](http://codemirror.net/doc/manual.html#addon_show-hint): Prevent widget scrollbar from hiding part of the hint text. + +[rulers addon](http://codemirror.net/doc/manual.html#addon_rulers): Prevent rulers from forcing a horizontal editor scrollbar. + +### New features + +[search addon](http://codemirror.net/doc/manual.html#addon_search): Automatically bind search-related keys in persistent dialog. + +[sublime keymap](http://codemirror.net/demo/sublime.html): Add a multi-cursor aware smart backspace binding. + +## 5.15.2 (2016-05-20) + +### Bugfixes + +Fix a critical document corruption bug that occurs when a document is gradually grown. + +## 5.15.0 (2016-05-20) + +### Bugfixes + +Fix bug that caused the selection to reset when focusing the editor in contentEditable input mode. + +Fix issue where not all ASCII control characters were being replaced by placeholders. + +Remove the assumption that all modes have a `startState` method from several wrapping modes. + +Fix issue where the editor would complain about overlapping collapsed ranges when there weren't any. + +Optimize document tree building when loading or pasting huge chunks of content. + +[markdown mode](http://codemirror.net/mode/markdown/): Fix several issues in matching link targets. + +[clike mode](http://codemirror.net/mode/clike/): Improve indentation of C++ template declarations. + +### New features + +Explicitly bind Ctrl-O on OS X to make that binding (“open line”) act as expected. + +Pasting [linewise-copied](http://codemirror.net/doc/manual.html#option_lineWiseCopyCut) content when there is no selection now inserts the lines above the current line. + +[javascript mode](http://codemirror.net/mode/javascript/): Support `async`/`await` and improve support for TypeScript type syntax. + +## 5.14.2 (2016-04-20) + +### Bugfixes + +Push a new package to NPM due to an [NPM bug](https://github.com/npm/npm/issues/5082) omitting the LICENSE file in 5.14.0. + +Set `dataTransfer.effectAllowed` in `dragstart` handler to help browsers use the right drag icon. + +Add the [mbox mode](http://codemirror.net/mode/mbox/index.html) to `mode/meta.js`. + +## 5.14.0 (2016-04-20) + +### Bugfixes + +[`posFromIndex`](http://codemirror.net/doc/manual.html#posFromIndex) and [`indexFromPos`](http://codemirror.net/doc/manual.html#indexFromPos) now take [`lineSeparator`](http://codemirror.net/doc/manual.html#option_lineSeparator) into account. + +[vim bindings](http://codemirror.net/demo/vim.html): Only call `.save()` when it is actually available. + +[comment addon](http://codemirror.net/doc/manual.html#addon_comment): Be careful not to mangle multi-line strings. + +[Python mode](http://codemirror.net/mode/python/index.html): Improve distinguishing of decorators from `@` operators. + +[`findMarks`](http://codemirror.net/doc/manual.html#findMarks): No longer return marks that touch but don't overlap given range. + +### New features + +[vim bindings](http://codemirror.net/demo/vim.html): Add yank command. + +[match-highlighter addon](http://codemirror.net/doc/manual.html#addon_match-highlighter): Add `trim` option to disable ignoring of whitespace. + +[PowerShell mode](http://codemirror.net/mode/powershell/index.html): Added. + +[Yacas mode](http://codemirror.net/mode/yacas/index.html): Added. + +[Web IDL mode](http://codemirror.net/mode/webidl/index.html): Added. + +[SAS mode](http://codemirror.net/mode/sas/index.html): Added. + +[mbox mode](http://codemirror.net/mode/mbox/index.html): Added. + +## 5.13.2 (2016-03-23) + +### Bugfixes + +Solves a problem where the gutter would sometimes not extend all the way to the end of the document. + +## 5.13.0 (2016-03-21) + +### New features + +New DOM event forwarded: [`"dragleave"`](http://codemirror.net/doc/manual.html#event_dom). + +[protobuf mode](http://codemirror.net/mode/protobuf/index.html): Newly added. + +### Bugfixes + +Fix problem where [`findMarks`](http://codemirror.net/doc/manual.html#findMarks) sometimes failed to find multi-line marks. + +Fix crash that showed up when atomic ranges and bidi text were combined. + +[show-hint addon](http://codemirror.net/demo/complete.html): Completion widgets no longer close when the line indented or dedented. + +[merge addon](http://codemirror.net/demo/merge.html): Fix bug when merging chunks at the end of the file. + +[placeholder addon](http://codemirror.net/doc/manual.html#addon_placeholder): No longer gets confused by [`swapDoc`](http://codemirror.net/doc/manual.html#swapDoc). + +[simplescrollbars addon](http://codemirror.net/doc/manual.html#addon_simplescrollbars): Fix invalid state when deleting at end of document. + +[clike mode](http://codemirror.net/mode/clike/index.html): No longer gets confused when a comment starts after an operator. + +[markdown mode](http://codemirror.net/mode/markdown/index.html): Now supports CommonMark-style flexible list indentation. + +[dylan mode](http://codemirror.net/mode/dylan/index.html): Several improvements and fixes. + +## 5.12.0 (2016-02-19) + +### New features + +[Vim bindings](http://codemirror.net/demo/vim.html): Ctrl-Q is now an alias for Ctrl-V. + +[Vim bindings](http://codemirror.net/demo/vim.html): The Vim API now exposes an `unmap` method to unmap bindings. + +[active-line addon](http://codemirror.net/demo/activeline.html): This addon can now style the active line's gutter. + +[FCL mode](http://codemirror.net/mode/fcl/): Newly added. + +[SQL mode](http://codemirror.net/mode/sql/): Now has a Postgresql dialect. + +### Bugfixes + +Fix [issue](https://github.com/codemirror/CodeMirror/issues/3781) where trying to scroll to a horizontal position outside of the document's width could cause the gutter to be positioned incorrectly. + +Use absolute, rather than fixed positioning in the context-menu intercept hack, to work around a [problem](https://github.com/codemirror/CodeMirror/issues/3238) when the editor is inside a transformed parent container. + +Solve a [problem](https://github.com/codemirror/CodeMirror/issues/3821) where the horizontal scrollbar could hide text in Firefox. + +Fix a [bug](https://github.com/codemirror/CodeMirror/issues/3834) that caused phantom scroll space under the text in some situations. + +[Sublime Text bindings](http://codemirror.net/demo/sublime.html): Bind delete-line to Shift-Ctrl-K on OS X. + +[Markdown mode](http://codemirror.net/mode/markdown/): Fix [issue](https://github.com/codemirror/CodeMirror/issues/3787) where the mode would keep state related to fenced code blocks in an unsafe way, leading to occasional corrupted parses. + +[Markdown mode](http://codemirror.net/mode/markdown/): Ignore backslashes in code fragments. + +[Markdown mode](http://codemirror.net/mode/markdown/): Use whichever mode is registered as `text/html` to parse HTML. + +[Clike mode](http://codemirror.net/mode/clike/): Improve indentation of Scala `=>` functions. + +[Python mode](http://codemirror.net/mode/python/): Improve indentation of bracketed code. + +[HTMLMixed mode](http://codemirror.net/mode/htmlmixed/): Support multi-line opening tags for sub-languages (` + + + + + + + + + + + + + + + + + + + + + + + +CodeMirrorEditor + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/stardust/app/NotAskAgainDialog.java b/app/src/main/java/com/stardust/app/NotAskAgainDialog.java index 10fc4360..6398ca1b 100644 --- a/app/src/main/java/com/stardust/app/NotAskAgainDialog.java +++ b/app/src/main/java/com/stardust/app/NotAskAgainDialog.java @@ -9,8 +9,8 @@ import android.widget.CompoundButton; import com.afollestad.materialdialogs.MaterialDialog; import com.stardust.scriptdroid.R; import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; +import com.stardust.util.HashUtils; -import static com.jecelyin.common.utils.StringUtils.md5; /** * Created by Stardust on 2017/1/30. @@ -64,7 +64,7 @@ public class NotAskAgainDialog extends MaterialDialog { private void generatePreferenceKeyIfNeeded() { if (mKeyRemind == null) - mKeyRemind = md5(TextUtils.join("", Thread.currentThread().getStackTrace())); + mKeyRemind = HashUtils.md5(TextUtils.join("", Thread.currentThread().getStackTrace())); } } } diff --git a/app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskerScriptEditActivity.java b/app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskerScriptEditActivity.java index f48ea86d..27e620a5 100644 --- a/app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskerScriptEditActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/external/tasker/TaskerScriptEditActivity.java @@ -4,24 +4,15 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; import android.widget.TextView; -import com.jecelyin.editor.v2.common.Command; -import com.jecelyin.editor.v2.ui.EditorDelegate; -import com.jecelyin.editor.v2.view.EditorView; -import com.jecelyin.editor.v2.view.menu.MenuDef; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.ui.BaseActivity; -import com.stardust.scriptdroid.ui.edit.EditActivity; -import com.stardust.scriptdroid.ui.edit.completion.InputMethodEnhanceBar; -import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity; -import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils; import com.stardust.theme.ThemeColorManager; -import com.stardust.theme.ThemeColorManagerCompat; import com.stardust.widget.ToolbarMenuItem; import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; @@ -29,7 +20,7 @@ import org.androidannotations.annotations.ViewById; * Created by Stardust on 2017/4/5. */ @EActivity(R.layout.activity_tasker_script_edit) -public class TaskerScriptEditActivity extends Editor920Activity { +public class TaskerScriptEditActivity extends AppCompatActivity { public static final int REQUEST_CODE = "Love you. Can we go back?".hashCode() >> 16; public static final String EXTRA_CONTENT = "Still Love Eating 17.4.5"; @@ -41,7 +32,6 @@ public class TaskerScriptEditActivity extends Editor920Activity { .putExtra("title", title), REQUEST_CODE); } - private EditorDelegate mEditorDelegate; private String mTitle, mSummary; @ViewById(R.id.redo) ToolbarMenuItem mRedo; @@ -51,7 +41,7 @@ public class TaskerScriptEditActivity extends Editor920Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setTheme(R.style.EditorTheme); + // setTheme(R.style.EditorTheme); handleIntent(getIntent()); } @@ -67,46 +57,18 @@ public class TaskerScriptEditActivity extends Editor920Activity { mTitle = intent.getStringExtra("title"); mSummary = intent.getStringExtra("summary"); String content = intent.getStringExtra(EXTRA_CONTENT); - mEditorDelegate = new EditorDelegate(0, mTitle, content); } private void setUpEditor() { - final EditorView editorView = (EditorView) findViewById(R.id.editor); - mEditorDelegate.setEditorView(editorView); - Editor920Utils.setLang(mEditorDelegate, "JavaScript"); - editorView.getEditText().setHorizontallyScrolling(true); - setUpInputMethodEnhanceBar(editorView); - } - private void setUpInputMethodEnhanceBar(final EditorView editorView) { - InputMethodEnhanceBar inputMethodEnhanceBar = (InputMethodEnhanceBar) findViewById(R.id.input_method_enhance_bar); - inputMethodEnhanceBar.setEditTextBridge(new EditActivity.InputMethodEnhanceBarBridge(this, editorView.getEditText())); - } - - @Click(R.id.undo) - void undo() { - Command command = new Command(Command.CommandEnum.UNDO); - mEditorDelegate.doCommand(command); - } - - @Click(R.id.redo) - void redo() { - Command command = new Command(Command.CommandEnum.REDO); - mEditorDelegate.doCommand(command); } @Override public void finish() { - setResult(RESULT_OK, new Intent().putExtra(EXTRA_CONTENT, mEditorDelegate.getText())); super.finish(); } public void setMenuStatus(int menuResId, int status) { - boolean disabled = status == MenuDef.STATUS_DISABLED; - if (menuResId == com.jecelyin.editor.v2.R.id.m_redo) { - mRedo.setEnabled(!disabled); - } else if (menuResId == com.jecelyin.editor.v2.R.id.m_undo) { - mUndo.setEnabled(!disabled); - } + } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/CodeMirrorEditor.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/CodeMirrorEditor.java new file mode 100644 index 00000000..fa6a528f --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/CodeMirrorEditor.java @@ -0,0 +1,230 @@ +package com.stardust.scriptdroid.ui.edit; + +import android.content.Context; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.webkit.JavascriptInterface; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; +import android.widget.ScrollView; + +import com.stardust.pio.PFile; + +import org.apache.commons.lang3.StringEscapeUtils; +import org.jdeferred.Deferred; +import org.jdeferred.DoneCallback; +import org.jdeferred.impl.DeferredObject; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Locale; + +import io.reactivex.Observable; +import io.reactivex.subjects.PublishSubject; + +/** + * Created by Stardust on 2017/9/27. + */ + +public class CodeMirrorEditor extends FrameLayout { + + + private static String[] sAvailableThemes; + private String mTheme = "neo"; + + public interface Callback { + void onChange(); + + void updateCodeCompletion(int fromLine, int fromCh, int toLine, int toCh, String[] list); + } + + private WebView mWebView; + private JavaScriptBridge mJavaScriptBridge = new JavaScriptBridge(); + private Callback mCallback; + private Deferred mPageFinished = new DeferredObject<>(); + + public CodeMirrorEditor(Context context) { + super(context); + init(); + } + + public CodeMirrorEditor(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public CodeMirrorEditor(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public CodeMirrorEditor(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(); + } + + public void setCallback(Callback callback) { + mCallback = callback; + } + + public void beautifyCode() { + evalJavaScript("editor.setValue(js_beautify(editor.getValue()));"); + } + + public String[] getAvailableThemes() { + if (sAvailableThemes == null) { + try { + sAvailableThemes = getResources().getAssets().list("editor/codemirror/theme"); + for (int i = 0; i < sAvailableThemes.length; i++) { + sAvailableThemes[i] = PFile.getNameWithoutExtension(sAvailableThemes[i]); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return sAvailableThemes; + } + + + public String getTheme() { + return mTheme; + } + + public void setTheme(final String theme) { + mPageFinished.promise().done(new DoneCallback() { + @Override + public void onDone(Void result) { + evalJavaScript(String.format(Locale.getDefault(), + "var e = document.createElement('link');e.setAttribute('rel', 'stylesheet');" + + "e.setAttribute('type', 'text/css');e.setAttribute('href', '%s');" + + "document.getElementsByTagName('head')[0].appendChild(e);", + "codemirror/theme/" + theme + ".css")); + evalJavaScript(String.format(Locale.getDefault(), "editor.setOption('theme', '%s');", theme)); + mTheme = theme; + } + }); + } + + + private void init() { + setupWebView(); + mWebView.loadUrl("file:///android_asset/editor/index.html"); + } + + private void setupWebView() { + mWebView = new WebView(getContext()); + setupWebSettings(); + mWebView.addJavascriptInterface(mJavaScriptBridge, "__bridge__"); + addView(mWebView); + } + + private void setupWebSettings() { + WebSettings settings = mWebView.getSettings(); + settings.setUseWideViewPort(true); + settings.setBuiltInZoomControls(true); + settings.setLoadWithOverviewMode(true); + settings.setJavaScriptEnabled(true); + settings.setUseWideViewPort(true); + settings.setJavaScriptCanOpenWindowsAutomatically(true); + settings.setDomStorageEnabled(true); + settings.setNeedInitialFocus(true); + settings.setDisplayZoomControls(false); + mWebView.setWebViewClient(new MyWebViewClient()); + mWebView.setWebChromeClient(new WebChromeClient()); + } + + public void setText(final String text) { + mPageFinished.promise().done(new DoneCallback() { + @Override + public void onDone(Void result) { + String escapedString = StringEscapeUtils.escapeEcmaScript(text); + evalJavaScript("editor.setValue('" + escapedString + "');"); + } + }); + } + + public Observable getText() { + mJavaScriptBridge.mText = PublishSubject.create(); + evalJavaScript("__bridge__.setText(editor.getValue());"); + return mJavaScriptBridge.mText; + } + + + public void undo() { + evalJavaScript("editor.undo();"); + } + + public void redo() { + evalJavaScript("editor.redo();"); + } + + private void evalJavaScript(String script) { + mWebView.loadUrl("javascript:" + script); + } + + public void replace(String text, int fromLine, int fromCh, int toLine, int toCh) { + String js = "editor.replaceRange('%s', {line: %d, ch: %d}, {line: %d, ch: %d})"; + evalJavaScript(String.format(Locale.getDefault(), js, text, fromLine, fromCh, toLine, toCh)); + } + + public class JavaScriptBridge { + + private PublishSubject mText; + + @JavascriptInterface + public void setText(String text) { + if (mText != null) { + mText.onNext(text); + mText.onComplete(); + mText = null; + } + } + + @JavascriptInterface + public void onChange() { + if (mCallback != null) { + mWebView.post(new Runnable() { + @Override + public void run() { + mCallback.onChange(); + } + }); + } + } + + @JavascriptInterface + public void updateCodeCompletion(final int fromLine, final int fromCh, final int toLine, final int toCh, final String[] list) { + if (mCallback != null) { + mWebView.post(new Runnable() { + @Override + public void run() { + mCallback.updateCodeCompletion(fromLine, fromCh, toLine, toCh, list); + } + }); + } + } + + + } + + private class MyWebViewClient extends WebViewClient { + + private final String INIT_SCRIPT = "editor.on('change', function(){__bridge__.onChange();});"; + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + mPageFinished.resolve(null); + evalJavaScript(INIT_SCRIPT); + // evalJavaScript("editor.setSize(" + mWebView.getMeasuredWidth() + ", " + mWebView.getMeasuredHeight() + ");"); + } + } +} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java index 51fdc4f9..b17fe040 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java @@ -5,42 +5,33 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; -import android.util.SparseArray; +import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.Toast; +import android.view.WindowManager; +import android.widget.TextView; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; -import com.jecelyin.editor.v2.common.Command; -import com.jecelyin.editor.v2.common.SaveListener; -import com.jecelyin.editor.v2.core.widget.TextView; -import com.jecelyin.editor.v2.ui.EditorDelegate; -import com.jecelyin.editor.v2.view.EditorView; -import com.jecelyin.editor.v2.view.menu.MenuDef; import com.stardust.app.OnActivityResultDelegate; import com.stardust.autojs.engine.JavaScriptEngine; import com.stardust.autojs.execution.ScriptExecution; import com.stardust.autojs.script.JavaScriptFileSource; -import com.stardust.autojs.script.JsBeautifier; +import com.stardust.pio.PFile; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.autojs.AutoJs; import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.Scripts; -import com.stardust.scriptdroid.tool.JsBeautifierFactory; -import com.stardust.scriptdroid.tool.MaterialDialogFactory; import com.stardust.scriptdroid.ui.BaseActivity; +import com.stardust.scriptdroid.ui.edit.completion.CodeCompletions; import com.stardust.scriptdroid.ui.edit.completion.InputMethodEnhanceBar; -import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity; -import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils; import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity; import com.stardust.theme.ThemeColorManager; import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder; -import com.stardust.util.SparseArrayEntries; -import com.stardust.widget.ToolbarMenuItem; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; @@ -48,45 +39,62 @@ import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.functions.Consumer; +import io.reactivex.schedulers.Schedulers; /** * Created by Stardust on 2017/1/29. */ @EActivity(R.layout.activity_edit) -public class EditActivity extends Editor920Activity implements OnActivityResultDelegate.DelegateHost { - - - public static class InputMethodEnhanceBarBridge implements InputMethodEnhanceBar.EditTextBridge { - - private Editor920Activity mEditor920Activity; - private TextView mTextView; - - public InputMethodEnhanceBarBridge(Editor920Activity editor920Activity, TextView textView) { - mEditor920Activity = editor920Activity; - mTextView = textView; - } - - @Override - public void appendText(CharSequence text) { - mEditor920Activity.insertText(text); - } - - @Override - public void backspace(int count) { - - } - - @Override - public TextView getEditText() { - return mTextView; - } - - - } - +public class EditActivity extends AppCompatActivity implements OnActivityResultDelegate.DelegateHost { public static final String EXTRA_PATH = "Still Love Eating 17.4.5"; private static final String EXTRA_NAME = "Still love you 17.6.29 But....(ಥ_ಥ)"; + private static final String KEY_EDITOR_THEME = "I really really really really love you dee"; + + + @ViewById(R.id.content_view) + View mView; + + @ViewById(R.id.editor) + CodeMirrorEditor mEditor; + + @ViewById(R.id.input_method_enhance_bar) + InputMethodEnhanceBar mInputMethodEnhanceBar; + + private String mName; + private File mFile; + private boolean mReadOnly = false; + private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator(); + private BroadcastReceiver mOnRunFinishedReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(Scripts.ACTION_ON_EXECUTION_FINISHED)) { + mScriptExecution = null; + setMenuItemStatus(R.id.run, true); + String msg = intent.getStringExtra(Scripts.EXTRA_EXCEPTION_MESSAGE); + if (msg != null) { + Snackbar.make(mView, getString(R.string.text_error) + ": " + msg, Snackbar.LENGTH_LONG).show(); + } + } + } + }; + + + private ScriptExecution mScriptExecution; + private boolean mTextChanged = false; + + public void onCreate(Bundle b) { + super.onCreate(b); + registerReceiver(mOnRunFinishedReceiver, new IntentFilter(Scripts.ACTION_ON_EXECUTION_FINISHED)); + } public static void editFile(Context context, String path) { editFile(context, null, path); @@ -103,43 +111,13 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD editFile(context, file.getSimplifiedName(), file.getPath()); } - @ViewById(R.id.content_view) - View mView; - private String mName; - private SparseArray mMenuMap; - private EditorDelegate mEditorDelegate; - private File mFile; - private boolean mReadOnly = false; - private OnActivityResultDelegate.Mediator mActivityResultMediator = new OnActivityResultDelegate.Mediator(); - private BroadcastReceiver mOnRunFinishedReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals(Scripts.ACTION_ON_EXECUTION_FINISHED)) { - mScriptExecution = null; - setMenuStatus(R.id.run, MenuDef.STATUS_NORMAL); - String msg = intent.getStringExtra(Scripts.EXTRA_EXCEPTION_MESSAGE); - if (msg != null) { - Snackbar.make(mView, getString(R.string.text_error) + ": " + msg, Snackbar.LENGTH_LONG).show(); - } - } - } - }; - private JsBeautifier mJsBeautifier = JsBeautifierFactory.getJsBeautify(); - private ScriptExecution mScriptExecution; - - public void onCreate(Bundle b) { - super.onCreate(b); - setTheme(R.style.EditorTheme); - handleIntent(getIntent()); - registerReceiver(mOnRunFinishedReceiver, new IntentFilter(Scripts.ACTION_ON_EXECUTION_FINISHED)); - } - @AfterViews void setUpViews() { ThemeColorManager.addActivityStatusBar(this); setUpToolbar(); - initMenuItem(); setUpEditor(); + handleIntent(getIntent()); + setMenuItemStatus(R.id.save, false); } private void handleIntent(Intent intent) { @@ -152,106 +130,102 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD } String content = intent.getStringExtra("content"); if (content != null) { - mEditorDelegate = new EditorDelegate(0, mName, content); + mEditor.setText(content); } else { mFile = new File(path); if (mName == null) { mName = mFile.getName(); } - mEditorDelegate = new EditorDelegate(0, mFile, 0, "utf-8"); + mEditor.setText(PFile.read(mFile)); } } private void setUpEditor() { - final EditorView editorView = (EditorView) findViewById(R.id.editor); - mEditorDelegate.setEditorView(editorView); - if (mFile == null) - Editor920Utils.setLang(mEditorDelegate, "JavaScript"); - editorView.getEditText().setReadOnly(mReadOnly); - editorView.getEditText().setHorizontallyScrolling(true); - setUpInputMethodEnhanceBar(editorView); + mEditor.setTheme(PreferenceManager.getDefaultSharedPreferences(EditActivity.this) + .getString(KEY_EDITOR_THEME, mEditor.getTheme())); + mEditor.setCallback(new CodeMirrorEditor.Callback() { + @Override + public void onChange() { + mTextChanged = true; + setMenuItemStatus(R.id.save, true); + } + + @Override + public void updateCodeCompletion(int fromLine, int fromCh, int toLine, int toCh, final String[] list) { + mInputMethodEnhanceBar.setCodeCompletions(new CodeCompletions( + new CodeCompletions.Pos(fromLine, fromCh), + new CodeCompletions.Pos(toLine, toCh), + Arrays.asList(list) + )); + } + }); + mInputMethodEnhanceBar.setOnHintClickListener(new InputMethodEnhanceBar.OnHintClickListener() { + @Override + public void onHintClick(CodeCompletions completions, int pos) { + mEditor.replace(completions.getHints().get(pos), completions.getFrom().line, completions.getFrom().ch, + completions.getTo().line, completions.getTo().ch); + } + }); } - private void setUpInputMethodEnhanceBar(final EditorView editorView) { - InputMethodEnhanceBar inputMethodEnhanceBar = (InputMethodEnhanceBar) findViewById(R.id.input_method_enhance_bar); - if (mReadOnly) { - inputMethodEnhanceBar.setVisibility(View.GONE); - } else { - inputMethodEnhanceBar.setEditTextBridge(new InputMethodEnhanceBarBridge(this, editorView.getEditText())); - } - } - - private void setUpToolbar() { BaseActivity.setToolbarAsBack(this, R.id.toolbar, mName); } @Click(R.id.run) void runAndSaveFileIFNeeded() { - if (!mReadOnly && mEditorDelegate.isChanged()) { - saveFile(false, new SaveListener() { - @Override - public void onSaved() { - run(); - } - }); - } else { - run(); - } - } - - private void saveFile(boolean toast, SaveListener listener) { - Command command = new Command(Command.CommandEnum.SAVE); - command.args = new Bundle(); - command.args.putBoolean("is_cluster", !toast); - command.object = listener; - mEditorDelegate.doCommand(command); + save().observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull String s) throws Exception { + run(); + } + }); } private void run() { Snackbar.make(mView, R.string.text_start_running, Snackbar.LENGTH_SHORT).show(); - setMenuStatus(R.id.run, MenuDef.STATUS_DISABLED); mScriptExecution = Scripts.runWithBroadcastSender(new JavaScriptFileSource(mName, mFile), mFile.getParent()); + setMenuItemStatus(R.id.run, false); } @Click(R.id.undo) void undo() { - Command command = new Command(Command.CommandEnum.UNDO); - mEditorDelegate.doCommand(command); + mEditor.undo(); } @Click(R.id.redo) void redo() { - Command command = new Command(Command.CommandEnum.REDO); - mEditorDelegate.doCommand(command); + mEditor.redo(); + } + + public Observable save() { + return mEditor.getText() + .observeOn(Schedulers.io()) + .doOnNext(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull String s) throws Exception { + PFile.write(mFile, s); + } + }) + .observeOn(AndroidSchedulers.mainThread()) + .doOnNext(new Consumer() { + @Override + public void accept(@io.reactivex.annotations.NonNull String s) throws Exception { + mTextChanged = false; + setMenuItemStatus(R.id.save, false); + } + }); } @Click(R.id.save) void saveFile() { - saveFile(false, null); + save().subscribe(); } - private void initMenuItem() { - mMenuMap = new SparseArrayEntries() - .entry(com.jecelyin.editor.v2.R.id.m_redo, (ToolbarMenuItem) findViewById(R.id.redo)) - .entry(com.jecelyin.editor.v2.R.id.m_undo, (ToolbarMenuItem) findViewById(R.id.undo)) - .entry(com.jecelyin.editor.v2.R.id.m_save, (ToolbarMenuItem) findViewById(R.id.save)) - .entry(R.id.run, (ToolbarMenuItem) findViewById(R.id.run)) - .sparseArray(); - } - - public void setMenuStatus(int menuResId, int status) { - ToolbarMenuItem menuItem = mMenuMap.get(menuResId); - if (menuItem == null) - return; - boolean disabled = status == MenuDef.STATUS_DISABLED; - menuItem.setEnabled(!disabled); - } - - @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_editor, menu); @@ -267,8 +241,8 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD case R.id.action_log: showLog(); return true; - case R.id.action_help: - HelpCatalogueActivity.showMainCatalogue(this); + case R.id.action_editor_theme: + selectEditorTheme(); return true; case R.id.action_beautify: beautifyCode(); @@ -283,6 +257,10 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD return super.onOptionsItemSelected(item); } + private void setMenuItemStatus(int id, boolean enabled) { + findViewById(id).setEnabled(enabled); + } + private void showLog() { AutoJs.getInstance().getScriptEngineService().getGlobalConsole().show(); } @@ -293,6 +271,26 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD } } + + private void selectEditorTheme() { + String[] themes = mEditor.getAvailableThemes(); + int i = Arrays.asList(themes).indexOf(mEditor.getTheme()); + new MaterialDialog.Builder(this) + .items((CharSequence[]) themes) + .itemsCallbackSingleChoice(i, new MaterialDialog.ListCallbackSingleChoice() { + @Override + public boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) { + PreferenceManager.getDefaultSharedPreferences(EditActivity.this).edit() + .putString(KEY_EDITOR_THEME, text.toString()) + .apply(); + mEditor.setTheme(text.toString()); + return true; + } + }) + .show(); + } + + private void forceStop() { if (mScriptExecution != null) { mScriptExecution.getEngine().forceStop(); @@ -305,43 +303,18 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD } private void beautifyCode() { - final MaterialDialog dialog = MaterialDialogFactory.showProgress(this); - mJsBeautifier.beautify(mEditorDelegate.getText(), new JsBeautifier.Callback() { - @Override - public void onSuccess(final String beautifiedCode) { - runOnUiThread(new Runnable() { - @Override - public void run() { - mEditorDelegate.mEditText.setText(beautifiedCode); - dialog.dismiss(); - } - }); - } - - @Override - public void onException(final Exception e) { - e.printStackTrace(); - runOnUiThread(new Runnable() { - @Override - public void run() { - dialog.dismiss(); - Toast.makeText(EditActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show(); - } - }); - } - }); + mEditor.beautifyCode(); } @Override public void finish() { - if (!mReadOnly && mEditorDelegate.isChanged()) { + if (mTextChanged) { showExitConfirmDialog(); - } else { - super.finish(); + return; } + super.finish(); } - private void showExitConfirmDialog() { new ThemeColorMaterialDialogBuilder(this) .title(R.string.text_alert) @@ -352,7 +325,7 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { - saveFile(true, null); + saveFile(); EditActivity.super.finish(); } }) @@ -376,11 +349,6 @@ public class EditActivity extends Editor920Activity implements OnActivityResultD return mActivityResultMediator; } - @Override - public void doCommand(Command command) { - mEditorDelegate.doCommand(command); - } - @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/ScriptEditView.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/ScriptEditView.java deleted file mode 100644 index ac50426d..00000000 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/ScriptEditView.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.stardust.scriptdroid.ui.edit; - -import android.content.Context; -import android.support.annotation.AttrRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.util.AttributeSet; -import android.view.View; -import android.widget.FrameLayout; - -import com.jecelyin.editor.v2.common.Command; -import com.jecelyin.editor.v2.core.widget.TextView; -import com.jecelyin.editor.v2.ui.EditorDelegate; -import com.jecelyin.editor.v2.view.EditorView; -import com.stardust.scriptdroid.R; -import com.stardust.scriptdroid.ui.edit.completion.InputMethodEnhanceBar; -import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils; - -import org.androidannotations.annotations.EViewGroup; - -import java.io.File; - -/** - * Created by Stardust on 2017/8/21. - */ -@EViewGroup(R.layout.script_edit_view) -public class ScriptEditView extends FrameLayout { - - private class InputMethodEnhanceBarBridge implements InputMethodEnhanceBar.EditTextBridge { - - private TextView mTextView; - - public InputMethodEnhanceBarBridge(TextView textView) { - mTextView = textView; - } - - @Override - public void appendText(CharSequence text) { - insertText(text); - } - - @Override - public void backspace(int count) { - - } - - @Override - public TextView getEditText() { - return mTextView; - } - - - } - - private EditorDelegate mEditorDelegate; - private File mFile; - private boolean mReadOnly = false; - - public ScriptEditView(@NonNull Context context) { - super(context); - } - - public ScriptEditView(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - } - - public ScriptEditView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public boolean isReadOnly() { - return mReadOnly; - } - - public void setReadOnly(boolean readOnly) { - mReadOnly = readOnly; - } - - public void setFile(File file) { - mFile = file; - mEditorDelegate = new EditorDelegate(0, mFile, 0, "utf-8"); - setUpEditor(); - } - - public void setContent(String name, String str) { - mEditorDelegate = new EditorDelegate(0, name, str); - - } - - public void insertText(CharSequence text) { - Command c = new Command(Command.CommandEnum.INSERT_TEXT); - c.object = text; - mEditorDelegate.doCommand(c); - } - - private void setUpEditor() { - final EditorView editorView = (EditorView) findViewById(R.id.editor); - mEditorDelegate.setEditorView(editorView); - if (mFile == null) - Editor920Utils.setLang(mEditorDelegate, "JavaScript"); - editorView.getEditText().setReadOnly(mReadOnly); - editorView.getEditText().setHorizontallyScrolling(true); - setUpInputMethodEnhanceBar(editorView); - } - - - private void setUpInputMethodEnhanceBar(final EditorView editorView) { - InputMethodEnhanceBar inputMethodEnhanceBar = (InputMethodEnhanceBar) findViewById(R.id.input_method_enhance_bar); - if (mReadOnly) { - inputMethodEnhanceBar.setVisibility(View.GONE); - } else { - inputMethodEnhanceBar.setEditTextBridge(new InputMethodEnhanceBarBridge(editorView.getEditText())); - } - } - - -} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java index fe660e12..09836726 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java @@ -6,34 +6,26 @@ import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; import android.util.SparseArray; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import com.jecelyin.editor.v2.common.Command; -import com.jecelyin.editor.v2.ui.EditorDelegate; -import com.jecelyin.editor.v2.view.EditorView; -import com.jecelyin.editor.v2.view.menu.MenuDef; import com.stardust.app.OnActivityResultDelegate; import com.stardust.autojs.engine.JavaScriptEngine; import com.stardust.autojs.execution.ScriptExecution; -import com.stardust.autojs.script.StringScriptSource; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.autojs.AutoJs; -import com.stardust.scriptdroid.script.Scripts; import com.stardust.scriptdroid.script.sample.Sample; import com.stardust.scriptdroid.ui.BaseActivity; import com.stardust.scriptdroid.ui.common.ScriptOperations; -import com.stardust.scriptdroid.ui.edit.editor920.Editor920Activity; -import com.stardust.scriptdroid.ui.edit.editor920.Editor920Utils; import com.stardust.scriptdroid.ui.help.HelpCatalogueActivity; import com.stardust.theme.ThemeColorManager; import com.stardust.util.AssetsCache; import com.stardust.util.SparseArrayEntries; import com.stardust.widget.ToolbarMenuItem; - import butterknife.ButterKnife; import butterknife.OnClick; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -47,7 +39,7 @@ import static com.stardust.scriptdroid.script.Scripts.EXTRA_EXCEPTION_MESSAGE; /** * Created by Stardust on 2017/4/29. */ -public class ViewSampleActivity extends Editor920Activity implements OnActivityResultDelegate.DelegateHost { +public class ViewSampleActivity extends AppCompatActivity implements OnActivityResultDelegate.DelegateHost { public static void view(Context context, Sample sample) { @@ -59,7 +51,6 @@ public class ViewSampleActivity extends Editor920Activity implements OnActivityR private View mView; private Sample mSample; private ScriptExecution mScriptExecution; - private EditorDelegate mEditorDelegate; private SparseArray mMenuMap; private OnActivityResultDelegate.Mediator mMediator = new OnActivityResultDelegate.Mediator(); private BroadcastReceiver mOnRunFinishedReceiver = new BroadcastReceiver() { @@ -67,7 +58,6 @@ public class ViewSampleActivity extends Editor920Activity implements OnActivityR public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION_ON_EXECUTION_FINISHED)) { mScriptExecution = null; - setMenuStatus(R.id.run, MenuDef.STATUS_NORMAL); String msg = intent.getStringExtra(EXTRA_EXCEPTION_MESSAGE); if (msg != null) { Snackbar.make(mView, getString(R.string.text_error) + ": " + msg, Snackbar.LENGTH_LONG).show(); @@ -78,7 +68,6 @@ public class ViewSampleActivity extends Editor920Activity implements OnActivityR public void onCreate(Bundle b) { super.onCreate(b); - setTheme(R.style.EditorTheme); mView = View.inflate(this, R.layout.activity_view_sample, null); setContentView(mView); handleIntent(getIntent()); @@ -90,7 +79,6 @@ public class ViewSampleActivity extends Editor920Activity implements OnActivityR private void handleIntent(Intent intent) { mSample = (Sample) intent.getSerializableExtra("sample"); String content = AssetsCache.get(this, mSample.path); - mEditorDelegate = new EditorDelegate(0, mSample.name, content); } private void setUpUI() { @@ -101,11 +89,7 @@ public class ViewSampleActivity extends Editor920Activity implements OnActivityR } private void setUpEditor() { - final EditorView editorView = (EditorView) findViewById(R.id.editor); - mEditorDelegate.setEditorView(editorView); - Editor920Utils.setLang(mEditorDelegate, "JavaScript"); - editorView.getEditText().setReadOnly(true); - editorView.getEditText().setHorizontallyScrolling(true); + } private void setUpToolbar() { @@ -115,8 +99,7 @@ public class ViewSampleActivity extends Editor920Activity implements OnActivityR @OnClick(R.id.run) void run() { Snackbar.make(mView, R.string.text_start_running, Snackbar.LENGTH_SHORT).show(); - setMenuStatus(R.id.run, MenuDef.STATUS_DISABLED); - mScriptExecution = Scripts.runWithBroadcastSender(new StringScriptSource(mSample.name, mEditorDelegate.getText())); + //mScriptExecution = Scripts.runWithBroadcastSender(new StringScriptSource(mSample.name, mEditorDelegate.getText())); } @OnClick(R.id.edit) @@ -143,8 +126,6 @@ public class ViewSampleActivity extends Editor920Activity implements OnActivityR ToolbarMenuItem menuItem = mMenuMap.get(menuResId); if (menuItem == null) return; - boolean disabled = status == MenuDef.STATUS_DISABLED; - menuItem.setEnabled(!disabled); } @@ -186,11 +167,6 @@ public class ViewSampleActivity extends Editor920Activity implements OnActivityR } } - @Override - public void doCommand(Command command) { - mEditorDelegate.doCommand(command); - } - @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/CodeCompletion.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/CodeCompletion.java deleted file mode 100644 index e1dcfc48..00000000 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/CodeCompletion.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.stardust.scriptdroid.ui.edit.completion; - -import android.support.annotation.NonNull; -import android.text.Editable; -import android.text.TextUtils; -import android.text.TextWatcher; - -import com.stardust.scriptdroid.Pref; -import com.jecelyin.editor.v2.core.widget.TextView; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -/** - * Created by Stardust on 2017/2/17. - */ -// TODO: 2017/8/1 refactor -public class CodeCompletion implements TextWatcher { - - - public static class CodeCompletionItem implements Comparable { - String mDisplayText, mAppendText; - - CodeCompletionItem(String displayText, String appendText) { - mDisplayText = displayText; - mAppendText = appendText; - } - - CodeCompletionItem(String text) { - this(text, text); - } - - public String getAppendText() { - return mAppendText; - } - - public String getDisplayText() { - return mDisplayText; - } - - @Override - public int compareTo(@NonNull CodeCompletionItem o) { - return mDisplayText.compareTo(o.mDisplayText); - } - } - - interface OnCodeCompletionChangeListener { - void OnCodeCompletionChange(@NonNull Collection list1, @NonNull Collection list2); - } - - private static final String TAG = "CodeCompletion"; - - private OnCodeCompletionChangeListener mOnCodeCompletionChangeListener; - private TextView mEditText; - private static final List KEYWORDS = Arrays.asList("arguments", "break", "case", "catch", "class", "continue", "default", "do", "else", "eval", "export", "false", "for", "function", "if", "import", "in", "int", "new", "null", "package", "return", "switch", "this", "throw", "throws", "true", "try", "typeof", "var", "volatile", "while", "with", "Array", "Date", "hasOwnProperty", "Infinity", "isFinite", "isNaN", "isPrototypeOf", "length", "Math", "NaN", "name", "Number", "Object", "prototype", "String", "toString", "undefined", "valueOf"); - private static final int KEY_WORD_LENGTH_MAX = 15; - - - private List mGlobal = Collections.emptyList(); - private Map> mVariableProperties = new HashMap<>(); - - - public CodeCompletion(OnCodeCompletionChangeListener listener) { - mOnCodeCompletionChangeListener = listener; - } - - public void setEditText(TextView editText) { - mEditText = editText; - mEditText.addTextChangedListener(this); - } - - public void setGlobal(List functions) { - mGlobal = functions; - } - - public void setVariableProperties(Map> variableProperties) { - mVariableProperties = variableProperties; - } - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - } - - @Override - public void afterTextChanged(Editable s) { - int position = mEditText.getSelectionStart(); - String[] str = parseWordBefore(s, position); - if (str != null) { - if (str[1] != null) { - searchCodeCompletionForVariable(str[0], str[1]); - } else { - searchCodeCompletionForGlobal(str[0]); - } - } else { - mOnCodeCompletionChangeListener.OnCodeCompletionChange(DEFAULT_CODE_COMPLETION_LIST, Collections.emptyList()); - } - } - - private String[] parseWordBefore(Editable s, int position) { - if (position == 0) - return null; - int i; - for (i = position - 1; i >= 0; i--) { - if (position - i > KEY_WORD_LENGTH_MAX) { - return null; - } - char c = s.charAt(i); - if (c == '.') { - return new String[]{parseWordBeforeDot(s, i), s.subSequence(i + 1, position).toString()}; - } - if (!Character.isLetter(s.charAt(i))) { - if (i < position - 1) { - return new String[]{s.subSequence(i + 1, position).toString(), null}; - } else { - return null; - } - } - } - return new String[]{s.subSequence(0, position).toString(), null}; - } - - private String parseWordBeforeDot(Editable s, int position) { - if (position == 0) - return null; - int i; - for (i = position - 1; i >= 0; i--) { - if (position - i > KEY_WORD_LENGTH_MAX) { - return null; - } - if (!Character.isLetter(s.charAt(i))) { - if (i < position - 1) { - return s.subSequence(i + 1, position).toString(); - } else { - return null; - } - } - } - return s.subSequence(0, position).toString(); - } - - - private boolean searchCodeCompletionForGlobal(String str) { - Collection c = searchWordCompletion(str); - c.addAll(searchCodeCompletion(str, mGlobal)); - c.addAll(searchKeyWordCompletion(str)); - if (c.size() > 0) { - mOnCodeCompletionChangeListener.OnCodeCompletionChange(c, DEFAULT_CODE_COMPLETION_LIST); - return true; - } else { - mOnCodeCompletionChangeListener.OnCodeCompletionChange(DEFAULT_CODE_COMPLETION_LIST, Collections.emptyList()); - return false; - } - } - - private boolean searchCodeCompletionForVariable(String variable, String str) { - List properties = getPropertiesForVariable(variable); - Collection c = searchCodeCompletion(str, properties); - if (c.isEmpty()) { - mOnCodeCompletionChangeListener.OnCodeCompletionChange(DEFAULT_CODE_COMPLETION_LIST, Collections.emptyList()); - return false; - } else { - mOnCodeCompletionChangeListener.OnCodeCompletionChange(c, Collections.emptyList()); - return true; - } - } - - private List getPropertiesForVariable(String str) { - List properties = mVariableProperties.get(str); - if (properties == null) - return Collections.emptyList(); - return properties; - } - - - private Collection searchWordCompletion(String str) { - if (mEditText.getEditableText().length() < Pref.getMaxTextLengthForCodeCompletion()) { - return searchCodeCompletion(str, Arrays.asList(splitWord(mEditText.getEditableText().toString()))); - } - return new TreeSet<>(); - } - - private Collection searchCodeCompletion(String str, Iterable words) { - Set set = new TreeSet<>(); - for (String word : words) { - // TODO: 2017/2/18 优化 字典树 - if (word.startsWith(str) && str.length() < word.length()) { - set.add(new CodeCompletionItem(word, word.substring(str.length()))); - } - } - return set; - } - - private String[] splitWord(String s) { - // TODO: 2017/2/18 优化。利用上次结果 - return s.split("[\\W]"); - } - - private Collection searchKeyWordCompletion(String str) { - return searchCodeCompletion(str, KEYWORDS); - } - - private static final String[] DEFAULT_CODE_COMPLETIONS = new String[]{"=", "(", ")", ";", "{", "}", "\"", "!", "[", "]", "\\", ">", "<", ".", ", "}; - private static final List DEFAULT_CODE_COMPLETION_LIST = new ArrayList<>(); - - static { - for (String str : DEFAULT_CODE_COMPLETIONS) { - DEFAULT_CODE_COMPLETION_LIST.add(new CodeCompletionItem(str)); - } - } -} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/CodeCompletions.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/CodeCompletions.java new file mode 100644 index 00000000..dd7eca39 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/CodeCompletions.java @@ -0,0 +1,42 @@ +package com.stardust.scriptdroid.ui.edit.completion; + +import java.util.List; + +/** + * Created by Stardust on 2017/9/27. + */ + +public class CodeCompletions { + + public static class Pos { + public int line; + public int ch; + + public Pos(int line, int ch) { + this.line = line; + this.ch = ch; + } + } + + private Pos mFrom; + private Pos mTo; + private List mHints; + + public CodeCompletions(Pos from, Pos to, List hints) { + mFrom = from; + mTo = to; + mHints = hints; + } + + public Pos getFrom() { + return mFrom; + } + + public Pos getTo() { + return mTo; + } + + public List getHints() { + return mHints; + } +} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/InputMethodEnhanceBar.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/InputMethodEnhanceBar.java index c030f5ac..b8362b32 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/InputMethodEnhanceBar.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/completion/InputMethodEnhanceBar.java @@ -21,6 +21,7 @@ import com.google.gson.JsonParser; import com.stardust.pio.UncheckedIOException; import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.tool.GsonUtils; +import com.stardust.util.ClipboardUtil; import com.stardust.util.UnderuseExecutors; import java.io.IOException; @@ -36,8 +37,38 @@ import java.util.Map; */ // TODO: 2017/7/21 refactor -public class InputMethodEnhanceBar extends RecyclerView implements CodeCompletion.OnCodeCompletionChangeListener { +public class InputMethodEnhanceBar extends RecyclerView { + public interface OnHintClickListener { + void onHintClick(CodeCompletions completions, int pos); + } + + private CodeCompletions mCodeCompletions; + private OnHintClickListener mOnHintClickListener; + private final OnClickListener mOnCodeCompletionItemClickListener = new OnClickListener() { + @Override + public void onClick(View v) { + int position = getChildViewHolder(v).getAdapterPosition(); + if (position >= 0 && position < mCodeCompletions.getHints().size()) { + if (mOnHintClickListener != null) { + mOnHintClickListener.onHintClick(mCodeCompletions, position); + } + } + + } + }; + + private final OnLongClickListener mOnCodeCompletionItemLongClickListener = new OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + int position = getChildViewHolder(v).getAdapterPosition(); + if (position < 0 || position >= mCodeCompletions.getHints().size()) + return false; + ClipboardUtil.setClip(getContext(), mCodeCompletions.getHints().get(position)); + Toast.makeText(getContext(), R.string.text_copied, Toast.LENGTH_SHORT).show(); + return true; + } + }; public InputMethodEnhanceBar(Context context) { super(context); @@ -54,74 +85,20 @@ public class InputMethodEnhanceBar extends RecyclerView implements CodeCompletio init(); } - @Override - public void OnCodeCompletionChange(@NonNull Collection list1, @NonNull Collection list2) { - mCodeCompletionList.clear(); - mCodeCompletionList.addAll(list1); - mCodeCompletionList.addAll(list2); + public void setOnHintClickListener(OnHintClickListener onHintClickListener) { + mOnHintClickListener = onHintClickListener; + } + + public void setCodeCompletions(CodeCompletions codeCompletions) { + mCodeCompletions = codeCompletions; getAdapter().notifyDataSetChanged(); } - public interface EditTextBridge { - void appendText(CharSequence text); - - void backspace(int count); - - com.jecelyin.editor.v2.core.widget.TextView getEditText(); - } - - private static List global; - private static Map> variables = new HashMap<>(); - - EditTextBridge mEditTextBridge; - private CodeCompletion mCodeCompletion = new CodeCompletion(this); - private List mCodeCompletionList = new ArrayList<>(); - private final OnClickListener mOnCodeCompletionItemClickListener = new OnClickListener() { - @Override - public void onClick(View v) { - int position = getChildViewHolder(v).getAdapterPosition(); - if (position >= 0 && position < mCodeCompletionList.size()) - mEditTextBridge.appendText(mCodeCompletionList.get(position).getAppendText()); - } - }; - - private final OnLongClickListener mOnCodeCompletionItemLongClickListener = new OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - int position = getChildViewHolder(v).getAdapterPosition(); - if (position < 0 || position >= mCodeCompletionList.size()) - return false; - ((ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText("", mCodeCompletionList.get(position).getDisplayText())); - Toast.makeText(getContext(), R.string.text_copied, Toast.LENGTH_SHORT).show(); - return true; - } - }; - private void init() { setAdapter(new CodeCompletionAdapter()); setLayoutManager(new WrapContentLinearLayoutManager(getContext(), HORIZONTAL, false)); - if (global == null) { - UnderuseExecutors.execute(new Runnable() { - @Override - public void run() { - readCompletions(getContext(), "js/functions.json"); - mCodeCompletion.setGlobal(global); - mCodeCompletion.setVariableProperties(variables); - } - }); - }else { - mCodeCompletion.setGlobal(global); - mCodeCompletion.setVariableProperties(variables); - } - } - public void setEditTextBridge(EditTextBridge editTextBridge) { - mEditTextBridge = editTextBridge; - mCodeCompletion.setEditText(mEditTextBridge.getEditText()); - } - - private class CodeCompletionAdapter extends RecyclerView.Adapter { @Override @@ -131,12 +108,12 @@ public class InputMethodEnhanceBar extends RecyclerView implements CodeCompletio @Override public void onBindViewHolder(ViewHolder holder, int position) { - ((TextView) holder.itemView).setText(mCodeCompletionList.get(position).getDisplayText()); + ((TextView) holder.itemView).setText(mCodeCompletions.getHints().get(position)); } @Override public int getItemCount() { - return mCodeCompletionList.size(); + return mCodeCompletions == null ? 0 : mCodeCompletions.getHints().size(); } } @@ -153,7 +130,7 @@ public class InputMethodEnhanceBar extends RecyclerView implements CodeCompletio try { JsonParser parser = new JsonParser(); JsonObject object = parser.parse(new InputStreamReader(context.getAssets().open(path))).getAsJsonObject(); - InputMethodEnhanceBar.global = readGlobal(object.remove("global").getAsJsonObject()); + //InputMethodEnhanceBar.global = readGlobal(object.remove("global").getAsJsonObject()); readModules(object); } catch (IOException e) { throw new UncheckedIOException(e); @@ -162,7 +139,7 @@ public class InputMethodEnhanceBar extends RecyclerView implements CodeCompletio private static void readModules(JsonObject object) { for (Map.Entry module : object.entrySet()) { - variables.put(module.getKey(), GsonUtils.toStringList(module.getValue())); + //variables.put(module.getKey(), GsonUtils.toStringList(module.getValue())); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor920/Editor920Activity.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor920/Editor920Activity.java deleted file mode 100644 index 2b8443b7..00000000 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor920/Editor920Activity.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.stardust.scriptdroid.ui.edit.editor920; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import com.afollestad.materialdialogs.folderselector.FolderChooserDialog; -import com.jecelyin.editor.v2.Pref; -import com.jecelyin.editor.v2.common.Command; -import com.jecelyin.editor.v2.ui.IActivity; -import com.jecelyin.editor.v2.ui.TabManager; - -import java.io.File; -import java.lang.reflect.Field; -import java.util.Map; - -/** - * Created by Stardust on 2017/1/30. - */ -public abstract class Editor920Activity extends IActivity { - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Pref.getInstance(this).setReadOnly(false); - setPref(Pref.KEY_PREF_KEEP_BACKUP_FILE, false); - - } - - private void setPref(String key, Object value) { - try { - Field field = Pref.class.getDeclaredField("map"); - field.setAccessible(true); - ((Map) field.get(Pref.getInstance(this))).put(key, value); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } - } - - @Override - public void startPickPathActivity(String s, String s1) { - - } - - @Override - public void doNextCommand() { - - } - - @Override - public void setMenuStatus(int i, int i1) { - - } - - @Override - public void doCommand(Command command) { - - } - - @Override - public void openFile(String s, String s1, int i) { - - } - - @Override - public void setFindFolderCallback(FolderChooserDialog.FolderCallback folderCallback) { - - } - - @Override - public TabManager getTabManager() { - return null; - } - - @Override - public void insertText(CharSequence text) { - Command c = new Command(Command.CommandEnum.INSERT_TEXT); - c.object = text; - doCommand(c); - } - - @Override - public String getCurrentLang() { - return null; - } - - @Override - public void onDocumentChanged(int i) { - - } - - @Override - public void onFolderSelection(@NonNull FolderChooserDialog dialog, @NonNull File folder) { - - } - - protected void onDestroy() { - try { - super.onDestroy(); - } catch (Exception ignored) { - - } - } -} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor920/Editor920Utils.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor920/Editor920Utils.java deleted file mode 100644 index 9429bf86..00000000 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor920/Editor920Utils.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.stardust.scriptdroid.ui.edit.editor920; - -import com.jecelyin.editor.v2.ui.Document; -import com.jecelyin.editor.v2.ui.EditorDelegate; - -import java.lang.reflect.Field; - -/** - * Created by Stardust on 2017/4/5. - */ - -public class Editor920Utils { - - public static Document getDocument(EditorDelegate editorDelegate) { - try { - Field field = EditorDelegate.class.getDeclaredField("document"); - field.setAccessible(true); - return (Document) field.get(editorDelegate); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } - } - - public static void setLang(EditorDelegate editorDelegate, String name) { - getDocument(editorDelegate).setMode(name); - } -} diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/settings/AboutActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/settings/AboutActivity.java index 87ec1f18..0911b840 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/settings/AboutActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/settings/AboutActivity.java @@ -73,7 +73,7 @@ public class AboutActivity extends BaseActivity { @Click(R.id.donate) void showDonateMeDialog() { new ThemeColorMaterialDialogBuilder(this) - .title(R.string.donate) + .title(R.string.text_donate) .items("支付宝") .itemsCallback(new MaterialDialog.ListCallback() { @Override diff --git a/app/src/main/java/com/stardust/theme/ThemeColorManagerCompat.java b/app/src/main/java/com/stardust/theme/ThemeColorManagerCompat.java index 22fdaf75..0c23a47e 100644 --- a/app/src/main/java/com/stardust/theme/ThemeColorManagerCompat.java +++ b/app/src/main/java/com/stardust/theme/ThemeColorManagerCompat.java @@ -1,7 +1,5 @@ package com.stardust.theme; -import com.jecelyin.editor.v2.core.widget.JecEditText; -import com.jecelyin.editor.v2.ui.EditorDelegate; import com.stardust.scriptdroid.*; import com.stardust.scriptdroid.R; diff --git a/app/src/main/res/drawable/divider_drak.xml b/app/src/main/res/drawable/divider_drak.xml deleted file mode 100644 index 3fc12436..00000000 --- a/app/src/main/res/drawable/divider_drak.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml index a9a966af..1712a577 100644 --- a/app/src/main/res/layout/activity_edit.xml +++ b/app/src/main/res/layout/activity_edit.xml @@ -64,6 +64,25 @@ - + + + + + diff --git a/app/src/main/res/layout/content_edit.xml b/app/src/main/res/layout/content_edit.xml index 8c9ec51d..1238d124 100644 --- a/app/src/main/res/layout/content_edit.xml +++ b/app/src/main/res/layout/content_edit.xml @@ -7,43 +7,23 @@ android:orientation="vertical" tools:showIn="@layout/activity_edit"> - + - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_task_manager.xml b/app/src/main/res/layout/fragment_task_manager.xml index 220b08ea..0cf9811f 100644 --- a/app/src/main/res/layout/fragment_task_manager.xml +++ b/app/src/main/res/layout/fragment_task_manager.xml @@ -23,12 +23,12 @@ android:textColor="#484C4F" android:textSize="16sp"/> + diff --git a/app/src/main/res/menu/menu_drawer.xml b/app/src/main/res/menu/menu_drawer.xml deleted file mode 100644 index 211e070f..00000000 --- a/app/src/main/res/menu/menu_drawer.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_editor.xml b/app/src/main/res/menu/menu_editor.xml index 4c085e1f..dfc0365d 100644 --- a/app/src/main/res/menu/menu_editor.xml +++ b/app/src/main/res/menu/menu_editor.xml @@ -27,9 +27,9 @@ app:showAsAction="never"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4dp - 12sp - 8dp - 8dp - 12sp - 8dp - 0dp - 0dp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Vince Mi - https://github.com/vinc3m1 - true - A fast ImageView (and Drawable) that supports rounded corners (and ovals or circles) based on the original example from Romain Guy. - RoundedImageView - 1.3.0 - https://github.com/vinc3m1/RoundedImageView - apache_2_0 - https://github.com/vinc3m1/RoundedImageView.git \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d19a40d6..f22bafd2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -252,6 +252,8 @@ 时间 大小 类型 + 捐赠 + 编辑器主题 diff --git a/app/src/main/res/values/theme_editor.xml b/app/src/main/res/values/theme_editor.xml deleted file mode 100644 index a28ecf08..00000000 --- a/app/src/main/res/values/theme_editor.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - #009688 - - - - - \ No newline at end of file diff --git a/app/src/test/java/com/stardust/scriptdroid/ExampleUnitTest.java b/app/src/test/java/com/stardust/scriptdroid/ExampleUnitTest.java index ce0583d5..69cdd4e6 100644 --- a/app/src/test/java/com/stardust/scriptdroid/ExampleUnitTest.java +++ b/app/src/test/java/com/stardust/scriptdroid/ExampleUnitTest.java @@ -1,30 +1,6 @@ package com.stardust.scriptdroid; -import com.jecelyin.common.http.Base64; -import com.stardust.util.LimitedHashMap; - import org.junit.Test; -import org.mozilla.javascript.Context; -import org.mozilla.javascript.Scriptable; -import org.mozilla.javascript.tools.shell.ShellContextFactory; -import org.mozilla.javascript.xml.XMLLib; - -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PipedInputStream; -import java.io.PipedOutputStream; -import java.io.PipedReader; -import java.io.PipedWriter; -import java.io.Writer; -import java.nio.channels.Pipe; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; /** * Example local unit test, which will execute on the development machine (host). diff --git a/common/src/main/java/com/stardust/util/HashUtils.java b/common/src/main/java/com/stardust/util/HashUtils.java new file mode 100644 index 00000000..a280cd3e --- /dev/null +++ b/common/src/main/java/com/stardust/util/HashUtils.java @@ -0,0 +1,25 @@ +package com.stardust.util; + +import android.util.Base64; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * Created by Stardust on 2017/9/26. + */ + +public class HashUtils { + + public static String md5(String text) { + MessageDigest md; + byte[] bytesOfMessage = text.getBytes(); + try { + md = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + byte[] thedigest = md.digest(bytesOfMessage); + return Base64.encodeToString(thedigest, Base64.DEFAULT); + } +}