generated from ElnuDev/rust-project
Add non-functional page dimension options to dyesub-cli, implement Error in svg-units
This commit is contained in:
parent
18e507e443
commit
9009ae9e24
8 changed files with 60 additions and 15 deletions
29
Cargo.lock
generated
29
Cargo.lock
generated
|
@ -518,6 +518,7 @@ dependencies = [
|
|||
"clap",
|
||||
"clap_derive",
|
||||
"dyesub",
|
||||
"svg-units",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -584,6 +585,20 @@ version = "1.0.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||
|
||||
[[package]]
|
||||
name = "err-derive"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c34a887c8df3ed90498c1c437ce21f211c8e27672921a8ffa293cb8d6d4caa9e"
|
||||
dependencies = [
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustversion",
|
||||
"syn 1.0.109",
|
||||
"synstructure",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.2"
|
||||
|
@ -1963,7 +1978,7 @@ dependencies = [
|
|||
name = "svg-units"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"derive_more",
|
||||
"err-derive",
|
||||
"lazy_static",
|
||||
"regex",
|
||||
"strum",
|
||||
|
@ -2004,6 +2019,18 @@ dependencies = [
|
|||
"syn 2.0.28",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "synstructure"
|
||||
version = "0.12.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.47"
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
[workspace]
|
||||
members = ["dyesub-tool", "dyesub-cli", "dyesub", "svg-units"]
|
||||
resolver = "2"
|
||||
resolver = "2"
|
||||
|
|
|
@ -9,3 +9,4 @@ edition = "2021"
|
|||
clap = "4.3.23"
|
||||
clap_derive = "4.3.12"
|
||||
dyesub = { path = "../dyesub" }
|
||||
svg-units = { path = "../svg-units" }
|
|
@ -2,7 +2,7 @@ use std::path::PathBuf;
|
|||
|
||||
use clap::Parser;
|
||||
use clap_derive::Parser;
|
||||
use dyesub::Result;
|
||||
use svg_units::SVGMeasure;
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
|
@ -12,15 +12,21 @@ struct Args {
|
|||
/// Output SVG path
|
||||
#[arg(short, long)]
|
||||
output: Option<PathBuf>,
|
||||
/// Page width
|
||||
#[arg(long, default_value="11in")]
|
||||
width: SVGMeasure,
|
||||
/// Page height
|
||||
#[arg(long, default_value="8.5in")]
|
||||
height: SVGMeasure,
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
fn main() -> dyesub::Result<()> {
|
||||
let args = Args::parse();
|
||||
let output = args.output.unwrap_or_else(|| {
|
||||
let mut path = args.input.clone();
|
||||
path.set_extension("svg");
|
||||
path
|
||||
});
|
||||
dyesub::render_file(&args.input, output)?;
|
||||
dyesub::render_file(&args.input, &output)?;
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ Updating `cargoHash`:
|
|||
pname = "dyesub-cli";
|
||||
version = "0.1.0";
|
||||
buildAndTestSubdir = "dyesub-cli";
|
||||
cargoHash = "sha256-S4GvLg/B/FxjNyrQyBg25OMTgJVVBwPO+Dy/EFM4WoQ=";
|
||||
cargoHash = "sha256-6nbUjVjroFp2KZEk0wDisCUw2e9GtVxFgsGZm8xEe2A=";
|
||||
meta = meta // {
|
||||
description = "A tool for generating dye sublimation transfer sheet SVGs for Japanese thumb shift 拇指シフト keycaps.";
|
||||
};
|
||||
|
|
|
@ -6,7 +6,7 @@ edition = "2021"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
derive_more = "0.99.17"
|
||||
err-derive = "0.3.1"
|
||||
lazy_static = "1.4.0"
|
||||
regex = "1.9.3"
|
||||
strum = "0.25.0"
|
||||
|
|
|
@ -2,7 +2,7 @@ mod unit;
|
|||
pub use unit::SVGUnit;
|
||||
|
||||
mod measure;
|
||||
pub use measure::SVGMeasure;
|
||||
pub use measure::{SVGMeasure, SVGMeasureParseError};
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use super::SVGUnit;
|
||||
use derive_more::From;
|
||||
use err_derive::Error;
|
||||
use lazy_static::lazy_static;
|
||||
use regex::Regex;
|
||||
use std::cmp::Ordering;
|
||||
|
@ -35,15 +35,18 @@ impl SVGMeasure {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(From, Debug)]
|
||||
pub enum SVGUnitParseError {
|
||||
ParseMeasure(ParseFloatError),
|
||||
ParseUnit(ParseError),
|
||||
#[derive(Debug, Error)]
|
||||
pub enum SVGMeasureParseError {
|
||||
#[error(display = "Failed to parse measure number")]
|
||||
ParseMeasure(#[source] ParseFloatError),
|
||||
#[error(display = "Failed to parse measure unit")]
|
||||
ParseUnit(#[source] ParseError),
|
||||
#[error(display = "Invalid measure format")]
|
||||
Invalid,
|
||||
}
|
||||
|
||||
impl FromStr for SVGMeasure {
|
||||
type Err = SVGUnitParseError;
|
||||
type Err = SVGMeasureParseError;
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
if s == "0" {
|
||||
return Ok(SVGMeasure::new(0.0, SVGUnit::Pixel));
|
||||
|
@ -56,11 +59,19 @@ impl FromStr for SVGMeasure {
|
|||
let unit = captures[2].parse::<SVGUnit>()?;
|
||||
Ok(SVGMeasure::new(measure, unit))
|
||||
} else {
|
||||
Err(SVGUnitParseError::Invalid)
|
||||
Err(SVGMeasureParseError::Invalid)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'s> TryFrom<&'s str> for SVGMeasure {
|
||||
type Error = SVGMeasureParseError;
|
||||
|
||||
fn try_from(value: &'s str) -> Result<Self, Self::Error> {
|
||||
Self::from_str(value)
|
||||
}
|
||||
}
|
||||
|
||||
const EQ_TOLERANCE: f64 = 0.00001;
|
||||
|
||||
impl PartialEq for SVGMeasure {
|
||||
|
|
Loading…
Add table
Reference in a new issue