YAML_MAP

The YAML_MAP function creates a new YAML_Map object, which can be used to hold YAML mapping key/value pairs. YAML_Map is a subclass of OrderedHash, and inherits all of the methods and properties of that class as well as the Hash class.

YAML_Map objects have the following characteristics:

Examples

Create a YAML_Map and print out in YAML format:

map = YAML_Map('key1', 'value1', 'key2', 2.5, 'key3', [1,2,3])

top = YAML_Map('mymap', map)

print, top

IDL prints:

mymap:

key1: value1

key2: 2.5

key3: [1,2,3]

Syntax

Result = YAML_Map( Key1, Value1, Key2, Value2, ... Keyn, Valuen , /EXTRACT, /NO_COPY )

or

Result = YAML_Map( Keys, Values, /EXTRACT )

or

Result = YAML_Map( Keys )

or

Result = YAML_Map( Structure, /EXTRACT )

Return Value

Returns a reference to a newly-created YAML_Map.

Arguments

Keyn

Each Key argument can be a scalar string or number.

Each Key argument can also be an array or list, in which case the corresponding Value must be a scalar, an array or a list. If Value is a scalar, then that value is copied into every key. Otherwise, if Value is an array or a list, it must contain the same number of elements as the keys. In this case each element of the Key and Value is inserted as a separate key-value pair. If a given key occurs more than once within the input arguments, the last value will be retained.

If only Keys is supplied (as either a scalar, an array, or a list), then the corresponding values will be set to the default value of !NULL.

If no keys or values are supplied, an empty YAML_Map is returned.

Valuen

Each Value argument can be a variable or expression of type YAML_Map, YAML_Sequence, YAML_Value, YAML_Alias, Hash, List, or a regular IDL array or scalar, including !NULL.

Note: See YAML_SERIALIZE for the list of allowed IDL types and their corresponding YAML type.

Structure

Instead of passing in keys or values, a single IDL structure may be passed in. In this case, each tag/value pair within the structure will be inserted within the YAML_Map.

Note: Even though the structure itself is decomposed into key/value pairs, any substructures within the structure will be passed in as a single "value" for that particular key, unless you set the EXTRACT keyword.

Note: See YAML_SERIALIZE for the list of allowed IDL types and their corresponding YAML type.

Keywords

EXTRACT

By default, all values are put into the YAML_Map unchanged. If the EXTRACT keyword is set, then for any value which is a structure, that structure will be decomposed into key/value pairs (and also recursively for any substructures).

NO_COPY

If the NO_COPY keyword is set, the value data is taken away from the Value variable and attached directly to the YAML_Map variable. The default behavior is to make a copy of the input values.

Properties

All properties can be set and retrieved using the dot "." operator.

ANCHOR

Set this property to a string containing the YAML anchor value associated with this YAML map. This anchor can then be referenced using an alias later on in the YAML stream. For example:

IDL> defmap = YAML_Map('key1', 'value1', 'key2', 1.5)

IDL> defmap.anchor = 'myref'

IDL> map = YAML_Map('defaults', defmap)

IDL> print, map

defaults: &myref

key1: value1

key2: 1.5

Conversely, when a YAML stream gets parsed with the PRESERVE_ALIAS keyword, if there is a YAML map with an anchor, then the resulting YAML_Map will have the ANCHOR property set. For example:

yaml = [ $

'defaults: &myref', $

'  key1: value1', $

'  key2: 1.5']

yp = yaml_parse(yaml, /preserve_alias)

help, yp['defaults']

print, yp['defaults'].anchor

IDL prints:

<Expression> YAML_MAP <ID=24 NELEMENTS=2> ANCHOR='myref'

myref

Note: If YAML_PARSE is called without the PRESERVE_ALIAS keyword, then all anchors and aliases will be resolved and will not be stored in the result.

TAG

Set this property to a string containing the YAML tag value associated with this YAML sequence. For example:

IDL> defmap = YAML_Map('key1', 'value1', 'key2', 1.5)

IDL> defmap.tag = 'myclass'

IDL> map = YAML_Map('defaults', defmap)

IDL> print, map

defaults: !myclass

key1: value1

key2: 1.5

Conversely, when a YAML stream gets parsed, if there is a YAML sequence with a tag, then the resulting YAML_Sequence will have the TAG property set. For example:

yaml = [ $

'defaults: !myclass', $

'  key1: value1', $

'  key2: 1.5']

yp = yaml_parse(yaml)

help, yp['defaults']

print, yp['defaults'].tag

IDL prints:

<Expression> YAML_MAP <ID=16 NELEMENTS=2> TAG='!myclass'

myref

Methods and Additional Information

Variable Information

HELP

The HELP procedure provides general information:

IDL> mymap = YAML_Map('key1', 4, 'key2', 5)

IDL> help, mymap

MYMAP YAML_MAP <ID=1 NELEMENTS=2>

PRINT and Implied Print

The PRINT procedure and Implied Print serialize the output in YAML format:

IDL> mymap = YAML_Map('key1', 4, 'key2', 5)

IDL> print, mymap

IDL> mymap

In both cases IDL prints:

key1: 4

key2: 5

Version History

8.9

Introduced

See Also

YAML_Alias, YAML_Sequence, YAML_Stream_Map, YAML_Stream_Sequence, YAML_Value, YAML_PARSE, YAML_SERIALIZE