diff options
Diffstat (limited to 'server/tools/src/book_html.rs')
-rw-r--r-- | server/tools/src/book_html.rs | 76 |
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 { + + } + } + } } |