@@ -8,10 +8,10 @@ YAML I/O
88Introduction to YAML
99====================
1010
11- YAML is a human readable data serialization language. The full YAML language
11+ YAML is a human- readable data serialization language. The full YAML language
1212spec can be read at `yaml.org
1313<http://www.yaml.org/spec/1.2/spec.html#Introduction> `_. The simplest form of
14- yaml is just "scalars", "mappings", and "sequences". A scalar is any number
14+ YAML is just "scalars", "mappings", and "sequences". A scalar is any number
1515or string. The pound/hash symbol (#) begins a comment line. A mapping is
1616a set of key-value pairs where the key ends with a colon. For example:
1717
@@ -49,10 +49,10 @@ of mappings in which one of the mapping values is itself a sequence:
4949 - PowerPC
5050 - x86
5151
52- Sometime sequences are known to be short and the one entry per line is too
53- verbose, so YAML offers an alternate syntax for sequences called a "Flow
52+ Sometimes sequences are known to be short and the one entry per line is too
53+ verbose, so YAML offers an alternative syntax for sequences called a "Flow
5454Sequence" in which you put comma separated sequence elements into square
55- brackets. The above example could then be simplified to :
55+ brackets. The above example could then be simplified to:
5656
5757
5858.. code-block :: yaml
@@ -78,21 +78,21 @@ YAML I/O assumes you have some "native" data structures which you want to be
7878able to dump as YAML and recreate from YAML. The first step is to try
7979writing example YAML for your data structures. You may find after looking at
8080possible YAML representations that a direct mapping of your data structures
81- to YAML is not very readable. Often the fields are not in the order that
81+ to YAML is not very readable. Often, the fields are not in an order that
8282a human would find readable. Or the same information is replicated in multiple
8383locations, making it hard for a human to write such YAML correctly.
8484
8585In relational database theory there is a design step called normalization in
8686which you reorganize fields and tables. The same considerations need to
8787go into the design of your YAML encoding. But, you may not want to change
88- your existing native data structures. Therefore, when writing out YAML
88+ your existing native data structures. Therefore, when writing out YAML,
8989there may be a normalization step, and when reading YAML there would be a
9090corresponding denormalization step.
9191
92- YAML I/O uses a non-invasive, traits based design. YAML I/O defines some
92+ YAML I/O uses a non-invasive, traits- based design. YAML I/O defines some
9393abstract base templates. You specialize those templates on your data types.
94- For instance, if you have an enumerated type FooBar you could specialize
95- ScalarEnumerationTraits on that type and define the ``enumeration() `` method:
94+ For instance, if you have an enumerated type `` FooBar `` you could specialize
95+ `` ScalarEnumerationTraits `` on that type and define the ``enumeration() `` method:
9696
9797.. code-block :: c++
9898
@@ -107,12 +107,12 @@ ScalarEnumerationTraits on that type and define the ``enumeration()`` method:
107107 };
108108
109109
110- As with all YAML I/O template specializations, the ScalarEnumerationTraits is used for
110+ As with all YAML I/O template specializations, the `` ScalarEnumerationTraits `` is used for
111111both reading and writing YAML. That is, the mapping between in-memory enum
112112values and the YAML string representation is only in one place.
113113This assures that the code for writing and parsing of YAML stays in sync.
114114
115- To specify a YAML mappings, you define a specialization on
115+ To specify YAML mappings, you define a specialization on
116116``llvm::yaml::MappingTraits ``.
117117If your native data structure happens to be a struct that is already normalized,
118118then the specialization is simple. For example:
@@ -131,7 +131,7 @@ then the specialization is simple. For example:
131131 };
132132
133133
134- A YAML sequence is automatically inferred if you data type has ``begin() ``/``end() ``
134+ A YAML sequence is automatically inferred if your data type has ``begin() ``/``end() ``
135135iterators and a ``push_back() `` method. Therefore any of the STL containers
136136(such as ``std::vector<> ``) will automatically translate to YAML sequences.
137137
@@ -197,7 +197,7 @@ Error Handling
197197When parsing a YAML document, if the input does not match your schema (as
198198expressed in your ``XxxTraits<> `` specializations). YAML I/O
199199will print out an error message and your Input object's ``error() `` method will
200- return true. For instance the following document:
200+ return true. For instance, the following document:
201201
202202.. code-block :: yaml
203203
@@ -244,8 +244,8 @@ The following types have built-in support in YAML I/O:
244244* uint16_t
245245* uint8_t
246246
247- That is, you can use those types in fields of MappingTraits or as element type
248- in sequence. When reading, YAML I/O will validate that the string found
247+ That is, you can use those types in fields of `` MappingTraits `` or as the element type
248+ in a sequence. When reading, YAML I/O will validate that the string found
249249is convertible to that type and error out if not.
250250
251251
@@ -255,7 +255,7 @@ Given that YAML I/O is trait based, the selection of how to convert your data
255255to YAML is based on the type of your data. But in C++ type matching, typedefs
256256do not generate unique type names. That means if you have two typedefs of
257257unsigned int, to YAML I/O both types look exactly like unsigned int. To
258- facilitate make unique type names, YAML I/O provides a macro which is used
258+ facilitate making unique type names, YAML I/O provides a macro which is used
259259like a typedef on built-in types, but expands to create a class with conversion
260260operators to and from the base type. For example:
261261
@@ -271,7 +271,7 @@ is that you can now specify traits on them to get different YAML conversions.
271271
272272Hex types
273273---------
274- An example use of a unique type is that YAML I/O provides fixed sized unsigned
274+ An example use of a unique type is that YAML I/O provides fixed- sized unsigned
275275integers that are written with YAML I/O as hexadecimal instead of the decimal
276276format used by the built-in integer types:
277277
@@ -280,15 +280,15 @@ format used by the built-in integer types:
280280* Hex16
281281* Hex8
282282
283- You can use ``llvm::yaml::Hex32 `` instead of ``uint32_t `` and the only different will
283+ You can use ``llvm::yaml::Hex32 `` instead of ``uint32_t `` and the only difference will
284284be that when YAML I/O writes out that type it will be formatted in hexadecimal.
285285
286286
287287ScalarEnumerationTraits
288288-----------------------
289289YAML I/O supports translating between in-memory enumerations and a set of string
290290values in YAML documents. This is done by specializing ``ScalarEnumerationTraits<> ``
291- on your enumeration type and define an ``enumeration() `` method.
291+ on your enumeration type and defining an ``enumeration() `` method.
292292For instance, suppose you had an enumeration of CPUs and a struct with it as
293293a field:
294294
@@ -306,7 +306,7 @@ a field:
306306 };
307307
308308To support reading and writing of this enumeration, you can define a
309- ScalarEnumerationTraits specialization on CPUs, which can then be used
309+ `` ScalarEnumerationTraits `` specialization on CPUs, which can then be used
310310as a field type:
311311
312312.. code-block :: c++
@@ -356,7 +356,7 @@ had the following bit flags defined:
356356
357357 LLVM_YAML_STRONG_TYPEDEF(uint32_t, MyFlags)
358358
359- To support reading and writing of MyFlags, you specialize ScalarBitSetTraits<>
359+ To support reading and writing of MyFlags, you specialize `` ScalarBitSetTraits<> ``
360360on MyFlags and provide the bit values and their names.
361361
362362.. code-block :: c++
@@ -399,7 +399,7 @@ the above schema, a same valid YAML document is:
399399 name : Tom
400400 flags : [ pointy, flat ]
401401
402- Sometimes a "flags" field might contains an enumeration part
402+ Sometimes a "flags" field might contain an enumeration part
403403defined by a bit-mask.
404404
405405.. code-block :: c++
@@ -415,7 +415,7 @@ defined by a bit-mask.
415415 flagsCPU2 = 16
416416 };
417417
418- To support reading and writing such fields, you need to use the maskedBitSet()
418+ To support reading and writing such fields, you need to use the `` maskedBitSet() ``
419419method and provide the bit values, their names and the enumeration mask.
420420
421421.. code-block :: c++
@@ -438,8 +438,8 @@ to the flow sequence.
438438
439439Custom Scalar
440440-------------
441- Sometimes for readability a scalar needs to be formatted in a custom way. For
442- instance your internal data structure may use an integer for time (seconds since
441+ Sometimes, for readability, a scalar needs to be formatted in a custom way. For
442+ instance, your internal data structure may use an integer for time (seconds since
443443some epoch), but in YAML it would be much nicer to express that integer in
444444some time format (e.g. 4-May-2012 10:30pm). YAML I/O has a way to support
445445custom formatting and parsing of scalar types by specializing ``ScalarTraits<> `` on
@@ -487,13 +487,13 @@ your data type. The library doesn't provide any built-in support for block
487487scalar I/O for types like ``std::string `` and ``llvm::StringRef `` as they are already
488488supported by YAML I/O and use the ordinary scalar notation by default.
489489
490- BlockScalarTraits specializations are very similar to the
491- ScalarTraits specialization - YAML I/O will provide the native type and your
490+ `` BlockScalarTraits `` specializations are very similar to the
491+ `` ScalarTraits `` specialization - YAML I/O will provide the native type and your
492492specialization must create a temporary ``llvm::StringRef `` when writing, and
493493it will also provide an ``llvm::StringRef `` that has the value of that block scalar
494494and your specialization must convert that to your native data type when reading.
495495An example of a custom type with an appropriate specialization of
496- BlockScalarTraits is shown below:
496+ `` BlockScalarTraits `` is shown below:
497497
498498.. code-block :: c++
499499
@@ -621,7 +621,7 @@ Polar which specifies a position in polar coordinates (distance, angle):
621621 float angle;
622622 };
623623
624- but you've decided the normalized YAML for should be in x,y coordinates. That
624+ but you've decided the normalized YAML form should be in x,y coordinates. That
625625is, you want the yaml to look like:
626626
627627.. code-block :: yaml
@@ -762,19 +762,19 @@ tag on a map. Using this functionality it is even possible to support different
762762mappings, as long as they are convertible.
763763
764764To check a tag, inside your ``mapping() `` method you can use ``io.mapTag() `` to specify
765- what the tag should be. This will also add that tag when writing yaml .
765+ what the tag should be. This will also add that tag when writing YAML .
766766
767767Validation
768768----------
769769
770770Sometimes in a YAML map, each key/value pair is valid, but the combination is
771771not. This is similar to something having no syntax errors, but still having
772- semantic errors. To support semantic level checking, YAML I/O allows
772+ semantic errors. To support semantic- level checking, YAML I/O allows
773773an optional ``validate() `` method in a MappingTraits template specialization.
774774
775775When parsing YAML, the ``validate() `` method is call *after * all key/values in
776776the map have been processed. Any error message returned by the ``validate() ``
777- method during input will be printed just a like a syntax error would be printed.
777+ method during input will be printed just like a syntax error would be printed.
778778When writing YAML, the ``validate() `` method is called *before * the YAML
779779key/values are written. Any error during output will trigger an ``assert() ``
780780because it is a programming error to have invalid struct values.
@@ -827,7 +827,7 @@ add "static const bool flow = true;". For instance:
827827 static const bool flow = true;
828828 }
829829
830- Flow mappings are subject to line wrapping according to the Output object
830+ Flow mappings are subject to line wrapping according to the `` Output `` object
831831configuration.
832832
833833Sequence
@@ -850,7 +850,7 @@ The ``size()`` method returns how many elements are currently in your sequence.
850850The ``element() `` method returns a reference to the i'th element in the sequence.
851851When parsing YAML, the ``element() `` method may be called with an index one bigger
852852than the current size. Your ``element() `` method should allocate space for one
853- more element (using default constructor if element is a C++ object) and returns
853+ more element (using default constructor if element is a C++ object) and return
854854a reference to that new allocated space.
855855
856856
@@ -919,8 +919,8 @@ trait for you document list type. The trait has the same methods as
919919
920920User Context Data
921921=================
922- When an ``llvm::yaml::Input `` or ``llvm::yaml::Output `` object is created their
923- constructors take an optional "context" parameter. This is a pointer to
922+ When an ``llvm::yaml::Input `` or ``llvm::yaml::Output `` object is created, its
923+ constructor takes an optional "context" parameter. This is a pointer to
924924whatever state information you might need.
925925
926926For instance, in a previous example we showed how the conversion type for a
@@ -930,18 +930,18 @@ of an outer mapping? That is where the "context" parameter comes in. You
930930can set values in the context in the outer map's ``mapping() `` method and
931931retrieve those values in the inner map's ``mapping() `` method.
932932
933- The context value is just a void*. All your traits which use the context
933+ The context value is just a `` void* `` . All your traits which use the context
934934and operate on your native data types, need to agree what the context value
935935actually is. It could be a pointer to an object or struct which your various
936- traits use to shared context sensitive information.
936+ traits use to share context sensitive information.
937937
938938
939939Output
940940======
941941
942942The ``llvm::yaml::Output `` class is used to generate a YAML document from your
943943in-memory data structures, using traits defined on your data types.
944- To instantiate an Output object you need an ``llvm::raw_ostream ``, an optional
944+ To instantiate an `` Output `` object you need an ``llvm::raw_ostream ``, an optional
945945context pointer and an optional wrapping column:
946946
947947.. code-block :: c++
@@ -950,10 +950,10 @@ context pointer and an optional wrapping column:
950950 public:
951951 Output(llvm::raw_ostream &, void *context = NULL, int WrapColumn = 70);
952952
953- Once you have an Output object, you can use the C++ stream operator on it
953+ Once you have an `` Output `` object, you can use the C++ stream operator on it
954954to write your native data as YAML. One thing to recall is that a YAML file
955955can contain multiple "documents". If the top level data structure you are
956- streaming as YAML is a mapping, scalar, or sequence, then Output assumes you
956+ streaming as YAML is a mapping, scalar, or sequence, then `` Output `` assumes you
957957are generating one document and wraps the mapping output
958958with "``--- ``" and trailing "``... ``".
959959
@@ -1009,7 +1009,7 @@ Input
10091009=====
10101010
10111011The ``llvm::yaml::Input `` class is used to parse YAML document(s) into your native
1012- data structures. To instantiate an Input
1012+ data structures. To instantiate an `` Input ``
10131013object you need a ``StringRef `` to the entire YAML file, and optionally a context
10141014pointer:
10151015
@@ -1019,12 +1019,12 @@ pointer:
10191019 public:
10201020 Input(StringRef inputContent, void *context=NULL);
10211021
1022- Once you have an Input object, you can use the C++ stream operator to read
1022+ Once you have an `` Input `` object, you can use the C++ stream operator to read
10231023the document(s). If you expect there might be multiple YAML documents in
1024- one file, you'll need to specialize DocumentListTraits on a list of your
1024+ one file, you'll need to specialize `` DocumentListTraits `` on a list of your
10251025document type and stream in that document list type. Otherwise you can
10261026just stream in the document type. Also, you can check if there was
1027- any syntax errors in the YAML be calling the ``error() `` method on the Input
1027+ any syntax errors in the YAML by calling the ``error() `` method on the `` Input ``
10281028object. For example:
10291029
10301030.. code-block :: c++
0 commit comments