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],
    )
