Dart: Fix conversion of identifiers to lowerCamelCase.

Before we'd get e.g. IPV4 -> ipV4 because '4' was treated as lower-case.
After this change we'll get IPV4 -> ipv4 because digits are instead
treated as upper-case for the purposes of terminating a string of
lower-case characters.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/1529423002 .
diff --git a/examples/dart/netcat/lib/main.dart b/examples/dart/netcat/lib/main.dart
index 2f0e88d..5c61810 100644
--- a/examples/dart/netcat/lib/main.dart
+++ b/examples/dart/netcat/lib/main.dart
@@ -25,7 +25,7 @@
 
 NetAddress makeIPv4NetAddress(List<int> addr, int port) {
   var rv = new NetAddress();
-  rv.family = NetAddressFamily.ipV4;
+  rv.family = NetAddressFamily.ipv4;
   rv.ipv4 = new NetAddressIPv4();
   rv.ipv4.addr = new List<int>.from(addr);
   rv.ipv4.port = port;
diff --git a/mojo/dart/embedder/io/internet_address_patch.dart b/mojo/dart/embedder/io/internet_address_patch.dart
index 527bb28..3723bbc 100644
--- a/mojo/dart/embedder/io/internet_address_patch.dart
+++ b/mojo/dart/embedder/io/internet_address_patch.dart
@@ -188,9 +188,9 @@
     return NetAddressFamily.unspecified;
   }
   if (type == InternetAddressType.IP_V4) {
-    return NetAddressFamily.ipV4;
+    return NetAddressFamily.ipv4;
   } else if (type == InternetAddressType.IP_V6) {
-    return NetAddressFamily.ipV6;
+    return NetAddressFamily.ipv6;
   }
   return NetAddressFamily.unspecified;
 }
diff --git a/mojo/dart/embedder/io/mojo_patch.dart b/mojo/dart/embedder/io/mojo_patch.dart
index 3d2014f..694a687 100644
--- a/mojo/dart/embedder/io/mojo_patch.dart
+++ b/mojo/dart/embedder/io/mojo_patch.dart
@@ -114,9 +114,9 @@
       return null;
     }
     var address;
