Support text direction (#235)

* fix: Add text direction

* fix: Add element

* fix: add js if and update test

* fix example

* spec: update snaps

* update
main
bokuweb 2021-03-03 10:35:50 +09:00 committed by GitHub
parent c2a96f6952
commit f14fbdcb75
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 237 additions and 17 deletions

View File

@ -12,7 +12,8 @@ pub fn main() -> Result<(), DocxError> {
TableCell::new() TableCell::new()
.add_paragraph(Paragraph::new().add_run(Run::new().add_text("Hello"))) .add_paragraph(Paragraph::new().add_run(Run::new().add_text("Hello")))
.vertical_align(VAlignType::Center) .vertical_align(VAlignType::Center)
.vertical_merge(VMergeType::Restart), .vertical_merge(VMergeType::Restart)
.text_direction(TextDirectionType::TbRlV),
]), ]),
TableRow::new(vec![ TableRow::new(vec![
TableCell::new() TableCell::new()

View File

@ -75,6 +75,7 @@ mod table_style;
mod table_width; mod table_width;
mod text; mod text;
mod text_box_content; mod text_box_content;
mod text_direction;
mod underline; mod underline;
mod vanish; mod vanish;
mod vertical_align; mod vertical_align;
@ -161,6 +162,7 @@ pub use table_style::*;
pub use table_width::*; pub use table_width::*;
pub use text::*; pub use text::*;
pub use text_box_content::*; pub use text_box_content::*;
pub use text_direction::*;
pub use underline::*; pub use underline::*;
pub use vanish::*; pub use vanish::*;
pub use vertical_align::*; pub use vertical_align::*;

View File

@ -58,6 +58,11 @@ impl TableCell {
self self
} }
pub fn text_direction(mut self, t: TextDirectionType) -> TableCell {
self.property = self.property.text_direction(t);
self
}
pub fn grid_span(mut self, v: usize) -> TableCell { pub fn grid_span(mut self, v: usize) -> TableCell {
self.property = self.property.grid_span(v); self.property = self.property.grid_span(v);
self self
@ -146,7 +151,7 @@ mod tests {
.grid_span(2); .grid_span(2);
assert_eq!( assert_eq!(
serde_json::to_string(&c).unwrap(), serde_json::to_string(&c).unwrap(),
r#"{"children":[{"type":"paragraph","data":{"id":"12345678","children":[{"type":"run","data":{"runProperty":{"sz":null,"szCs":null,"color":null,"highlight":null,"underline":null,"bold":null,"boldCs":null,"italic":null,"italicCs":null,"vanish":null,"spacing":null,"fonts":null},"children":[{"type":"text","data":{"preserveSpace":true,"text":"Hello"}}]}}],"property":{"runProperty":{"sz":null,"szCs":null,"color":null,"highlight":null,"underline":null,"bold":null,"boldCs":null,"italic":null,"italicCs":null,"vanish":null,"spacing":null,"fonts":null},"style":null,"numberingProperty":null,"alignment":null,"indent":null,"lineHeight":null},"hasNumbering":false}}],"property":{"width":null,"borders":null,"gridSpan":2,"verticalMerge":null,"verticalAlign":null},"hasNumbering":false}"# r#"{"children":[{"type":"paragraph","data":{"id":"12345678","children":[{"type":"run","data":{"runProperty":{"sz":null,"szCs":null,"color":null,"highlight":null,"underline":null,"bold":null,"boldCs":null,"italic":null,"italicCs":null,"vanish":null,"spacing":null,"fonts":null},"children":[{"type":"text","data":{"preserveSpace":true,"text":"Hello"}}]}}],"property":{"runProperty":{"sz":null,"szCs":null,"color":null,"highlight":null,"underline":null,"bold":null,"boldCs":null,"italic":null,"italicCs":null,"vanish":null,"spacing":null,"fonts":null},"style":null,"numberingProperty":null,"alignment":null,"indent":null,"lineHeight":null},"hasNumbering":false}}],"property":{"width":null,"borders":null,"gridSpan":2,"verticalMerge":null,"verticalAlign":null,"textDirection":null},"hasNumbering":false}"#
); );
} }
} }

View File

@ -13,6 +13,7 @@ pub struct TableCellProperty {
grid_span: Option<GridSpan>, grid_span: Option<GridSpan>,
vertical_merge: Option<VMerge>, vertical_merge: Option<VMerge>,
vertical_align: Option<VAlign>, vertical_align: Option<VAlign>,
text_direction: Option<TextDirection>,
} }
impl TableCellProperty { impl TableCellProperty {
@ -35,6 +36,11 @@ impl TableCellProperty {
self self
} }
pub fn text_direction(mut self, t: TextDirectionType) -> Self {
self.text_direction = Some(TextDirection::new(t));
self
}
pub fn grid_span(mut self, v: usize) -> TableCellProperty { pub fn grid_span(mut self, v: usize) -> TableCellProperty {
self.grid_span = Some(GridSpan::new(v)); self.grid_span = Some(GridSpan::new(v));
self self
@ -69,6 +75,7 @@ impl Default for TableCellProperty {
grid_span: None, grid_span: None,
vertical_merge: None, vertical_merge: None,
vertical_align: None, vertical_align: None,
text_direction: None,
} }
} }
} }
@ -82,6 +89,7 @@ impl BuildXML for TableCellProperty {
.add_optional_child(&self.grid_span) .add_optional_child(&self.grid_span)
.add_optional_child(&self.vertical_merge) .add_optional_child(&self.vertical_merge)
.add_optional_child(&self.vertical_align) .add_optional_child(&self.vertical_align)
.add_optional_child(&self.text_direction)
.close() .close()
.build() .build()
} }
@ -140,7 +148,7 @@ mod tests {
.width(200, WidthType::DXA); .width(200, WidthType::DXA);
assert_eq!( assert_eq!(
serde_json::to_string(&c).unwrap(), serde_json::to_string(&c).unwrap(),
r#"{"width":{"width":200,"widthType":"DXA"},"borders":null,"gridSpan":3,"verticalMerge":"continue","verticalAlign":null}"# r#"{"width":{"width":200,"widthType":"DXA"},"borders":null,"gridSpan":3,"verticalMerge":"continue","verticalAlign":null,"textDirection":null}"#
); );
} }
@ -149,7 +157,7 @@ mod tests {
let c = TableCellProperty::new().vertical_align(VAlignType::Center); let c = TableCellProperty::new().vertical_align(VAlignType::Center);
assert_eq!( assert_eq!(
serde_json::to_string(&c).unwrap(), serde_json::to_string(&c).unwrap(),
r#"{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":"center"}"# r#"{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":"center","textDirection":null}"#
); );
} }
} }

