fml 0.5.0

Friendly Markup Language
Documentation
use derive_deref::{Deref, DerefMut};

use crate::ast::{FmlCodeBlockValue, FmlColor, FmlFunction, FmlValue};

#[derive(Deref, DerefMut, Default, Debug, PartialEq, Clone)]
pub struct Tokens(pub Vec<Token>);

/// Tokens meant to be used during lexing of content
#[derive(Debug, PartialEq, Clone)]
pub enum Token {
	Linebreak,

	CodeInline(String),
	CodeBlock {
		lang: Option<String>,
		body: Vec<FmlCodeBlockValue>,
	},

	Hyperlink {
		fml: Tokens,
		uri: String,
	},

	Heading1(Tokens),
	Heading2(Tokens),
	Heading3(Tokens),
	SupLine(Tokens),
	SubLine(Tokens),

	ListItem(Tokens),
	Quote(String),

	CwSpoiler(Tokens),
	Bold(Tokens),
	Italic(Tokens),
	Strikethrough(Tokens),
	Underline(Tokens),

	// ^{}
	Superscript(Tokens),
	// _{}
	Subscript(Tokens),

	Function(FunctionToken),

	Typst(String),
	Text(String),
}

#[derive(Debug, Default, PartialEq, Clone)]
pub struct FunctionToken {
	pub name: String,
	pub params: Option<String>,
	pub body: Tokens,
}