-    if (netAddress.family == NetAddressFamily.ipV4) {
+    if (netAddress.family == NetAddressFamily.ipv4) {
       address = netAddress.ipv4.addr;
-    } else if (netAddress.family == NetAddressFamily.ipV6) {
+    } else if (netAddress.family == NetAddressFamily.ipv6) {
       address = netAddress.ipv6.addr;
     } else {
       return null;
@@ -130,9 +130,9 @@
     if (netAddress == null) {
       return null;
     }
-    if (netAddress.family == NetAddressFamily.ipV4) {
+    if (netAddress.family == NetAddressFamily.ipv4) {
       return netAddress.ipv4.port;
-    } else if (netAddress.family == NetAddressFamily.ipV6) {
+    } else if (netAddress.family == NetAddressFamily.ipv6) {
       return netAddress.ipv6.port;
     } else {
       return null;
@@ -148,7 +148,7 @@
     var netAddress = new NetAddress();
     var rawAddress = internetAddress.rawAddress;
     if (rawAddress.length == 4) {
-      netAddress.family = NetAddressFamily.ipV4;
+      netAddress.family = NetAddressFamily.ipv4;
       netAddress.ipv4 = new NetAddressIPv4();
       netAddress.ipv4.addr = new List.from(rawAddress, growable: false);
       if (port != null) {
@@ -156,7 +156,7 @@
       }
     } else {
       assert(rawAddress.length == 16);
-      netAddress.family = NetAddressFamily.ipV6;
+      netAddress.family = NetAddressFamily.ipv6;
       netAddress.ipv6 = new NetAddressIPv6();
       netAddress.ipv6.addr = new List.from(rawAddress, growable: false);
       if (port != null) {
@@ -172,7 +172,7 @@
   /// Return a [NetAddress] for localhost:port.
   static NetAddress _localhostIpv4([int port = 0]) {
     var addr = new NetAddress();
-    addr.family = NetAddressFamily.ipV4;
+    addr.family = NetAddressFamily.ipv4;
     addr.ipv4 = new NetAddressIPv4();
     addr.ipv4.addr = [127, 0, 0, 1];
     addr.ipv4.port = port;
@@ -182,7 +182,7 @@
   /// Return a [NetAddress] for localhost:port.
   static NetAddress _localHostIpv6([int port = 0]) {
     var addr = new NetAddress();
-    addr.family = NetAddressFamily.ipV6;
+    addr.family = NetAddressFamily.ipv6;
     addr.ipv6 = new NetAddressIPv6();
     addr.ipv6.addr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1];
     addr.ipv6.port = port;
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart
index 78baba9..d2b24a2 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart
@@ -302,6 +302,119 @@
   int toJson() => mojoEnumValue;
 }
 
+class CamelCaseTestEnum extends bindings.MojoEnum {
+  static const CamelCaseTestEnum boolThing = const CamelCaseTestEnum._(0);
+  static const CamelCaseTestEnum doubleThing = const CamelCaseTestEnum._(1);
+  static const CamelCaseTestEnum floatThing = const CamelCaseTestEnum._(2);
+  static const CamelCaseTestEnum int8Thing = const CamelCaseTestEnum._(3);
+  static const CamelCaseTestEnum int16Thing = const CamelCaseTestEnum._(4);
+  static const CamelCaseTestEnum int32Th1Ng = const CamelCaseTestEnum._(5);
+  static const CamelCaseTestEnum int64Th1ng = const CamelCaseTestEnum._(6);
+  static const CamelCaseTestEnum uint8TH1ng = const CamelCaseTestEnum._(7);
+  static const CamelCaseTestEnum uint16tH1Ng = const CamelCaseTestEnum._(8);
+  static const CamelCaseTestEnum uint32Th1ng = const CamelCaseTestEnum._(9);
+  static const CamelCaseTestEnum uint64Th1Ng = const CamelCaseTestEnum._(10);
+
+  const CamelCaseTestEnum._(int v) : super(v);
+
+  static const Map<String, CamelCaseTestEnum> valuesMap = const {
+    "boolThing": boolThing,
+    "doubleThing": doubleThing,
+    "floatThing": floatThing,
+    "int8Thing": int8Thing,
+    "int16Thing": int16Thing,
+    "int32Th1Ng": int32Th1Ng,
+    "int64Th1ng": int64Th1ng,
+    "uint8TH1ng": uint8TH1ng,
+    "uint16tH1Ng": uint16tH1Ng,
+    "uint32Th1ng": uint32Th1ng,
+    "uint64Th1Ng": uint64Th1Ng,
+  };
+  static const List<CamelCaseTestEnum> values = const [
+    boolThing,
+    doubleThing,
+    floatThing,
+    int8Thing,
+    int16Thing,
+    int32Th1Ng,
+    int64Th1ng,
+    uint8TH1ng,
+    uint16tH1Ng,
+    uint32Th1ng,
+    uint64Th1Ng,
+  ];
+
+  static CamelCaseTestEnum valueOf(String name) => valuesMap[name];
+
+  factory CamelCaseTestEnum(int v) {
+    switch (v) {
+      case 0:
+        return boolThing;
+      case 1:
+        return doubleThing;
+      case 2:
+        return floatThing;
+      case 3:
+        return int8Thing;
+      case 4:
+        return int16Thing;
+      case 5:
+        return int32Th1Ng;
+      case 6:
+        return int64Th1ng;
+      case 7:
+        return uint8TH1ng;
+      case 8:
+        return uint16tH1Ng;
+      case 9:
+        return uint32Th1ng;
+      case 10:
+        return uint64Th1Ng;
+      default:
+        return null;
+    }
+  }
+
+  static CamelCaseTestEnum decode(bindings.Decoder decoder0, int offset) {
+    int v = decoder0.decodeUint32(offset);
+    CamelCaseTestEnum result = new CamelCaseTestEnum(v);
+    if (result == null) {
+      throw new bindings.MojoCodecError(
+          'Bad value $v for enum CamelCaseTestEnum.');
+    }
+    return result;
+  }
+
+  String toString() {
+    switch(this) {
+      case boolThing:
+        return 'CamelCaseTestEnum.boolThing';
+      case doubleThing:
+        return 'CamelCaseTestEnum.doubleThing';
+      case floatThing:
+        return 'CamelCaseTestEnum.floatThing';
+      case int8Thing:
+        return 'CamelCaseTestEnum.int8Thing';
+      case int16Thing:
+        return 'CamelCaseTestEnum.int16Thing';
+      case int32Th1Ng:
+        return 'CamelCaseTestEnum.int32Th1Ng';
+      case int64Th1ng:
+        return 'CamelCaseTestEnum.int64Th1ng';
+      case uint8TH1ng:
+        return 'CamelCaseTestEnum.uint8TH1ng';
+      case uint16tH1Ng:
+        return 'CamelCaseTestEnum.uint16tH1Ng';
+      case uint32Th1ng:
+        return 'CamelCaseTestEnum.uint32Th1ng';
+      case uint64Th1Ng:
+        return 'CamelCaseTestEnum.uint64Th1Ng';
+    }
+  }
+
+  int toJson() => mojoEnumValue;
+}
+
 
 
 class Edge extends bindings.Struct {
diff --git a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
index d262e42..426c61e 100644
--- a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
+++ b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
@@ -13,14 +13,14 @@
   static const SimpleType bool = const SimpleType._(0);
   static const SimpleType double = const SimpleType._(1);
   static const SimpleType float = const SimpleType._(2);
-  static const SimpleType inT8 = const SimpleType._(3);
-  static const SimpleType inT16 = const SimpleType._(4);
-  static const SimpleType inT32 = const SimpleType._(5);
-  static const SimpleType inT64 = const SimpleType._(6);
-  static const SimpleType uinT8 = const SimpleType._(7);
-  static const SimpleType uinT16 = const SimpleType._(8);
-  static const SimpleType uinT32 = const SimpleType._(9);
-  static const SimpleType uinT64 = const SimpleType._(10);
+  static const SimpleType int8 = const SimpleType._(3);
+  static const SimpleType int16 = const SimpleType._(4);
+  static const SimpleType int32 = const SimpleType._(5);
+  static const SimpleType int64 = const SimpleType._(6);
+  static const SimpleType uint8 = const SimpleType._(7);
+  static const SimpleType uint16 = const SimpleType._(8);
+  static const SimpleType uint32 = const SimpleType._(9);
+  static const SimpleType uint64 = const SimpleType._(10);
 
   const SimpleType._(int v) : super(v);
 
@@ -28,27 +28,27 @@
     "bool": bool,
     "double": double,
     "float": float,
-    "inT8": inT8,
-    "inT16": inT16,
-    "inT32": inT32,
-    "inT64": inT64,
-    "uinT8": uinT8,
-    "uinT16": uinT16,
-    "uinT32": uinT32,
-    "uinT64": uinT64,
+    "int8": int8,
+    "int16": int16,
+    "int32": int32,
+    "int64": int64,
+    "uint8": uint8,
+    "uint16": uint16,
+    "uint32": uint32,
+    "uint64": uint64,
   };
   static const List<SimpleType> values = const [
     bool,
     double,
     float,
-    inT8,
-    inT16,
-    inT32,
-    inT64,
-    uinT8,
-    uinT16,
-    uinT32,
-    uinT64,
+    int8,
+    int16,
+    int32,
+    int64,
+    uint8,
+    uint16,
+    uint32,
+    uint64,
   ];
 
   static SimpleType valueOf(String name) => valuesMap[name];
@@ -62,21 +62,21 @@
       case 2:
         return float;
       case 3:
-        return inT8;
+        return int8;
       case 4:
-        return inT16;
+        return int16;
       case 5:
-        return inT32;
+        return int32;
       case 6:
-        return inT64;
+        return int64;
       case 7:
-        return uinT8;
+        return uint8;
       case 8:
-        return uinT16;
+        return uint16;
       case 9:
-        return uinT32;
+        return uint32;
       case 10:
-        return uinT64;
+        return uint64;
       default:
         return null;
     }
@@ -100,22 +100,22 @@
         return 'SimpleType.double';
       case float:
         return 'SimpleType.float';
-      case inT8:
-        return 'SimpleType.inT8';
-      case inT16:
-        return 'SimpleType.inT16';
-      case inT32:
-        return 'SimpleType.inT32';
-      case inT64:
-        return 'SimpleType.inT64';
-      case uinT8:
-        return 'SimpleType.uinT8';
-      case uinT16:
-        return 'SimpleType.uinT16';
-      case uinT32:
-        return 'SimpleType.uinT32';
-      case uinT64:
-        return 'SimpleType.uinT64';
+      case int8:
+        return 'SimpleType.int8';
+      case int16:
+        return 'SimpleType.int16';
+      case int32:
+        return 'SimpleType.int32';
+      case int64:
+        return 'SimpleType.int64';
+      case uint8:
+        return 'SimpleType.uint8';
+      case uint16:
+        return 'SimpleType.uint16';
+      case uint32:
+        return 'SimpleType.uint32';
+      case uint64:
+        return 'SimpleType.uint64';
     }
   }
 
diff --git a/mojo/dart/packages/mojo_services/lib/mojo/files/ioctl_terminal.mojom.dart b/mojo/dart/packages/mojo_services/lib/mojo/files/ioctl_terminal.mojom.dart
index 9ce7ca2..e751281 100644
--- a/mojo/dart/packages/mojo_services/lib/mojo/files/ioctl_terminal.mojom.dart
+++ b/mojo/dart/packages/mojo_services/lib/mojo/files/ioctl_terminal.mojom.dart
@@ -37,7 +37,7 @@
 const int kIoctlTerminalTermiosCtrlCharVdiscardIndex = 30;
 const int kIoctlTerminalTermiosCtrlCharVweraseIndex = 31;
 const int kIoctlTerminalTermiosCtrlCharVlnextIndex = 32;
-const int kIoctlTerminalTermiosCtrlCharVeoL2Index = 33;
+const int kIoctlTerminalTermiosCtrlCharVeol2Index = 33;
 const int kIoctlTerminalTermiosIFlagIgnbrk = 0x0001;
 const int kIoctlTerminalTermiosIFlagBrkint = 0x0002;
 const int kIoctlTerminalTermiosIFlagIgnpar = 0x0004;
@@ -52,7 +52,7 @@
 const int kIoctlTerminalTermiosIFlagIxany = 0x0800;
 const int kIoctlTerminalTermiosIFlagIxoff = 0x1000;
 const int kIoctlTerminalTermiosIFlagImaxbel = 0x2000;
-const int kIoctlTerminalTermiosIFlagIutF8 = 0x4000;
+const int kIoctlTerminalTermiosIFlagIutf8 = 0x4000;
 const int kIoctlTerminalTermiosOFlagOpost = 0x0001;
 const int kIoctlTerminalTermiosOFlagOlcuc = 0x0002;
 const int kIoctlTerminalTermiosOFlagOnlcr = 0x0004;
@@ -63,31 +63,31 @@
 const int kIoctlTerminalTermiosOFlagOfdel = 0x0080;
 const int kIoctlTerminalTermiosOFlagNldly = 0x0100;
 const int kIoctlTerminalTermiosOFlagNL0 = 0x0000;
-const int kIoctlTerminalTermiosOFlagNL1 = 0x0100;
+const int kIoctlTerminalTermiosOFlagNl1 = 0x0100;
 const int kIoctlTerminalTermiosOFlagCrdly = 0x0600;
 const int kIoctlTerminalTermiosOFlagCR0 = 0x0000;
-const int kIoctlTerminalTermiosOFlagCR1 = 0x0200;
-const int kIoctlTerminalTermiosOFlagCR2 = 0x0400;
-const int kIoctlTerminalTermiosOFlagCR3 = 0x0600;
+const int kIoctlTerminalTermiosOFlagCr1 = 0x0200;
+const int kIoctlTerminalTermiosOFlagCr2 = 0x0400;
+const int kIoctlTerminalTermiosOFlagCr3 = 0x0600;
 const int kIoctlTerminalTermiosOFlagTabdly = 0x1800;
 const int kIoctlTerminalTermiosOFlagTaB0 = 0x0000;
-const int kIoctlTerminalTermiosOFlagTaB1 = 0x0800;
-const int kIoctlTerminalTermiosOFlagTaB2 = 0x1000;
-const int kIoctlTerminalTermiosOFlagTaB3 = 0x1800;
+const int kIoctlTerminalTermiosOFlagTab1 = 0x0800;
+const int kIoctlTerminalTermiosOFlagTab2 = 0x1000;
+const int kIoctlTerminalTermiosOFlagTab3 = 0x1800;
 const int kIoctlTerminalTermiosOFlagBsdly = 0x2000;
 const int kIoctlTerminalTermiosOFlagBS0 = 0x0000;
-const int kIoctlTerminalTermiosOFlagBS1 = 0x2000;
+const int kIoctlTerminalTermiosOFlagBs1 = 0x2000;
 const int kIoctlTerminalTermiosOFlagVtdly = 0x4000;
 const int kIoctlTerminalTermiosOFlagVT0 = 0x0000;
-const int kIoctlTerminalTermiosOFlagVT1 = 0x4000;
+const int kIoctlTerminalTermiosOFlagVt1 = 0x4000;
 const int kIoctlTerminalTermiosOFlagFfdly = 0x8000;
 const int kIoctlTerminalTermiosOFlagFF0 = 0x0000;
-const int kIoctlTerminalTermiosOFlagFF1 = 0x8000;
+const int kIoctlTerminalTermiosOFlagFf1 = 0x8000;
 const int kIoctlTerminalTermiosCFlagCsize = 0x0003;
-const int kIoctlTerminalTermiosCFlagCS5 = 0x0000;
-const int kIoctlTerminalTermiosCFlagCS6 = 0x0001;
-const int kIoctlTerminalTermiosCFlagCS7 = 0x0002;
-const int kIoctlTerminalTermiosCFlagCS8 = 0x0003;
+const int kIoctlTerminalTermiosCFlagCs5 = 0x0000;
+const int kIoctlTerminalTermiosCFlagCs6 = 0x0001;
+const int kIoctlTerminalTermiosCFlagCs7 = 0x0002;
+const int kIoctlTerminalTermiosCFlagCs8 = 0x0003;
 const int kIoctlTerminalTermiosCFlagCstopb = 0x0004;
 const int kIoctlTerminalTermiosCFlagCread = 0x0008;
 const int kIoctlTerminalTermiosCFlagParenb = 0x0010;
diff --git a/mojo/dart/packages/mojo_services/lib/mojo/gpu.mojom.dart b/mojo/dart/packages/mojo_services/lib/mojo/gpu.mojom.dart
index d46aa59..ac2dd99 100644
--- a/mojo/dart/packages/mojo_services/lib/mojo/gpu.mojom.dart
+++ b/mojo/dart/packages/mojo_services/lib/mojo/gpu.mojom.dart
@@ -12,15 +12,15 @@
 
 
 
-class _GpuCreateOffscreenGleS2ContextParams extends bindings.Struct {
+class _GpuCreateOffscreenGles2ContextParams extends bindings.Struct {
   static const List<bindings.StructDataHeader> kVersions = const [
     const bindings.StructDataHeader(16, 0)
   ];
   Object gles2Client = null;
 
-  _GpuCreateOffscreenGleS2ContextParams() : super(kVersions.last.size);
+  _GpuCreateOffscreenGles2ContextParams() : super(kVersions.last.size);
 
-  static _GpuCreateOffscreenGleS2ContextParams deserialize(bindings.Message message) {
+  static _GpuCreateOffscreenGles2ContextParams deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
     if (decoder.excessHandles != null) {
@@ -29,11 +29,11 @@
     return result;
   }
 
-  static _GpuCreateOffscreenGleS2ContextParams decode(bindings.Decoder decoder0) {
+  static _GpuCreateOffscreenGles2ContextParams decode(bindings.Decoder decoder0) {
     if (decoder0 == null) {
       return null;
     }
-    _GpuCreateOffscreenGleS2ContextParams result = new _GpuCreateOffscreenGleS2ContextParams();
+    _GpuCreateOffscreenGles2ContextParams result = new _GpuCreateOffscreenGles2ContextParams();
 
     var mainDataHeader = decoder0.decodeStructDataHeader();
     if (mainDataHeader.version <= kVersions.last.version) {
@@ -67,7 +67,7 @@
   }
 
   String toString() {
-    return "_GpuCreateOffscreenGleS2ContextParams("
+    return "_GpuCreateOffscreenGles2ContextParams("
            "gles2Client: $gles2Client" ")";
   }
 
@@ -77,11 +77,11 @@
   }
 }
 
-const int _Gpu_createOffscreenGleS2ContextName = 0;
+const int _Gpu_createOffscreenGles2ContextName = 0;
 
 abstract class Gpu {
   static const String serviceName = "mojo::Gpu";
-  void createOffscreenGleS2Context(Object gles2Client);
+  void createOffscreenGles2Context(Object gles2Client);
 }
 
 
@@ -120,14 +120,14 @@
   _GpuProxyImpl _proxyImpl;
 
   _GpuProxyCalls(this._proxyImpl);
-    void createOffscreenGleS2Context(Object gles2Client) {
+    void createOffscreenGles2Context(Object gles2Client) {
       if (!_proxyImpl.isBound) {
         _proxyImpl.proxyError("The Proxy is closed.");
         return;
       }
-      var params = new _GpuCreateOffscreenGleS2ContextParams();
+      var params = new _GpuCreateOffscreenGles2ContextParams();
       params.gles2Client = gles2Client;
-      _proxyImpl.sendMessage(params, _Gpu_createOffscreenGleS2ContextName);
+      _proxyImpl.sendMessage(params, _Gpu_createOffscreenGles2ContextName);
     }
 }
 
@@ -219,10 +219,10 @@
     }
     assert(_impl != null);
     switch (message.header.type) {
-      case _Gpu_createOffscreenGleS2ContextName:
-        var params = _GpuCreateOffscreenGleS2ContextParams.deserialize(
+      case _Gpu_createOffscreenGles2ContextName:
+        var params = _GpuCreateOffscreenGles2ContextParams.deserialize(
             message.payload);
-        _impl.createOffscreenGleS2Context(params.gles2Client);
+        _impl.createOffscreenGles2Context(params.gles2Client);
         break;
       default:
         throw new bindings.MojoCodecError("Unexpected message name");
diff --git a/mojo/dart/packages/mojo_services/lib/mojo/input_event_constants.mojom.dart b/mojo/dart/packages/mojo_services/lib/mojo/input_event_constants.mojom.dart
index 51b1a67..3d8d9eb 100644
--- a/mojo/dart/packages/mojo_services/lib/mojo/input_event_constants.mojom.dart
+++ b/mojo/dart/packages/mojo_services/lib/mojo/input_event_constants.mojom.dart
@@ -107,7 +107,7 @@
   static const EventFlags extended = const EventFlags._(256);
   static const EventFlags isSynthesized = const EventFlags._(512);
   static const EventFlags altgrDown = const EventFlags._(1024);
-  static const EventFlags moD3Down = const EventFlags._(2048);
+  static const EventFlags mod3Down = const EventFlags._(2048);
 
   const EventFlags._(int v) : super(v);
 
@@ -124,7 +124,7 @@
     "extended": extended,
     "isSynthesized": isSynthesized,
     "altgrDown": altgrDown,
-    "moD3Down": moD3Down,
+    "mod3Down": mod3Down,
   };
   static const List<EventFlags> values = const [
     none,
@@ -139,7 +139,7 @@
     extended,
     isSynthesized,
     altgrDown,
-    moD3Down,
+    mod3Down,
   ];
 
   static EventFlags valueOf(String name) => valuesMap[name];
@@ -171,7 +171,7 @@
       case 1024:
         return altgrDown;
       case 2048:
-        return moD3Down;
+        return mod3Down;
       default:
         return null;
     }
@@ -213,8 +213,8 @@
         return 'EventFlags.isSynthesized';
       case altgrDown:
         return 'EventFlags.altgrDown';
-      case moD3Down:
-        return 'EventFlags.moD3Down';
+      case mod3Down:
+        return 'EventFlags.mod3Down';
     }
   }
 
diff --git a/mojo/dart/packages/mojo_services/lib/mojo/input_key_codes.mojom.dart b/mojo/dart/packages/mojo_services/lib/mojo/input_key_codes.mojom.dart
index 0140ecc..b77744f 100644
--- a/mojo/dart/packages/mojo_services/lib/mojo/input_key_codes.mojom.dart
+++ b/mojo/dart/packages/mojo_services/lib/mojo/input_key_codes.mojom.dart
@@ -88,15 +88,15 @@
   static const KeyboardCode apps = const KeyboardCode._(93);
   static const KeyboardCode sleep = const KeyboardCode._(95);
   static const KeyboardCode numpaD0 = const KeyboardCode._(96);
-  static const KeyboardCode numpaD1 = const KeyboardCode._(97);
-  static const KeyboardCode numpaD2 = const KeyboardCode._(98);
-  static const KeyboardCode numpaD3 = const KeyboardCode._(99);
-  static const KeyboardCode numpaD4 = const KeyboardCode._(100);
-  static const KeyboardCode numpaD5 = const KeyboardCode._(101);
-  static const KeyboardCode numpaD6 = const KeyboardCode._(102);
-  static const KeyboardCode numpaD7 = const KeyboardCode._(103);
-  static const KeyboardCode numpaD8 = const KeyboardCode._(104);
-  static const KeyboardCode numpaD9 = const KeyboardCode._(105);
+  static const KeyboardCode numpad1 = const KeyboardCode._(97);
+  static const KeyboardCode numpad2 = const KeyboardCode._(98);
+  static const KeyboardCode numpad3 = const KeyboardCode._(99);
+  static const KeyboardCode numpad4 = const KeyboardCode._(100);
+  static const KeyboardCode numpad5 = const KeyboardCode._(101);
+  static const KeyboardCode numpad6 = const KeyboardCode._(102);
+  static const KeyboardCode numpad7 = const KeyboardCode._(103);
+  static const KeyboardCode numpad8 = const KeyboardCode._(104);
+  static const KeyboardCode numpad9 = const KeyboardCode._(105);
   static const KeyboardCode multiply = const KeyboardCode._(106);
   static const KeyboardCode add = const KeyboardCode._(107);
   static const KeyboardCode separator = const KeyboardCode._(108);
@@ -151,8 +151,8 @@
   static const KeyboardCode mediaPlayPause = const KeyboardCode._(179);
   static const KeyboardCode mediaLaunchMail = const KeyboardCode._(180);
   static const KeyboardCode mediaLaunchMediaSelect = const KeyboardCode._(181);
-  static const KeyboardCode mediaLaunchApP1 = const KeyboardCode._(182);
-  static const KeyboardCode mediaLaunchApP2 = const KeyboardCode._(183);
+  static const KeyboardCode mediaLaunchApp1 = const KeyboardCode._(182);
+  static const KeyboardCode mediaLaunchApp2 = const KeyboardCode._(183);
   static const KeyboardCode oem1 = const KeyboardCode._(186);
   static const KeyboardCode oemPlus = const KeyboardCode._(187);
   static const KeyboardCode oemComma = const KeyboardCode._(188);
@@ -177,7 +177,7 @@
   static const KeyboardCode play = const KeyboardCode._(250);
   static const KeyboardCode zoom = const KeyboardCode._(251);
   static const KeyboardCode noname = const KeyboardCode._(252);
-  static const KeyboardCode pA1 = const KeyboardCode._(253);
+  static const KeyboardCode pa1 = const KeyboardCode._(253);
   static const KeyboardCode oemClear = const KeyboardCode._(254);
   static const KeyboardCode unknown = const KeyboardCode._(0);
   static const KeyboardCode altgr = const KeyboardCode._(225);
@@ -263,15 +263,15 @@
     "apps": apps,
     "sleep": sleep,
     "numpaD0": numpaD0,
-    "numpaD1": numpaD1,
-    "numpaD2": numpaD2,
-    "numpaD3": numpaD3,
-    "numpaD4": numpaD4,
-    "numpaD5": numpaD5,
-    "numpaD6": numpaD6,
-    "numpaD7": numpaD7,
-    "numpaD8": numpaD8,
-    "numpaD9": numpaD9,
+    "numpad1": numpad1,
+    "numpad2": numpad2,
+    "numpad3": numpad3,
+    "numpad4": numpad4,
+    "numpad5": numpad5,
+    "numpad6": numpad6,
+    "numpad7": numpad7,
+    "numpad8": numpad8,
+    "numpad9": numpad9,
     "multiply": multiply,
     "add": add,
     "separator": separator,
@@ -326,8 +326,8 @@
     "mediaPlayPause": mediaPlayPause,
     "mediaLaunchMail": mediaLaunchMail,
     "mediaLaunchMediaSelect": mediaLaunchMediaSelect,
-    "mediaLaunchApP1": mediaLaunchApP1,
-    "mediaLaunchApP2": mediaLaunchApP2,
+    "mediaLaunchApp1": mediaLaunchApp1,
+    "mediaLaunchApp2": mediaLaunchApp2,
     "oem1": oem1,
     "oemPlus": oemPlus,
     "oemComma": oemComma,
@@ -352,7 +352,7 @@
     "play": play,
     "zoom": zoom,
     "noname": noname,
-    "pA1": pA1,
+    "pa1": pa1,
     "oemClear": oemClear,
     "unknown": unknown,
     "altgr": altgr,
@@ -436,15 +436,15 @@
     apps,
     sleep,
     numpaD0,
-    numpaD1,
-    numpaD2,
-    numpaD3,
-    numpaD4,
-    numpaD5,
-    numpaD6,
-    numpaD7,
-    numpaD8,
-    numpaD9,
+    numpad1,
+    numpad2,
+    numpad3,
+    numpad4,
+    numpad5,
+    numpad6,
+    numpad7,
+    numpad8,
+    numpad9,
     multiply,
     add,
     separator,
@@ -499,8 +499,8 @@
     mediaPlayPause,
     mediaLaunchMail,
     mediaLaunchMediaSelect,
-    mediaLaunchApP1,
-    mediaLaunchApP2,
+    mediaLaunchApp1,
+    mediaLaunchApp2,
     oem1,
     oemPlus,
     oemComma,
@@ -525,7 +525,7 @@
     play,
     zoom,
     noname,
-    pA1,
+    pa1,
     oemClear,
     unknown,
     altgr,
@@ -692,23 +692,23 @@
       case 96:
         return numpaD0;
       case 97:
-        return numpaD1;
+        return numpad1;
       case 98:
-        return numpaD2;
+        return numpad2;
       case 99:
-        return numpaD3;
+        return numpad3;
       case 100:
-        return numpaD4;
+        return numpad4;
       case 101:
-        return numpaD5;
+        return numpad5;
       case 102:
-        return numpaD6;
+        return numpad6;
       case 103:
-        return numpaD7;
+        return numpad7;
       case 104:
-        return numpaD8;
+        return numpad8;
       case 105:
-        return numpaD9;
+        return numpad9;
       case 106:
         return multiply;
       case 107:
@@ -818,9 +818,9 @@
       case 181:
         return mediaLaunchMediaSelect;
       case 182:
-        return mediaLaunchApP1;
+        return mediaLaunchApp1;
       case 183:
-        return mediaLaunchApP2;
+        return mediaLaunchApp2;
       case 186:
         return oem1;
       case 187:
@@ -870,7 +870,7 @@
       case 252:
         return noname;
       case 253:
-        return pA1;
+        return pa1;
       case 254:
         return oemClear;
       case 0:
@@ -1050,24 +1050,24 @@
         return 'KeyboardCode.sleep';
       case numpaD0:
         return 'KeyboardCode.numpaD0';
-      case numpaD1:
-        return 'KeyboardCode.numpaD1';
-      case numpaD2:
-        return 'KeyboardCode.numpaD2';
-      case numpaD3:
-        return 'KeyboardCode.numpaD3';
-      case numpaD4:
-        return 'KeyboardCode.numpaD4';
-      case numpaD5:
-        return 'KeyboardCode.numpaD5';
-      case numpaD6:
-        return 'KeyboardCode.numpaD6';
-      case numpaD7:
-        return 'KeyboardCode.numpaD7';
-      case numpaD8:
-        return 'KeyboardCode.numpaD8';
-      case numpaD9:
-        return 'KeyboardCode.numpaD9';
+      case numpad1:
+        return 'KeyboardCode.numpad1';
+      case numpad2:
+        return 'KeyboardCode.numpad2';
+      case numpad3:
+        return 'KeyboardCode.numpad3';
+      case numpad4:
+        return 'KeyboardCode.numpad4';
+      case numpad5:
+        return 'KeyboardCode.numpad5';
+      case numpad6:
+        return 'KeyboardCode.numpad6';
+      case numpad7:
+        return 'KeyboardCode.numpad7';
+      case numpad8:
+        return 'KeyboardCode.numpad8';
+      case numpad9:
+        return 'KeyboardCode.numpad9';
       case multiply:
         return 'KeyboardCode.multiply';
       case add:
@@ -1176,10 +1176,10 @@
         return 'KeyboardCode.mediaLaunchMail';
       case mediaLaunchMediaSelect:
         return 'KeyboardCode.mediaLaunchMediaSelect';
-      case mediaLaunchApP1:
-        return 'KeyboardCode.mediaLaunchApP1';
-      case mediaLaunchApP2:
-        return 'KeyboardCode.mediaLaunchApP2';
+      case mediaLaunchApp1:
+        return 'KeyboardCode.mediaLaunchApp1';
+      case mediaLaunchApp2:
+        return 'KeyboardCode.mediaLaunchApp2';
       case oem1:
         return 'KeyboardCode.oem1';
       case oemPlus:
@@ -1228,8 +1228,8 @@
         return 'KeyboardCode.zoom';
       case noname:
         return 'KeyboardCode.noname';
-      case pA1:
-        return 'KeyboardCode.pA1';
+      case pa1:
+        return 'KeyboardCode.pa1';
       case oemClear:
         return 'KeyboardCode.oemClear';
       case unknown:
diff --git a/mojo/dart/packages/mojo_services/lib/mojo/net_address.mojom.dart b/mojo/dart/packages/mojo_services/lib/mojo/net_address.mojom.dart
index 30d87be..d974898 100644
--- a/mojo/dart/packages/mojo_services/lib/mojo/net_address.mojom.dart
+++ b/mojo/dart/packages/mojo_services/lib/mojo/net_address.mojom.dart
@@ -11,20 +11,20 @@
 
 class NetAddressFamily extends bindings.MojoEnum {
   static const NetAddressFamily unspecified = const NetAddressFamily._(0);
-  static const NetAddressFamily ipV4 = const NetAddressFamily._(1);
-  static const NetAddressFamily ipV6 = const NetAddressFamily._(2);
+  static const NetAddressFamily ipv4 = const NetAddressFamily._(1);
+  static const NetAddressFamily ipv6 = const NetAddressFamily._(2);
 
   const NetAddressFamily._(int v) : super(v);
 
   static const Map<String, NetAddressFamily> valuesMap = const {
     "unspecified": unspecified,
-    "ipV4": ipV4,
-    "ipV6": ipV6,
+    "ipv4": ipv4,
+    "ipv6": ipv6,
   };
   static const List<NetAddressFamily> values = const [
     unspecified,
-    ipV4,
-    ipV6,
+    ipv4,
+    ipv6,
   ];
 
   static NetAddressFamily valueOf(String name) => valuesMap[name];
@@ -34,9 +34,9 @@
       case 0:
         return unspecified;
       case 1:
-        return ipV4;
+        return ipv4;
       case 2:
-        return ipV6;
+        return ipv6;
       default:
         return null;
     }
@@ -56,10 +56,10 @@
     switch(this) {
       case unspecified:
         return 'NetAddressFamily.unspecified';
-      case ipV4:
-        return 'NetAddressFamily.ipV4';
-      case ipV6:
-        return 'NetAddressFamily.ipV6';
+      case ipv4:
+        return 'NetAddressFamily.ipv4';
+      case ipv6:
+        return 'NetAddressFamily.ipv6';
     }
   }
 
diff --git a/mojo/dart/packages/mojo_services/lib/mojo/surfaces.mojom.dart b/mojo/dart/packages/mojo_services/lib/mojo/surfaces.mojom.dart
index f94dcac..e332ade 100644
--- a/mojo/dart/packages/mojo_services/lib/mojo/surfaces.mojom.dart
+++ b/mojo/dart/packages/mojo_services/lib/mojo/surfaces.mojom.dart
@@ -19,7 +19,7 @@
   static const ResourceFormat alpha8 = const ResourceFormat._(3);
   static const ResourceFormat luminance8 = const ResourceFormat._(4);
   static const ResourceFormat rgb565 = const ResourceFormat._(5);
-  static const ResourceFormat etC1 = const ResourceFormat._(6);
+  static const ResourceFormat etc1 = const ResourceFormat._(6);
 
   const ResourceFormat._(int v) : super(v);
 
@@ -30,7 +30,7 @@
     "alpha8": alpha8,
     "luminance8": luminance8,
     "rgb565": rgb565,
-    "etC1": etC1,
+    "etc1": etc1,
   };
   static const List<ResourceFormat> values = const [
     rgba8888,
@@ -39,7 +39,7 @@
     alpha8,
     luminance8,
     rgb565,
-    etC1,
+    etc1,
   ];
 
   static ResourceFormat valueOf(String name) => valuesMap[name];
@@ -59,7 +59,7 @@
       case 5:
         return rgb565;
       case 6:
-        return etC1;
+        return etc1;
       default:
         return null;
     }
