parent
880f9802bc
commit
a6245193d0
|
@ -1,5 +1,5 @@
|
|||
use crate::documents::BuildXML;
|
||||
// use crate::xml_builder::*;
|
||||
use crate::xml_builder::*;
|
||||
|
||||
use serde::Serialize;
|
||||
|
||||
|
@ -25,9 +25,70 @@ impl LevelOverride {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: Now read only
|
||||
impl BuildXML for LevelOverride {
|
||||
fn build(&self) -> Vec<u8> {
|
||||
vec![]
|
||||
let mut b = XMLBuilder::new();
|
||||
b = b.open_level_override(&format!("{}", self.level));
|
||||
|
||||
if let Some(start) = self.start {
|
||||
b = b.start_override(&format!("{}", start));
|
||||
}
|
||||
|
||||
b.close().build()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
use super::*;
|
||||
#[cfg(test)]
|
||||
use pretty_assertions::assert_eq;
|
||||
use std::str;
|
||||
|
||||
#[test]
|
||||
fn test_level_override() {
|
||||
let c = LevelOverride::new(1).start(2);
|
||||
let b = c.build();
|
||||
assert_eq!(
|
||||
str::from_utf8(&b).unwrap(),
|
||||
r#"<w:lvlOverride w:ilvl="1">
|
||||
<w:startOverride w:val="2" />
|
||||
</w:lvlOverride>"#
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Example
|
||||
/*
|
||||
<w:num w:numId="5">
|
||||
<w:abstractNumId w:val="0"/>
|
||||
<w:lvlOverride w:ilvl="0">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
<w:lvlOverride w:ilvl="1">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
<w:lvlOverride w:ilvl="2">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
<w:lvlOverride w:ilvl="3">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
<w:lvlOverride w:ilvl="4">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
<w:lvlOverride w:ilvl="5">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
<w:lvlOverride w:ilvl="6">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
<w:lvlOverride w:ilvl="7">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
<w:lvlOverride w:ilvl="8">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
</w:num>
|
||||
*/
|
||||
|
|
|
@ -9,7 +9,7 @@ use serde::Serialize;
|
|||
pub struct Numbering {
|
||||
id: usize,
|
||||
abstract_num_id: usize,
|
||||
level_overrides: Vec<LevelOverride>,
|
||||
pub level_overrides: Vec<LevelOverride>,
|
||||
}
|
||||
|
||||
impl Numbering {
|
||||
|
@ -25,6 +25,11 @@ impl Numbering {
|
|||
self.level_overrides = overrides;
|
||||
self
|
||||
}
|
||||
|
||||
pub fn add_override(mut self, o: LevelOverride) -> Self {
|
||||
self.level_overrides.push(o);
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl BuildXML for Numbering {
|
||||
|
@ -32,7 +37,11 @@ impl BuildXML for Numbering {
|
|||
let b = XMLBuilder::new();
|
||||
let id = format!("{}", self.id);
|
||||
let abs_id = format!("{}", self.abstract_num_id);
|
||||
b.open_num(&id).abstract_num_id(&abs_id).close().build()
|
||||
b.open_num(&id)
|
||||
.abstract_num_id(&abs_id)
|
||||
.add_children(&self.level_overrides)
|
||||
.close()
|
||||
.build()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,29 +64,24 @@ mod tests {
|
|||
</w:num>"#
|
||||
);
|
||||
}
|
||||
/* TODO: enable when builder implemented
|
||||
#[test]
|
||||
fn test_numbering_override() {
|
||||
let c = Numbering::new(0, 2);
|
||||
let overrides = vec![
|
||||
LevelOverride::new(0).start(1),
|
||||
LevelOverride::new(1).start(1),
|
||||
];
|
||||
let b = c.overrides(overrides).build();
|
||||
assert_eq!(
|
||||
str::from_utf8(&b).unwrap(),
|
||||
r#"<w:num w:numId="0">
|
||||
<w:abstractNumId w:val="2" />
|
||||
<w:lvlOverride w:ilvl="0">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
<w:lvlOverride w:ilvl="1">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
</w:num>"#
|
||||
);
|
||||
}
|
||||
*/
|
||||
#[test]
|
||||
fn test_numbering_override() {
|
||||
let c = Numbering::new(0, 2);
|
||||
let overrides = vec![
|
||||
LevelOverride::new(0).start(1),
|
||||
LevelOverride::new(1).start(1),
|
||||
];
|
||||
let b = c.overrides(overrides).build();
|
||||
assert_eq!(
|
||||
str::from_utf8(&b).unwrap(),
|
||||
r#"<w:num w:numId="0">
|
||||
<w:abstractNumId w:val="2" /><w:lvlOverride w:ilvl="0">
|
||||
<w:startOverride w:val="1" />
|
||||
</w:lvlOverride><w:lvlOverride w:ilvl="1">
|
||||
<w:startOverride w:val="1" />
|
||||
</w:lvlOverride></w:num>"#
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_numbering_override_json() {
|
||||
|
|
|
@ -228,6 +228,14 @@ impl XMLBuilder {
|
|||
open!(open_wp_shape, "wps:wsp");
|
||||
open!(open_wp_text_box, "wps:txbx");
|
||||
open!(open_text_box_content, "w:txbxContent");
|
||||
|
||||
/*
|
||||
<w:lvlOverride w:ilvl="0">
|
||||
<w:startOverride w:val="1"/>
|
||||
</w:lvlOverride>
|
||||
*/
|
||||
open!(open_level_override, "w:lvlOverride", "w:ilvl");
|
||||
closed_with_str!(start_override, "w:startOverride");
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
@ -410,6 +410,13 @@ export class Docx {
|
|||
|
||||
this.numberings.forEach((n) => {
|
||||
let num = wasm.createNumbering(n.id, n.abstractNumId);
|
||||
n.overrides.forEach((o) => {
|
||||
let levelOverride = wasm.createLevelOverride(o.level);
|
||||
if (o.startOverride !== null) {
|
||||
levelOverride = levelOverride.start(o.startOverride);
|
||||
}
|
||||
num = num.add_override(levelOverride);
|
||||
});
|
||||
docx = docx.add_numbering(num);
|
||||
});
|
||||
|
||||
|
|
|
@ -30,8 +30,22 @@ export class Level {
|
|||
this.paragraphProperty.indent = {
|
||||
left,
|
||||
specialIndentKind,
|
||||
specialIndentSize
|
||||
specialIndentSize,
|
||||
};
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
export class LevelOverride {
|
||||
level: number;
|
||||
startOverride: number | null = null;
|
||||
|
||||
constructor(level: number) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
start(start: number) {
|
||||
this.startOverride = start;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
import { LevelOverride } from "./level";
|
||||
|
||||
export class Numbering {
|
||||
id: number;
|
||||
abstractNumId: number;
|
||||
overrides: LevelOverride[];
|
||||
|
||||
constructor(id: number, abstractNumId: number) {
|
||||
this.id = id;
|
||||
this.abstractNumId = abstractNumId;
|
||||
}
|
||||
|
||||
addOverride(o: LevelOverride) {
|
||||
this.overrides.push(o);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "docx-wasm",
|
||||
"version": "0.0.72",
|
||||
"version": "0.0.75",
|
||||
"main": "dist/node/index.js",
|
||||
"browser": "dist/web/index.js",
|
||||
"author": "bokuweb <bokuweb12@gmail.com>",
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
use wasm_bindgen::prelude::*;
|
||||
|
||||
#[wasm_bindgen]
|
||||
#[derive(Debug)]
|
||||
pub struct LevelOverride(docx_rs::LevelOverride);
|
||||
|
||||
#[wasm_bindgen(js_name = createLevelOverride)]
|
||||
pub fn create_level_override(level: usize) -> LevelOverride {
|
||||
LevelOverride(docx_rs::LevelOverride::new(level))
|
||||
}
|
||||
|
||||
impl LevelOverride {
|
||||
pub fn take(self) -> docx_rs::LevelOverride {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
impl LevelOverride {
|
||||
pub fn start(mut self, start: usize) -> Self {
|
||||
self.0 = self.0.start(start);
|
||||
self
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@ mod delete;
|
|||
mod doc;
|
||||
mod insert;
|
||||
mod level;
|
||||
mod level_override;
|
||||
mod numbering;
|
||||
mod paragraph;
|
||||
mod reader;
|
||||
|
@ -21,6 +22,7 @@ pub use delete::*;
|
|||
pub use doc::*;
|
||||
pub use insert::*;
|
||||
pub use level::*;
|
||||
pub use level_override::*;
|
||||
pub use numbering::*;
|
||||
pub use paragraph::*;
|
||||
pub use reader::*;
|
||||
|
|
|
@ -14,3 +14,11 @@ impl Numbering {
|
|||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
impl Numbering {
|
||||
pub fn add_override(mut self, o: super::LevelOverride) -> Self {
|
||||
self.0.level_overrides.push(o.take());
|
||||
self
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue