summaryrefslogtreecommitdiff
path: root/cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'cli/src')
-rw-r--r--cli/src/args.rs58
-rw-r--r--cli/src/main.rs63
2 files changed, 65 insertions, 56 deletions
diff --git a/cli/src/args.rs b/cli/src/args.rs
new file mode 100644
index 00000000..c88c9a21
--- /dev/null
+++ b/cli/src/args.rs
@@ -0,0 +1,58 @@
+use std::path::PathBuf;
+
+use clap::{ArgAction, Parser, Subcommand};
+
+/// typst creates PDF files from .typ files
+#[derive(Debug, Clone, Parser)]
+#[clap(name = "typst", version = crate::typst_version(), author)]
+pub struct CliArguments {
+ /// Add additional directories to search for fonts
+ #[clap(long = "font-path", value_name = "DIR", action = ArgAction::Append)]
+ pub font_paths: Vec<PathBuf>,
+
+ /// Configure the root for absolute paths
+ #[clap(long = "root", value_name = "DIR")]
+ pub root: Option<PathBuf>,
+
+ /// The typst command to run
+ #[command(subcommand)]
+ pub command: Command,
+}
+
+/// What to do.
+#[derive(Debug, Clone, Subcommand)]
+#[command()]
+pub enum Command {
+ /// Compiles the input file into a PDF file
+ #[command(visible_alias = "c")]
+ Compile(CompileCommand),
+
+ /// Watches the input file and recompiles on changes
+ #[command(visible_alias = "w")]
+ Watch(CompileCommand),
+
+ /// List all discovered fonts in system and custom font paths
+ Fonts(FontsCommand),
+}
+
+/// Compiles the input file into a PDF file
+#[derive(Debug, Clone, Parser)]
+pub struct CompileCommand {
+ /// Path to input Typst file
+ pub input: PathBuf,
+
+ /// Path to output PDF file
+ pub output: Option<PathBuf>,
+
+ /// Opens the output file after compilation using the default PDF viewer
+ #[arg(long = "open")]
+ pub open: Option<Option<String>>,
+}
+
+/// List all discovered fonts in system and custom font paths
+#[derive(Debug, Clone, Parser)]
+pub struct FontsCommand {
+ /// Also list style variants of each font family
+ #[arg(long)]
+ pub variants: bool,
+}
diff --git a/cli/src/main.rs b/cli/src/main.rs
index d0dcc2bd..1190232d 100644
--- a/cli/src/main.rs
+++ b/cli/src/main.rs
@@ -1,3 +1,5 @@
+mod args;
+
use std::cell::{RefCell, RefMut};
use std::collections::HashMap;
use std::fs::{self, File};
@@ -6,7 +8,7 @@ use std::io::{self, Write};
use std::path::{Path, PathBuf};
use std::process;
-use clap::{ArgAction, Parser, Subcommand};
+use clap::Parser;
use codespan_reporting::diagnostic::{Diagnostic, Label};
use codespan_reporting::term::{self, termcolor};
use comemo::Prehashed;
@@ -25,64 +27,13 @@ use typst::util::{Buffer, PathExt};
use typst::World;
use walkdir::WalkDir;
+use crate::args::{CliArguments, Command, CompileCommand};
+
type CodespanResult<T> = Result<T, CodespanError>;
type CodespanError = codespan_reporting::files::Error;
-const TYPST_VERSION: &str = env!("TYPST_VERSION");
-
-/// typst creates PDF files from .typ files
-#[derive(Debug, Clone, Parser)]
-#[clap(name = "typst", version = TYPST_VERSION, author)]
-pub struct CliArguments {
- /// Add additional directories to search for fonts
- #[clap(long = "font-path", value_name = "DIR", action = ArgAction::Append)]
- font_paths: Vec<PathBuf>,
-
- /// Configure the root for absolute paths
- #[clap(long = "root", value_name = "DIR")]
- root: Option<PathBuf>,
-
- /// The typst command to run
- #[command(subcommand)]
- command: Command,
-}
-
-/// What to do.
-#[derive(Debug, Clone, Subcommand)]
-#[command()]
-enum Command {
- /// Compiles the input file into a PDF file
- #[command(visible_alias = "c")]
- Compile(CompileCommand),
-
- /// Watches the input file and recompiles on changes
- #[command(visible_alias = "w")]
- Watch(CompileCommand),
-
- /// List all discovered fonts in system and custom font paths
- Fonts(FontsCommand),
-}
-
-/// Compiles the input file into a PDF file
-#[derive(Debug, Clone, Parser)]
-pub struct CompileCommand {
- /// Path to input Typst file
- input: PathBuf,
-
- /// Path to output PDF file
- output: Option<PathBuf>,
-
- /// Opens the output file after compilation using the default PDF viewer
- #[arg(long = "open")]
- open: Option<Option<String>>,
-}
-
-/// List all discovered fonts in system and custom font paths
-#[derive(Debug, Clone, Parser)]
-pub struct FontsCommand {
- /// Also list style variants of each font family
- #[arg(long)]
- variants: bool,
+pub fn typst_version() -> &'static str {
+ env!("TYPST_VERSION")
}
/// A summary of the input arguments relevant to compilation.