1
0
mirror of https://github.com/alecthomas/chroma.git synced 2025-02-15 13:33:12 +02:00
chroma/lexers/testdata/yaml.actual
Guillaume Galy 5ca7345671 fix: inconsistent YAML multiline parsing (#475)
When the YAML block scalar (multiline string) syntax is used with only one line of text, the single line is not matched by the current regexp. It currently only works with at least two lines.

This fixes the regexp by adding a special case for a single line after the first indentation in the block.
2023-01-12 23:25:34 +11:00

257 lines
7.3 KiB
Plaintext

--- # document start
# Comments in YAML look like this.
comment_after_string_key: string value # comments can follow on same line
nested_comment: # this is a comment right next to a key
sub_key: sub string value # sub comment
inline_not_comment: string#hash #nospacecomment
bool_comment: True # comment after bool
int_comment: 123 # comment after int
date_comment: 2010-11-12 # comment after date
single_quote: 'single # quote string' # comment after single quote string
double_quote: "double # quote string" # comment after double quote string
key: no comment
################
# SCALAR TYPES #
################
# Our root object (which continues for the entire document) will be a map,
# which is equivalent to a dictionary, hash or object in other languages.
key: value
another_key: Another value goes here.
a_number_value: 100
scientific_notation: 1e+12
# The number 1 will be interpreted as a number, not a boolean. if you want
# it to be interpreted as a boolean, use true
boolean: true
boolean_different_case: False
boolean_yes: YES
null_value: null
key with spaces: value
# Notice that strings don't need to be quoted. However, they can be.
however: 'A string, enclosed in quotes.'
'Keys can be quoted too.': "Useful if you want to put a ':' in your key."
single quotes: 'have ''one'' escape pattern'
double quotes: "have many: \", \0, \t, \u263A, \x0d\x0a == \r\n, and more."
# UTF-8/16/32 characters need to be encoded
Superscript two: \u00B2
# Multi-line flow scalars can be unquoted or quoted.
unquoted_scalar: Multiline scalar
with 'quotes' in the middle.
This is the last line.
single_quoted_scalar: 'Multiline single quoted scalar
with "quotes" in the middle
Last line'
double_quoted_scalar: "Multiline double quoted scalar
with 'quotes' in the middle
end"
# Multiple-line strings can be written either as a 'literal block' (using |),
# or a 'folded block' (using '>').
literal_block: |
This entire block of text will be the value of the 'literal_block' key,
with line breaks being preserved.
The literal continues until de-dented, and the leading indentation is
stripped.
Any lines that are 'more-indented' keep the rest of their indentation -
these lines will be indented by 4 spaces.
folded_style: >
This entire block of text will be the value of 'folded_style', but this
time, all newlines will be replaced with a single space.
Blank lines, like above, are converted to a newline character.
'More-indented' lines keep their newlines, too -
this text will appear over two lines.
literal_block_with_strip_chomping: |-
This entire block of text will be the value of the 'literal_block' key,
with line breaks being preserved and the strip chomping indicator.
The literal continues until de-dented, and the leading indentation is
stripped.
Any lines that are 'more-indented' keep the rest of their indentation -
these lines will be indented by 4 spaces.
literal_block_with_keep_chomping: |+
This entire block of text will be the value of the 'literal_block' key,
with line breaks being preserved and the keep chomping indicator.
The literal continues until de-dented, and the leading indentation is
stripped.
a: |
multiline literal
line 2
b: >
multiline: folded
line 2
c: |-
multiline # literal strip
line 2
d: >-
multiline folded strip
line 2: test
# not a comment
indented by 1
e: |+
multiline literal keep
line: 2
# this is a comment
f: >+
multiline folded keep one space
line 2
g: |
multiline literal with only one line
h: test
block_scalars_with_indent:
a: |
multiline literal
line 2
b: >
multiline: folded
line 2
c: |-
multiline # literal strip
line 2 6 leading spaces
d: >-
multiline folded strip
line 2: test
# not a comment
e: |+
multiline literal keep
line: 2
# this is a comment
f: >+
multiline folded keep
line 2
g: |
multiline literal with only one line
h: test
####################
# COLLECTION TYPES #
####################
# Nesting uses indentation. 2 space indent is preferred (but not required).
a_nested_map:
key: value
another_key: Another Value
another_nested_map:
hello: hello
# Maps don't have to have string keys.
0.25: a float key
# Keys can also be complex, like multi-line objects
# We use ? followed by a space to indicate the start of a complex key.
? |
This is a key
that has multiple lines
: and this is its value
# YAML also allows mapping between sequences with the complex key syntax
# Some language parsers might complain
# An example
? - Manchester United
- Real Madrid
: [2001-01-01, 2002-02-02]
# Sequences (equivalent to lists or arrays) look like this
# (note that the '-' counts as indentation):
a_sequence:
- Item 1
- Item 2
- 0.5 # sequences can contain disparate types.
- Item 4
- key: value
another_key: another_value
-
- This is a sequence
- inside another sequence
- - - Nested sequence indicators
- can be collapsed
# Since YAML is a superset of JSON, you can also write JSON-style maps and
# sequences:
json_map: {"key": "value"}
json_seq: [3, 2, 1, "takeoff"]
and quotes are optional: {key: [3, 2, 1, takeoff]}
#######################
# EXTRA YAML FEATURES #
#######################
# YAML also has a handy feature called 'anchors', which let you easily duplicate
# content across your document. Both of these keys will have the same value:
anchored_content: &anchor_name This string will appear as the value of two keys.
other_anchor: *anchor_name
# Anchors can be used to duplicate/inherit properties
base: &base
name: Everyone has same name
# The regexp << is called Merge Key Language-Independent Type. It is used to
# indicate that all the keys of one or more specified maps should be inserted
# into the current map.
foo: &foo
<<: *base
age: 10
bar: &bar
<<: *base
age: 20
# foo and bar would also have name: Everyone has same name
# YAML also has tags, which you can use to explicitly declare types.
explicit_string: !!str 0.5
# Some parsers implement language specific tags, like this one for Python's
# complex number type.
python_complex_number: !!python/complex 1+2j
# We can also use yaml complex keys with language specific tags
? !!python/tuple [5, 7]
: Fifty Seven
# Would be {(5, 7): 'Fifty Seven'} in Python
####################
# EXTRA YAML TYPES #
####################
# Strings and numbers aren't the only scalars that YAML can understand.
# ISO-formatted date and datetime literals are also parsed.
datetime: 2001-12-15T02:59:43.1Z
datetime_with_spaces: 2001-12-14 21:59:43.10 -5
date: 2002-12-14
# The !!binary tag indicates that a string is actually a base64-encoded
# representation of a binary blob.
gif_file: !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
# YAML also has a set type, which looks like this:
set:
? item1
? item2
? item3
or: {item1, item2, item3}
# Sets are just maps with null values; the above is equivalent to:
set2:
item1: null
item2: null
item3: null
... # document end