aboutsummaryrefslogtreecommitdiff
path: root/server/tools/src/book_html.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/tools/src/book_html.rs')
-rw-r--r--server/tools/src/book_html.rs76
1 files changed, 72 insertions, 4 deletions
diff --git a/server/tools/src/book_html.rs b/server/tools/src/book_html.rs
index 370f6901..0af9af06 100644
--- a/server/tools/src/book_html.rs
+++ b/server/tools/src/book_html.rs
@@ -16,9 +16,77 @@
*/
-use anyhow::Result;
-use hurrycurry_protocol::book::Book;
+use hurrycurry_protocol::{
+ Gamedata, Message,
+ book::{Book, BookPage, Diagram},
+};
-pub fn render_html_book(book: Book) -> Result<()> {
- Ok(())
+pub fn render_html_book(data: &Gamedata, book: &Book) -> String {
+ BookR { book, data }.to_string()
+}
+
+markup::define! {
+ BookR<'a>(data: &'a Gamedata, book: &'a Book) {
+ @markup::doctype()
+ html {
+ head {
+ style { @include_str!("book_html.css") }
+ title { "Recipe Book - Hurry Curry!" }
+ }
+ body {
+ @for page in &book.pages {
+ @PageR { data, page }
+ }
+ }
+ }
+ }
+ PageR<'a>(data: &'a Gamedata, page: &'a BookPage) {
+ section.pagegroup {
+ @match page {
+ BookPage::Cover => {
+ div.page {}
+ div.page {}
+ }
+ BookPage::Recipe { description, instruction, diagram } => {
+ div.page {
+ p { @MessageR { data, message: description } }
+ p { @MessageR { data, message: instruction } }
+ }
+ div.page {
+ @DiagramR { data, diagram }
+ }
+ }
+ BookPage::Text { .. } => {
+ div.page {}
+ div.page {}
+ }
+ BookPage::Contents { .. } => {
+ div.page {}
+ div.page {}
+ }
+ }
+ }
+ }
+
+ MessageR<'a>(data: &'a Gamedata, message: &'a Message) {
+ @match message {
+ Message::Translation { id, params } => {}
+ Message::Text(t) => { @t }
+ Message::Item(i) => { @data.item_name(*i) }
+ Message::Tile(i) => { @data.tile_name(*i) }
+ }
+ }
+
+ DiagramR<'a>(data: &'a Gamedata, diagram: &'a Diagram) {
+ div.diagram[style="position: absolute;"] {
+ @for node in &diagram.nodes {
+ div.node[style=format!("position: relative; left: {}px; top: {}px;", node.position.x, 350. - node.position.y / 2.)] {
+ @MessageR { data, message: &node.label }
+ }
+ }
+ @for edge in &diagram.edges {
+
+ }
+ }
+ }
}