pub mod block;
pub mod builders;
pub mod cache;
pub mod converters;
pub mod diff;
pub mod history;
pub mod pipeline;
pub mod plugins;
pub mod sanitizer;
pub mod stats;
#[cfg(test)]
mod comprehensive_tests;
pub mod document;
pub mod error;
#[cfg(test)]
mod property_tests;
pub use block::{Block, BlockType, ButtonStyle, CalloutType, EmbedType, ListType};
pub use builders::{BlockBuilder, DocumentBuilder};
pub use cache::{CacheStats, ConversionCache};
pub use converters::{ConversionFormat, Converter, Convertible, JsonSerializable};
pub use diff::{Change, DiffResult, DocumentDiffer, DocumentMerger, MergeStrategy};
pub use document::Document;
pub use error::{BlocksError, Result};
pub use history::{DocumentOperation, HistoryManager};
pub use pipeline::{block_middlewares, document_middlewares, BlockPipeline, DocumentPipeline};
pub use plugins::{BlockProcessor, BlockValidator, ContentTransformer, PluginRegistry};
pub use sanitizer::ContentSanitizer;
pub use stats::{BlockStats, DocumentAnalyzer, DocumentIssue, DocumentStats, IssueSeverity};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg(test)]
mod integration_tests {
use super::*;
#[test]
fn test_basic_workflow() {
let mut doc = Document::new();
doc.add_block(Block::new(
BlockType::Header { level: 1 },
"Test Header".to_string(),
));
doc.add_block(Block::new(BlockType::Text, "Test content".to_string()));
let markdown = doc.to_format(ConversionFormat::Markdown).unwrap();
assert!(markdown.contains("# Test Header"));
assert!(markdown.contains("Test content"));
let html = doc.to_format(ConversionFormat::Html).unwrap();
assert!(html.contains("<h1>Test Header</h1>"));
assert!(html.contains("<p>Test content</p>"));
}
}