flams_ontology/content/
macros.rs1#[macro_export]
2macro_rules! oms {
3 (ftml:$i:ident) => {
4 $crate::content::terms::Term::OMID($crate::uris::ContentURI::Symbol($crate::ftml!($i)))
5 };
6 (=ftml:$i:ident) => {
7 $crate::content::terms::Term::OMID($crate::uris::ContentURI::Symbol($crate::metatheory::$i))
8 };
9 ($s:expr) => {
10 $crate::content::terms::Term::OMID($crate::uris::ContentURI::Symbol($s))
11 };
12}
13
14#[macro_export]
15macro_rules! omsp {
16 ($p:pat) => {
17 $crate::content::terms::Term::OMID($crate::uris::ContentURI::Symbol($p))
18 };
19}
20
21#[macro_export]
22macro_rules! omfp {
23 (($e:expr).($f:expr) = ($o:expr)) => {
24 $crate::content::terms::Term::Field {
25 record: Box::new($e),
26 key: $f,
27 owner: Some(Box::new($o)),
28 }
29 };
30}
31
32#[macro_export]
33macro_rules! ftml {
34 ($name:ident) => {
35 ($crate::metatheory::$name).clone()
36 };
37}
38#[macro_export]
39macro_rules! oma {
40 ($head:expr,[$({$($tt:tt)*}),+]) => {
42 $crate::content::terms::Term::OMA{
43 head:Box::new($head),
44 args:Box::new([$crate::$(oma!(@ARGS $($tt)*)),+])
45 }
46 };
47 ($head:expr,[$($i:ident),+]) => {
48 $crate::content::terms::Term::OMA{
49 head:Box::new($head),
50 args:Box::new([$($i),+])
51 }
52 };
53 ($head:pat,$args:pat) => {
60 $crate::content::terms::Term::OMA{
61 head:$head,
62 args:$args
63 }
64 };
65 ($head:expr,I@$($args:tt)*) => {
66 $crate::content::terms::Term::OMA{
67 head:Box::new($head),
68 args:$crate::oma!(@ARGSITER $($args)*)
69 }
70 };
71 (@ARGSITER $mode:ident:$args:expr) => {
72 $args.map(|term| $crate::content::terms::Arg{term,mode:$crate::oma!(@MODE $mode)})
73 .collect::<Box<[_]>>()
74 };
75 (@ARGSPAT $mode:ident:$p:pat) => {
76 $crate::content::terms::Arg{term:$p,mode:$crate::oma!(@MODE $mode)}
77 };
78 (@ARGS $mode:ident:$a:expr) => {
79 $crate::content::terms::Arg{term:$a,mode:$crate::oma!(@MODE $mode)}
80 };
81
82 (@MODE N) => {$crate::content::terms::ArgMode::Normal};
83}
84
85#[macro_export]
86macro_rules! oml {
87 ($name:expr; $(:$tp:expr;)? $(:=$df:expr)?) => {
88 $crate::content::terms::Term::OML{
89 name:$name,
90 tp:$crate::oml!(@TPDF $($tp)?),
91 df:$crate::oml!(@TPDF $($df)?),
92 }
93 };
94 (@TPDF $tpdf:expr) => {Some(Box::new($tpdf))};
95 (@TPDF) => {None};
96}
97#[macro_export]
98macro_rules! omv {
99 ($name:expr;) => {
100 $crate::content::terms::Term::OMV($crate::content::terms::Var::Name($name))
101 };
102}