@@ -89,8 +89,8 @@
         return 'ResourceFormat.luminance8';
       case rgb565:
         return 'ResourceFormat.rgb565';
-      case etC1:
-        return 'ResourceFormat.etC1';
+      case etc1:
+        return 'ResourceFormat.etc1';
     }
   }
 
diff --git a/mojo/dart/test/bindings_generation_test.dart b/mojo/dart/test/bindings_generation_test.dart
index b1a0998..037cdf6 100644
--- a/mojo/dart/test/bindings_generation_test.dart
+++ b/mojo/dart/test/bindings_generation_test.dart
@@ -7,17 +7,20 @@
 import 'dart:typed_data';
 import 'dart:convert';
 
-import 'package:_mojo_for_test_only/expect.dart';
 import 'package:mojo/bindings.dart' as bindings;
 import 'package:mojo/core.dart' as core;
-import 'package:_mojo_for_test_only/sample/sample_interfaces.mojom.dart' as sample;
-import 'package:_mojo_for_test_only/mojo/test/test_structs.mojom.dart' as structs;
-import 'package:_mojo_for_test_only/mojo/test/test_unions.mojom.dart' as unions;
+import 'package:_mojo_for_test_only/expect.dart';
 import 'package:_mojo_for_test_only/mojo/test/rect.mojom.dart' as rect;
 import 'package:_mojo_for_test_only/mojo/test/serialization_test_structs.mojom.dart'
     as serialization;
