pax_global_header00006660000000000000000000000064145452517450014526gustar00rootroot0000000000000052 comment=e99d773fe53f5fde3c4fd903cab6950f9db33b98 pandoc-ast-0.8.6/000077500000000000000000000000001454525174500135725ustar00rootroot00000000000000pandoc-ast-0.8.6/.github/000077500000000000000000000000001454525174500151325ustar00rootroot00000000000000pandoc-ast-0.8.6/.github/workflows/000077500000000000000000000000001454525174500171675ustar00rootroot00000000000000pandoc-ast-0.8.6/.github/workflows/rust.yml000066400000000000000000000020501454525174500207040ustar00rootroot00000000000000name: Rust on: push: branches: [ "main" ] pull_request: branches: [ "main" ] env: CARGO_TERM_COLOR: always jobs: fmt: name: check rustfmt runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt - name: Format run: cargo fmt --check clippy: name: check clippy runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: components: clippy - name: Clippy run: cargo clippy -- -D warnings tests: strategy: matrix: include: - os: ubuntu-latest host_target: x86_64-unknown-linux-gnu - os: macos-latest host_target: x86_64-apple-darwin - os: windows-latest host_target: i686-pc-windows-msvc runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - name: Run unit tests run: cargo test --verbose pandoc-ast-0.8.6/.gitignore000066400000000000000000000000231454525174500155550ustar00rootroot00000000000000/target Cargo.lock pandoc-ast-0.8.6/Cargo.toml000066400000000000000000000007011454525174500155200ustar00rootroot00000000000000[package] name = "pandoc_ast" version = "0.8.6" authors = ["Oliver Scherer "] readme = "README.md" keywords = ["latex", "markdown", "pandoc", "filter", "ast"] repository = "https://github.com/oli-obk/pandoc-ast" license = "MIT" description = "deserializes and serializes the markdown ast for writing pandoc filters" edition = "2021" [dependencies] serde = "1.0.2" serde_json = "1.0.1" serde_derive = "1.0.2" pandoc-ast-0.8.6/README.md000066400000000000000000000014231454525174500150510ustar00rootroot00000000000000This crate allows you to implement filters for pandoc. The easiest way is to them in conjunction with the `pandoc` crate. You can also create a binary that reads from stdin and writes to stdout and pass that to a normal pandoc call with `--filter` # Instructions ```rust fn main() { let mut pandoc = pandoc::new(); ... pandoc.add_filter(|json| pandoc_ast::filter(json, |mut pandoc| { for block in &mut pandoc.1 { use pandoc_ast::Block::*; *block = match *block { CodeBlock((_, ref kinds, _), _) if kinds.iter().next() == Some("graphviz") => { // do something to change a graphviz block into an image } } } pandoc })); pandoc.execute().unwrap(); } ``` pandoc-ast-0.8.6/examples/000077500000000000000000000000001454525174500154105ustar00rootroot00000000000000pandoc-ast-0.8.6/examples/removenotes.rs000066400000000000000000000012111454525174500203170ustar00rootroot00000000000000extern crate pandoc_ast; use pandoc_ast::{Inline, MutVisitor}; use std::io::{self, Read, Write}; struct MyVisitor; impl MutVisitor for MyVisitor { fn visit_vec_inline(&mut self, vec_inline: &mut Vec) { vec_inline.retain(|inline| match inline { &Inline::Note(_) => false, _ => true, }); self.walk_vec_inline(vec_inline); } } fn main() { let mut s = String::new(); io::stdin().read_to_string(&mut s).unwrap(); let s = pandoc_ast::filter(s, |mut pandoc| { MyVisitor.walk_pandoc(&mut pandoc); pandoc }); io::stdout().write(s.as_bytes()).unwrap(); } pandoc-ast-0.8.6/examples/uppercase.rs000066400000000000000000000011531454525174500177450ustar00rootroot00000000000000extern crate pandoc_ast; use pandoc_ast::{Inline, MutVisitor}; use std::io::{self, Read, Write}; struct MyVisitor; impl MutVisitor for MyVisitor { fn visit_inline(&mut self, inline: &mut Inline) { if let Inline::Str(ref mut s) = *inline { *s = s.to_uppercase(); return; } self.walk_inline(inline); } } fn main() { let mut s = String::new(); io::stdin().read_to_string(&mut s).unwrap(); let s = pandoc_ast::filter(s, |mut pandoc| { MyVisitor.walk_pandoc(&mut pandoc); pandoc }); io::stdout().write(s.as_bytes()).unwrap(); } pandoc-ast-0.8.6/src/000077500000000000000000000000001454525174500143615ustar00rootroot00000000000000pandoc-ast-0.8.6/src/lib.rs000066400000000000000000000176121454525174500155040ustar00rootroot00000000000000mod visitor; use serde_derive::{Deserialize, Serialize}; use serde_json::{from_str, to_string}; pub use std::collections::BTreeMap as Map; pub use visitor::*; pub type Int = i64; pub type Double = f64; /// the root object of a pandoc document #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] pub struct Pandoc { pub meta: Map, pub blocks: Vec, #[serde(rename = "pandoc-api-version")] pub pandoc_api_version: Vec, } impl Pandoc { pub fn from_json(json: &str) -> Self { let v: serde_json::Value = from_str(json).unwrap(); let obj = v.as_object().expect("broken pandoc json"); fn pandoc_version(obj: &serde_json::Map) -> Option<(i64, i64)> { let version = obj .get("pandoc-api-version")? .as_array()? .iter() .map(|v| v.as_i64()) .collect::>(); match version[..] { [Some(major), Some(minor), ..] => Some((major, minor)), _ => None, } } // test pandoc version if let Some((major, minor)) = pandoc_version(obj) { if !(major == 1 && minor >= 20) { panic!( "Pandoc version mismatch: \ `pandoc-ast` expects pandoc version 1.20 or newer, got {}.{}", major, minor ); } } else { panic!( "Unable to parse pandoc version from JSON. \ Please update your pandoc to at least version 1.18 or use an older version of `pandoc-ast`" ); } let s = serde_json::to_string_pretty(&v).unwrap(); let data: Self = match from_str(&s) { Ok(data) => data, Err(err) => panic!("json is not in the pandoc format: {:?}\n{}", err, s), }; data } pub fn to_json(&self) -> String { to_string(self).expect("serialization failed") } } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] #[serde(tag = "t", content = "c")] pub enum MetaValue { MetaMap(Map>), MetaList(Vec), MetaBool(bool), MetaString(String), MetaInlines(Vec), MetaBlocks(Vec), } /// Structured text like tables and lists #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] #[serde(tag = "t", content = "c")] pub enum Block { /// Plain text, not a paragraph Plain(Vec), /// Paragraph Para(Vec), /// Multiple non-breaking lines LineBlock(Vec>), /// Code block (literal) with attributes CodeBlock(Attr, String), RawBlock(Format, String), /// Block quote (list of blocks) BlockQuote(Vec), /// Ordered list (attributes and a list of items, each a list of blocks) OrderedList(ListAttributes, Vec>), /// Bullet list (list of items, each a list of blocks) BulletList(Vec>), /// Definition list Each list item is a pair consisting of a term (a list of inlines) /// and one or more definitions (each a list of blocks) DefinitionList(Vec<(Vec, Vec>)>), /// Figure, with attributes, caption, list of blocks Figure(Attr, Caption, Vec), /// Header - level (integer) and text (inlines) Header(Int, Attr, Vec), HorizontalRule, /// Table, with attributes, caption, column alignments + widths /// column headers (each a list of rows), body and foot Table( Attr, Caption, Vec, TableHead, Vec, TableFoot, ), /// Generic block container with attributes Div(Attr, Vec), /// Nothing Null, } /// a single formatting item like bold, italic or hyperlink #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] #[serde(tag = "t", content = "c")] pub enum Inline { /// Text Str(String), /// Emphasized text Emph(Vec), /// Underlined text Underline(Vec), /// Strongly emphasized text Strong(Vec), Strikeout(Vec), Superscript(Vec), Subscript(Vec), SmallCaps(Vec), /// Quoted text Quoted(QuoteType, Vec), /// Citation Cite(Vec, Vec), /// Inline code (literal) Code(Attr, String), /// Inter-word space Space, /// Soft line break SoftBreak, /// Hard line break LineBreak, /// TeX math (literal) Math(MathType, String), RawInline(Format, String), /// Hyperlink: text (list of inlines), target // "Link":[ // ["",[],[]], // [{"Str":"1"}], // ["#ref-scala_plugin",""] // ] Link(Attr, Vec, Target), /// Image: alt text (list of inlines), target Image(Attr, Vec, Target), /// Footnote or endnote Note(Vec), /// Generic inline container with attributes Span(Attr, Vec), } /// Alignment of a table column. #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)] #[serde(tag = "t")] pub enum Alignment { AlignLeft, AlignRight, AlignCenter, AlignDefault, } pub type ListAttributes = (Int, ListNumberStyle, ListNumberDelim); /// Style of list numbers. #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)] #[serde(tag = "t")] pub enum ListNumberStyle { DefaultStyle, Example, Decimal, LowerRoman, UpperRoman, LowerAlpha, UpperAlpha, } /// Delimiter of list numbers. #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)] #[serde(tag = "t")] pub enum ListNumberDelim { DefaultDelim, Period, OneParen, TwoParens, } /// Formats for raw blocks #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Hash)] pub struct Format(pub String); /// Attributes: identifier, classes, key-value pairs pub type Attr = (String, Vec, Vec<(String, String)>); /// Table cells are list of Blocks pub type TableCell = Vec; /// Type of quotation marks to use in Quoted inline. #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)] #[serde(tag = "t")] pub enum QuoteType { SingleQuote, DoubleQuote, } /// Caption of a Table (Short caption, Caption) pub type Caption = (Option, Vec); /// Short caption of a Table pub type ShortCaption = Vec; pub type RowHeadColumns = Int; #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq)] #[serde(tag = "t", content = "c")] pub enum ColWidth { ColWidth(Double), ColWidthDefault, } pub type ColSpec = (Alignment, ColWidth); pub type Row = (Attr, Vec); pub type TableHead = (Attr, Vec); pub type TableBody = (Attr, RowHeadColumns, Vec, Vec); pub type TableFoot = (Attr, Vec); pub type Cell = (Attr, Alignment, RowSpan, ColSpan, Vec); pub type RowSpan = Int; pub type ColSpan = Int; /// Link target (URL, title). pub type Target = (String, String); /// Type of math element (display or inline). #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)] #[serde(tag = "t")] pub enum MathType { DisplayMath, InlineMath, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] #[allow(non_snake_case)] pub struct Citation { pub citationId: String, pub citationPrefix: Vec, pub citationSuffix: Vec, pub citationMode: CitationMode, pub citationNoteNum: Int, pub citationHash: Int, } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash)] #[serde(tag = "t")] pub enum CitationMode { AuthorInText, SuppressAuthor, NormalCitation, } /// deserialized a json string to a Pandoc object, passes it to the closure/function /// and serializes the result back into a string pub fn filter Pandoc>(json: String, f: F) -> String { f(Pandoc::from_json(&json)).to_json() } pandoc-ast-0.8.6/src/visitor.rs000066400000000000000000000147441454525174500164400ustar00rootroot00000000000000use super::*; pub trait MutVisitor { fn visit_block(&mut self, block: &mut Block) { self.walk_block(block) } fn visit_attr(&mut self, attr: &mut Attr) { self.walk_attr(attr) } fn visit_inline(&mut self, inline: &mut Inline) { self.walk_inline(inline) } fn visit_meta(&mut self, _key: &str, meta: &mut MetaValue) { self.walk_meta(meta) } fn visit_vec_block(&mut self, vec_block: &mut Vec) { self.walk_vec_block(vec_block) } fn visit_vec_inline(&mut self, vec_inline: &mut Vec) { self.walk_vec_inline(vec_inline) } fn visit_rows(&mut self, rows: &mut Vec) { self.walk_rows(rows) } fn walk_meta(&mut self, meta: &mut MetaValue) { use MetaValue::*; match *meta { MetaMap(ref mut c) => { for (key, meta) in c { self.visit_meta(key, meta); } } MetaList(ref mut c) => { for meta in c { self.walk_meta(meta); } } MetaBool(_) => {} MetaString(_) => {} MetaInlines(ref mut v_inline) => { self.visit_vec_inline(v_inline); } MetaBlocks(ref mut v_block) => { self.visit_vec_block(v_block); } } } fn walk_pandoc(&mut self, pandoc: &mut Pandoc) { for (key, meta) in &mut pandoc.meta { self.visit_meta(key, meta); } self.visit_vec_block(&mut pandoc.blocks); } fn walk_block(&mut self, block: &mut Block) { use Block::*; match *block { Plain(ref mut vec_inline) | Para(ref mut vec_inline) => { self.visit_vec_inline(vec_inline); } LineBlock(ref mut vec_vec_inline) => { for vec_inline in vec_vec_inline { self.visit_vec_inline(vec_inline); } } CodeBlock(ref mut attr, _) => self.visit_attr(attr), RawBlock { .. } => {} BlockQuote(ref mut vec_block) => { self.visit_vec_block(vec_block); } OrderedList(_, ref mut vec_vec_block) | BulletList(ref mut vec_vec_block) => { for vec_block in vec_vec_block { self.visit_vec_block(vec_block); } } DefinitionList(ref mut c) => { for def in c { self.visit_vec_inline(&mut def.0); for vec_block in &mut def.1 { self.visit_vec_block(vec_block); } } } Figure(ref mut attr, ref mut caption, ref mut vec_block) => { self.visit_attr(attr); { let (short, caption) = caption; if let Some(shortcaption) = short { self.visit_vec_inline(shortcaption); } self.visit_vec_block(caption); } self.visit_vec_block(vec_block); } Header(_, ref mut attr, ref mut vec_inline) => { self.visit_attr(attr); self.visit_vec_inline(vec_inline); } HorizontalRule => {} Table(ref mut attr, ref mut caption, _, ref mut head, ref mut bodies, ref mut foot) => { self.visit_attr(attr); { let (short, caption) = caption; if let Some(shortcaption) = short { self.visit_vec_inline(shortcaption); } self.visit_vec_block(caption); } { let (attr, rows) = head; self.visit_attr(attr); self.visit_rows(rows); } for body in bodies { let (attr, _, rows_h, rows) = body; self.visit_attr(attr); self.visit_rows(rows_h); self.visit_rows(rows); } { let (attr, rows) = foot; self.visit_attr(attr); self.visit_rows(rows); } } Div(ref mut attr, ref mut vec_block) => { self.visit_attr(attr); self.visit_vec_block(vec_block); } Null => {} } } fn walk_attr(&mut self, _attr: &mut Attr) {} fn walk_inline(&mut self, inline: &mut Inline) { use Inline::*; match *inline { Str { .. } => {} Emph(ref mut c) | Strong(ref mut c) | Underline(ref mut c) | Strikeout(ref mut c) | Superscript(ref mut c) | Subscript(ref mut c) | SmallCaps(ref mut c) | Quoted(_, ref mut c) => { self.visit_vec_inline(c); } Cite(ref mut v_cite, ref mut v_inl) => { for cite in v_cite { self.visit_vec_inline(&mut cite.citationPrefix); self.visit_vec_inline(&mut cite.citationSuffix); } self.visit_vec_inline(v_inl); } Code(ref mut attr, _) => self.visit_attr(attr), Space { .. } => {} SoftBreak { .. } => {} LineBreak { .. } => {} Math { .. } => {} RawInline { .. } => {} Link(ref mut attr, ref mut v_inline, _) | Image(ref mut attr, ref mut v_inline, _) | Span(ref mut attr, ref mut v_inline) => { self.visit_attr(attr); self.visit_vec_inline(v_inline); } Note(ref mut c) => { self.visit_vec_block(c); } } } fn walk_rows(&mut self, rows: &mut Vec) { for (attr, cells) in rows { self.visit_attr(attr); for (cell_attr, _, _, _, content) in cells { self.visit_attr(cell_attr); self.visit_vec_block(content); } } } fn walk_vec_block(&mut self, vec_block: &mut Vec) { for block in vec_block { self.visit_block(block); } } fn walk_vec_inline(&mut self, vec_inline: &mut Vec) { for inline in vec_inline { self.visit_inline(inline); } } } pandoc-ast-0.8.6/tests/000077500000000000000000000000001454525174500147345ustar00rootroot00000000000000pandoc-ast-0.8.6/tests/de.rs000066400000000000000000000555321454525174500157040ustar00rootroot00000000000000use pandoc_ast::*; #[test] fn format() { let s = r#""hello""#; let format: Format = serde_json::from_str(s).unwrap(); assert_eq!(format.0, "hello"); } #[test] fn citation() { let s = r###"{"pandoc-api-version":[1,22],"meta":{},"blocks":[{"t":"Para", "c":[{"t":"Cite", "c":[[{"citationHash":1,"citationId":"scala_plugin","citationMode":{"t":"NormalCitation", "c":[]},"citationNoteNum":0,"citationPrefix":[],"citationSuffix":[]}],[{"t":"Link", "c":[["",[],[]],[{"t": "Str", "c":"1"}],["#ref-scala_plugin",""]]}]]}]}]}"###; filter(s.to_string(), |x| x); } /* #[test] fn full_citation() { let s = r###"[{"unMeta":{"bibliography":{"MetaString":"bibliography.bib"},"csl":{"MetaString":"springer-basic-brackets-no-et-al-alphabetical.csl"},"link-citations":{"MetaBool":true}}},[{"Para":[{"Cite":[[{"citationHash":1,"citationId":"scala_plugin","citationMode":{"NormalCitation":[]},"citationNoteNum":0,"citationPrefix":[],"citationSuffix":[]}],[{"Str":"["},{"Link":[["",[],[]],[{"Str":"1"}],["#ref-scala_plugin",""]]},{"Str":"]"}]]}]},{"Header":[1,["literatur",["unnumbered"],[]],[{"Str":"Literatur"}]]},{"Para":[{"Str":" "},{"LineBreak":[]}]},{"Div":[["refs",["references"],[]],[{"Div":[["ref-scala_plugin",[],[]],[{"Para":[{"Str":"1"},{"Link":[["",[],[]],[{"Str":"text"}],["addr",""]]},{"Str":"."},{"Space":[]}]}]]}]]}]]"###; filter(s.to_string(), |x| x); } #[test] fn image() { //let s = r####"[{"unMeta":{"date":{"t":"MetaInlines","c":[{"t":"Str","c":"Dr.-Ing."},{"t":"Space","c":[]},{"t":"Str","c":"Jörg"},{"t":"Space","c":[]},{"t":"Str","c":"Matthes"},{"t":"LineBreak","c":[]},{"t":"Str","c":"Dipl.-Inf."},{"t":"Space","c":[]},{"t":"Str","c":"Oliver"},{"t":"Space","c":[]},{"t":"Str","c":"Schneider"}]},"author":{"t":"MetaList","c":[{"t":"MetaInlines","c":[{"t":"Str","c":"Einführung"},{"t":"Space","c":[]},{"t":"Str","c":"C"}]}]},"title":{"t":"MetaInlines","c":[{"t":"Str","c":"Grundlagen"},{"t":"Space","c":[]},{"t":"Str","c":"der"},{"t":"Space","c":[]},{"t":"Str","c":"Informatik"},{"t":"LineBreak","c":[]},{"t":"Str","c":"Teil"},{"t":"Space","c":[]},{"t":"Str","c":"1"}]}}},[{"t":"Header","c":[1,["grundlagen",[],[]],[{"t":"Str","c":"Grundlagen"}]]},{"t":"Header","c":[2,["einführung-programmiersprachen",[],[]],[{"t":"Str","c":"Einführung"},{"t":"Space","c":[]},{"t":"Str","c":"Programmiersprachen"}]]},{"t":"Para","c":[{"t":"Image","c":[[],["ProgrammiersprachenVerwandschaft.png","fig:"]]}]},{"t":"Header","c":[1,["baaa",[],[]],[{"t":"Str","c":"BAAA"}]]},{"t":"BulletList","c":[[{"t":"Plain","c":[{"t":"Str","c":"bee"}]}],[{"t":"Plain","c":[{"t":"Str","c":"boo"}]}]]},{"t":"Header","c":[1,["bool",[],[]],[{"t":"Str","c":"Bool"}]]},{"t":"Para","c":[{"t":"Str","c":"bar"}]}]]"####; let s = r####"{"t":"Image","c":[[],["ProgrammiersprachenVerwandschaft.png","fig:"]]}"####; let mut value: serde_json::Value = serde_json::from_str(s).unwrap(); println!("{:?}", value); pandoc_to_serde(&mut value); println!("{:?}", value); let _: Inline = serde_json::from_value(value).unwrap(); } */ #[test] fn one_point_twenty_two_tables() { let s = r####"{"pandoc-api-version":[1,22],"meta":{},"blocks":[{"t":"Table","c":[["",[],[]],[null,[{"t":"Para","c":[{"t":"Str","c":"Data about the planets of our solar system."}]}]],[[{"t":"AlignCenter"},{"t":"ColWidthDefault"}],[{"t":"AlignCenter"},{"t":"ColWidthDefault"}],[{"t":"AlignDefault"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignDefault"},{"t":"ColWidthDefault"}]],[["",[],[]],[[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,2,[{"t":"Plain","c":[{"t":"Str","c":""}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Name"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Mass (10^24kg)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Diameter (km)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Density (kg/m^3)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Gravity (m/s^2)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Length of day (hours)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Distance from Sun (10^6km)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Mean temperature (C)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Number of moons"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Notes"}]}]]]]]],[[["",[],[]],3,[],[[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},4,2,[{"t":"Plain","c":[{"t":"Str","c":"Terrestrial planets"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Mercury"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0.330"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"4,879"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5427"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"3.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"4222.6"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"57.9"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"167"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Closest to the Sun"}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Venus"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"4.87"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"12,104"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5243"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"8.9"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2802.0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"108.2"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"464"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":""}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Earth"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5.97"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"12,756"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5514"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"9.8"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"24.0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"149.6"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"15"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Our world"}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Mars"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0.642"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"6,792"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"3933"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"3.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"24.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"227.9"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-65"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"The red planet"}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},4,1,[{"t":"Plain","c":[{"t":"Str","c":"Jovian planets"}]}]],[["",[],[]],{"t":"AlignDefault"},2,1,[{"t":"Plain","c":[{"t":"Str","c":"Gas giants"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Jupiter"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1898"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"142,984"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1326"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"23.1"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"9.9"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"778.6"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-110"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"67"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"The largest planet"}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Saturn"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"568"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"120,536"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"687"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"9.0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"10.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1433.5"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-140"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"62"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":""}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},2,1,[{"t":"Plain","c":[{"t":"Str","c":"Ice giants"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Uranus"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"86.8"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"51,118"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1271"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"8.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"17.2"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2872.5"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-195"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"27"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":""}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Neptune"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"102"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"49,528"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1638"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"11.0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"16.1"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"4495.1"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-200"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"14"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":""}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,2,[{"t":"Plain","c":[{"t":"Str","c":"Dwarf planets"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Pluto"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0.0146"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2,370"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2095"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"153.3"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5906.4"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-225"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Declassified as a planet in 2006."}]}]]]]]]],[["",[],[]],[]]]}]}"####; let value: serde_json::Value = serde_json::from_str(s).unwrap(); println!("{:?}", value); let _: Pandoc = serde_json::from_value(value).unwrap(); } #[test] fn table_with_col_width() { let s = r####"{"pandoc-api-version":[1,22],"meta":{},"blocks":[{"t":"Table","c":[["",[],[]],[null,[{"t":"Para","c":[{"t":"Str","c":"Data about the planets of our solar system."}]}]],[[{"t":"AlignCenter"},{"t":"ColWidth", "c":0.23}],[{"t":"AlignCenter"},{"t":"ColWidthDefault"}],[{"t":"AlignDefault"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignRight"},{"t":"ColWidthDefault"}],[{"t":"AlignDefault"},{"t":"ColWidthDefault"}]],[["",[],[]],[[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,2,[{"t":"Plain","c":[{"t":"Str","c":""}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Name"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Mass (10^24kg)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Diameter (km)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Density (kg/m^3)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Gravity (m/s^2)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Length of day (hours)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Distance from Sun (10^6km)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Mean temperature (C)"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Number of moons"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Notes"}]}]]]]]],[[["",[],[]],3,[],[[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},4,2,[{"t":"Plain","c":[{"t":"Str","c":"Terrestrial planets"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Mercury"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0.330"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"4,879"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5427"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"3.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"4222.6"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"57.9"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"167"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Closest to the Sun"}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Venus"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"4.87"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"12,104"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5243"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"8.9"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2802.0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"108.2"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"464"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":""}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Earth"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5.97"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"12,756"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5514"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"9.8"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"24.0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"149.6"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"15"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Our world"}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Mars"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0.642"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"6,792"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"3933"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"3.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"24.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"227.9"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-65"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"The red planet"}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},4,1,[{"t":"Plain","c":[{"t":"Str","c":"Jovian planets"}]}]],[["",[],[]],{"t":"AlignDefault"},2,1,[{"t":"Plain","c":[{"t":"Str","c":"Gas giants"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Jupiter"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1898"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"142,984"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1326"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"23.1"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"9.9"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"778.6"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-110"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"67"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"The largest planet"}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Saturn"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"568"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"120,536"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"687"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"9.0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"10.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1433.5"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-140"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"62"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":""}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},2,1,[{"t":"Plain","c":[{"t":"Str","c":"Ice giants"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Uranus"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"86.8"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"51,118"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1271"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"8.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"17.2"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2872.5"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-195"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"27"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":""}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Neptune"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"102"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"49,528"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"1638"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"11.0"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"16.1"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"4495.1"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-200"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"14"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":""}]}]]]],[["",[],[]],[[["",[],[]],{"t":"AlignDefault"},1,2,[{"t":"Plain","c":[{"t":"Str","c":"Dwarf planets"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Pluto"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0.0146"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2,370"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"2095"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"0.7"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"153.3"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5906.4"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"-225"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"5"}]}]],[["",[],[]],{"t":"AlignDefault"},1,1,[{"t":"Plain","c":[{"t":"Str","c":"Declassified as a planet in 2006."}]}]]]]]]],[["",[],[]],[]]]}]}"####; let value: serde_json::Value = serde_json::from_str(s).unwrap(); println!("{:?}", value); let _: Pandoc = serde_json::from_value(value).unwrap(); }