blob: 5088a050b64639c79b724d47e000f3d34435edfb [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/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-gwt//jar', '', TOP, LICENSE),
('@codemirror-minified-gwt//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],
)