+import 'package:_mojo_for_test_only/mojo/test/test_structs.mojom.dart'
+    as structs;
+import 'package:_mojo_for_test_only/mojo/test/test_unions.mojom.dart'
+    as unions;
 import 'package:_mojo_for_test_only/regression_tests/regression_tests.mojom.dart'
     as regression;
+import 'package:_mojo_for_test_only/sample/sample_interfaces.mojom.dart'
+    as sample;
 
 class ProviderImpl implements sample.Provider {
   sample.ProviderStub _stub;
@@ -371,6 +374,22 @@
   return c.future;
 }
 
+
+testCamelCase() {
+  var e = CamelCaseTestEnum.boolThing;
+  e = CamelCaseTestEnum.doubleThing;
+  e = CamelCaseTestEnum.floatThing;
+  e = CamelCaseTestEnum.int8Thing;
+  e = CamelCaseTestEnum.int16Thing;
+  e = CamelCaseTestEnum.int32Th1Ng;
+  e = CamelCaseTestEnum.int64Th1ng;
+  e = CamelCaseTestEnum.uint8TH1ng;
+  e = CamelCaseTestEnum.uint16tH1Ng;
+  e = CamelCaseTestEnum.uint32Th1ng;
+  e = CamelCaseTestEnum.uint64Th1Ng;
+}
+
+
 main() async {
   testSerializeStructs();
   testUnions();
@@ -380,4 +399,5 @@
   await runOnClosedTest();
   await testRegression551();
   await testServiceName();
+  testCamelCase();
 }
