use super::*;
pub struct HyperrefData {
targets: HashMap<String, NodeId>,
references: HashMap<String, Vec<NodeId>>,
n_of_sym_footnotes: u32,
n_of_sym_footnote_refs: u32,
n_of_anon_targets: u32,
n_of_anon_references: u32,
accumulated_internal_target_label: Vec<String>,
}
impl HyperrefData {
pub fn new() -> Self {
HyperrefData {
targets: HashMap::new(),
references: HashMap::new(),
n_of_sym_footnotes: 0,
n_of_sym_footnote_refs: 0,
n_of_anon_targets: 0,
n_of_anon_references: 0,
accumulated_internal_target_label: Vec::new(),
}
}
pub fn shared_targets(&self) -> &HashMap<String, NodeId> {
&self.targets
}
pub fn mut_targets(&mut self) -> &mut HashMap<String, NodeId> {
&mut self.targets
}
pub fn shared_references(&self) -> &HashMap<String, Vec<NodeId>> {
&self.references
}
pub fn mut_references(&mut self) -> &mut HashMap<String, Vec<NodeId>> {
&mut self.references
}
pub fn add_internal_target_label(&mut self, label: String) {
self.accumulated_internal_target_label.push(label);
}
pub fn mut_accumulated_internal_target_label(&mut self) -> &mut Vec<String> {
&mut self.accumulated_internal_target_label
}
pub fn shared_accumulated_internal_target_label(&self) -> &Vec<String> {
&self.accumulated_internal_target_label
}
pub fn internal_labels_as_string(&self) -> String {
self.accumulated_internal_target_label
.join(Self::INTERNAL_TARGET_CONNECTOR)
}
pub fn n_of_symbolic_footnotes(&self) -> u32 {
self.n_of_sym_footnotes
}
pub fn n_of_symbolic_footnote_refs(&self) -> u32 {
self.n_of_sym_footnote_refs
}
pub fn n_of_anon_targets(&self) -> u32 {
self.n_of_anon_targets
}
pub fn n_of_anon_target_refs(&self) -> u32 {
self.n_of_anon_references
}
pub fn increment_symbolic_footnote_counter_by(&mut self, amount: u32) {
if let Some(val) = self.n_of_sym_footnotes.checked_add(amount) {
self.n_of_sym_footnotes = val;
} else {
panic!("Tried incrementing symbolic footnote counter {} by {} but overflew. Computer says no...", self.n_of_sym_footnotes, amount)
}
}
pub fn increment_symbolic_footnote_ref_counter_by(&mut self, amount: u32) {
if let Some(val) = self.n_of_sym_footnotes.checked_add(amount) {
self.n_of_sym_footnotes = val;
} else {
panic!("Tried incrementing symbolic footnote referemce counter {} by {} but overflew. Computer says no...", self.n_of_sym_footnote_refs, amount)
}
}
pub fn increment_anonymous_target_counter_by(&mut self, amount: u32) {
if let Some(val) = self.n_of_anon_targets.checked_add(amount) {
self.n_of_anon_targets = val;
} else {
panic!("Tried incrementing the number of anonymous reference target counter {} by {} but overflew. Computer says no...", self.n_of_anon_targets, amount)
}
}
pub fn increment_anonymous_target_ref_counter_by(&mut self, amount: u32) {
if let Some(val) = self.n_of_anon_references.checked_add(amount) {
self.n_of_anon_references = val;
} else {
panic!("Tried incrementing anonymous target reference counter {} by {} but overflew. Computer says no...", self.n_of_anon_references, amount)
}
}
pub const INTERNAL_TARGET_CONNECTOR: &'static str = "--";
}
pub const ANON_REF_LABEL_PREFIX: &'static str = "[[-ANON-LABEL-";
pub const ANON_REF_LABEL_SUFFIX: &'static str = "-]]";