blob: 593caa30627105b214dd00f9fdf66f4075ba6fee [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],
)