Merge branch 'latex_fragment'

This commit is contained in:
Tom Alexander 2023-10-31 19:18:20 -04:00
commit 5e476e189a
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
9 changed files with 119 additions and 24 deletions

View File

@ -1 +1,2 @@
!!!!!!!! latex_fragment
{! TODO: Should I be including MathJax somewhere? !}
{.value}

View File

@ -0,0 +1,36 @@
* Double dollar
#+begin_src org
$$CONTENTS$$
#+end_src
becomes
#+begin_src text
\[CONTENTS\]
#+end_src
#+begin_src org
$$1+1=2$$
#+end_src
#+begin_src text
\[1+1=2\]
#+end_src
This gets interpreted by mathjax.
* Single Dollar
#+begin_src org
PRE$BORDER1 BODY BORDER2$POST
#+end_src
becomes
#+begin_src text
\(BORDER1 BODY BORDER2\)
#+end_src
#+begin_src org
foo$a bar b$.
#+end_src
becomes
#+begin_src text
foo\(a bar b\).
#+end_src
This gets interpreted by mathjax.

View File

@ -6,18 +6,11 @@ use crate::config::Config;
use crate::error::CustomError;
use crate::intermediate::IComment;
use super::macros::rnoop;
#[derive(Debug, Serialize)]
#[serde(tag = "type")]
#[serde(rename = "comment")]
pub(crate) struct RenderComment {}
impl RenderComment {
pub(crate) fn new(
_config: &Config,
_output_directory: &Path,
_output_file: &Path,
_comment: &IComment,
) -> Result<RenderComment, CustomError> {
Ok(RenderComment {})
}
}
rnoop!(RenderComment, IComment);

View File

@ -6,18 +6,25 @@ use crate::config::Config;
use crate::error::CustomError;
use crate::intermediate::ILatexFragment;
use super::macros::render;
#[derive(Debug, Serialize)]
#[serde(tag = "type")]
#[serde(rename = "latex_fragment")]
pub(crate) struct RenderLatexFragment {}
impl RenderLatexFragment {
pub(crate) fn new(
_config: &Config,
_output_directory: &Path,
_output_file: &Path,
_comment: &ILatexFragment,
) -> Result<RenderLatexFragment, CustomError> {
Ok(RenderLatexFragment {})
}
pub(crate) struct RenderLatexFragment {
value: String,
}
render!(
RenderLatexFragment,
ILatexFragment,
original,
_config,
_output_directory,
_output_file,
{
Ok(RenderLatexFragment {
value: original.value.clone(),
})
}
);

43
src/context/macros.rs Normal file
View File

@ -0,0 +1,43 @@
/// Write the implementation for the render ast node.
///
/// This exists to make changing the type signature easier.
macro_rules! render {
($rstruct:ident, $istruct:ident, $original:ident, $config:ident, $output_directory:ident, $output_file:ident, $fnbody:tt) => {
impl $rstruct {
pub(crate) fn new(
config: &Config,
output_directory: &Path,
output_file: &Path,
original: &$istruct,
) -> Result<$rstruct, CustomError> {
let $original = original;
let $config = config;
let $output_directory = output_directory;
let $output_file = output_file;
$fnbody
}
}
};
}
pub(crate) use render;
/// Write the implementation for a render ast node that has no fields.
///
/// This exists to make changing the type signature easier.
macro_rules! rnoop {
($rstruct:ident, $istruct:ident) => {
impl $rstruct {
pub(crate) fn new(
_config: &Config,
_output_directory: &Path,
_output_file: &Path,
_original: &$istruct,
) -> Result<$rstruct, CustomError> {
Ok($rstruct {})
}
}
};
}
pub(crate) use rnoop;

View File

@ -32,6 +32,7 @@ mod keyword;
mod latex_environment;
mod latex_fragment;
mod line_break;
mod macros;
mod object;
mod org_macro;
mod paragraph;

View File

@ -1,5 +1,19 @@
use super::macros::inoop;
use super::macros::intermediate;
use crate::error::CustomError;
inoop!(ILatexFragment, LatexFragment);
#[derive(Debug, Clone)]
pub(crate) struct ILatexFragment {
pub(crate) value: String,
}
intermediate!(ILatexFragment, LatexFragment, original, _registry, {
let value: String = if original.value.starts_with("$$") && original.value.ends_with("$$") {
format!("\\[{}\\]", &original.value[2..(original.value.len() - 2)])
} else if original.value.starts_with("$") && original.value.ends_with("$") {
format!("\\({}\\)", &original.value[1..(original.value.len() - 1)])
} else {
original.value.to_owned()
};
Ok(ILatexFragment { value })
});