Add all the CodeMirror themes as of 5.14.2

This change makes all the CodeMirror themes as of the 5.14.2 release
available in DiffScreen and EditScreen.

Updated Documentation/rest-api-accounts.txt to reflect the addition.

Change-Id: Ic37e2ac5cfae91ed3cf61d7dc9d3345668715dae
diff --git a/Documentation/rest-api-accounts.txt b/Documentation/rest-api-accounts.txt
index 06520e4..7bbf2be 100644
--- a/Documentation/rest-api-accounts.txt
+++ b/Documentation/rest-api-accounts.txt
@@ -1695,8 +1695,8 @@
 |`context`                     ||
 The number of lines of context when viewing a patch.
 |`theme`                       ||
-The CodeMirror theme. Currently only a subset of light and dark
-CodeMirror themes are supported.
+The CodeMirror theme name in upper case, for example `DEFAULT`. All the themes
+from the CodeMirror release that Gerrit is using are available.
 |`expand_all_comments`         |not set if `false`|
 Whether all inline comments should be automatically expanded.
 |`ignore_whitespace`           ||
@@ -1809,9 +1809,8 @@
 |===========================================
 |Field Name                    ||Description
 |`theme`                       ||
-The CodeMirror theme. Currently only a subset of light and dark
-CodeMirror themes are supported. Light themes `DEFAULT`, `ECLIPSE`,
-`ELEGANT`, `NEAT`. Dark themes `MIDNIGHT`, `NIGHT`, `TWILIGHT`.
+The CodeMirror theme name in upper case, for example `DEFAULT`. All the themes
+from the CodeMirror release that Gerrit is using are available.
 |`key_map_type`                ||
 The CodeMirror key map. Currently only a subset of key maps are
 supported: `DEFAULT`, `EMACS`, `SUBLIME`, `VIM`.
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/Theme.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/Theme.java
index a32d7d3..fc4ae03 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/Theme.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/client/Theme.java
@@ -17,25 +17,103 @@
 public enum Theme {
   // Light themes
   DEFAULT,
+  DAY_3024,
+  BASE16_LIGHT,
   ECLIPSE,
   ELEGANT,
+  MDN_LIKE,
   NEAT,
+  NEO,
+  PARAISO_LIGHT,
+  SOLARIZED_LIGHT,
+  TTCN,
+  XQ_LIGHT,
+  YETI,
 
   // Dark themes
+  NIGHT_3024,
+  ABCDEF,
+  AMBIANCE,
+  BASE16_DARK,
+  BESPIN,
+  BLACKBOARD,
+  COBALT,
+  COLORFORTH,
+  DRACULA,
+  ERLANG_DARK,
+  HOPSCOTCH,
+  ICECODER,
+  ISOTOPE,
+  LESSER_DARK,
+  LIQUIBYTE,
+  MATERIAL,
+  MBO,
   MIDNIGHT,
+  MONOKAI,
   NIGHT,
-  TWILIGHT;
+  PARAISO_DARK,
+  PASTEL_ON_DARK,
+  RAILSCASTS,
+  RUBYBLUE,
+  SETI,
+  SOLARIZED_DARK,
+  THE_MATRIX,
+  TOMORROW_NIGHT_BRIGHT,
+  TOMORROW_NIGHT_EIGHTIES,
+  TWILIGHT,
+  VIBRANT_INK,
+  XQ_DARK,
+  ZENBURN;
 
   public boolean isDark() {
     switch (this) {
+      case NIGHT_3024:
+      case ABCDEF:
+      case AMBIANCE:
+      case BASE16_DARK:
+      case BESPIN:
+      case BLACKBOARD:
+      case COBALT:
+      case COLORFORTH:
+      case DRACULA:
+      case ERLANG_DARK:
+      case HOPSCOTCH:
+      case ICECODER:
+      case ISOTOPE:
+      case LESSER_DARK:
+      case LIQUIBYTE:
+      case MATERIAL:
+      case MBO:
       case MIDNIGHT:
+      case MONOKAI:
       case NIGHT:
+      case PARAISO_DARK:
+      case PASTEL_ON_DARK:
+      case RAILSCASTS:
+      case RUBYBLUE:
+      case SETI:
+      case SOLARIZED_DARK:
+      case THE_MATRIX:
+      case TOMORROW_NIGHT_BRIGHT:
+      case TOMORROW_NIGHT_EIGHTIES:
       case TWILIGHT:
+      case VIBRANT_INK:
+      case XQ_DARK:
+      case ZENBURN:
         return true;
       case DEFAULT:
+      case DAY_3024:
+      case BASE16_LIGHT:
       case ECLIPSE:
       case ELEGANT:
+      case MDN_LIKE:
       case NEAT:
+      case NEO:
+      case PARAISO_LIGHT:
+      case SOLARIZED_LIGHT:
+      case TTCN:
+      case XQ_LIGHT:
+      case YETI:
       default:
         return false;
     }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java
index b1163db..4ca4a63 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditPreferencesBox.java
@@ -280,27 +280,9 @@
   }
 
   private void initTheme() {
-    theme.addItem(
-        Theme.DEFAULT.name().toLowerCase(),
-        Theme.DEFAULT.name());
-    theme.addItem(
-        Theme.ECLIPSE.name().toLowerCase(),
-        Theme.ECLIPSE.name());
-    theme.addItem(
-        Theme.ELEGANT.name().toLowerCase(),
-        Theme.ELEGANT.name());
-    theme.addItem(
-        Theme.NEAT.name().toLowerCase(),
-        Theme.NEAT.name());
-    theme.addItem(
-        Theme.MIDNIGHT.name().toLowerCase(),
-        Theme.MIDNIGHT.name());
-    theme.addItem(
-        Theme.NIGHT.name().toLowerCase(),
-        Theme.NIGHT.name());
-    theme.addItem(
-        Theme.TWILIGHT.name().toLowerCase(),
-        Theme.TWILIGHT.name());
+    for (Theme t : Theme.values()) {
+      theme.addItem(t.name().toLowerCase(), t.name());
+    }
   }
 
   private void setKeyMapType(KeyMapType v) {
diff --git a/gerrit-gwtui/src/main/java/net/codemirror/theme/ThemeLoader.java b/gerrit-gwtui/src/main/java/net/codemirror/theme/ThemeLoader.java
index 040b382..20dd8c7 100644
--- a/gerrit-gwtui/src/main/java/net/codemirror/theme/ThemeLoader.java
+++ b/gerrit-gwtui/src/main/java/net/codemirror/theme/ThemeLoader.java
@@ -27,12 +27,50 @@
 /** Dynamically loads a known CodeMirror theme's CSS */
 public class ThemeLoader {
   private static final ExternalTextResource[] THEMES = {
+      Themes.I.day_3024(),
+      Themes.I.night_3024(),
+      Themes.I.abcdef(),
+      Themes.I.ambiance(),
+      Themes.I.base16_dark(),
+      Themes.I.base16_light(),
+      Themes.I.bespin(),
+      Themes.I.blackboard(),
+      Themes.I.cobalt(),
+      Themes.I.colorforth(),
+      Themes.I.dracula(),
       Themes.I.eclipse(),
       Themes.I.elegant(),
+      Themes.I.erlang_dark(),
+      Themes.I.hopscotch(),
+      Themes.I.icecoder(),
+      Themes.I.isotope(),
+      Themes.I.lesser_dark(),
+      Themes.I.liquibyte(),
+      Themes.I.material(),
+      Themes.I.mbo(),
+      Themes.I.mdn_like(),
       Themes.I.midnight(),
+      Themes.I.monokai(),
       Themes.I.neat(),
+      Themes.I.neo(),
       Themes.I.night(),
+      Themes.I.paraiso_dark(),
+      Themes.I.paraiso_light(),
+      Themes.I.pastel_on_dark(),
+      Themes.I.railscasts(),
+      Themes.I.rubyblue(),
+      Themes.I.seti(),
+      Themes.I.solarized(),
+      Themes.I.the_matrix(),
+      Themes.I.tomorrow_night_bright(),
+      Themes.I.tomorrow_night_eighties(),
+      Themes.I.ttcn(),
       Themes.I.twilight(),
+      Themes.I.vibrant_ink(),
+      Themes.I.xq_dark(),
+      Themes.I.xq_light(),
+      Themes.I.yeti(),
+      Themes.I.zenburn(),
   };
 
   private static final EnumSet<Theme> loaded = EnumSet.of(Theme.DEFAULT);
diff --git a/gerrit-gwtui/src/main/java/net/codemirror/theme/Themes.java b/gerrit-gwtui/src/main/java/net/codemirror/theme/Themes.java
index 3a66480..80304a3 100644
--- a/gerrit-gwtui/src/main/java/net/codemirror/theme/Themes.java
+++ b/gerrit-gwtui/src/main/java/net/codemirror/theme/Themes.java
@@ -21,12 +21,50 @@
 public interface Themes extends ClientBundle {
   Themes I = GWT.create(Themes.class);
 
+  @Source("3024-day.css") ExternalTextResource day_3024();
+  @Source("3024-night.css") ExternalTextResource night_3024();
+  @Source("abcdef.css") ExternalTextResource abcdef();
+  @Source("ambiance.css") ExternalTextResource ambiance();
+  @Source("base16-dark.css") ExternalTextResource base16_dark();
+  @Source("base16-light.css") ExternalTextResource base16_light();
+  @Source("bespin.css") ExternalTextResource bespin();
+  @Source("blackboard.css") ExternalTextResource blackboard();
+  @Source("cobalt.css") ExternalTextResource cobalt();
+  @Source("colorforth.css") ExternalTextResource colorforth();
+  @Source("dracula.css") ExternalTextResource dracula();
   @Source("eclipse.css") ExternalTextResource eclipse();
   @Source("elegant.css") ExternalTextResource elegant();
+  @Source("erlang-dark.css") ExternalTextResource erlang_dark();
+  @Source("hopscotch.css") ExternalTextResource hopscotch();
+  @Source("icecoder.css") ExternalTextResource icecoder();
+  @Source("isotope.css") ExternalTextResource isotope();
+  @Source("lesser-dark.css") ExternalTextResource lesser_dark();
+  @Source("liquibyte.css") ExternalTextResource liquibyte();
+  @Source("material.css") ExternalTextResource material();
+  @Source("mbo.css") ExternalTextResource mbo();
+  @Source("mdn-like.css") ExternalTextResource mdn_like();
   @Source("midnight.css") ExternalTextResource midnight();
+  @Source("monokai.css") ExternalTextResource monokai();
   @Source("neat.css") ExternalTextResource neat();
+  @Source("neo.css") ExternalTextResource neo();
   @Source("night.css") ExternalTextResource night();
+  @Source("paraiso-dark.css") ExternalTextResource paraiso_dark();
+  @Source("paraiso-light.css") ExternalTextResource paraiso_light();
+  @Source("pastel-on-dark.css") ExternalTextResource pastel_on_dark();
+  @Source("railscasts.css") ExternalTextResource railscasts();
+  @Source("rubyblue.css") ExternalTextResource rubyblue();
+  @Source("seti.css") ExternalTextResource seti();
+  @Source("solarized.css") ExternalTextResource solarized();
+  @Source("the-matrix.css") ExternalTextResource the_matrix();
+  @Source("tomorrow-night-bright.css") ExternalTextResource tomorrow_night_bright();
+  @Source("tomorrow-night-eighties.css") ExternalTextResource tomorrow_night_eighties();
+  @Source("ttcn.css") ExternalTextResource ttcn();
   @Source("twilight.css") ExternalTextResource twilight();
+  @Source("vibrant-ink.css") ExternalTextResource vibrant_ink();
+  @Source("xq-dark.css") ExternalTextResource xq_dark();
+  @Source("xq-light.css") ExternalTextResource xq_light();
+  @Source("yeti.css") ExternalTextResource yeti();
+  @Source("zenburn.css") ExternalTextResource zenburn();
 
   // When adding a resource, update:
   // - static initializer in ThemeLoader
diff --git a/lib/codemirror/cm.defs b/lib/codemirror/cm.defs
index 969a29ce..29f1c77 100644
--- a/lib/codemirror/cm.defs
+++ b/lib/codemirror/cm.defs
@@ -36,12 +36,50 @@
 # 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,