Mercurial > repos > bcclaywell > argo_navis
annotate venv/lib/python2.7/site-packages/yaml/scanner.py @ 0:d67268158946 draft
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
| author | bcclaywell | 
|---|---|
| date | Mon, 12 Oct 2015 17:43:33 -0400 | 
| parents | |
| children | 
| rev | line source | 
|---|---|
| 
0
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
2 # Scanner produces tokens of the following types: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
3 # STREAM-START | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
4 # STREAM-END | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
5 # DIRECTIVE(name, value) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
6 # DOCUMENT-START | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
7 # DOCUMENT-END | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
8 # BLOCK-SEQUENCE-START | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
9 # BLOCK-MAPPING-START | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
10 # BLOCK-END | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
11 # FLOW-SEQUENCE-START | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
12 # FLOW-MAPPING-START | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
13 # FLOW-SEQUENCE-END | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
14 # FLOW-MAPPING-END | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
15 # BLOCK-ENTRY | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
16 # FLOW-ENTRY | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
17 # KEY | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
18 # VALUE | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
19 # ALIAS(value) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
20 # ANCHOR(value) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
21 # TAG(value) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
22 # SCALAR(value, plain, style) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
23 # | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
24 # Read comments in the Scanner code for more details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
25 # | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
26 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
27 __all__ = ['Scanner', 'ScannerError'] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
28 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
29 from error import MarkedYAMLError | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
30 from tokens import * | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
31 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
32 class ScannerError(MarkedYAMLError): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
33 pass | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
34 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
35 class SimpleKey(object): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
36 # See below simple keys treatment. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
37 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
38 def __init__(self, token_number, required, index, line, column, mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
39 self.token_number = token_number | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
40 self.required = required | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
41 self.index = index | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
42 self.line = line | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
43 self.column = column | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
44 self.mark = mark | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
45 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
46 class Scanner(object): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
47 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
48 def __init__(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
49 """Initialize the scanner.""" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
50 # It is assumed that Scanner and Reader will have a common descendant. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
51 # Reader do the dirty work of checking for BOM and converting the | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
52 # input data to Unicode. It also adds NUL to the end. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
53 # | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
54 # Reader supports the following methods | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
55 # self.peek(i=0) # peek the next i-th character | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
56 # self.prefix(l=1) # peek the next l characters | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
57 # self.forward(l=1) # read the next l characters and move the pointer. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
58 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
59 # Had we reached the end of the stream? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
60 self.done = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
61 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
62 # The number of unclosed '{' and '['. `flow_level == 0` means block | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
63 # context. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
64 self.flow_level = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
65 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
66 # List of processed tokens that are not yet emitted. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
67 self.tokens = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
68 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
69 # Add the STREAM-START token. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
70 self.fetch_stream_start() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
71 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
72 # Number of tokens that were emitted through the `get_token` method. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
73 self.tokens_taken = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
74 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
75 # The current indentation level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
76 self.indent = -1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
77 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
78 # Past indentation levels. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
79 self.indents = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
80 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
81 # Variables related to simple keys treatment. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
82 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
83 # A simple key is a key that is not denoted by the '?' indicator. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
84 # Example of simple keys: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
85 # --- | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
86 # block simple key: value | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
87 # ? not a simple key: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
88 # : { flow simple key: value } | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
89 # We emit the KEY token before all keys, so when we find a potential | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
90 # simple key, we try to locate the corresponding ':' indicator. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
91 # Simple keys should be limited to a single line and 1024 characters. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
92 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
93 # Can a simple key start at the current position? A simple key may | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
94 # start: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
95 # - at the beginning of the line, not counting indentation spaces | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
96 # (in block context), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
97 # - after '{', '[', ',' (in the flow context), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
98 # - after '?', ':', '-' (in the block context). | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
99 # In the block context, this flag also signifies if a block collection | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
100 # may start at the current position. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
101 self.allow_simple_key = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
102 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
103 # Keep track of possible simple keys. This is a dictionary. The key | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
104 # is `flow_level`; there can be no more that one possible simple key | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
105 # for each level. The value is a SimpleKey record: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
106 # (token_number, required, index, line, column, mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
107 # A simple key may start with ALIAS, ANCHOR, TAG, SCALAR(flow), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
108 # '[', or '{' tokens. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
109 self.possible_simple_keys = {} | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
110 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
111 # Public methods. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
112 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
113 def check_token(self, *choices): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
114 # Check if the next token is one of the given types. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
115 while self.need_more_tokens(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
116 self.fetch_more_tokens() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
117 if self.tokens: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
118 if not choices: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
119 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
120 for choice in choices: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
121 if isinstance(self.tokens[0], choice): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
122 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
123 return False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
124 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
125 def peek_token(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
126 # Return the next token, but do not delete if from the queue. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
127 while self.need_more_tokens(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
128 self.fetch_more_tokens() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
129 if self.tokens: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
130 return self.tokens[0] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
131 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
132 def get_token(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
133 # Return the next token. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
134 while self.need_more_tokens(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
135 self.fetch_more_tokens() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
136 if self.tokens: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
137 self.tokens_taken += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
138 return self.tokens.pop(0) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
139 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
140 # Private methods. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
141 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
142 def need_more_tokens(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
143 if self.done: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
144 return False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
145 if not self.tokens: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
146 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
147 # The current token may be a potential simple key, so we | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
148 # need to look further. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
149 self.stale_possible_simple_keys() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
150 if self.next_possible_simple_key() == self.tokens_taken: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
151 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
152 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
153 def fetch_more_tokens(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
154 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
155 # Eat whitespaces and comments until we reach the next token. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
156 self.scan_to_next_token() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
157 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
158 # Remove obsolete possible simple keys. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
159 self.stale_possible_simple_keys() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
160 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
161 # Compare the current indentation and column. It may add some tokens | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
162 # and decrease the current indentation level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
163 self.unwind_indent(self.column) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
164 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
165 # Peek the next character. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
166 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
167 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
168 # Is it the end of stream? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
169 if ch == u'\0': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
170 return self.fetch_stream_end() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
171 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
172 # Is it a directive? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
173 if ch == u'%' and self.check_directive(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
174 return self.fetch_directive() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
175 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
176 # Is it the document start? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
177 if ch == u'-' and self.check_document_start(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
178 return self.fetch_document_start() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
179 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
180 # Is it the document end? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
181 if ch == u'.' and self.check_document_end(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
182 return self.fetch_document_end() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
183 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
184 # TODO: support for BOM within a stream. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
185 #if ch == u'\uFEFF': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
186 # return self.fetch_bom() <-- issue BOMToken | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
187 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
188 # Note: the order of the following checks is NOT significant. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
189 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
190 # Is it the flow sequence start indicator? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
191 if ch == u'[': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
192 return self.fetch_flow_sequence_start() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
193 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
194 # Is it the flow mapping start indicator? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
195 if ch == u'{': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
196 return self.fetch_flow_mapping_start() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
197 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
198 # Is it the flow sequence end indicator? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
199 if ch == u']': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
200 return self.fetch_flow_sequence_end() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
201 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
202 # Is it the flow mapping end indicator? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
203 if ch == u'}': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
204 return self.fetch_flow_mapping_end() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
205 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
206 # Is it the flow entry indicator? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
207 if ch == u',': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
208 return self.fetch_flow_entry() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
209 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
210 # Is it the block entry indicator? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
211 if ch == u'-' and self.check_block_entry(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
212 return self.fetch_block_entry() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
213 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
214 # Is it the key indicator? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
215 if ch == u'?' and self.check_key(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
216 return self.fetch_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
217 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
218 # Is it the value indicator? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
219 if ch == u':' and self.check_value(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
220 return self.fetch_value() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
221 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
222 # Is it an alias? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
223 if ch == u'*': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
224 return self.fetch_alias() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
225 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
226 # Is it an anchor? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
227 if ch == u'&': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
228 return self.fetch_anchor() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
229 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
230 # Is it a tag? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
231 if ch == u'!': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
232 return self.fetch_tag() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
233 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
234 # Is it a literal scalar? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
235 if ch == u'|' and not self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
236 return self.fetch_literal() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
237 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
238 # Is it a folded scalar? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
239 if ch == u'>' and not self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
240 return self.fetch_folded() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
241 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
242 # Is it a single quoted scalar? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
243 if ch == u'\'': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
244 return self.fetch_single() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
245 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
246 # Is it a double quoted scalar? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
247 if ch == u'\"': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
248 return self.fetch_double() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
249 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
250 # It must be a plain scalar then. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
251 if self.check_plain(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
252 return self.fetch_plain() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
253 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
254 # No? It's an error. Let's produce a nice error message. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
255 raise ScannerError("while scanning for the next token", None, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
256 "found character %r that cannot start any token" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
257 % ch.encode('utf-8'), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
258 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
259 # Simple keys treatment. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
260 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
261 def next_possible_simple_key(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
262 # Return the number of the nearest possible simple key. Actually we | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
263 # don't need to loop through the whole dictionary. We may replace it | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
264 # with the following code: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
265 # if not self.possible_simple_keys: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
266 # return None | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
267 # return self.possible_simple_keys[ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
268 # min(self.possible_simple_keys.keys())].token_number | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
269 min_token_number = None | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
270 for level in self.possible_simple_keys: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
271 key = self.possible_simple_keys[level] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
272 if min_token_number is None or key.token_number < min_token_number: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
273 min_token_number = key.token_number | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
274 return min_token_number | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
275 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
276 def stale_possible_simple_keys(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
277 # Remove entries that are no longer possible simple keys. According to | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
278 # the YAML specification, simple keys | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
279 # - should be limited to a single line, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
280 # - should be no longer than 1024 characters. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
281 # Disabling this procedure will allow simple keys of any length and | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
282 # height (may cause problems if indentation is broken though). | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
283 for level in self.possible_simple_keys.keys(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
284 key = self.possible_simple_keys[level] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
285 if key.line != self.line \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
286 or self.index-key.index > 1024: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
287 if key.required: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
288 raise ScannerError("while scanning a simple key", key.mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
289 "could not found expected ':'", self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
290 del self.possible_simple_keys[level] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
291 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
292 def save_possible_simple_key(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
293 # The next token may start a simple key. We check if it's possible | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
294 # and save its position. This function is called for | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
295 # ALIAS, ANCHOR, TAG, SCALAR(flow), '[', and '{'. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
296 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
297 # Check if a simple key is required at the current position. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
298 required = not self.flow_level and self.indent == self.column | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
299 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
300 # A simple key is required only if it is the first token in the current | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
301 # line. Therefore it is always allowed. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
302 assert self.allow_simple_key or not required | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
303 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
304 # The next token might be a simple key. Let's save it's number and | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
305 # position. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
306 if self.allow_simple_key: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
307 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
308 token_number = self.tokens_taken+len(self.tokens) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
309 key = SimpleKey(token_number, required, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
310 self.index, self.line, self.column, self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
311 self.possible_simple_keys[self.flow_level] = key | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
312 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
313 def remove_possible_simple_key(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
314 # Remove the saved possible key position at the current flow level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
315 if self.flow_level in self.possible_simple_keys: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
316 key = self.possible_simple_keys[self.flow_level] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
317 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
318 if key.required: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
319 raise ScannerError("while scanning a simple key", key.mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
320 "could not found expected ':'", self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
321 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
322 del self.possible_simple_keys[self.flow_level] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
323 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
324 # Indentation functions. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
325 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
326 def unwind_indent(self, column): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
327 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
328 ## In flow context, tokens should respect indentation. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
329 ## Actually the condition should be `self.indent >= column` according to | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
330 ## the spec. But this condition will prohibit intuitively correct | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
331 ## constructions such as | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
332 ## key : { | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
333 ## } | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
334 #if self.flow_level and self.indent > column: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
335 # raise ScannerError(None, None, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
336 # "invalid intendation or unclosed '[' or '{'", | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
337 # self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
338 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
339 # In the flow context, indentation is ignored. We make the scanner less | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
340 # restrictive then specification requires. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
341 if self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
342 return | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
343 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
344 # In block context, we may need to issue the BLOCK-END tokens. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
345 while self.indent > column: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
346 mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
347 self.indent = self.indents.pop() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
348 self.tokens.append(BlockEndToken(mark, mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
349 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
350 def add_indent(self, column): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
351 # Check if we need to increase indentation. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
352 if self.indent < column: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
353 self.indents.append(self.indent) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
354 self.indent = column | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
355 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
356 return False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
357 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
358 # Fetchers. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
359 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
360 def fetch_stream_start(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
361 # We always add STREAM-START as the first token and STREAM-END as the | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
362 # last token. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
363 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
364 # Read the token. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
365 mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
366 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
367 # Add STREAM-START. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
368 self.tokens.append(StreamStartToken(mark, mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
369 encoding=self.encoding)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
370 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
371 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
372 def fetch_stream_end(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
373 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
374 # Set the current intendation to -1. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
375 self.unwind_indent(-1) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
376 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
377 # Reset simple keys. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
378 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
379 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
380 self.possible_simple_keys = {} | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
381 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
382 # Read the token. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
383 mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
384 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
385 # Add STREAM-END. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
386 self.tokens.append(StreamEndToken(mark, mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
387 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
388 # The steam is finished. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
389 self.done = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
390 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
391 def fetch_directive(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
392 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
393 # Set the current intendation to -1. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
394 self.unwind_indent(-1) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
395 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
396 # Reset simple keys. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
397 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
398 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
399 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
400 # Scan and add DIRECTIVE. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
401 self.tokens.append(self.scan_directive()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
402 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
403 def fetch_document_start(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
404 self.fetch_document_indicator(DocumentStartToken) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
405 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
406 def fetch_document_end(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
407 self.fetch_document_indicator(DocumentEndToken) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
408 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
409 def fetch_document_indicator(self, TokenClass): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
410 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
411 # Set the current intendation to -1. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
412 self.unwind_indent(-1) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
413 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
414 # Reset simple keys. Note that there could not be a block collection | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
415 # after '---'. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
416 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
417 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
418 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
419 # Add DOCUMENT-START or DOCUMENT-END. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
420 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
421 self.forward(3) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
422 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
423 self.tokens.append(TokenClass(start_mark, end_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
424 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
425 def fetch_flow_sequence_start(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
426 self.fetch_flow_collection_start(FlowSequenceStartToken) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
427 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
428 def fetch_flow_mapping_start(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
429 self.fetch_flow_collection_start(FlowMappingStartToken) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
430 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
431 def fetch_flow_collection_start(self, TokenClass): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
432 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
433 # '[' and '{' may start a simple key. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
434 self.save_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
435 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
436 # Increase the flow level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
437 self.flow_level += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
438 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
439 # Simple keys are allowed after '[' and '{'. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
440 self.allow_simple_key = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
441 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
442 # Add FLOW-SEQUENCE-START or FLOW-MAPPING-START. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
443 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
444 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
445 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
446 self.tokens.append(TokenClass(start_mark, end_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
447 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
448 def fetch_flow_sequence_end(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
449 self.fetch_flow_collection_end(FlowSequenceEndToken) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
450 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
451 def fetch_flow_mapping_end(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
452 self.fetch_flow_collection_end(FlowMappingEndToken) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
453 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
454 def fetch_flow_collection_end(self, TokenClass): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
455 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
456 # Reset possible simple key on the current level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
457 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
458 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
459 # Decrease the flow level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
460 self.flow_level -= 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
461 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
462 # No simple keys after ']' or '}'. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
463 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
464 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
465 # Add FLOW-SEQUENCE-END or FLOW-MAPPING-END. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
466 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
467 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
468 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
469 self.tokens.append(TokenClass(start_mark, end_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
470 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
471 def fetch_flow_entry(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
472 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
473 # Simple keys are allowed after ','. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
474 self.allow_simple_key = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
475 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
476 # Reset possible simple key on the current level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
477 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
478 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
479 # Add FLOW-ENTRY. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
480 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
481 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
482 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
483 self.tokens.append(FlowEntryToken(start_mark, end_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
484 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
485 def fetch_block_entry(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
486 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
487 # Block context needs additional checks. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
488 if not self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
489 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
490 # Are we allowed to start a new entry? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
491 if not self.allow_simple_key: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
492 raise ScannerError(None, None, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
493 "sequence entries are not allowed here", | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
494 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
495 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
496 # We may need to add BLOCK-SEQUENCE-START. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
497 if self.add_indent(self.column): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
498 mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
499 self.tokens.append(BlockSequenceStartToken(mark, mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
500 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
501 # It's an error for the block entry to occur in the flow context, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
502 # but we let the parser detect this. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
503 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
504 pass | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
505 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
506 # Simple keys are allowed after '-'. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
507 self.allow_simple_key = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
508 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
509 # Reset possible simple key on the current level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
510 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
511 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
512 # Add BLOCK-ENTRY. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
513 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
514 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
515 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
516 self.tokens.append(BlockEntryToken(start_mark, end_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
517 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
518 def fetch_key(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
519 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
520 # Block context needs additional checks. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
521 if not self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
522 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
523 # Are we allowed to start a key (not nessesary a simple)? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
524 if not self.allow_simple_key: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
525 raise ScannerError(None, None, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
526 "mapping keys are not allowed here", | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
527 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
528 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
529 # We may need to add BLOCK-MAPPING-START. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
530 if self.add_indent(self.column): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
531 mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
532 self.tokens.append(BlockMappingStartToken(mark, mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
533 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
534 # Simple keys are allowed after '?' in the block context. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
535 self.allow_simple_key = not self.flow_level | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
536 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
537 # Reset possible simple key on the current level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
538 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
539 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
540 # Add KEY. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
541 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
542 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
543 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
544 self.tokens.append(KeyToken(start_mark, end_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
545 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
546 def fetch_value(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
547 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
548 # Do we determine a simple key? | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
549 if self.flow_level in self.possible_simple_keys: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
550 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
551 # Add KEY. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
552 key = self.possible_simple_keys[self.flow_level] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
553 del self.possible_simple_keys[self.flow_level] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
554 self.tokens.insert(key.token_number-self.tokens_taken, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
555 KeyToken(key.mark, key.mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
556 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
557 # If this key starts a new block mapping, we need to add | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
558 # BLOCK-MAPPING-START. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
559 if not self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
560 if self.add_indent(key.column): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
561 self.tokens.insert(key.token_number-self.tokens_taken, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
562 BlockMappingStartToken(key.mark, key.mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
563 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
564 # There cannot be two simple keys one after another. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
565 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
566 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
567 # It must be a part of a complex key. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
568 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
569 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
570 # Block context needs additional checks. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
571 # (Do we really need them? They will be catched by the parser | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
572 # anyway.) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
573 if not self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
574 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
575 # We are allowed to start a complex value if and only if | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
576 # we can start a simple key. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
577 if not self.allow_simple_key: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
578 raise ScannerError(None, None, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
579 "mapping values are not allowed here", | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
580 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
581 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
582 # If this value starts a new block mapping, we need to add | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
583 # BLOCK-MAPPING-START. It will be detected as an error later by | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
584 # the parser. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
585 if not self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
586 if self.add_indent(self.column): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
587 mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
588 self.tokens.append(BlockMappingStartToken(mark, mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
589 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
590 # Simple keys are allowed after ':' in the block context. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
591 self.allow_simple_key = not self.flow_level | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
592 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
593 # Reset possible simple key on the current level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
594 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
595 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
596 # Add VALUE. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
597 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
598 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
599 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
600 self.tokens.append(ValueToken(start_mark, end_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
601 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
602 def fetch_alias(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
603 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
604 # ALIAS could be a simple key. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
605 self.save_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
606 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
607 # No simple keys after ALIAS. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
608 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
609 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
610 # Scan and add ALIAS. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
611 self.tokens.append(self.scan_anchor(AliasToken)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
612 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
613 def fetch_anchor(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
614 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
615 # ANCHOR could start a simple key. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
616 self.save_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
617 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
618 # No simple keys after ANCHOR. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
619 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
620 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
621 # Scan and add ANCHOR. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
622 self.tokens.append(self.scan_anchor(AnchorToken)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
623 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
624 def fetch_tag(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
625 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
626 # TAG could start a simple key. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
627 self.save_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
628 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
629 # No simple keys after TAG. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
630 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
631 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
632 # Scan and add TAG. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
633 self.tokens.append(self.scan_tag()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
634 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
635 def fetch_literal(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
636 self.fetch_block_scalar(style='|') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
637 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
638 def fetch_folded(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
639 self.fetch_block_scalar(style='>') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
640 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
641 def fetch_block_scalar(self, style): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
642 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
643 # A simple key may follow a block scalar. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
644 self.allow_simple_key = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
645 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
646 # Reset possible simple key on the current level. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
647 self.remove_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
648 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
649 # Scan and add SCALAR. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
650 self.tokens.append(self.scan_block_scalar(style)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
651 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
652 def fetch_single(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
653 self.fetch_flow_scalar(style='\'') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
654 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
655 def fetch_double(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
656 self.fetch_flow_scalar(style='"') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
657 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
658 def fetch_flow_scalar(self, style): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
659 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
660 # A flow scalar could be a simple key. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
661 self.save_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
662 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
663 # No simple keys after flow scalars. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
664 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
665 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
666 # Scan and add SCALAR. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
667 self.tokens.append(self.scan_flow_scalar(style)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
668 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
669 def fetch_plain(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
670 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
671 # A plain scalar could be a simple key. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
672 self.save_possible_simple_key() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
673 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
674 # No simple keys after plain scalars. But note that `scan_plain` will | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
675 # change this flag if the scan is finished at the beginning of the | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
676 # line. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
677 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
678 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
679 # Scan and add SCALAR. May change `allow_simple_key`. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
680 self.tokens.append(self.scan_plain()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
681 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
682 # Checkers. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
683 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
684 def check_directive(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
685 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
686 # DIRECTIVE: ^ '%' ... | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
687 # The '%' indicator is already checked. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
688 if self.column == 0: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
689 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
690 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
691 def check_document_start(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
692 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
693 # DOCUMENT-START: ^ '---' (' '|'\n') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
694 if self.column == 0: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
695 if self.prefix(3) == u'---' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
696 and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
697 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
698 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
699 def check_document_end(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
700 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
701 # DOCUMENT-END: ^ '...' (' '|'\n') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
702 if self.column == 0: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
703 if self.prefix(3) == u'...' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
704 and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
705 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
706 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
707 def check_block_entry(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
708 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
709 # BLOCK-ENTRY: '-' (' '|'\n') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
710 return self.peek(1) in u'\0 \t\r\n\x85\u2028\u2029' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
711 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
712 def check_key(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
713 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
714 # KEY(flow context): '?' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
715 if self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
716 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
717 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
718 # KEY(block context): '?' (' '|'\n') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
719 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
720 return self.peek(1) in u'\0 \t\r\n\x85\u2028\u2029' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
721 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
722 def check_value(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
723 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
724 # VALUE(flow context): ':' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
725 if self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
726 return True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
727 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
728 # VALUE(block context): ':' (' '|'\n') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
729 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
730 return self.peek(1) in u'\0 \t\r\n\x85\u2028\u2029' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
731 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
732 def check_plain(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
733 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
734 # A plain scalar may start with any non-space character except: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
735 # '-', '?', ':', ',', '[', ']', '{', '}', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
736 # '#', '&', '*', '!', '|', '>', '\'', '\"', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
737 # '%', '@', '`'. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
738 # | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
739 # It may also start with | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
740 # '-', '?', ':' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
741 # if it is followed by a non-space character. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
742 # | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
743 # Note that we limit the last rule to the block context (except the | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
744 # '-' character) because we want the flow context to be space | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
745 # independent. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
746 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
747 return ch not in u'\0 \t\r\n\x85\u2028\u2029-?:,[]{}#&*!|>\'\"%@`' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
748 or (self.peek(1) not in u'\0 \t\r\n\x85\u2028\u2029' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
749 and (ch == u'-' or (not self.flow_level and ch in u'?:'))) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
750 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
751 # Scanners. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
752 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
753 def scan_to_next_token(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
754 # We ignore spaces, line breaks and comments. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
755 # If we find a line break in the block context, we set the flag | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
756 # `allow_simple_key` on. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
757 # The byte order mark is stripped if it's the first character in the | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
758 # stream. We do not yet support BOM inside the stream as the | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
759 # specification requires. Any such mark will be considered as a part | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
760 # of the document. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
761 # | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
762 # TODO: We need to make tab handling rules more sane. A good rule is | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
763 # Tabs cannot precede tokens | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
764 # BLOCK-SEQUENCE-START, BLOCK-MAPPING-START, BLOCK-END, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
765 # KEY(block), VALUE(block), BLOCK-ENTRY | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
766 # So the checking code is | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
767 # if <TAB>: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
768 # self.allow_simple_keys = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
769 # We also need to add the check for `allow_simple_keys == True` to | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
770 # `unwind_indent` before issuing BLOCK-END. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
771 # Scanners for block, flow, and plain scalars need to be modified. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
772 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
773 if self.index == 0 and self.peek() == u'\uFEFF': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
774 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
775 found = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
776 while not found: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
777 while self.peek() == u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
778 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
779 if self.peek() == u'#': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
780 while self.peek() not in u'\0\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
781 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
782 if self.scan_line_break(): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
783 if not self.flow_level: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
784 self.allow_simple_key = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
785 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
786 found = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
787 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
788 def scan_directive(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
789 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
790 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
791 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
792 name = self.scan_directive_name(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
793 value = None | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
794 if name == u'YAML': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
795 value = self.scan_yaml_directive_value(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
796 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
797 elif name == u'TAG': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
798 value = self.scan_tag_directive_value(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
799 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
800 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
801 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
802 while self.peek() not in u'\0\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
803 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
804 self.scan_directive_ignored_line(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
805 return DirectiveToken(name, value, start_mark, end_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
806 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
807 def scan_directive_name(self, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
808 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
809 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
810 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
811 while u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
812 or ch in u'-_': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
813 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
814 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
815 if not length: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
816 raise ScannerError("while scanning a directive", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
817 "expected alphabetic or numeric character, but found %r" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
818 % ch.encode('utf-8'), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
819 value = self.prefix(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
820 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
821 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
822 if ch not in u'\0 \r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
823 raise ScannerError("while scanning a directive", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
824 "expected alphabetic or numeric character, but found %r" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
825 % ch.encode('utf-8'), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
826 return value | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
827 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
828 def scan_yaml_directive_value(self, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
829 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
830 while self.peek() == u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
831 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
832 major = self.scan_yaml_directive_number(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
833 if self.peek() != '.': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
834 raise ScannerError("while scanning a directive", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
835 "expected a digit or '.', but found %r" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
836 % self.peek().encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
837 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
838 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
839 minor = self.scan_yaml_directive_number(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
840 if self.peek() not in u'\0 \r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
841 raise ScannerError("while scanning a directive", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
842 "expected a digit or ' ', but found %r" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
843 % self.peek().encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
844 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
845 return (major, minor) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
846 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
847 def scan_yaml_directive_number(self, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
848 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
849 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
850 if not (u'0' <= ch <= u'9'): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
851 raise ScannerError("while scanning a directive", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
852 "expected a digit, but found %r" % ch.encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
853 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
854 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
855 while u'0' <= self.peek(length) <= u'9': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
856 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
857 value = int(self.prefix(length)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
858 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
859 return value | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
860 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
861 def scan_tag_directive_value(self, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
862 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
863 while self.peek() == u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
864 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
865 handle = self.scan_tag_directive_handle(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
866 while self.peek() == u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
867 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
868 prefix = self.scan_tag_directive_prefix(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
869 return (handle, prefix) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
870 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
871 def scan_tag_directive_handle(self, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
872 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
873 value = self.scan_tag_handle('directive', start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
874 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
875 if ch != u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
876 raise ScannerError("while scanning a directive", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
877 "expected ' ', but found %r" % ch.encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
878 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
879 return value | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
880 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
881 def scan_tag_directive_prefix(self, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
882 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
883 value = self.scan_tag_uri('directive', start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
884 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
885 if ch not in u'\0 \r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
886 raise ScannerError("while scanning a directive", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
887 "expected ' ', but found %r" % ch.encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
888 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
889 return value | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
890 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
891 def scan_directive_ignored_line(self, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
892 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
893 while self.peek() == u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
894 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
895 if self.peek() == u'#': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
896 while self.peek() not in u'\0\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
897 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
898 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
899 if ch not in u'\0\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
900 raise ScannerError("while scanning a directive", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
901 "expected a comment or a line break, but found %r" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
902 % ch.encode('utf-8'), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
903 self.scan_line_break() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
904 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
905 def scan_anchor(self, TokenClass): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
906 # The specification does not restrict characters for anchors and | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
907 # aliases. This may lead to problems, for instance, the document: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
908 # [ *alias, value ] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
909 # can be interpteted in two ways, as | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
910 # [ "value" ] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
911 # and | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
912 # [ *alias , "value" ] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
913 # Therefore we restrict aliases to numbers and ASCII letters. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
914 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
915 indicator = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
916 if indicator == u'*': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
917 name = 'alias' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
918 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
919 name = 'anchor' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
920 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
921 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
922 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
923 while u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
924 or ch in u'-_': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
925 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
926 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
927 if not length: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
928 raise ScannerError("while scanning an %s" % name, start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
929 "expected alphabetic or numeric character, but found %r" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
930 % ch.encode('utf-8'), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
931 value = self.prefix(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
932 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
933 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
934 if ch not in u'\0 \t\r\n\x85\u2028\u2029?:,]}%@`': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
935 raise ScannerError("while scanning an %s" % name, start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
936 "expected alphabetic or numeric character, but found %r" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
937 % ch.encode('utf-8'), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
938 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
939 return TokenClass(value, start_mark, end_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
940 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
941 def scan_tag(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
942 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
943 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
944 ch = self.peek(1) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
945 if ch == u'<': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
946 handle = None | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
947 self.forward(2) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
948 suffix = self.scan_tag_uri('tag', start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
949 if self.peek() != u'>': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
950 raise ScannerError("while parsing a tag", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
951 "expected '>', but found %r" % self.peek().encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
952 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
953 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
954 elif ch in u'\0 \t\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
955 handle = None | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
956 suffix = u'!' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
957 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
958 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
959 length = 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
960 use_handle = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
961 while ch not in u'\0 \r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
962 if ch == u'!': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
963 use_handle = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
964 break | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
965 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
966 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
967 handle = u'!' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
968 if use_handle: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
969 handle = self.scan_tag_handle('tag', start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
970 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
971 handle = u'!' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
972 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
973 suffix = self.scan_tag_uri('tag', start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
974 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
975 if ch not in u'\0 \r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
976 raise ScannerError("while scanning a tag", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
977 "expected ' ', but found %r" % ch.encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
978 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
979 value = (handle, suffix) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
980 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
981 return TagToken(value, start_mark, end_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
982 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
983 def scan_block_scalar(self, style): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
984 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
985 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
986 if style == '>': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
987 folded = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
988 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
989 folded = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
990 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
991 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
992 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
993 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
994 # Scan the header. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
995 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
996 chomping, increment = self.scan_block_scalar_indicators(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
997 self.scan_block_scalar_ignored_line(start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
998 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
999 # Determine the indentation level and go to the first non-empty line. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1000 min_indent = self.indent+1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1001 if min_indent < 1: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1002 min_indent = 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1003 if increment is None: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1004 breaks, max_indent, end_mark = self.scan_block_scalar_indentation() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1005 indent = max(min_indent, max_indent) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1006 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1007 indent = min_indent+increment-1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1008 breaks, end_mark = self.scan_block_scalar_breaks(indent) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1009 line_break = u'' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1010 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1011 # Scan the inner part of the block scalar. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1012 while self.column == indent and self.peek() != u'\0': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1013 chunks.extend(breaks) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1014 leading_non_space = self.peek() not in u' \t' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1015 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1016 while self.peek(length) not in u'\0\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1017 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1018 chunks.append(self.prefix(length)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1019 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1020 line_break = self.scan_line_break() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1021 breaks, end_mark = self.scan_block_scalar_breaks(indent) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1022 if self.column == indent and self.peek() != u'\0': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1023 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1024 # Unfortunately, folding rules are ambiguous. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1025 # | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1026 # This is the folding according to the specification: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1027 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1028 if folded and line_break == u'\n' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1029 and leading_non_space and self.peek() not in u' \t': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1030 if not breaks: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1031 chunks.append(u' ') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1032 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1033 chunks.append(line_break) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1034 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1035 # This is Clark Evans's interpretation (also in the spec | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1036 # examples): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1037 # | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1038 #if folded and line_break == u'\n': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1039 # if not breaks: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1040 # if self.peek() not in ' \t': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1041 # chunks.append(u' ') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1042 # else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1043 # chunks.append(line_break) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1044 #else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1045 # chunks.append(line_break) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1046 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1047 break | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1048 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1049 # Chomp the tail. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1050 if chomping is not False: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1051 chunks.append(line_break) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1052 if chomping is True: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1053 chunks.extend(breaks) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1054 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1055 # We are done. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1056 return ScalarToken(u''.join(chunks), False, start_mark, end_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1057 style) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1058 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1059 def scan_block_scalar_indicators(self, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1060 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1061 chomping = None | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1062 increment = None | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1063 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1064 if ch in u'+-': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1065 if ch == '+': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1066 chomping = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1067 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1068 chomping = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1069 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1070 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1071 if ch in u'0123456789': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1072 increment = int(ch) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1073 if increment == 0: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1074 raise ScannerError("while scanning a block scalar", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1075 "expected indentation indicator in the range 1-9, but found 0", | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1076 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1077 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1078 elif ch in u'0123456789': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1079 increment = int(ch) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1080 if increment == 0: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1081 raise ScannerError("while scanning a block scalar", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1082 "expected indentation indicator in the range 1-9, but found 0", | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1083 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1084 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1085 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1086 if ch in u'+-': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1087 if ch == '+': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1088 chomping = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1089 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1090 chomping = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1091 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1092 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1093 if ch not in u'\0 \r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1094 raise ScannerError("while scanning a block scalar", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1095 "expected chomping or indentation indicators, but found %r" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1096 % ch.encode('utf-8'), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1097 return chomping, increment | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1098 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1099 def scan_block_scalar_ignored_line(self, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1100 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1101 while self.peek() == u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1102 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1103 if self.peek() == u'#': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1104 while self.peek() not in u'\0\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1105 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1106 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1107 if ch not in u'\0\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1108 raise ScannerError("while scanning a block scalar", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1109 "expected a comment or a line break, but found %r" | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1110 % ch.encode('utf-8'), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1111 self.scan_line_break() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1112 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1113 def scan_block_scalar_indentation(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1114 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1115 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1116 max_indent = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1117 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1118 while self.peek() in u' \r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1119 if self.peek() != u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1120 chunks.append(self.scan_line_break()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1121 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1122 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1123 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1124 if self.column > max_indent: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1125 max_indent = self.column | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1126 return chunks, max_indent, end_mark | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1127 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1128 def scan_block_scalar_breaks(self, indent): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1129 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1130 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1131 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1132 while self.column < indent and self.peek() == u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1133 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1134 while self.peek() in u'\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1135 chunks.append(self.scan_line_break()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1136 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1137 while self.column < indent and self.peek() == u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1138 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1139 return chunks, end_mark | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1140 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1141 def scan_flow_scalar(self, style): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1142 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1143 # Note that we loose indentation rules for quoted scalars. Quoted | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1144 # scalars don't need to adhere indentation because " and ' clearly | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1145 # mark the beginning and the end of them. Therefore we are less | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1146 # restrictive then the specification requires. We only need to check | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1147 # that document separators are not included in scalars. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1148 if style == '"': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1149 double = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1150 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1151 double = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1152 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1153 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1154 quote = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1155 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1156 chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1157 while self.peek() != quote: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1158 chunks.extend(self.scan_flow_scalar_spaces(double, start_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1159 chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1160 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1161 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1162 return ScalarToken(u''.join(chunks), False, start_mark, end_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1163 style) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1164 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1165 ESCAPE_REPLACEMENTS = { | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1166 u'0': u'\0', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1167 u'a': u'\x07', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1168 u'b': u'\x08', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1169 u't': u'\x09', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1170 u'\t': u'\x09', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1171 u'n': u'\x0A', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1172 u'v': u'\x0B', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1173 u'f': u'\x0C', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1174 u'r': u'\x0D', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1175 u'e': u'\x1B', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1176 u' ': u'\x20', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1177 u'\"': u'\"', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1178 u'\\': u'\\', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1179 u'N': u'\x85', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1180 u'_': u'\xA0', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1181 u'L': u'\u2028', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1182 u'P': u'\u2029', | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1183 } | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1184 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1185 ESCAPE_CODES = { | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1186 u'x': 2, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1187 u'u': 4, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1188 u'U': 8, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1189 } | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1190 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1191 def scan_flow_scalar_non_spaces(self, double, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1192 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1193 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1194 while True: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1195 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1196 while self.peek(length) not in u'\'\"\\\0 \t\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1197 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1198 if length: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1199 chunks.append(self.prefix(length)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1200 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1201 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1202 if not double and ch == u'\'' and self.peek(1) == u'\'': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1203 chunks.append(u'\'') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1204 self.forward(2) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1205 elif (double and ch == u'\'') or (not double and ch in u'\"\\'): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1206 chunks.append(ch) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1207 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1208 elif double and ch == u'\\': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1209 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1210 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1211 if ch in self.ESCAPE_REPLACEMENTS: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1212 chunks.append(self.ESCAPE_REPLACEMENTS[ch]) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1213 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1214 elif ch in self.ESCAPE_CODES: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1215 length = self.ESCAPE_CODES[ch] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1216 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1217 for k in range(length): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1218 if self.peek(k) not in u'0123456789ABCDEFabcdef': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1219 raise ScannerError("while scanning a double-quoted scalar", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1220 "expected escape sequence of %d hexdecimal numbers, but found %r" % | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1221 (length, self.peek(k).encode('utf-8')), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1222 code = int(self.prefix(length), 16) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1223 chunks.append(unichr(code)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1224 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1225 elif ch in u'\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1226 self.scan_line_break() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1227 chunks.extend(self.scan_flow_scalar_breaks(double, start_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1228 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1229 raise ScannerError("while scanning a double-quoted scalar", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1230 "found unknown escape character %r" % ch.encode('utf-8'), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1231 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1232 return chunks | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1233 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1234 def scan_flow_scalar_spaces(self, double, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1235 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1236 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1237 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1238 while self.peek(length) in u' \t': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1239 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1240 whitespaces = self.prefix(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1241 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1242 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1243 if ch == u'\0': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1244 raise ScannerError("while scanning a quoted scalar", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1245 "found unexpected end of stream", self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1246 elif ch in u'\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1247 line_break = self.scan_line_break() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1248 breaks = self.scan_flow_scalar_breaks(double, start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1249 if line_break != u'\n': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1250 chunks.append(line_break) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1251 elif not breaks: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1252 chunks.append(u' ') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1253 chunks.extend(breaks) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1254 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1255 chunks.append(whitespaces) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1256 return chunks | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1257 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1258 def scan_flow_scalar_breaks(self, double, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1259 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1260 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1261 while True: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1262 # Instead of checking indentation, we check for document | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1263 # separators. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1264 prefix = self.prefix(3) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1265 if (prefix == u'---' or prefix == u'...') \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1266 and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1267 raise ScannerError("while scanning a quoted scalar", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1268 "found unexpected document separator", self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1269 while self.peek() in u' \t': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1270 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1271 if self.peek() in u'\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1272 chunks.append(self.scan_line_break()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1273 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1274 return chunks | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1275 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1276 def scan_plain(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1277 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1278 # We add an additional restriction for the flow context: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1279 # plain scalars in the flow context cannot contain ',', ':' and '?'. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1280 # We also keep track of the `allow_simple_key` flag here. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1281 # Indentation rules are loosed for the flow context. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1282 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1283 start_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1284 end_mark = start_mark | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1285 indent = self.indent+1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1286 # We allow zero indentation for scalars, but then we need to check for | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1287 # document separators at the beginning of the line. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1288 #if indent == 0: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1289 # indent = 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1290 spaces = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1291 while True: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1292 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1293 if self.peek() == u'#': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1294 break | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1295 while True: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1296 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1297 if ch in u'\0 \t\r\n\x85\u2028\u2029' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1298 or (not self.flow_level and ch == u':' and | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1299 self.peek(length+1) in u'\0 \t\r\n\x85\u2028\u2029') \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1300 or (self.flow_level and ch in u',:?[]{}'): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1301 break | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1302 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1303 # It's not clear what we should do with ':' in the flow context. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1304 if (self.flow_level and ch == u':' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1305 and self.peek(length+1) not in u'\0 \t\r\n\x85\u2028\u2029,[]{}'): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1306 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1307 raise ScannerError("while scanning a plain scalar", start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1308 "found unexpected ':'", self.get_mark(), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1309 "Please check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.") | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1310 if length == 0: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1311 break | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1312 self.allow_simple_key = False | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1313 chunks.extend(spaces) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1314 chunks.append(self.prefix(length)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1315 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1316 end_mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1317 spaces = self.scan_plain_spaces(indent, start_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1318 if not spaces or self.peek() == u'#' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1319 or (not self.flow_level and self.column < indent): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1320 break | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1321 return ScalarToken(u''.join(chunks), True, start_mark, end_mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1322 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1323 def scan_plain_spaces(self, indent, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1324 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1325 # The specification is really confusing about tabs in plain scalars. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1326 # We just forbid them completely. Do not use tabs in YAML! | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1327 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1328 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1329 while self.peek(length) in u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1330 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1331 whitespaces = self.prefix(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1332 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1333 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1334 if ch in u'\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1335 line_break = self.scan_line_break() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1336 self.allow_simple_key = True | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1337 prefix = self.prefix(3) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1338 if (prefix == u'---' or prefix == u'...') \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1339 and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1340 return | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1341 breaks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1342 while self.peek() in u' \r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1343 if self.peek() == ' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1344 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1345 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1346 breaks.append(self.scan_line_break()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1347 prefix = self.prefix(3) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1348 if (prefix == u'---' or prefix == u'...') \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1349 and self.peek(3) in u'\0 \t\r\n\x85\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1350 return | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1351 if line_break != u'\n': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1352 chunks.append(line_break) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1353 elif not breaks: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1354 chunks.append(u' ') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1355 chunks.extend(breaks) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1356 elif whitespaces: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1357 chunks.append(whitespaces) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1358 return chunks | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1359 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1360 def scan_tag_handle(self, name, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1361 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1362 # For some strange reasons, the specification does not allow '_' in | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1363 # tag handles. I have allowed it anyway. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1364 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1365 if ch != u'!': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1366 raise ScannerError("while scanning a %s" % name, start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1367 "expected '!', but found %r" % ch.encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1368 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1369 length = 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1370 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1371 if ch != u' ': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1372 while u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1373 or ch in u'-_': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1374 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1375 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1376 if ch != u'!': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1377 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1378 raise ScannerError("while scanning a %s" % name, start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1379 "expected '!', but found %r" % ch.encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1380 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1381 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1382 value = self.prefix(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1383 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1384 return value | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1385 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1386 def scan_tag_uri(self, name, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1387 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1388 # Note: we do not check if URI is well-formed. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1389 chunks = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1390 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1391 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1392 while u'0' <= ch <= u'9' or u'A' <= ch <= u'Z' or u'a' <= ch <= u'z' \ | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1393 or ch in u'-;/?:@&=+$,_.!~*\'()[]%': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1394 if ch == u'%': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1395 chunks.append(self.prefix(length)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1396 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1397 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1398 chunks.append(self.scan_uri_escapes(name, start_mark)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1399 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1400 length += 1 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1401 ch = self.peek(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1402 if length: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1403 chunks.append(self.prefix(length)) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1404 self.forward(length) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1405 length = 0 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1406 if not chunks: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1407 raise ScannerError("while parsing a %s" % name, start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1408 "expected URI, but found %r" % ch.encode('utf-8'), | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1409 self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1410 return u''.join(chunks) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1411 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1412 def scan_uri_escapes(self, name, start_mark): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1413 # See the specification for details. | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1414 bytes = [] | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1415 mark = self.get_mark() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1416 while self.peek() == u'%': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1417 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1418 for k in range(2): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1419 if self.peek(k) not in u'0123456789ABCDEFabcdef': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1420 raise ScannerError("while scanning a %s" % name, start_mark, | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1421 "expected URI escape sequence of 2 hexdecimal numbers, but found %r" % | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1422 (self.peek(k).encode('utf-8')), self.get_mark()) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1423 bytes.append(chr(int(self.prefix(2), 16))) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1424 self.forward(2) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1425 try: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1426 value = unicode(''.join(bytes), 'utf-8') | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1427 except UnicodeDecodeError, exc: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1428 raise ScannerError("while scanning a %s" % name, start_mark, str(exc), mark) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1429 return value | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1430 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1431 def scan_line_break(self): | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1432 # Transforms: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1433 # '\r\n' : '\n' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1434 # '\r' : '\n' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1435 # '\n' : '\n' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1436 # '\x85' : '\n' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1437 # '\u2028' : '\u2028' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1438 # '\u2029 : '\u2029' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1439 # default : '' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1440 ch = self.peek() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1441 if ch in u'\r\n\x85': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1442 if self.prefix(2) == u'\r\n': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1443 self.forward(2) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1444 else: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1445 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1446 return u'\n' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1447 elif ch in u'\u2028\u2029': | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1448 self.forward() | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1449 return ch | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1450 return u'' | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1451 | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1452 #try: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1453 # import psyco | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1454 # psyco.bind(Scanner) | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1455 #except ImportError: | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1456 # pass | 
| 
 
d67268158946
planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
 
bcclaywell 
parents:  
diff
changeset
 | 
1457 | 
