diff --git a/dyesub-tool/assets/next.svg b/dyesub-tool/assets/next.svg deleted file mode 100644 index b805ced..0000000 --- a/dyesub-tool/assets/next.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dyesub-tool/assets/nixos.svg b/dyesub-tool/assets/nixos.svg deleted file mode 100644 index 8041d98..0000000 --- a/dyesub-tool/assets/nixos.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/dyesub-tool/assets/playpause.svg b/dyesub-tool/assets/playpause.svg deleted file mode 100644 index 3a02310..0000000 --- a/dyesub-tool/assets/playpause.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dyesub-tool/assets/previous.svg b/dyesub-tool/assets/previous.svg deleted file mode 100644 index b55a8f9..0000000 --- a/dyesub-tool/assets/previous.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/dyesub-tool/src/key/mod.rs b/dyesub-tool/src/key/mod.rs deleted file mode 100644 index 28e3553..0000000 --- a/dyesub-tool/src/key/mod.rs +++ /dev/null @@ -1,70 +0,0 @@ -mod oyayubi; -pub use oyayubi::OYAYUBI; - -use std::fmt::{Display, self}; - -#[derive(Clone, Copy)] -pub enum Key<'a> { - Oyayubi { - latin: char, - normal: char, - shift: char, - alt_shift: Option, - }, - Single { - text: &'a str, - u: f64, - }, - Icon { - icon_path: &'a str, - u: f64, - }, - Break, -} - -pub const fn oyayubi<'a>(latin: char, normal: char, shift: char, alt_shift: Option) -> Key<'a> { - Key::Oyayubi { - latin, - normal, - shift, - alt_shift, - } -} - -pub const fn single<'a>(text: &'a str, u: f64) -> Key<'a> { - Key::Single { - text, - u, - } -} - -pub const fn icon<'a>(icon_path: &'a str, u: f64) -> Key<'a> { - Key::Icon { - icon_path, - u, - } -} - -impl<'a> Key<'a> { - pub fn width_mod(&self) -> f64 { - use Key::*; - match self { - Oyayubi { .. } => 1.0, - Single { u, .. } => *u, - Icon { u, .. } => *u, - Break => 0.0, - } - } -} - -impl<'a> Display for Key<'a> { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - use Key::*; - write!(f, "{}", match self { - Oyayubi { latin, .. } => latin.to_string(), - Single { text, .. } => text.to_string(), - Icon { icon_path, .. } => icon_path.to_string(), - Break => "".to_string(), - }) - } -} \ No newline at end of file diff --git a/dyesub-tool/src/key/oyayubi.rs b/dyesub-tool/src/key/oyayubi.rs deleted file mode 100644 index ffffea5..0000000 --- a/dyesub-tool/src/key/oyayubi.rs +++ /dev/null @@ -1,35 +0,0 @@ -use super::Key; -use super::oyayubi as k; - -pub const OYAYUBI: [Key; 30] = [ - k('Q', '。', 'ぁ', None), - k('W', 'か', 'え', None), - k('E', 'た', 'り', None), - k('R', 'こ', 'ゃ', None), - k('T', 'さ', 'れ', None), - k('Y', 'ら', 'よ', Some('ぱ')), - k('U', 'ち', 'に', None), - k('I', 'く', 'る', None), - k('O', 'つ', 'ま', None), - k('P', ',', 'ぇ', Some('ぴ')), - k('A', 'う', 'を', None), - k('S', 'し', 'あ', None), - k('D', 'て', 'な', None), - k('F', 'け', 'ゅ', None), - k('G', 'せ', 'も', None), - k('H', 'は', 'み', None), - k('J', 'と', 'お', None), - k('K', 'き', 'の', None), - k('L', 'い', 'ょ', Some('ぽ')), - k(';', 'ん', 'っ', None), // Missing + - k('Z', '.', 'ぅ', None), - k('X', 'ひ', 'ー', None), - k('C', 'す', 'ろ', None), - k('V', 'ふ', 'や', None), - k('B', 'へ', 'ぃ', None), - k('N', 'め', 'ぬ', Some('ぷ')), - k('M', 'そ', 'ゆ', None), - k(',', 'ね', 'む', Some('ぺ')), // Missing < - k('.', 'ほ', 'わ', None), // Missing > - k('?', '・', 'ぉ', Some('ゎ')) // Missing / -]; \ No newline at end of file diff --git a/dyesub-tool/src/main.rs b/dyesub-tool/src/main.rs index 0c0d63f..ba9def8 100644 --- a/dyesub-tool/src/main.rs +++ b/dyesub-tool/src/main.rs @@ -1,20 +1,16 @@ pub mod svg; use svg::*; -pub mod key; -use key::*; - use askama::Template; use derive_more::From; use std::{fs::OpenOptions, io::Write}; -use lazy_static::lazy_static; #[derive(Template)] #[template(path = "document.xml")] -struct DocumentTemplate<'a> { - dimensions: &'a DocumentDimensions, +struct DocumentTemplate { + dimensions: DocumentDimensions, box_size: SVGMeasure, - positions: Vec<(&'a Key<'a>, (SVGMeasure, SVGMeasure))>, + positions: Vec<(SVGMeasure, SVGMeasure)>, } struct DocumentDimensions { @@ -28,31 +24,22 @@ enum Error { Template(askama::Error), } -fn positions<'a>( - keys: &'a Vec, +fn positions( size: SVGMeasure, - margin: SVGMeasure, padding: SVGMeasure, dimensions: &DocumentDimensions, -) -> Vec<(&'a Key<'a>, (SVGMeasure, SVGMeasure))> { + count: u32, +) -> Vec<(SVGMeasure, SVGMeasure)> { let grid = size + padding; - let mut x = margin; - let mut y = margin; - let mut positions = Vec::with_capacity(keys.len()); - for key in keys { - if let Key::Break = key { - x = margin; - y = y + grid; - continue; - } - if x + grid > dimensions.width - margin { - x = margin; - y = y + grid; - } - positions.push((key, (x, y))); - x = x + size * key.width_mod() + padding; - } - positions + let row_count = ((dimensions.width - padding * 2.0) / grid) as u32; + (0..count) + .map(|i| { + ( + grid * (i % row_count).into() + padding, + grid * (i / row_count).into() + padding, + ) + }) + .collect() } fn main() -> Result<(), Error> { @@ -66,28 +53,13 @@ fn main() -> Result<(), Error> { height: SVGMeasure::new(11.0, SVGUnit::Inch), }; let box_size = SVGMeasure::new(14.0, SVGUnit::Millimeter); + let boxes = 54; let padding = SVGMeasure::new(2.5, SVGUnit::Millimeter); - let margin = SVGMeasure::new(0.25, SVGUnit::Inch); let document = DocumentTemplate { - positions: positions(&KEYS, box_size, margin, padding, &dimensions), - dimensions: &dimensions, + positions: positions(box_size, padding, &dimensions, boxes), + dimensions, box_size, }; write!(file, "{}", document.render()?)?; Ok(()) } - -lazy_static! { - static ref KEYS: Vec> = { - let mut keys = OYAYUBI.to_vec(); - keys.push(Key::Break); - keys.push(single("親指左", 3.0)); - keys.push(single("親指右", 3.0)); - keys.push(Key::Break); - keys.push(icon("assets/nixos.svg", 1.0)); - keys.push(icon("assets/playpause.svg", 1.0)); - keys.push(icon("assets/previous.svg", 1.0)); - keys.push(icon("assets/next.svg", 1.0)); - keys - }; -} \ No newline at end of file diff --git a/dyesub-tool/src/svg/measure.rs b/dyesub-tool/src/svg/measure.rs index 092c2a6..fd59c9f 100644 --- a/dyesub-tool/src/svg/measure.rs +++ b/dyesub-tool/src/svg/measure.rs @@ -23,11 +23,11 @@ impl SVGMeasure { Self { measure, unit } } - pub fn to_user_units(self) -> f64 { + fn to_user_units(self) -> f64 { self.measure * self.unit.to_user_units() } - pub fn to_unit(self, unit: SVGUnit) -> Self { + fn to_unit(self, unit: SVGUnit) -> Self { SVGMeasure { measure: self.to_user_units() / unit.to_user_units(), unit, diff --git a/dyesub-tool/templates/document.xml b/dyesub-tool/templates/document.xml index 49a9758..7804fe5 100644 --- a/dyesub-tool/templates/document.xml +++ b/dyesub-tool/templates/document.xml @@ -1,33 +1,7 @@ - - - - {% for (key, (x, y)) in positions %} - {% let width = box_size * key.width_mod() %} - - - {% let dy = "0.125em" %} - {% match key %} - {% when crate::key::Key::Oyayubi with { latin, normal, shift, alt_shift } %} - {% let font_size = "0.45cm" %} - {% let latin_font_size = "0.4cm" %} - {% let alt_shift_font_size = "0.325cm" %} - {{ latin }} - {{ shift }} - {{ normal }} - {% if let Some(alt_shift) = alt_shift %} - {{ alt_shift }} - {% endif %} - {% when crate::key::Key::Single with { text, u } %} - {% let font_size = "0.5cm" %} - {{ text }} - {% when crate::key::Key::Icon with { icon_path, u } %} - {% let icon_width_mm = 7.5 %} - - {% when crate::key::Key::Break %} - {% endmatch %} - + {% for (x, y) in positions %} + {% endfor %}