#![cfg_attr(not(feature = "std"), no_std)]
extern crate alloc;
pub mod agreement;
mod antonyms;
mod builder;
mod collections;
mod context;
mod discourse;
mod document;
mod engine;
mod error;
mod faithfulness;
mod hedge;
mod language;
#[cfg(feature = "polish")]
mod length;
mod proportion;
#[cfg(feature = "polish")]
mod punctuation;
mod quantify;
mod refine;
mod refine_diagnosers;
mod refine_score;
#[cfg(feature = "reg")]
mod reg;
pub mod rst;
mod salience;
mod session;
mod style;
mod synonyms;
mod template;
#[cfg(feature = "time")]
mod time;
pub use agreement::{
AgreementFeatures, AgreementPerson, Animacy, Case, Definiteness, Gender,
Number as GrammaticalNumber,
};
pub use context::{Context, EntityValue, HasProsaicSchema, IntoValue, Value, entity};
pub use faithfulness::{FaithfulnessScore, PolarityDrift, score_faithfulness};
pub use language::{
Aspect, Conjunction, Language, Mood, Person, PluralCategory, Tense, VerbForm, Voice,
english_verb_phrase,
};
pub use antonyms::{AntonymRegistry, insert_not};
pub use builder::{Clause, Sentence, Subject, named, subject};
pub use context::IntoContext;
pub use discourse::{Cf, DiscourseState, ListStyle, ReferenceForm, Transition};
pub use document::{
DocumentPlan, GroupingStrategy, Paragraph, RhetoricalCategory, default_classifier,
};
#[cfg(feature = "reg")]
pub use engine::RegAlgorithm;
pub use engine::{Engine, RenderExplanation, RenderIter, Strictness, VariantScore, Variation};
pub use error::ProsaicError;
pub use hedge::{HedgeMode, hedge};
#[cfg(feature = "polish")]
pub use length::split_long;
pub use proportion::english_proportion;
pub use prosaic_common::{ValueType, pipe_spec, schema_lookup, types_compatible};
#[cfg(feature = "polish")]
pub use punctuation::{em_dash_nested_parentheticals, smart_quotes};
pub use quantify::{QuantifyMode, quantify};
pub use refine::{
Diagnoser, Diagnostic, RefineConfig, RefineConstraint, RefineOutcome, RefineWeights,
RenderedDocument, RenderedParagraph, RenderedSentence, UsedConnective, UsedListStyle,
};
pub use refine_diagnosers::{
ConnectiveFamilySaturation, DocumentScopeRhythm, ListStyleFatigue, ParagraphOpenerMonotony,
ProfileDistributionDrift, RstRelationImbalance,
};
pub use refine_score::score_document;
#[cfg(feature = "reg")]
pub use reg::{
EntityDescriptor, EntityRegistry, SubgraphDescription, distinguishing_attributes,
distinguishing_subgraph,
};
#[doc(hidden)]
pub use prosaic_common::{PIPE_SPECS, PipeSpec};
pub use rst::RstRelation;
pub use salience::{Salience, SalienceThresholds};
pub use session::Session;
pub use style::{
ConnectivePreferences, HedgingCalibration, LengthDistribution, ListStyleBias, PronounDensity,
SalienceBias, StyleProfile, StyleProfileBuilder, StyleProfileError, Verbosity,
};
pub use synonyms::SynonymRegistry;
pub use template::{BareSegment, Pipe, PipeArg, Template};
#[cfg(feature = "time")]
pub use time::format_relative;
#[cfg(test)]
mod common_reexport_tests {
use super::*;
#[test]
fn pipe_specs_length_matches_registry() {
assert_eq!(PIPE_SPECS.len(), 20);
}
#[test]
fn pipe_spec_lookup_round_trips_through_reexport() {
let p = pipe_spec("pluralize").expect("pluralize must resolve via re-export");
assert_eq!(p.input, ValueType::Number);
assert_eq!(p.output, ValueType::String);
}
#[test]
fn types_compatible_via_reexport_rejects_mismatches() {
assert!(types_compatible(ValueType::Any, ValueType::Number));
assert!(!types_compatible(ValueType::Number, ValueType::List));
}
#[test]
fn schema_lookup_via_reexport_finds_keys() {
let schema: &[(&str, ValueType)] = &[("x", ValueType::Number)];
assert_eq!(schema_lookup(schema, "x"), Some(ValueType::Number));
assert_eq!(schema_lookup(schema, "missing"), None);
}
#[test]
fn pipe_spec_struct_is_constructible_via_reexport() {
let p = PipeSpec {
name: "test",
input: ValueType::Any,
output: ValueType::String,
};
assert_eq!(p.name, "test");
assert_eq!(p.input, ValueType::Any);
}
}