33/// Simplified version based on js-yaml v3.13.1
44
55// Parser state
6- struct ParserState {
6+ priv struct ParserState {
77 input : String
88 mut position : Int
99 mut line : Int
@@ -69,12 +69,12 @@ fn ParserState::skip_whitespace(self : ParserState) -> Unit {
6969fn ParserState ::read_until (
7070 self : ParserState ,
7171 predicate : (Int ) -> Bool ,
72- ) -> String {
72+ ) -> String raise {
7373 let start = self .position
7474 while self .position < self .length && predicate (self .current_char ()) {
7575 self .advance ()
7676 }
77- self .input. substring ( start ~, end = self .position)
77+ self .input[ start : self .position]. to_string ( )
7878}
7979
8080///|
@@ -92,7 +92,7 @@ fn sanitize_input_internal(input : String) -> String {
9292
9393///|
9494/// Parse a scalar value
95- fn parse_scalar (state : ParserState ) -> YamlValue raise YamlParseError {
95+ fn parse_scalar (state : ParserState ) -> YamlValue raise {
9696 state .skip_whitespace ()
9797 if state .current_char () == 0 {
9898 return YamlValue ::Null
@@ -128,11 +128,11 @@ fn parse_double_quoted_string(
128128 0x09 => result + = "\t " // \t
129129 _ => {
130130 result + = "\\ "
131- result + = Char :: from_int (escaped ).to_string ()
131+ result + = Int :: unsafe_to_char (escaped ).to_string ()
132132 }
133133 }
134134 } else {
135- result + = Char :: from_int (ch ).to_string ()
135+ result + = Int :: unsafe_to_char (ch ).to_string ()
136136 }
137137 state .advance ()
138138 }
@@ -159,7 +159,7 @@ fn parse_single_quoted_string(
159159 state .advance ()
160160 state .advance ()
161161 } else {
162- result + = Char :: from_int (ch ).to_string ()
162+ result + = Int :: unsafe_to_char (ch ).to_string ()
163163 state .advance ()
164164 }
165165 }
@@ -173,7 +173,7 @@ fn parse_single_quoted_string(
173173
174174///|
175175/// Parse plain scalar (unquoted)
176- fn parse_plain_scalar (state : ParserState ) -> YamlValue {
176+ fn parse_plain_scalar (state : ParserState ) -> YamlValue raise {
177177 let text = state .read_until (fn (ch ) {
178178 !is_whitespace_or_eol (ch ) &&
179179 !is_flow_indicator (ch ) &&
@@ -247,7 +247,7 @@ fn contains_dot(text : String) -> Bool {
247247
248248///|
249249/// Simple integer parsing
250- fn parse_int_simple (text : @string . View ) -> Int {
250+ fn parse_int_simple (text : StringView ) -> Int {
251251 let mut result = 0
252252 let mut negative = false
253253 let start = if text [0 ] == 45 { // 45 is '-'
@@ -295,7 +295,7 @@ fn power_of_10(n : Int) -> Int {
295295
296296///|
297297/// Parse array (sequence)
298- fn parse_array (state : ParserState ) -> YamlValue raise YamlParseError {
298+ fn parse_array (state : ParserState ) -> YamlValue raise {
299299 state .advance () // Skip '['
300300 state .skip_whitespace ()
301301 let result = []
@@ -325,7 +325,7 @@ fn parse_array(state : ParserState) -> YamlValue raise YamlParseError {
325325
326326///|
327327/// Parse object (mapping)
328- fn parse_object (state : ParserState ) -> YamlValue raise YamlParseError {
328+ fn parse_object (state : ParserState ) -> YamlValue raise {
329329 state .advance () // Skip '{'
330330 state .skip_whitespace ()
331331 let result = Map ::new ()
@@ -372,7 +372,7 @@ fn parse_object(state : ParserState) -> YamlValue raise YamlParseError {
372372
373373///|
374374/// Parse any YAML value
375- fn parse_value (state : ParserState ) -> YamlValue raise YamlParseError {
375+ fn parse_value (state : ParserState ) -> YamlValue raise {
376376 state .skip_whitespace ()
377377 let ch = state .current_char ()
378378 if ch == 0 {
@@ -408,9 +408,7 @@ fn ParserState::skip_document_separator(self : ParserState) -> Unit {
408408
409409///|
410410/// Read all documents from the input
411- fn ParserState ::read_documents (
412- self : ParserState ,
413- ) -> Array [YamlValue ] raise YamlParseError {
411+ fn ParserState ::read_documents (self : ParserState ) -> Array [YamlValue ] raise {
414412 let documents = []
415413 self .skip_whitespace ()
416414
@@ -439,7 +437,7 @@ fn ParserState::read_documents(
439437pub fn parse (
440438 content : String ,
441439 options ? : ParseOptions = ParseOptions ::new (),
442- ) -> YamlValue raise YamlParseError {
440+ ) -> YamlValue raise {
443441 let state = ParserState ::new (content , options )
444442
445443 // Use read_documents to get all documents
@@ -461,7 +459,7 @@ pub fn parse(
461459pub fn parse_all (
462460 content : String ,
463461 options ? : ParseOptions = ParseOptions ::new (),
464- ) -> Array [YamlValue ] raise YamlParseError {
462+ ) -> Array [YamlValue ] raise {
465463 let state = ParserState ::new (content , options )
466464 state .read_documents ()
467465}
0 commit comments