|  | load("//tools/bzl:genrule2.bzl", "genrule2") | 
|  |  | 
|  | CM_CSS = [ | 
|  | "lib/codemirror.css", | 
|  | "addon/dialog/dialog.css", | 
|  | "addon/merge/merge.css", | 
|  | "addon/scroll/simplescrollbars.css", | 
|  | "addon/search/matchesonscrollbar.css", | 
|  | "addon/lint/lint.css", | 
|  | ] | 
|  |  | 
|  | CM_JS = [ | 
|  | "lib/codemirror.js", | 
|  | "mode/meta.js", | 
|  | "keymap/emacs.js", | 
|  | "keymap/sublime.js", | 
|  | "keymap/vim.js", | 
|  | ] | 
|  |  | 
|  | CM_ADDONS = [ | 
|  | "dialog/dialog.js", | 
|  | "edit/closebrackets.js", | 
|  | "edit/matchbrackets.js", | 
|  | "edit/trailingspace.js", | 
|  | "scroll/annotatescrollbar.js", | 
|  | "scroll/simplescrollbars.js", | 
|  | "search/jump-to-line.js", | 
|  | "search/matchesonscrollbar.js", | 
|  | "search/searchcursor.js", | 
|  | "search/search.js", | 
|  | "selection/mark-selection.js", | 
|  | "mode/multiplex.js", | 
|  | "mode/overlay.js", | 
|  | "mode/simple.js", | 
|  | "lint/lint.js", | 
|  | ] | 
|  |  | 
|  | # Available themes must be enumerated here, | 
|  | # in gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/Theme.java, | 
|  | # in gerrit-gwtui/src/main/java/net/codemirror/theme/Themes.java | 
|  | CM_THEMES = [ | 
|  | "3024-day", | 
|  | "3024-night", | 
|  | "abcdef", | 
|  | "ambiance", | 
|  | "base16-dark", | 
|  | "base16-light", | 
|  | "bespin", | 
|  | "blackboard", | 
|  | "cobalt", | 
|  | "colorforth", | 
|  | "dracula", | 
|  | "duotone-dark", | 
|  | "duotone-light", | 
|  | "eclipse", | 
|  | "elegant", | 
|  | "erlang-dark", | 
|  | "hopscotch", | 
|  | "icecoder", | 
|  | "isotope", | 
|  | "lesser-dark", | 
|  | "liquibyte", | 
|  | "material", | 
|  | "mbo", | 
|  | "mdn-like", | 
|  | "midnight", | 
|  | "monokai", | 
|  | "neat", | 
|  | "neo", | 
|  | "night", | 
|  | "paraiso-dark", | 
|  | "paraiso-light", | 
|  | "pastel-on-dark", | 
|  | "railscasts", | 
|  | "rubyblue", | 
|  | "seti", | 
|  | "solarized", | 
|  | "the-matrix", | 
|  | "tomorrow-night-bright", | 
|  | "tomorrow-night-eighties", | 
|  | "ttcn", | 
|  | "twilight", | 
|  | "vibrant-ink", | 
|  | "xq-dark", | 
|  | "xq-light", | 
|  | "yeti", | 
|  | "zenburn", | 
|  | ] | 
|  |  | 
|  | # Available modes must be enumerated here, | 
|  | # in gerrit-gwtui/src/main/java/net/codemirror/mode/Modes.java, | 
|  | # gerrit-gwtui/src/main/java/net/codemirror/mode/ModeInfo.java, | 
|  | # and in CodeMirror's own mode/meta.js script. | 
|  | CM_MODES = [ | 
|  | "apl", | 
|  | "asciiarmor", | 
|  | "asn.1", | 
|  | "asterisk", | 
|  | "brainfuck", | 
|  | "clike", | 
|  | "clojure", | 
|  | "cmake", | 
|  | "cobol", | 
|  | "coffeescript", | 
|  | "commonlisp", | 
|  | "crystal", | 
|  | "css", | 
|  | "cypher", | 
|  | "d", | 
|  | "dart", | 
|  | "diff", | 
|  | "django", | 
|  | "dockerfile", | 
|  | "dtd", | 
|  | "dylan", | 
|  | "ebnf", | 
|  | "ecl", | 
|  | "eiffel", | 
|  | "elm", | 
|  | "erlang", | 
|  | "factor", | 
|  | "fcl", | 
|  | "forth", | 
|  | "fortran", | 
|  | "gas", | 
|  | "gfm", | 
|  | "gherkin", | 
|  | "go", | 
|  | "groovy", | 
|  | "haml", | 
|  | "handlebars", | 
|  | "haskell-literate", | 
|  | "haskell", | 
|  | "haxe", | 
|  | "htmlembedded", | 
|  | "htmlmixed", | 
|  | "http", | 
|  | "idl", | 
|  | "javascript", | 
|  | "jinja2", | 
|  | "jsx", | 
|  | "julia", | 
|  | "livescript", | 
|  | "lua", | 
|  | "markdown", | 
|  | "mathematica", | 
|  | "mbox", | 
|  | "mirc", | 
|  | "mllike", | 
|  | "modelica", | 
|  | "mscgen", | 
|  | "mumps", | 
|  | "nginx", | 
|  | "nsis", | 
|  | "ntriples", | 
|  | "octave", | 
|  | "oz", | 
|  | "pascal", | 
|  | "pegjs", | 
|  | "perl", | 
|  | "php", | 
|  | "pig", | 
|  | "powershell", | 
|  | "properties", | 
|  | "protobuf", | 
|  | "pug", | 
|  | "puppet", | 
|  | "python", | 
|  | "q", | 
|  | "r", | 
|  | "rpm", | 
|  | "rst", | 
|  | "ruby", | 
|  | "rust", | 
|  | "sas", | 
|  | "sass", | 
|  | "scheme", | 
|  | "shell", | 
|  | "sieve", | 
|  | "slim", | 
|  | "smalltalk", | 
|  | "smarty", | 
|  | "solr", | 
|  | "soy", | 
|  | "sparql", | 
|  | "spreadsheet", | 
|  | "sql", | 
|  | "stex", | 
|  | "stylus", | 
|  | "swift", | 
|  | "tcl", | 
|  | "textile", | 
|  | "tiddlywiki", | 
|  | "tiki", | 
|  | "toml", | 
|  | "tornado", | 
|  | "troff", | 
|  | "ttcn-cfg", | 
|  | "ttcn", | 
|  | "turtle", | 
|  | "twig", | 
|  | "vb", | 
|  | "vbscript", | 
|  | "velocity", | 
|  | "verilog", | 
|  | "vhdl", | 
|  | "vue", | 
|  | "webidl", | 
|  | "xml", | 
|  | "xquery", | 
|  | "yacas", | 
|  | "yaml-frontmatter", | 
|  | "yaml", | 
|  | "z80", | 
|  | ] | 
|  |  | 
|  | CM_VERSION = "5.25.0" | 
|  |  | 
|  | TOP = "META-INF/resources/webjars/codemirror/%s" % CM_VERSION | 
|  |  | 
|  | TOP_MINIFIED = "META-INF/resources/webjars/codemirror-minified/%s" % CM_VERSION | 
|  |  | 
|  | LICENSE = "//lib:LICENSE-codemirror-original" | 
|  |  | 
|  | LICENSE_MINIFIED = "//lib:LICENSE-codemirror-minified" | 
|  |  | 
|  | DIFF_MATCH_PATCH_VERSION = "20121119-1" | 
|  |  | 
|  | DIFF_MATCH_PATCH_TOP = ("META-INF/resources/webjars/google-diff-match-patch/%s" % | 
|  | DIFF_MATCH_PATCH_VERSION) | 
|  |  | 
|  | def pkg_cm(): | 
|  | for archive, suffix, top, license in [ | 
|  | ("@codemirror-original//jar", "", TOP, LICENSE), | 
|  | ("@codemirror-minified//jar", "_r", TOP_MINIFIED, LICENSE_MINIFIED), | 
|  | ]: | 
|  | # Main JavaScript and addons | 
|  | genrule2( | 
|  | name = "cm" + suffix, | 
|  | cmd = " && ".join( | 
|  | [ | 
|  | "echo '/** @license' >$@", | 
|  | "unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top), | 
|  | "echo '*/' >>$@", | 
|  | ] + | 
|  | ["unzip -p $(location %s) %s/%s >>$@" % (archive, top, n) for n in CM_JS] + | 
|  | [ | 
|  | "unzip -p $(location %s) %s/addon/%s >>$@" % (archive, top, n) | 
|  | for n in CM_ADDONS | 
|  | ], | 
|  | ), | 
|  | tools = [archive], | 
|  | outs = ["cm%s.js" % suffix], | 
|  | ) | 
|  |  | 
|  | # Main CSS | 
|  | genrule2( | 
|  | name = "css" + suffix, | 
|  | cmd = " && ".join( | 
|  | [ | 
|  | "echo '/** @license' >$@", | 
|  | "unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top), | 
|  | "echo '*/' >>$@", | 
|  | ] + | 
|  | [ | 
|  | "unzip -p $(location %s) %s/%s >>$@" % (archive, top, n) | 
|  | for n in CM_CSS | 
|  | ], | 
|  | ), | 
|  | tools = [archive], | 
|  | outs = ["cm%s.css" % suffix], | 
|  | ) | 
|  |  | 
|  | # Modes | 
|  | for n in CM_MODES: | 
|  | genrule2( | 
|  | name = "mode_%s%s" % (n, suffix), | 
|  | cmd = " && ".join( | 
|  | [ | 
|  | "echo '/** @license' >$@", | 
|  | "unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top), | 
|  | "echo '*/' >>$@", | 
|  | "unzip -p $(location %s) %s/mode/%s/%s.js >>$@" % (archive, top, n, n), | 
|  | ], | 
|  | ), | 
|  | tools = [archive], | 
|  | outs = ["mode_%s%s.js" % (n, suffix)], | 
|  | ) | 
|  |  | 
|  | # Themes | 
|  | for n in CM_THEMES: | 
|  | genrule2( | 
|  | name = "theme_%s%s" % (n, suffix), | 
|  | cmd = " && ".join( | 
|  | [ | 
|  | "echo '/** @license' >$@", | 
|  | "unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top), | 
|  | "echo '*/' >>$@", | 
|  | "unzip -p $(location %s) %s/theme/%s.css >>$@" % (archive, top, n), | 
|  | ], | 
|  | ), | 
|  | tools = [archive], | 
|  | outs = ["theme_%s%s.css" % (n, suffix)], | 
|  | ) | 
|  |  | 
|  | # Merge Addon bundled with diff-match-patch | 
|  | genrule2( | 
|  | name = "addon_merge_with_diff_match_patch%s" % suffix, | 
|  | cmd = " && ".join( | 
|  | [ | 
|  | "echo '/** @license' >$@", | 
|  | "unzip -p $(location %s) %s/LICENSE >>$@" % (archive, top), | 
|  | "echo '*/\n' >>$@", | 
|  | "echo '// The google-diff-match-patch library is from https://repo1.maven.org/maven2/org/webjars/google-diff-match-patch/%s/google-diff-match-patch-%s.jar\n' >> $@" % (DIFF_MATCH_PATCH_VERSION, DIFF_MATCH_PATCH_VERSION), | 
|  | "echo '/** @license' >>$@", | 
|  | "echo 'LICENSE-Apache2.0' >>$@", | 
|  | "echo '*/' >>$@", | 
|  | "unzip -p $(location @diff-match-patch//jar) %s/diff_match_patch.js >>$@" % DIFF_MATCH_PATCH_TOP, | 
|  | "echo ';' >> $@", | 
|  | "unzip -p $(location %s) %s/addon/merge/merge.js >>$@" % (archive, top), | 
|  | ], | 
|  | ), | 
|  | tools = [ | 
|  | "@diff-match-patch//jar", | 
|  | # dependency just for license tracking. | 
|  | ":diff-match-patch", | 
|  | archive, | 
|  | "//lib:LICENSE-Apache2.0", | 
|  | ], | 
|  | outs = ["addon_merge_with_diff_match_patch%s.js" % suffix], | 
|  | ) | 
|  |  | 
|  | # Jar packaging | 
|  | genrule2( | 
|  | name = "jar" + suffix, | 
|  | cmd = " && ".join([ | 
|  | "cd $$TMP", | 
|  | "mkdir -p net/codemirror/{addon,lib,mode,theme}", | 
|  | "cp $$ROOT/$(location :css%s) net/codemirror/lib/cm.css" % suffix, | 
|  | "cp $$ROOT/$(location :cm%s) net/codemirror/lib/cm.js" % suffix, | 
|  | ] + | 
|  | [ | 
|  | "cp $$ROOT/$(location :mode_%s%s) net/codemirror/mode/%s.js" % (n, suffix, n) | 
|  | for n in CM_MODES | 
|  | ] + | 
|  | [ | 
|  | "cp $$ROOT/$(location :theme_%s%s) net/codemirror/theme/%s.css" % (n, suffix, n) | 
|  | for n in CM_THEMES | 
|  | ] + | 
|  | ["cp $$ROOT/$(location :addon_merge_with_diff_match_patch%s) net/codemirror/addon/merge_bundled.js" % suffix] + | 
|  | ["zip -qr $$ROOT/$@ net/codemirror/{addon,lib,mode,theme}"]), | 
|  | tools = [ | 
|  | ":addon_merge_with_diff_match_patch%s" % suffix, | 
|  | ":cm%s" % suffix, | 
|  | ":css%s" % suffix, | 
|  | ] + [ | 
|  | ":mode_%s%s" % (n, suffix) | 
|  | for n in CM_MODES | 
|  | ] + [ | 
|  | ":theme_%s%s" % (n, suffix) | 
|  | for n in CM_THEMES | 
|  | ], | 
|  | outs = ["codemirror%s.jar" % suffix], | 
|  | ) | 
|  |  | 
|  | native.java_import( | 
|  | name = "codemirror" + suffix, | 
|  | jars = [":jar%s" % suffix], | 
|  | visibility = ["//visibility:public"], | 
|  | data = [license], | 
|  | ) |