namespace {
const char *ex2_1 =
    "- Mark McGwire\n"
    "- Sammy Sosa\n"
    "- Ken Griffey";

const char *ex2_2 =
    "hr:  65    # Home runs\n"
    "avg: 0.278 # Batting average\n"
    "rbi: 147   # Runs Batted In";

const char *ex2_3 =
    "american:\n"
    "- Boston Red Sox\n"
    "- Detroit Tigers\n"
    "- New York Yankees\n"
    "national:\n"
    "- New York Mets\n"
    "- Chicago Cubs\n"
    "- Atlanta Braves";

const char *ex2_4 =
    "-\n"
    "  name: Mark McGwire\n"
    "  hr:   65\n"
    "  avg:  0.278\n"
    "-\n"
    "  name: Sammy Sosa\n"
    "  hr:   63\n"
    "  avg:  0.288";

const char *ex2_5 =
    "- [name        , hr, avg  ]\n"
    "- [Mark McGwire, 65, 0.278]\n"
    "- [Sammy Sosa  , 63, 0.288]";

const char *ex2_6 =
    "Mark McGwire: {hr: 65, avg: 0.278}\n"
    "Sammy Sosa: {\n"
    "    hr: 63,\n"
    "    avg: 0.288\n"
    "  }";

const char *ex2_7 =
    "# Ranking of 1998 home runs\n"
    "---\n"
    "- Mark McGwire\n"
    "- Sammy Sosa\n"
    "- Ken Griffey\n"
    "\n"
    "# Team ranking\n"
    "---\n"
    "- Chicago Cubs\n"
    "- St Louis Cardinals";

const char *ex2_8 =
    "---\n"
    "time: 20:03:20\n"
    "player: Sammy Sosa\n"
    "action: strike (miss)\n"
    "...\n"
    "---\n"
    "time: 20:03:47\n"
    "player: Sammy Sosa\n"
    "action: grand slam\n"
    "...";

const char *ex2_9 =
    "---\n"
    "hr: # 1998 hr ranking\n"
    "  - Mark McGwire\n"
    "  - Sammy Sosa\n"
    "rbi:\n"
    "  # 1998 rbi ranking\n"
    "  - Sammy Sosa\n"
    "  - Ken Griffey";

const char *ex2_10 =
    "---\n"
    "hr:\n"
    "  - Mark McGwire\n"
    "  # Following node labeled SS\n"
    "  - &SS Sammy Sosa\n"
    "rbi:\n"
    "  - *SS # Subsequent occurrence\n"
    "  - Ken Griffey";

const char *ex2_11 =
    "? - Detroit Tigers\n"
    "  - Chicago cubs\n"
    ":\n"
    "  - 2001-07-23\n"
    "\n"
    "? [ New York Yankees,\n"
    "    Atlanta Braves ]\n"
    ": [ 2001-07-02, 2001-08-12,\n"
    "    2001-08-14 ]";

const char *ex2_12 =
    "---\n"
    "# Products purchased\n"
    "- item    : Super Hoop\n"
    "  quantity: 1\n"
    "- item    : Basketball\n"
    "  quantity: 4\n"
    "- item    : Big Shoes\n"
    "  quantity: 1";

const char *ex2_13 =
    "# ASCII Art\n"
    "--- |\n"
    "  \\//||\\/||\n"
    "  // ||  ||__";

const char *ex2_14 =
    "--- >\n"
    "  Mark McGwire's\n"
    "  year was crippled\n"
    "  by a knee injury.";

const char *ex2_15 =
    ">\n"
    " Sammy Sosa completed another\n"
    " fine season with great stats.\n"
    " \n"
    "   63 Home Runs\n"
    "   0.288 Batting Average\n"
    " \n"
    " What a year!";

const char *ex2_16 =
    "name: Mark McGwire\n"
    "accomplishment: >\n"
    "  Mark set a major league\n"
    "  home run record in 1998.\n"
    "stats: |\n"
    "  65 Home Runs\n"
    "  0.278 Batting Average\n";

const char *ex2_17 =
    "unicode: \"Sosa did fine.\\u263A\"\n"
    "control: \"\\b1998\\t1999\\t2000\\n\"\n"
    "hex esc: \"\\x0d\\x0a is \\r\\n\"\n"
    "\n"
    "single: '\"Howdy!\" he cried.'\n"
    "quoted: ' # Not a ''comment''.'\n"
    "tie-fighter: '|\\-*-/|'";

const char *ex2_18 =
    "plain:\n"
    "  This unquoted scalar\n"
    "  spans many lines.\n"
    "\n"
    "quoted: \"So does this\n"
    "  quoted scalar.\\n\"";

const char *ex2_19 =
    "canonical: 12345\n"
    "decimal: +12345\n"
    "octal: 0o14\n"
    "hexadecimal: 0xC\n";

const char *ex2_20 =
    "canonical: 1.23015e+3\n"
    "exponential: 12.3015e+02\n"
    "fixed: 1230.15\n"
    "negative infinity: -.inf\n"
    "not a number: .NaN\n";

const char *ex2_21 =
    "null:\n"
    "booleans: [ true, false ]\n"
    "string: '012345'\n";

const char *ex2_22 =
    "canonical: 2001-12-15T02:59:43.1Z\n"
    "iso8601: 2001-12-14t21:59:43.10-05:00\n"
    "spaced: 2001-12-14 21:59:43.10 -5\n"
    "date: 2002-12-14\n";

const char *ex2_23 =
    "---\n"
    "not-date: !!str 2002-04-28\n"
    "\n"
    "picture: !!binary |\n"
    " R0lGODlhDAAMAIQAAP//9/X\n"
    " 17unp5WZmZgAAAOfn515eXv\n"
    " Pz7Y6OjuDg4J+fn5OTk6enp\n"
    " 56enmleECcgggoBADs=\n"
    "\n"
    "application specific tag: !something |\n"
    " The semantics of the tag\n"
    " above may be different for\n"
    " different documents.";

const char *ex2_24 =
    "%TAG ! tag:clarkevans.com,2002:\n"
    "--- !shape\n"
    "  # Use the ! handle for presenting\n"
    "  # tag:clarkevans.com,2002:circle\n"
    "- !circle\n"
    "  center: &ORIGIN {x: 73, y: 129}\n"
    "  radius: 7\n"
    "- !line\n"
    "  start: *ORIGIN\n"
    "  finish: { x: 89, y: 102 }\n"
    "- !label\n"
    "  start: *ORIGIN\n"
    "  color: 0xFFEEBB\n"
    "  text: Pretty vector drawing.";

const char *ex2_25 =
    "# Sets are represented as a\n"
    "# Mapping where each key is\n"
    "# associated with a null value\n"
    "--- !!set\n"
    "? Mark McGwire\n"
    "? Sammy Sosa\n"
    "? Ken Griffey";

const char *ex2_26 =
    "# Ordered maps are represented as\n"
    "# A sequence of mappings, with\n"
    "# each mapping having one key\n"
    "--- !!omap\n"
    "- Mark McGwire: 65\n"
    "- Sammy Sosa: 63\n"
    "- Ken Griffey: 58";

const char *ex2_27 =
    "--- !<tag:clarkevans.com,2002:invoice>\n"
    "invoice: 34843\n"
    "date   : 2001-01-23\n"
    "bill-to: &id001\n"
    "    given  : Chris\n"
    "    family : Dumars\n"
    "    address:\n"
    "        lines: |\n"
    "            458 Walkman Dr.\n"
    "            Suite #292\n"
    "        city    : Royal Oak\n"
    "        state   : MI\n"
    "        postal  : 48046\n"
    "ship-to: *id001\n"
    "product:\n"
    "    - sku         : BL394D\n"
    "      quantity    : 4\n"
    "      description : Basketball\n"
    "      price       : 450.00\n"
    "    - sku         : BL4438H\n"
    "      quantity    : 1\n"
    "      description : Super Hoop\n"
    "      price       : 2392.00\n"
    "tax  : 251.42\n"
    "total: 4443.52\n"
    "comments:\n"
    "    Late afternoon is best.\n"
    "    Backup contact is Nancy\n"
    "    Billsmer @ 338-4338.";

const char *ex2_28 =
    "---\n"
    "Time: 2001-11-23 15:01:42 -5\n"
    "User: ed\n"
    "Warning:\n"
    "  This is an error message\n"
    "  for the log file\n"
    "---\n"
    "Time: 2001-11-23 15:02:31 -5\n"
    "User: ed\n"
    "Warning:\n"
    "  A slightly different error\n"
    "  message.\n"
    "---\n"
    "Date: 2001-11-23 15:03:17 -5\n"
    "User: ed\n"
    "Fatal:\n"
    "  Unknown variable \"bar\"\n"
    "Stack:\n"
    "  - file: TopClass.py\n"
    "    line: 23\n"
    "    code: |\n"
    "      x = MoreObject(\"345\\n\")\n"
    "  - file: MoreClass.py\n"
    "    line: 58\n"
    "    code: |-\n"
    "      foo = bar";

// TODO: 5.1 - 5.2 BOM

const char *ex5_3 =
    "sequence:\n"
    "- one\n"
    "- two\n"
    "mapping:\n"
    "  ? sky\n"
    "  : blue\n"
    "  sea : green";

const char *ex5_4 =
    "sequence: [ one, two, ]\n"
    "mapping: { sky: blue, sea: green }";

const char *ex5_5 = "# Comment only.";

const char *ex5_6 =
    "anchored: !local &anchor value\n"
    "alias: *anchor";

const char *ex5_7 =
    "literal: |\n"
    "  some\n"
    "  text\n"
    "folded: >\n"
    "  some\n"
    "  text\n";

const char *ex5_8 =
    "single: 'text'\n"
    "double: \"text\"";

// TODO: 5.9 directive
// TODO: 5.10 reserved indicator

const char *ex5_11 =
    "|\n"
    "  Line break (no glyph)\n"
    "  Line break (glyphed)\n";

const char *ex5_12 =
    "# Tabs and spaces\n"
    "quoted: \"Quoted\t\"\n"
    "block:	|\n"
    "  void main() {\n"
    "  \tprintf(\"Hello, world!\\n\");\n"
    "  }";

const char *ex5_13 =
    "\"Fun with \\\\\n"
    "\\\" \\a \\b \\e \\f \\\n"
    "\\n \\r \\t \\v \\0 \\\n"
    "\\  \\_ \\N \\L \\P \\\n"
    "\\x41 \\u0041 \\U00000041\"";

const char *ex5_14 =
    "Bad escapes:\n"
    "  \"\\c\n"
    "  \\xq-\"";

const char *ex6_1 =
    "  # Leading comment line spaces are\n"
    "   # neither content nor indentation.\n"
    "    \n"
    "Not indented:\n"
    " By one space: |\n"
    "    By four\n"
    "      spaces\n"
    " Flow style: [    # Leading spaces\n"
    "   By two,        # in flow style\n"
    "  Also by two,    # are neither\n"
    "  \tStill by two   # content nor\n"
    "    ]             # indentation.";

const char *ex6_2 =
    "? a\n"
    ": -\tb\n"
    "  -  -\tc\n"
    "     - d";

const char *ex6_3 =
    "- foo:\t bar\n"
    "- - baz\n"
    "  -\tbaz";

const char *ex6_4 =
    "plain: text\n"
    "  lines\n"
    "quoted: \"text\n"
    "  \tlines\"\n"
    "block: |\n"
    "  text\n"
    "   \tlines\n";

const char *ex6_5 =
    "Folding:\n"
    "  \"Empty line\n"
    "   \t\n"
    "  as a line feed\"\n"
    "Chomping: |\n"
    "  Clipped empty lines\n"
    " ";

const char *ex6_6 =
    ">-\n"
    "  trimmed\n"
    "  \n"
    " \n"
    "\n"
    "  as\n"
    "  space";

const char *ex6_7 =
    ">\n"
    "  foo \n"
    " \n"
    "  \t bar\n"
    "\n"
    "  baz\n";

const char *ex6_8 =
    "\"\n"
    "  foo \n"
    " \n"
    "  \t bar\n"
    "\n"
    "  baz\n"
    "\"";

const char *ex6_9 =
    "key:    # Comment\n"
    "  value";

const char *ex6_10 =
    "  # Comment\n"
    "   \n"
    "\n";

const char *ex6_11 =
    "key:    # Comment\n"
    "        # lines\n"
    "  value\n"
    "\n";

const char *ex6_12 =
    "{ first: Sammy, last: Sosa }:\n"
    "# Statistics:\n"
    "  hr:  # Home runs\n"
    "     65\n"
    "  avg: # Average\n"
    "   0.278";

const char *ex6_13 =
    "%FOO  bar baz # Should be ignored\n"
    "               # with a warning.\n"
    "--- \"foo\"";

const char *ex6_14 =
    "%YAML 1.3 # Attempt parsing\n"
    "           # with a warning\n"
    "---\n"
    "\"foo\"";

const char *ex6_15 =
    "%YAML 1.2\n"
    "%YAML 1.1\n"
    "foo";

const char *ex6_16 =
    "%TAG !yaml! tag:yaml.org,2002:\n"
    "---\n"
    "!yaml!str \"foo\"";

const char *ex6_17 =
    "%TAG ! !foo\n"
    "%TAG ! !foo\n"
    "bar";

const char *ex6_18 =
    "# Private\n"
    "!foo \"bar\"\n"
    "...\n"
    "# Global\n"
    "%TAG ! tag:example.com,2000:app/\n"
    "---\n"
    "!foo \"bar\"";

const char *ex6_19 =
    "%TAG !! tag:example.com,2000:app/\n"
    "---\n"
    "!!int 1 - 3 # Interval, not integer";

const char *ex6_20 =
    "%TAG !e! tag:example.com,2000:app/\n"
    "---\n"
    "!e!foo \"bar\"";

const char *ex6_21 =
    "%TAG !m! !my-\n"
    "--- # Bulb here\n"
    "!m!light fluorescent\n"
    "...\n"
    "%TAG !m! !my-\n"
    "--- # Color here\n"
    "!m!light green";

const char *ex6_22 =
    "%TAG !e! tag:example.com,2000:app/\n"
    "---\n"
    "- !e!foo \"bar\"";

const char *ex6_23 =
    "!!str &a1 \"foo\":\n"
    "  !!str bar\n"
    "&a2 baz : *a1";

const char *ex6_24 =
    "!<tag:yaml.org,2002:str> foo :\n"
    "  !<!bar> baz";

const char *ex6_25 =
    "- !<!> foo\n"
    "- !<$:?> bar\n";

const char *ex6_26 =
    "%TAG !e! tag:example.com,2000:app/\n"
    "---\n"
    "- !local foo\n"
    "- !!str bar\n"
    "- !e!tag%21 baz\n";

const char *ex6_27a =
    "%TAG !e! tag:example,2000:app/\n"
    "---\n"
    "- !e! foo";

const char *ex6_27b =
    "%TAG !e! tag:example,2000:app/\n"
    "---\n"
    "- !h!bar baz";

const char *ex6_28 =
    "# Assuming conventional resolution:\n"
    "- \"12\"\n"
    "- 12\n"
    "- ! 12";

const char *ex6_29 =
    "First occurrence: &anchor Value\n"
    "Second occurrence: *anchor";

const char *ex7_1 =
    "First occurrence: &anchor Foo\n"
    "Second occurrence: *anchor\n"
    "Override anchor: &anchor Bar\n"
    "Reuse anchor: *anchor";

const char *ex7_2 =
    "{\n"
    "  foo : !!str,\n"
    "  !!str : bar,\n"
    "}";

const char *ex7_3 =
    "{\n"
    "  ? foo :,\n"
    "  : bar,\n"
    "}\n";

const char *ex7_4 =
    "\"implicit block key\" : [\n"
    "  \"implicit flow key\" : value,\n"
    " ]";

const char *ex7_5 =
    "\"folded \n"
    "to a space,\t\n"
    " \n"
    "to a line feed, or \t\\\n"
    " \\ \tnon-content\"";

const char *ex7_6 =
    "\" 1st non-empty\n"
    "\n"
    " 2nd non-empty \n"
    "\t3rd non-empty \"";

const char *ex7_7 = " 'here''s to \"quotes\"'";

const char *ex7_8 =
    "'implicit block key' : [\n"
    "  'implicit flow key' : value,\n"
    " ]";

const char *ex7_9 =
    "' 1st non-empty\n"
    "\n"
    " 2nd non-empty \n"
    "\t3rd non-empty '";

const char *ex7_10 =
    "# Outside flow collection:\n"
    "- ::vector\n"
    "- \": - ()\"\n"
    "- Up, up, and away!\n"
    "- -123\n"
    "- http://example.com/foo#bar\n"
    "# Inside flow collection:\n"
    "- [ ::vector,\n"
    "  \": - ()\",\n"
    "  \"Up, up, and away!\",\n"
    "  -123,\n"
    "  http://example.com/foo#bar ]";

const char *ex7_11 =
    "implicit block key : [\n"
    "  implicit flow key : value,\n"
    " ]";

const char *ex7_12 =
    "1st non-empty\n"
    "\n"
    " 2nd non-empty \n"
    "\t3rd non-empty";

const char *ex7_13 =
    "- [ one, two, ]\n"
    "- [three ,four]";

const char *ex7_14 =
    "[\n"
    "\"double\n"
    " quoted\", 'single\n"
    "           quoted',\n"
    "plain\n"
    " text, [ nested ],\n"
    "single: pair,\n"
    "]";

const char *ex7_15 =
    "- { one : two , three: four , }\n"
    "- {five: six,seven : eight}";

const char *ex7_16 =
    "{\n"
    "? explicit: entry,\n"
    "implicit: entry,\n"
    "?\n"
    "}";

const char *ex7_17 =
    "{\n"
    "unquoted : \"separate\",\n"
    "http://foo.com,\n"
    "omitted value:,\n"
    ": omitted key,\n"
    "}";

const char *ex7_18 =
    "{\n"
    "\"adjacent\":value,\n"
    "\"readable\":value,\n"
    "\"empty\":\n"
    "}";

const char *ex7_19 =
    "[\n"
    "foo: bar\n"
    "]";

const char *ex7_20 =
    "[\n"
    "? foo\n"
    " bar : baz\n"
    "]";

const char *ex7_21 =
    "- [ YAML : separate ]\n"
    "- [ : empty key entry ]\n"
    "- [ {JSON: like}:adjacent ]";

const char *ex7_22 =
    "[ foo\n"
    " bar: invalid,";  // Note: we don't check (on purpose) the >1K chars for an
                       // implicit key

const char *ex7_23 =
    "- [ a, b ]\n"
    "- { a: b }\n"
    "- \"a\"\n"
    "- 'b'\n"
    "- c";

const char *ex7_24 =
    "- !!str \"a\"\n"
    "- 'b'\n"
    "- &anchor \"c\"\n"
    "- *anchor\n"
    "- !!str";

const char *ex8_1 =
    "- | # Empty header\n"
    " literal\n"
    "- >1 # Indentation indicator\n"
    "  folded\n"
    "- |+ # Chomping indicator\n"
    " keep\n"
    "\n"
    "- >1- # Both indicators\n"
    "  strip\n";

const char *ex8_2 =
    "- |\n"
    " detected\n"
    "- >\n"
    " \n"
    "  \n"
    "  # detected\n"
    "- |1\n"
    "  explicit\n"
    "- >\n"
    " \t\n"
    " detected\n";

const char *ex8_3a =
    "- |\n"
    "  \n"
    " text";

const char *ex8_3b =
    "- >\n"
    "  text\n"
    " text";

const char *ex8_3c =
    "- |2\n"
    " text";

const char *ex8_4 =
    "strip: |-\n"
    "  text\n"
    "clip: |\n"
    "  text\n"
    "keep: |+\n"
    "  text\n";

const char *ex8_5 =
    " # Strip\n"
    "  # Comments:\n"
    "strip: |-\n"
    "  # text\n"
    "  \n"
    " # Clip\n"
    "  # comments:\n"
    "\n"
    "clip: |\n"
    "  # text\n"
    " \n"
    " # Keep\n"
    "  # comments:\n"
    "\n"
    "keep: |+\n"
    "  # text\n"
    "\n"
    " # Trail\n"
    "  # Comments\n";

const char *ex8_6 =
    "strip: >-\n"
    "\n"
    "clip: >\n"
    "\n"
    "keep: |+\n"
    "\n";

const char *ex8_7 =
    "|\n"
    " literal\n"
    " \ttext\n"
    "\n";

const char *ex8_8 =
    "|\n"
    " \n"
    "  \n"
    "  literal\n"
    "   \n"
    "  \n"
    "  text\n"
    "\n"
    " # Comment\n";

const char *ex8_9 =
    ">\n"
    " folded\n"
    " text\n"
    "\n";

const char *ex8_10 =
    ">\n"
    "\n"
    " folded\n"
    " line\n"
    "\n"
    " next\n"
    " line\n"
    "   * bullet\n"
    "\n"
    "   * list\n"
    "   * lines\n"
    "\n"
    " last\n"
    " line\n"
    "\n"
    "# Comment\n";

const char *ex8_11 = ex8_10;
const char *ex8_12 = ex8_10;
const char *ex8_13 = ex8_10;

const char *ex8_14 =
    "block sequence:\n"
    "  - one\n"
    "  - two : three\n";

const char *ex8_15 =
    "- # Empty\n"
    "- |\n"
    " block node\n"
    "- - one # Compact\n"
    "  - two # sequence\n"
    "- one: two # Compact mapping\n";

const char *ex8_16 =
    "block mapping:\n"
    " key: value\n";

const char *ex8_17 =
    "? explicit key # Empty value\n"
    "? |\n"
    "  block key\n"
    ": - one # Explicit compact\n"
    "  - two # block value\n";

const char *ex8_18 =
    "plain key: in-line value\n"
    ":  # Both empty\n"
    "\"quoted key\":\n"
    "- entry\n";

const char *ex8_19 =
    "- sun: yellow\n"
    "- ? earth: blue\n"
    "  : moon: white\n";

const char *ex8_20 =
    "-\n"
    "  \"flow in block\"\n"
    "- >\n"
    " Block scalar\n"
    "- !!map # Block collection\n"
    "  foo : bar\n";

const char *ex8_21 =
    "literal: |2\n"
    "  value\n"
    "folded:\n"
    "   !foo\n"
    "  >1\n"
    " value\n";

const char *ex8_22 =
    "sequence: !!seq\n"
    "- entry\n"
    "- !!seq\n"
    " - nested\n"
    "mapping: !!map\n"
    " foo: bar\n";
}
