Skip to content

Commit

Permalink
make primitive docs struct
Browse files Browse the repository at this point in the history
  • Loading branch information
kaikalii committed Jul 20, 2023
1 parent 757fa58 commit c9aba68
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 47 deletions.
28 changes: 14 additions & 14 deletions docs/site.js
Original file line number Diff line number Diff line change
Expand Up @@ -937,32 +937,32 @@ imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {
imports.wbg.__wbindgen_throw = function(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
};
imports.wbg.__wbindgen_closure_wrapper195 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 6, __wbg_adapter_34);
imports.wbg.__wbindgen_closure_wrapper217 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 18, __wbg_adapter_34);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper197 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 6, __wbg_adapter_37);
imports.wbg.__wbindgen_closure_wrapper219 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 18, __wbg_adapter_37);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper199 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 6, __wbg_adapter_34);
imports.wbg.__wbindgen_closure_wrapper221 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 18, __wbg_adapter_34);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1029 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 300, __wbg_adapter_42);
imports.wbg.__wbindgen_closure_wrapper1013 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 294, __wbg_adapter_42);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1176 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 411, __wbg_adapter_45);
imports.wbg.__wbindgen_closure_wrapper1160 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 405, __wbg_adapter_45);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1413 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 507, __wbg_adapter_48);
imports.wbg.__wbindgen_closure_wrapper1397 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 501, __wbg_adapter_48);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1527 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 546, __wbg_adapter_51);
imports.wbg.__wbindgen_closure_wrapper1511 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 540, __wbg_adapter_51);
return addHeapObject(ret);
};

Expand Down
Binary file modified docs/site_bg.wasm
Binary file not shown.
1 change: 1 addition & 0 deletions docs/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ table {
background-color: #000a;
white-space: pre-wrap;
font-family: "Code Font";
z-index: 1;
}

.variadic-function-button {
Expand Down
31 changes: 1 addition & 30 deletions site/src/editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -216,36 +216,7 @@ pub fn Editor(
let onclick = move |_| replace_code(&p.to_string());
let onmouseover = move |_| {
if let Some(doc) = p.doc() {
let mut doc_lines: Vec<String> =
doc.lines().map(str::trim).map(Into::into).collect();
for i in (0..doc_lines.len()).rev() {
if let Some(ex_line) = doc_lines[i].strip_prefix("ex:") {
match Uiua::with_backend(&WebBackend::default()).load_str(ex_line) {
Ok(env) => {
let stack = env.take_stack();
for item in stack {
for line in item.show().lines().rev() {
doc_lines.insert(i + 1, line.into());
}
}
}
Err(e) => doc_lines.insert(
i + 1,
format!(
"error: {}",
e.to_string()
.lines()
.next()
.unwrap_or_default()
.split_once(' ')
.unwrap_or_default()
.1
),
),
}
}
}
set_glyph_doc.set(doc_lines.join("\n"));
set_glyph_doc.set(doc.to_string());
_ = glyph_doc_element().style().remove_property("display");
}
};
Expand Down
2 changes: 1 addition & 1 deletion site/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ mod code {
"".to_string()
};
let title = match (prim.doc(), show_name) {
(Some(doc), true) => doc.into(),
(Some(doc), true) => doc.to_string(),
(Some(doc), false) => format!("{}: {}", prim.name().unwrap_or_default(), doc),
(None, true) => String::new(),
(None, false) => prim.name().unwrap_or_default().into(),
Expand Down
1 change: 1 addition & 0 deletions site/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ table {
background-color: #000a;
white-space: pre-wrap;
font-family: "Code Font";
z-index: 1;
}

.variadic-function-button {
Expand Down
73 changes: 71 additions & 2 deletions src/primitive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use std::{
f64::{consts::PI, INFINITY},
fmt,
rc::Rc,
sync::OnceLock,
};

use crate::{
Expand Down Expand Up @@ -100,16 +101,84 @@ macro_rules! primitive {
_ => None
}
}
pub fn doc(&self) -> Option<&'static str> {
pub fn doc(&self) -> Option<PrimDoc> {
match self {
$(Primitive::$name => Some(concat!($($doc, "\n"),*)).filter(|s| !s.is_empty()),)*
$(Primitive::$name => {
let doc = concat!($($doc, "\n"),*);
static DOC: OnceLock<[PrimDocLine; 0 $(+ {_ = $doc; 1})*]> = OnceLock::new();
if doc.is_empty() {
return None;
}
Some(PrimDoc(DOC.get_or_init(|| [$({
let doc = $doc;
if let Some(ex) = doc.trim().strip_prefix("ex:") {
let input = ex.trim();
let output = Uiua::with_backend(&StdIo::default()).load_str(input)
.map(|env| env.take_stack().into_iter().map(|val| val.show()).collect())
.map_err(|e| e.to_string().lines().next().unwrap_or_default()
.split_once(' ').unwrap_or_default().1.into());
PrimDocLine::Example(PrimExample {
input,
output
})
} else {
PrimDocLine::Text(doc.trim())
}
}),*])))
},)*
_ => None,
}
}
}
};
}

#[derive(Debug)]
pub struct PrimDoc(pub &'static [PrimDocLine]);

impl fmt::Display for PrimDoc {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
for line in self.0 {
match line {
PrimDocLine::Text(text) => writeln!(f, "{}", text)?,
PrimDocLine::Example(ex) => {
writeln!(f, "ex: {}", ex.input)?;
match &ex.output {
Ok(output) => {
for formatted in output {
for (i, line) in formatted.lines().enumerate() {
if i == 0 {
write!(f, " => ")?
} else {
write!(f, " ")?;
}
writeln!(f, "{line}")?;
}
}
}
Err(e) => {
writeln!(f, " => error: {e}")?;
}
}
}
}
}
Ok(())
}
}

#[derive(Debug)]
pub enum PrimDocLine {
Text(&'static str),
Example(PrimExample),
}

#[derive(Debug)]
pub struct PrimExample {
input: &'static str,
output: Result<Vec<String>, String>,
}

primitive!(
// Stack ops
/// Duplicate the top value on the stack
Expand Down

0 comments on commit c9aba68

Please sign in to comment.