use std::collections::BTreeMap;
use crate::ast::Span;
use crate::ast::value::{Dimension, PropertyValue};
use super::common::{Node, TextSpan, UnknownProperty};
#[derive(Debug, Clone, PartialEq)]
pub struct ShapeNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub x: Option<PropertyValue>,
pub y: Option<PropertyValue>,
pub w: Option<PropertyValue>,
pub h: Option<PropertyValue>,
pub kind: Option<String>,
pub fill: Option<PropertyValue>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub radius: Option<PropertyValue>,
pub stroke_alignment: Option<String>,
pub padding: Option<PropertyValue>,
pub h_align: Option<String>,
pub v_align: Option<String>,
pub text_style: Option<String>,
pub spans: Vec<TextSpan>,
pub style: Option<String>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub rotate: Option<Dimension>,
pub anchor: Option<String>,
pub anchor_zone: Option<String>,
pub anchor_sibling: Option<String>,
pub anchor_edge: Option<String>,
pub anchor_gap: Option<Dimension>,
pub anchor_parent: Option<bool>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ConnectorNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub from: Option<String>,
pub to: Option<String>,
pub from_anchor: Option<String>,
pub to_anchor: Option<String>,
pub route: Option<String>,
pub marker_start: Option<String>,
pub marker_end: Option<String>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub rotate: Option<Dimension>,
pub style: Option<String>,
pub text_style: Option<String>,
pub spans: Vec<TextSpan>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct UnknownNode {
pub kind: String,
pub id: Option<String>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
pub children: Vec<Node>,
pub source_span: Option<Span>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Override {
pub ref_id: String,
pub spans: Option<Vec<TextSpan>>,
pub fill: Option<PropertyValue>,
pub visible: Option<bool>,
pub source_span: Option<Span>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct InstanceNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub component: String,
pub x: Option<Dimension>,
pub y: Option<Dimension>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub overrides: Vec<Override>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct FieldNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub field_type: String,
pub recto: Option<String>,
pub verso: Option<String>,
pub target: Option<String>,
pub folio_style: Option<String>,
pub suppress_first: Option<bool>,
pub x: Option<PropertyValue>,
pub y: Option<PropertyValue>,
pub w: Option<PropertyValue>,
pub h: Option<PropertyValue>,
pub style: Option<String>,
pub fill: Option<PropertyValue>,
pub font_family: Option<PropertyValue>,
pub font_size: Option<PropertyValue>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub anchor: Option<String>,
pub anchor_zone: Option<String>,
pub anchor_sibling: Option<String>,
pub anchor_edge: Option<String>,
pub anchor_gap: Option<Dimension>,
pub anchor_parent: Option<bool>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct FootnoteNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub marker: Option<String>,
pub spans: Vec<TextSpan>,
pub style: Option<String>,
pub fill: Option<PropertyValue>,
pub font_family: Option<PropertyValue>,
pub font_size: Option<PropertyValue>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TocNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub match_role: Option<String>,
pub match_style: Option<String>,
pub leader: Option<String>,
pub folio_style: Option<String>,
pub x: Option<PropertyValue>,
pub y: Option<PropertyValue>,
pub w: Option<PropertyValue>,
pub h: Option<PropertyValue>,
pub style: Option<String>,
pub fill: Option<PropertyValue>,
pub font_family: Option<PropertyValue>,
pub font_size: Option<PropertyValue>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub anchor: Option<String>,
pub anchor_zone: Option<String>,
pub anchor_sibling: Option<String>,
pub anchor_edge: Option<String>,
pub anchor_gap: Option<Dimension>,
pub anchor_parent: Option<bool>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}