parent
d8ea19e7cf
commit
61d42f4d3c
|
@ -11,6 +11,7 @@ use crate::types::BreakType;
|
||||||
|
|
||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
enum TextState {
|
enum TextState {
|
||||||
|
Idle,
|
||||||
Text,
|
Text,
|
||||||
Delete,
|
Delete,
|
||||||
}
|
}
|
||||||
|
@ -21,7 +22,7 @@ impl ElementReader for Run {
|
||||||
_attrs: &[OwnedAttribute],
|
_attrs: &[OwnedAttribute],
|
||||||
) -> Result<Self, ReaderError> {
|
) -> Result<Self, ReaderError> {
|
||||||
let mut run = Run::new();
|
let mut run = Run::new();
|
||||||
let mut text_state = TextState::Text;
|
let mut text_state = TextState::Idle;
|
||||||
loop {
|
loop {
|
||||||
let e = r.next();
|
let e = r.next();
|
||||||
match e {
|
match e {
|
||||||
|
@ -46,18 +47,33 @@ impl ElementReader for Run {
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(XmlEvent::Characters(c)) => {
|
Ok(XmlEvent::Characters(c)) => match text_state {
|
||||||
if text_state == TextState::Delete {
|
TextState::Delete => {
|
||||||
run = run.add_delete_text(c);
|
run = run.add_delete_text(c);
|
||||||
} else {
|
}
|
||||||
|
TextState::Text => {
|
||||||
run = run.add_text(c);
|
run = run.add_text(c);
|
||||||
}
|
}
|
||||||
|
_ => {}
|
||||||
|
},
|
||||||
|
Ok(XmlEvent::Whitespace(c)) => match text_state {
|
||||||
|
TextState::Delete => {
|
||||||
|
run = run.add_delete_text(c);
|
||||||
}
|
}
|
||||||
|
TextState::Text => {
|
||||||
|
run = run.add_text(c);
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
},
|
||||||
Ok(XmlEvent::EndElement { name, .. }) => {
|
Ok(XmlEvent::EndElement { name, .. }) => {
|
||||||
let e = XMLElement::from_str(&name.local_name).unwrap();
|
let e = XMLElement::from_str(&name.local_name).unwrap();
|
||||||
if let XMLElement::Run = e {
|
match e {
|
||||||
|
XMLElement::Run => {
|
||||||
return Ok(run);
|
return Ok(run);
|
||||||
}
|
}
|
||||||
|
XMLElement::DeleteText | XMLElement::Text => text_state = TextState::Idle,
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Err(_) => return Err(ReaderError::XMLReadError),
|
Err(_) => return Err(ReaderError::XMLReadError),
|
||||||
_ => {}
|
_ => {}
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "docx-wasm",
|
"name": "docx-wasm",
|
||||||
"version": "0.0.37",
|
"version": "0.0.38",
|
||||||
"main": "dist/node/index.js",
|
"main": "dist/node/index.js",
|
||||||
"browser": "dist/web/index.js",
|
"browser": "dist/web/index.js",
|
||||||
"author": "bokuweb <bokuweb12@gmail.com>",
|
"author": "bokuweb <bokuweb12@gmail.com>",
|
||||||
|
|
Loading…
Reference in New Issue