Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Difference From sidoc-0.1.1 To trunk
2024-11-21
| ||
07:31 | Add autoscope, with _if and _opt variants. Leaf check-in: 953a47b21e user: jan tags: trunk, sidoc-0.1.2 | |
2024-11-07
| ||
09:13 | change log. check-in: ef4f5138fd user: jan tags: trunk | |
08:53 | Update crate metadata. Happy pedantic clippy. check-in: c84ce1ad85 user: jan tags: trunk, sidoc-0.1.1 | |
2024-11-06
| ||
18:42 | Happy pedantic clippy. check-in: c1d63406c5 user: jan tags: trunk | |
Changes to Cargo.toml.
1 2 | 1 2 3 4 5 6 7 8 9 10 | - + | [package] name = "sidoc" |
︙ |
Changes to src/builder.rs.
︙ | |||
29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + | if let Some(ln) = term_line { self.scope_stack.push(Some(ln.to_string())); } else { self.scope_stack.push(None); } self } /// Wrap [`Builder::scope()`] and [`Builder::exit()`]. /// /// Initialize a new scope, call caller-supplied closure, and automatically /// exit scope before returning. /// /// ``` /// use std::sync::Arc; /// use sidoc::{Builder, RenderContext}; /// /// let mut bldr = Builder::new(); /// /// bldr /// .line("<!DOCTYPE html>") /// .autoscope("<html>", Some("</html>"), |bldr| { /// bldr.autoscope("<head>", Some("</head>"), |bldr| { /// bldr.line("<title>hello</title>"); /// }); /// }); /// /// let doc = bldr.build().unwrap(); /// let mut r = RenderContext::new(); /// r.doc("root", Arc::new(doc)); /// let buf = r.render("root").unwrap(); /// /// assert_eq!( /// buf, /// "<!DOCTYPE html>\n<html>\n <head>\n <title>hello</title>\n </head>\n</html>\n" /// ); /// ``` #[allow(clippy::needless_pass_by_value)] pub fn autoscope<F, L: ToString, K: ToString>( &mut self, begin_line: L, term_line: Option<K>, f: F ) -> &mut Self where F: FnOnce(&mut Self) { self.scope(begin_line, term_line); f(self); self.exit(); self } /// Same as [`Builder::autoscope()`], but only init scope and call closure if /// predicate is true. #[allow(clippy::needless_pass_by_value)] pub fn autoscope_if<F, L: ToString, K: ToString>( &mut self, pred: bool, begin_line: L, term_line: Option<K>, f: F ) -> &mut Self where F: FnOnce(&mut Self) { if pred { self.scope(begin_line, term_line); f(self); self.exit(); } self } /// Same as [`Builder::autoscope()`], but only init scope and call closure if /// `opt` is `Some(T)`. `T` will be passed to the closure. #[allow(clippy::needless_pass_by_value)] pub fn autoscope_opt<F, T, L: ToString, K: ToString>( &mut self, opt: Option<T>, begin_line: L, term_line: Option<K>, f: F ) -> &mut Self where F: FnOnce(&mut Self, T) { if let Some(o) = opt { self.scope(begin_line, term_line); f(self, o); self.exit(); } self } /// Leave a previously entered scope. /// /// If the `scope()` call that created the current scope /// /// # Panics /// The scope stack must not be empty. |
︙ |
Added tests/simple_html.rs.
|
Deleted tests/simple_http.rs.
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
Changes to www/changelog.md.
1 2 3 4 5 6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | - + - + + + + + + + + + + + + + + + + + | # Change Log ⚠️ indicates a breaking change. ## [Unreleased] |