blob: 6400725e396a94a4f6f8a5102443d5b41c5b7061 [file] [log] [blame]
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],
)