diff options
| -rw-r--r-- | src/emitter.rs | 4 | ||||
| -rw-r--r-- | src/machine.rs | 6 | ||||
| -rw-r--r-- | src/spans.rs | 5 | ||||
| -rw-r--r-- | tests/span-tests/demo.out | 8 | 
4 files changed, 13 insertions, 10 deletions
| diff --git a/src/emitter.rs b/src/emitter.rs index 1ab01f0..48ac391 100644 --- a/src/emitter.rs +++ b/src/emitter.rs @@ -132,9 +132,11 @@ pub trait Emitter<R> {      fn init_attribute_name(&mut self, reader: &R);      /// Called before the first push_attribute_value call. +    /// If the value is wrappend in double or single quotes `quoted` is set to true, otherwise false.      ///      /// If there is no current attribute, this method may panic. -    fn init_attribute_value(&mut self, #[allow(unused_variables)] reader: &R) {} +    #[allow(unused_variables)] +    fn init_attribute_value(&mut self, reader: &R, quoted: bool) {}      /// Append a string to the current attribute's name.      /// diff --git a/src/machine.rs b/src/machine.rs index 80b37d6..4300f45 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -763,12 +763,12 @@ pub fn consume<R: Reader, E: Emitter<R>>(          State::BeforeAttributeValue => match slf.read_char()? {              Some(whitespace_pat!()) => Ok(ControlToken::Continue),              Some('"') => { -                slf.emitter.init_attribute_value(&slf.reader); +                slf.emitter.init_attribute_value(&slf.reader, true);                  slf.state = State::AttributeValueDoubleQuoted;                  Ok(ControlToken::Continue)              }              Some('\'') => { -                slf.emitter.init_attribute_value(&slf.reader); +                slf.emitter.init_attribute_value(&slf.reader, true);                  slf.state = State::AttributeValueSingleQuoted;                  Ok(ControlToken::Continue)              } @@ -779,7 +779,7 @@ pub fn consume<R: Reader, E: Emitter<R>>(                  Ok(ControlToken::Continue)              }              c => { -                slf.emitter.init_attribute_value(&slf.reader); +                slf.emitter.init_attribute_value(&slf.reader, false);                  slf.state = State::AttributeValueUnquoted;                  slf.unread_char(c);                  Ok(ControlToken::Continue) diff --git a/src/spans.rs b/src/spans.rs index ab455f9..6d7c18e 100644 --- a/src/spans.rs +++ b/src/spans.rs @@ -273,9 +273,10 @@ impl<R: GetPos> Emitter<R> for SpanEmitter<R> {          ));      } -    fn init_attribute_value(&mut self, reader: &R) { +    fn init_attribute_value(&mut self, reader: &R, quoted: bool) {          let current_attr = self.current_attribute.as_mut().unwrap(); -        current_attr.1.value_span = reader.get_pos() - 1..reader.get_pos() - 1; +        let offset = if quoted { 0 } else { 1 }; +        current_attr.1.value_span = reader.get_pos() - offset..reader.get_pos() - offset;      }      fn push_attribute_name(&mut self, s: &str) { diff --git a/tests/span-tests/demo.out b/tests/span-tests/demo.out index 156247e..ad9cfb8 100644 --- a/tests/span-tests/demo.out +++ b/tests/span-tests/demo.out @@ -12,8 +12,8 @@ note:    │                                attr name  4 │  5 │ Attribute values can be quoted: <input name = 'age' type = "number"> -  │                                        ^^^^   ^^^   ^^^^   ^^^^^^ attr value -  │                                        │      │     │ -  │                                        │      │     attr name -  │                                        │      attr value +  │                                        ^^^^    ^^^  ^^^^    ^^^^^^ attr value +  │                                        │       │    │ +  │                                        │       │    attr name +  │                                        │       attr value    │                                        attr name | 