View File

@ -76,7 +76,7 @@ mod tests {
let r = TableRow::new(vec![TableCell::new()]); let r = TableRow::new(vec![TableCell::new()]);
assert_eq!( assert_eq!(
serde_json::to_string(&r).unwrap(), serde_json::to_string(&r).unwrap(),
r#"{"cells":[{"children":[],"property":{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":null},"hasNumbering":false}],"hasNumbering":false,"property":{"gridAfter":null,"widthAfter":null,"rowHeight":null,"heightRule":null}}"# r#"{"cells":[{"children":[],"property":{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":null,"textDirection":null},"hasNumbering":false}],"hasNumbering":false,"property":{"gridAfter":null,"widthAfter":null,"rowHeight":null,"heightRule":null}}"#
); );
} }
} }

View File

@ -0,0 +1,33 @@
use serde::{Serialize, Serializer};
use crate::documents::BuildXML;
use crate::types::*;
use crate::xml_builder::*;
#[derive(Debug, Clone, PartialEq)]
pub struct TextDirection {
val: TextDirectionType,
}
impl TextDirection {
pub fn new(t: TextDirectionType) -> TextDirection {
TextDirection { val: t }
}
}
impl BuildXML for TextDirection {
fn build(&self) -> Vec<u8> {
XMLBuilder::new()
.text_direction(&self.val.to_string())
.build()
}
}
impl Serialize for TextDirection {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_str(&format!("{}", &self.val))
}
}

View File

