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", "gruvbox-dark", "hopscotch", "icecoder", "idea", "isotope", "lesser-dark", "liquibyte", "lucario", "material", "mbo", "mdn-like", "midnight", "monokai", "neat", "neo", "night", "paraiso-dark", "paraiso-light", "pastel-on-dark", "railscasts", "rubyblue", "seti", "solarized", "ssms", "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.37.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], )