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/common/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', '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', ] VERSION = '5.19.0' TOP = 'META-INF/resources/webjars/codemirror/%s' % VERSION TOP_MINIFIED = 'META-INF/resources/webjars/codemirror-minified/%s' % 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 = [ '@codemirror_original//jar', '@codemirror_minified//jar', ], 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 = [ '@codemirror_original//jar', '@codemirror_minified//jar', ], 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 = [ '@codemirror_original//jar', '@codemirror_minified//jar', ], 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 = [ '@codemirror_original//jar', '@codemirror_minified//jar', ], outs = ['theme_%s%s.css' % (n, suffix)], ) # Merge Addon bundled with diff-match-patch genrule2( name = 'addon_merge%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://google-diff-match-patch.googlecode.com/svn-history/r106/trunk/javascript/diff_match_patch.js\n' >> $@", "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', '@codemirror_original//jar', '@codemirror_minified//jar', ], outs = ['addon_merge%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%s) net/codemirror/addon/merge_bundled.js' % suffix] + ['zip -qr $$ROOT/$@ net/codemirror/{addon,lib,mode,theme}']), tools = [ ':addon_merge%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], )