@ -75,6 +75,14 @@ impl ElementReader for TableCell {
)?); )?);
} }
} }
XMLElement::TextDirection => {
if let Some(a) = &attributes.get(0) {
if let Ok(v) = TextDirectionType::from_str(&a.value)
{
cell = cell.text_direction(v);
}
}
}
XMLElement::TableCellBorders => { XMLElement::TableCellBorders => {
let borders = TableCellBorders::read(r, &attributes)?; let borders = TableCellBorders::read(r, &attributes)?;
cell = cell.set_borders(borders); cell = cell.set_borders(borders);

View File

@ -50,6 +50,7 @@ pub enum XMLElement {
CommentExtended, CommentExtended,
CommentsExtended, CommentsExtended,
VAlign, VAlign,
TextDirection,
Table, Table,
TableProperty, TableProperty,
TableRow, TableRow,
@ -225,6 +226,7 @@ impl FromStr for XMLElement {
"gridSpan" => Ok(XMLElement::TableGridSpan), "gridSpan" => Ok(XMLElement::TableGridSpan),
"gridAfter" => Ok(XMLElement::GridAfter), "gridAfter" => Ok(XMLElement::GridAfter),
"wAfter" => Ok(XMLElement::WidthAfter), "wAfter" => Ok(XMLElement::WidthAfter),
"textDirection" => Ok(XMLElement::TextDirection),
"tblW" => Ok(XMLElement::TableWidth), "tblW" => Ok(XMLElement::TableWidth),
"tblInd" => Ok(XMLElement::TableIndent), "tblInd" => Ok(XMLElement::TableIndent),
"tblBorders" => Ok(XMLElement::TableBorders), "tblBorders" => Ok(XMLElement::TableBorders),

View File

@ -5,6 +5,7 @@ pub mod break_type;
pub mod emu; pub mod emu;
pub mod errors; pub mod errors;
pub mod font_pitch_type; pub mod font_pitch_type;
pub mod height_rule;
pub mod level_suffix_type; pub mod level_suffix_type;
pub mod page_margin; pub mod page_margin;
pub mod section_type; pub mod section_type;
@ -12,10 +13,10 @@ pub mod spacing;
pub mod special_indent_type; pub mod special_indent_type;
pub mod style_type; pub mod style_type;
pub mod table_alignment_type; pub mod table_alignment_type;
pub mod text_direction_type;
pub mod vertical_align_type; pub mod vertical_align_type;
pub mod vertical_merge_type; pub mod vertical_merge_type;
pub mod width_type; pub mod width_type;
pub mod height_rule;
pub use alignment_type::*; pub use alignment_type::*;
pub use border_position::*; pub use border_position::*;
@ -24,6 +25,7 @@ pub use break_type::*;
pub use emu::*; pub use emu::*;
pub use errors::*; pub use errors::*;
pub use font_pitch_type::*; pub use font_pitch_type::*;
pub use height_rule::*;
pub use level_suffix_type::*; pub use level_suffix_type::*;
pub use page_margin::*; pub use page_margin::*;
pub use section_type::*; pub use section_type::*;
@ -31,7 +33,7 @@ pub use spacing::*;
pub use special_indent_type::*; pub use special_indent_type::*;
pub use style_type::*; pub use style_type::*;
pub use table_alignment_type::*; pub use table_alignment_type::*;
pub use text_direction_type::*;
pub use vertical_align_type::*; pub use vertical_align_type::*;
pub use vertical_merge_type::*; pub use vertical_merge_type::*;
pub use width_type::*; pub use width_type::*;
pub use height_rule::*;

View File

@ -0,0 +1,61 @@
use std::fmt;
use wasm_bindgen::prelude::*;
use serde::Serialize;
use super::errors;
use std::str::FromStr;
// ST_TextDirection defines `lr`, `lrV`, `rl`, `rlV`, `tb`, `tbV`.
// However Microsoft word use `tbRlV`, `tbRl`, `btLr`, `lrTbV`.
#[wasm_bindgen]
#[derive(Debug, Clone, Copy, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum TextDirectionType {
Lr,
LrV,
Rl,
RlV,
Tb,
TbV,
TbRlV,
TbRl,
BtLr,
LrTbV,
}
impl fmt::Display for TextDirectionType {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
TextDirectionType::Lr => write!(f, "lr"),
TextDirectionType::LrV => write!(f, "lrV"),
TextDirectionType::Rl => write!(f, "rl"),
TextDirectionType::RlV => write!(f, "rlV"),
TextDirectionType::Tb => write!(f, "tb"),
TextDirectionType::TbV => write!(f, "tbV"),
TextDirectionType::TbRlV => write!(f, "tbRlV"),
TextDirectionType::TbRl => write!(f, "tbRl"),
TextDirectionType::BtLr => write!(f, "btLr"),
TextDirectionType::LrTbV => write!(f, "lrTbV"),
}
}
}
impl FromStr for TextDirectionType {
type Err = errors::TypeError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"lr" => Ok(TextDirectionType::Lr),
"lrV" => Ok(TextDirectionType::LrV),
"rl" => Ok(TextDirectionType::Rl),
"rlV" => Ok(TextDirectionType::RlV),
"tb" => Ok(TextDirectionType::Tb),
"tbV" => Ok(TextDirectionType::TbV),
"tbRlV" => Ok(TextDirectionType::TbRlV),
"tbRl" => Ok(TextDirectionType::TbRl),
"btLr" => Ok(TextDirectionType::BtLr),
"lrTbV" => Ok(TextDirectionType::LrTbV),
_ => Err(errors::TypeError::FromStrError),
}
}
}

