Add std/cbor
diff --git a/script/print-json-token-debug-format.c b/script/print-json-token-debug-format.c
index a2a5277..7c306e8 100644
--- a/script/print-json-token-debug-format.c
+++ b/script/print-json-token-debug-format.c
@@ -82,6 +82,7 @@
 // code simply isn't compiled.
 #define WUFFS_CONFIG__MODULES
 #define WUFFS_CONFIG__MODULE__BASE
+#define WUFFS_CONFIG__MODULE__CBOR
 #define WUFFS_CONFIG__MODULE__JSON
 
 // If building this program in an environment that doesn't easily accommodate
@@ -91,8 +92,14 @@
 
 // Wuffs allows either statically or dynamically allocated work buffers. This
 // program exercises static allocation.
+#if WUFFS_CBOR__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE > \
+    WUFFS_JSON__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
+#define WORK_BUFFER_ARRAY_SIZE \
+  WUFFS_CBOR__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
+#else
 #define WORK_BUFFER_ARRAY_SIZE \
   WUFFS_JSON__DECODER_WORKBUF_LEN_MAX_INCL_WORST_CASE
+#endif
 #if WORK_BUFFER_ARRAY_SIZE > 0
 uint8_t g_work_buffer_array[WORK_BUFFER_ARRAY_SIZE];
 #else
@@ -113,7 +120,9 @@
 wuffs_base__io_buffer g_src;
 wuffs_base__token_buffer g_tok;
 
-wuffs_json__decoder g_dec;
+wuffs_cbor__decoder g_cbor_decoder;
+wuffs_json__decoder g_json_decoder;
+wuffs_base__token_decoder* g_dec;
 wuffs_base__status g_dec_status;
 
 #define TRY(error_msg)         \
@@ -149,12 +158,18 @@
 
 // ----
 
+typedef enum file_format_enum {
+  FILE_FORMAT_JSON,
+  FILE_FORMAT_CBOR,
+} file_format;
+
 struct {
   int remaining_argc;
   char** remaining_argv;
 
   bool all_tokens;
   bool human_readable;
+  file_format input_format;
   bool quirks;
 } g_flags = {0};
 
@@ -188,6 +203,14 @@
       g_flags.human_readable = true;
       continue;
     }
+    if (!strcmp(arg, "i=cbor") || !strcmp(arg, "input-format=cbor")) {
+      g_flags.input_format = FILE_FORMAT_CBOR;
+      continue;
+    }
+    if (!strcmp(arg, "i=json") || !strcmp(arg, "input-format=json")) {
+      g_flags.input_format = FILE_FORMAT_JSON;
+      continue;
+    }
     if (!strcmp(arg, "q") || !strcmp(arg, "quirks")) {
       g_flags.quirks = true;
       continue;
@@ -208,7 +231,7 @@
     "3:UnicodeCodePoint",  //
     "4:Literal.........",  //
     "5:Number..........",  //
-    "6:Reserved........",  //
+    "6:Inline_Integer..",  //
     "7:Reserved........",  //
     "8:Reserved........",  //
     "9:Reserved........",  //
@@ -241,10 +264,22 @@
       wuffs_base__make_slice_token(g_tok_buffer_array, TOKEN_BUFFER_ARRAY_SIZE),
       wuffs_base__empty_token_buffer_meta());
 
-  wuffs_base__status init_status = wuffs_json__decoder__initialize(
-      &g_dec, sizeof__wuffs_json__decoder(), WUFFS_VERSION, 0);
-  if (!wuffs_base__status__is_ok(&init_status)) {
-    return wuffs_base__status__message(&init_status);
+  if (g_flags.input_format == FILE_FORMAT_JSON) {
+    wuffs_base__status init_status = wuffs_json__decoder__initialize(
+        &g_json_decoder, sizeof__wuffs_json__decoder(), WUFFS_VERSION, 0);
+    if (!wuffs_base__status__is_ok(&init_status)) {
+      return wuffs_base__status__message(&init_status);
+    }
+    g_dec = wuffs_json__decoder__upcast_as__wuffs_base__token_decoder(
+        &g_json_decoder);
+  } else {
+    wuffs_base__status init_status = wuffs_cbor__decoder__initialize(
+        &g_cbor_decoder, sizeof__wuffs_cbor__decoder(), WUFFS_VERSION, 0);
+    if (!wuffs_base__status__is_ok(&init_status)) {
+      return wuffs_base__status__message(&init_status);
+    }
+    g_dec = wuffs_cbor__decoder__upcast_as__wuffs_base__token_decoder(
+        &g_cbor_decoder);
   }
 
   if (g_flags.quirks) {
@@ -269,14 +304,14 @@
     };
     uint32_t i;
     for (i = 0; quirks[i]; i++) {
-      wuffs_json__decoder__set_quirk_enabled(&g_dec, quirks[i], true);
+      wuffs_base__token_decoder__set_quirk_enabled(g_dec, quirks[i], true);
     }
   }
 
   uint64_t pos = 0;
   while (true) {
-    wuffs_base__status status = wuffs_json__decoder__decode_tokens(
-        &g_dec, &g_tok, &g_src,
+    wuffs_base__status status = wuffs_base__token_decoder__decode_tokens(
+        g_dec, &g_tok, &g_src,
         wuffs_base__make_slice_u8(g_work_buffer_array, WORK_BUFFER_ARRAY_SIZE));
 
     while (g_tok.meta.ri < g_tok.meta.wi) {