Skip to content

Commit

Permalink
Switch to context variables for config
Browse files Browse the repository at this point in the history
  • Loading branch information
mitsuhiko committed Jun 17, 2024
1 parent 37a17cd commit f01084d
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 50 deletions.
2 changes: 1 addition & 1 deletion examples/syntax-highlighting/src/example.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!doctype html>
<title>Syntax Highlight Example</title>
<h1>Syntax Highlight Example</h1>
{% do highlight.set_theme("base16-ocean.light") %}
{% set SYNTAX_THEME = "base16-ocean.light" %}
{% call highlight('rust') %}
fn main() {
println!("Hello World!");
Expand Down
51 changes: 12 additions & 39 deletions examples/syntax-highlighting/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use core::fmt;
use std::sync::{Arc, Mutex};
use std::sync::Arc;

use minijinja::value::{from_args, Kwargs, Object, ObjectRepr};
use minijinja::{args, Environment, Error, ErrorKind, State, Value};
Expand All @@ -10,7 +10,6 @@ use syntect::parsing::SyntaxSet;
struct Highlighter {
ss: SyntaxSet,
ts: ThemeSet,
theme: Arc<Mutex<String>>,
}

impl fmt::Debug for Highlighter {
Expand All @@ -23,11 +22,7 @@ impl Highlighter {
pub fn new() -> Highlighter {
let ss = SyntaxSet::load_defaults_newlines();
let ts = ThemeSet::load_defaults();
Highlighter {
ss,
ts,
theme: Mutex::new("InspiredGitHub".to_string()).into(),
}
Highlighter { ss, ts }
}
}

Expand Down Expand Up @@ -58,40 +53,18 @@ impl Object for Highlighter {
)
})?;
kwargs.assert_all_used()?;
let theme = self.theme.lock().unwrap();
let rv = highlighted_html_for_string(
content_str,
&self.ss,
syntax,
&self.ts.themes[&theme as &str],
)
.map_err(|err| {
Error::new(ErrorKind::InvalidOperation, "failed to syntax highlight").with_source(err)
})?;
let theme = state.lookup("SYNTAX_THEME");
let theme = theme
.as_ref()
.and_then(|x| x.as_str())
.unwrap_or("InspiredGitHub");
let rv = highlighted_html_for_string(content_str, &self.ss, syntax, &self.ts.themes[theme])
.map_err(|err| {
Error::new(ErrorKind::InvalidOperation, "failed to syntax highlight")
.with_source(err)
})?;
Ok(Value::from_safe_string(rv))
}

fn call_method(
self: &Arc<Self>,
_state: &State<'_, '_>,
method: &str,
args: &[Value],
) -> Result<Value, Error> {
match method {
"set_theme" => {
let (name,): (String,) = from_args(args)?;
if !self.ts.themes.contains_key(&name) {
return Err(Error::new(
ErrorKind::InvalidOperation,
format!("unknown theme {}", name),
));
}
*self.theme.lock().unwrap() = name;
Ok(Value::UNDEFINED)
}
_ => Err(Error::from(ErrorKind::UnknownMethod)),
}
}
}

fn main() {
Expand Down
10 changes: 0 additions & 10 deletions examples/syntax-highlighting/test.html

This file was deleted.

0 comments on commit f01084d

Please sign in to comment.