View File

@ -82,6 +82,8 @@ impl XMLBuilder {
// i.e. <w:szCs ... > // i.e. <w:szCs ... >
closed_with_usize!(sz_cs, "w:szCs"); closed_with_usize!(sz_cs, "w:szCs");
closed_with_str!(text_direction, "w:textDirection");
closed!(b, "w:b"); closed!(b, "w:b");
closed!(b_cs, "w:bCs"); closed!(b_cs, "w:bCs");

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,7 @@ import { Insert } from "./insert";
import { Delete } from "./delete"; import { Delete } from "./delete";
import { DeleteText } from "./delete-text"; import { DeleteText } from "./delete-text";
import { Table } from "./table"; import { Table } from "./table";
import { TableCell } from "./table-cell"; import { TableCell, toTextDirectionWasmType } from "./table-cell";
import { BorderType } from "./table-cell-border"; import { BorderType } from "./table-cell-border";
import { Run, RunFonts } from "./run"; import { Run, RunFonts } from "./run";
import { Text } from "./text"; import { Text } from "./text";
@ -470,6 +470,13 @@ export class Docx {
if (typeof c.property.width !== "undefined") { if (typeof c.property.width !== "undefined") {
cell = cell.width(c.property.width); cell = cell.width(c.property.width);
} }
if (typeof c.property.textDirection !== "undefined") {
cell = cell.text_direction(
toTextDirectionWasmType(c.property.textDirection)
);
}
if (typeof c.property.borders !== "undefined") { if (typeof c.property.borders !== "undefined") {
if (c.property.borders.top) { if (c.property.borders.top) {
const border = wasm const border = wasm

View File

@ -1,10 +1,12 @@
import { ParagraphJSON } from "./paragraph"; import { ParagraphJSON } from "./paragraph";
import { BorderJSON } from "./border"; import { BorderJSON } from "./border";
import { HeightRule } from "../table-row"; import { HeightRule } from "../table-row";
import { TextDirectionType } from "../table-cell";
export type TableCellChildJSON = ParagraphJSON; export type TableCellChildJSON = ParagraphJSON;
export type WidthType = "DXA" | "Auto" | "Pct"; export type WidthType = "DXA" | "Auto" | "Pct";
export { TextDirectionType } from "../table-cell";
export { HeightRule } from "../table-row"; export { HeightRule } from "../table-row";
@ -17,6 +19,7 @@ export type TableCellPropertyJSON = {
gridSpan: number | null; gridSpan: number | null;
verticalMerge: "restart" | "continue" | null; verticalMerge: "restart" | "continue" | null;
verticalAlign: "top" | "center" | "bottom" | null; verticalAlign: "top" | "center" | "bottom" | null;
textDirection: TextDirectionType | null;
hasNumbering: boolean; hasNumbering: boolean;
}; };

View File

@ -1,17 +1,60 @@
import { Paragraph } from "./paragraph"; import { Paragraph } from "./paragraph";
import { TableCellBorders, PositionKeys } from "./table-cell-borders"; import { TableCellBorders, PositionKeys } from "./table-cell-borders";
import { BorderPosition, TableCellBorder } from "./table-cell-border"; import { BorderPosition, TableCellBorder } from "./table-cell-border";
import * as wasm from "./pkg";
export type VMergeType = "restart" | "continue"; export type VMergeType = "restart" | "continue";
export type VAlignType = "top" | "center" | "bottom"; export type VAlignType = "top" | "center" | "bottom";
export type TextDirectionType =
| "lr"
| "lrV"
| "rl"
| "rlV"
| "tb"
| "tbV"
| "tbRlV"
| "tbRl"
| "btLr"
| "lrTbV";
export const toTextDirectionWasmType = (
t: TextDirectionType
): wasm.TextDirectionType => {
switch (t) {
case "lr":
return wasm.TextDirectionType.Lr;
case "lrV":
return wasm.TextDirectionType.LrV;
case "rl":
return wasm.TextDirectionType.Rl;
case "rlV":
return wasm.TextDirectionType.RlV;
case "tb":
return wasm.TextDirectionType.Tb;
case "tbV":
return wasm.TextDirectionType.TbV;
case "tbRlV":
return wasm.TextDirectionType.TbRlV;
case "tbRl":
return wasm.TextDirectionType.TbRl;
case "btLr":
return wasm.TextDirectionType.BtLr;
case "lrTbV":
return wasm.TextDirectionType.LrTbV;
default:
throw new Error("unreachable");
}
};
export type CellProperty = { export type CellProperty = {
borders: TableCellBorders; borders: TableCellBorders;
verticalMerge?: VMergeType; verticalMerge?: VMergeType;
verticalAlign?: VAlignType; verticalAlign?: VAlignType;
gridSpan?: number; gridSpan?: number;
width?: number; width?: number;
textDirection?: TextDirectionType;
}; };
export class TableCell { export class TableCell {
@ -49,6 +92,11 @@ export class TableCell {
return this; return this;
} }
textDirection(t: TextDirectionType) {
this.property.textDirection = t;
return this;
}
setBorder(position: BorderPosition, border: TableCellBorder) { setBorder(position: BorderPosition, border: TableCellBorder) {
this.property.borders[position.toLowerCase() as PositionKeys] = border; this.property.borders[position.toLowerCase() as PositionKeys] = border;
return this; return this;

View File

@ -1,6 +1,6 @@
{ {
"name": "docx-wasm", "name": "docx-wasm",
"version": "0.0.143", "version": "0.0.144",
"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>",

View File

@ -45,6 +45,11 @@ impl TableCell {
self self
} }
pub fn text_direction(mut self, t: docx_rs::TextDirectionType) -> TableCell {
self.0.property = self.0.property.text_direction(t);
self
}
pub fn set_border(mut self, border: TableCellBorder) -> TableCell { pub fn set_border(mut self, border: TableCellBorder) -> TableCell {
self.0.property = self.0.property.set_border(border.take()); self.0.property = self.0.property.set_border(border.take());
self self

View File

@ -1003,6 +1003,7 @@ Object {
}, },
}, },
"gridSpan": 5, "gridSpan": 5,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -1089,6 +1090,7 @@ Object {
}, },
}, },
"gridSpan": 3, "gridSpan": 3,
"textDirection": null,
"verticalAlign": "center", "verticalAlign": "center",
"verticalMerge": "restart", "verticalMerge": "restart",
"width": Object { "width": Object {
@ -1164,6 +1166,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": "center", "verticalAlign": "center",
"verticalMerge": "restart", "verticalMerge": "restart",
"width": Object { "width": Object {
@ -1250,6 +1253,7 @@ Object {
}, },
}, },
"gridSpan": 3, "gridSpan": 3,
"textDirection": null,
"verticalAlign": "center", "verticalAlign": "center",
"verticalMerge": "continue", "verticalMerge": "continue",
"width": Object { "width": Object {
@ -1325,6 +1329,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": "center", "verticalAlign": "center",
"verticalMerge": "continue", "verticalMerge": "continue",
"width": Object { "width": Object {
@ -1411,6 +1416,7 @@ Object {
}, },
}, },
"gridSpan": 2, "gridSpan": 2,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -1486,6 +1492,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -1572,6 +1579,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -1647,6 +1655,7 @@ Object {
}, },
}, },
"gridSpan": 2, "gridSpan": 2,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -1733,6 +1742,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -1808,6 +1818,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -1883,6 +1894,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -1969,6 +1981,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -2044,6 +2057,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -2119,6 +2133,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -2199,6 +2214,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -2268,6 +2284,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -2343,6 +2360,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -2429,6 +2447,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -2504,6 +2523,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -2579,6 +2599,7 @@ Object {
}, },
}, },
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9176,6 +9197,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9220,6 +9242,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9264,6 +9287,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9308,6 +9332,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9363,6 +9388,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9407,6 +9433,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9451,6 +9478,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9495,6 +9523,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9550,6 +9579,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9594,6 +9624,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9638,6 +9669,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {
@ -9682,6 +9714,7 @@ Object {
"property": Object { "property": Object {
"borders": null, "borders": null,
"gridSpan": null, "gridSpan": null,
"textDirection": null,
"verticalAlign": null, "verticalAlign": null,
"verticalMerge": null, "verticalMerge": null,
"width": Object { "width": Object {