diff --git a/mojo/public/interfaces/bindings/tests/regression_tests.mojom b/mojo/public/interfaces/bindings/tests/regression_tests.mojom
index 0c3e946..f03f2e9 100644
--- a/mojo/public/interfaces/bindings/tests/regression_tests.mojom
+++ b/mojo/public/interfaces/bindings/tests/regression_tests.mojom
@@ -95,3 +95,17 @@
 interface ServiceName {
   serviceName() => (string serviceName);
 };
+
+enum CamelCaseTestEnum {
+  BOOL_THING,
+  DOUBLE_THING,
+  FLOAT_THING,
+  INT8_THING,
+  INT16THING,
+  INT32_TH1NG,
+  INT64_Th1ng,
+  UINT8T_h1ng,
+  UINT16t_h1NG,
+  UINT32_TH1ng,
+  UINT64_TH1NG
+};
diff --git a/mojo/public/tools/bindings/generators/mojom_dart_generator.py b/mojo/public/tools/bindings/generators/mojom_dart_generator.py
index 24ffbf3..c0cdcbc 100644
--- a/mojo/public/tools/bindings/generators/mojom_dart_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_dart_generator.py
@@ -226,10 +226,10 @@
 
 def NameToComponent(name):
   # insert '_' between anything and a Title name (e.g, HTTPEntry2FooBar ->
-  # HTTP_Entry2_FooBar)
-  name = re.sub('([^_])([A-Z][^A-Z_]+)', r'\1_\2', name)
+  # HTTP_Entry2_FooBar). Numbers terminate a string of lower-case characters.
+  name = re.sub('([^_])([A-Z][^A-Z1-9_]+)', r'\1_\2', name)
   # insert '_' between non upper and start of upper blocks (e.g.,
-  # HTTP_Entry2_FooBar -> HTTP_Entry2_Foo_Bar)
+  # HTTP_Entry2_FooBar -> HTTP_Entry2_Foo_Bar).
   name = re.sub('([^A-Z_])([A-Z])', r'\1_\2', name)
   return [x.lower() for x in name.split('_')]