aboutsummaryrefslogtreecommitdiff
path: root/script/calendar_generator
diff options
context:
space:
mode:
Diffstat (limited to 'script/calendar_generator')
-rw-r--r--script/calendar_generator/.gitignore71
-rw-r--r--script/calendar_generator/Cargo.lock290
-rw-r--r--script/calendar_generator/Cargo.toml9
-rw-r--r--script/calendar_generator/src/main.rs129
4 files changed, 499 insertions, 0 deletions
diff --git a/script/calendar_generator/.gitignore b/script/calendar_generator/.gitignore
new file mode 100644
index 0000000..aa324bd
--- /dev/null
+++ b/script/calendar_generator/.gitignore
@@ -0,0 +1,71 @@
+# Created by https://www.toptal.com/developers/gitignore/api/rust,emacs
+# Edit at https://www.toptal.com/developers/gitignore?templates=rust,emacs
+
+### Emacs ###
+# -*- mode: gitignore; -*-
+*~
+\#*\#
+/.emacs.desktop
+/.emacs.desktop.lock
+*.elc
+auto-save-list
+tramp
+.\#*
+
+# Org-mode
+.org-id-locations
+*_archive
+
+# flymake-mode
+*_flymake.*
+
+# eshell files
+/eshell/history
+/eshell/lastdir
+
+# elpa packages
+/elpa/
+
+# reftex files
+*.rel
+
+# AUCTeX auto folder
+/auto/
+
+# cask packages
+.cask/
+dist/
+
+# Flycheck
+flycheck_*.el
+
+# server auth directory
+/server/
+
+# projectiles files
+.projectile
+
+# directory configuration
+.dir-locals.el
+
+# network security
+/network-security.data
+
+
+### Rust ###
+# Generated by Cargo
+# will have compiled files and executables
+debug/
+target/
+
+# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
+# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
+Cargo.lock
+
+# These are backup files generated by rustfmt
+**/*.rs.bk
+
+# MSVC Windows builds of rustc generate these, which store debugging information
+*.pdb
+
+# End of https://www.toptal.com/developers/gitignore/api/rust,emacs
diff --git a/script/calendar_generator/Cargo.lock b/script/calendar_generator/Cargo.lock
new file mode 100644
index 0000000..199693b
--- /dev/null
+++ b/script/calendar_generator/Cargo.lock
@@ -0,0 +1,290 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
+
+[[package]]
+name = "bumpalo"
+version = "3.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+
+[[package]]
+name = "calendar_generator"
+version = "0.1.0"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.97"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-targets",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.154"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346"
+
+[[package]]
+name = "log"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
+
+[[package]]
+name = "windows-core"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
diff --git a/script/calendar_generator/Cargo.toml b/script/calendar_generator/Cargo.toml
new file mode 100644
index 0000000..3665816
--- /dev/null
+++ b/script/calendar_generator/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "calendar_generator"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+chrono = "0.4.38"
diff --git a/script/calendar_generator/src/main.rs b/script/calendar_generator/src/main.rs
new file mode 100644
index 0000000..4acb2c6
--- /dev/null
+++ b/script/calendar_generator/src/main.rs
@@ -0,0 +1,129 @@
+use chrono::prelude::*;
+use std::env;
+use chrono::NaiveDate;
+
+fn get_month( num :i8) -> & 'static str {
+ match num {
+ 1 => return "JANVIER",
+ 2 => return "FEVRIER",
+ 3 => return "MARS",
+ 4 => return "AVRIL",
+ 5 => return "MAI",
+ 6 => return "JUIN",
+ 7 => return "JUILLET",
+ 8 => return "AOUT",
+ 9 => return "SEPTEMBRE",
+ 10 => return "OCTOBRE",
+ 11 => return "NOVEMBRE",
+ 12 => return "DECEMBRE",
+ _=> return "",
+ }
+}
+
+fn nb_empty_space_before(day : Weekday) -> i8{
+ match day {
+ Weekday::Mon => return 0,
+ Weekday::Tue => return 1,
+ Weekday::Wed => return 2,
+ Weekday::Thu => return 3,
+ Weekday::Fri => return 4,
+ Weekday::Sat => return 5,
+ Weekday::Sun => return 6,
+ }
+}
+
+
+fn get_pretty_day(day_nb : i8) -> String {
+ if day_nb < 10 {
+ return "0".to_owned() + &day_nb.to_string();
+ }
+ return day_nb.to_string();
+}
+
+
+fn get_ascii_calendar(date : NaiveDate) -> String {
+
+ let binding = date.to_string();
+ let split_date = binding.split("-").collect::<Vec<_>>();
+ let month = split_date[1];
+ let year = split_date[0];
+ let month_name = get_month(month.parse::<i8>().expect("REASON"));
+ let space = 38 - "CALENDRIER".len() - 1 - month_name.len() - 1 - 4;
+
+ let mut calendar = String::from(".——————————————————————————————————————.\n");
+ calendar += "|";
+ for _ in 0..(space/2){
+ calendar += " ";
+ }
+ calendar += &("CALENDRIER".to_owned() + " " + month_name + " " + year);
+ for _ in 0..(space/2 + (space % 2)){
+ calendar = calendar.to_string() + " ";
+ }
+ calendar += "|\n";
+ calendar += "|——————————————————————————————————————|\n";
+
+
+
+ let mut top_line = String::from("| ");
+ let mut middle_line = String::from("| |");
+
+ let base_date = NaiveDate::from_ymd_opt(year.parse::<i32>().expect("REASON"),
+ 1 + month.parse::<u32>().expect("REASON"),
+ 1).unwrap();
+
+ // fill empty spaces
+ let nb_space = nb_empty_space_before(base_date.weekday());
+
+ for _ in 0..nb_space{
+ top_line += "———— ";
+ middle_line += " |"
+ }
+
+ let mut day_nb = 1;
+ for day in base_date.iter_days().take(50){
+ if day.month() != base_date.month(){
+ // complete to the end of the week
+ top_line += "———— ";
+ middle_line += " |";
+ if day.weekday() == Weekday::Sun {
+ calendar += &(top_line.clone() + " |\n");
+ calendar += &(middle_line .clone() + &(" |\n"));
+ calendar += &(top_line.clone() + " |\n");
+ break;
+ }
+ }
+ else {
+ if day.weekday() == Weekday::Sun {
+ calendar += &(top_line.clone() + "———— |\n");
+ calendar += &(middle_line .clone() + &(" ".to_owned() + &get_pretty_day(day_nb) + " | |\n"));
+ top_line = String::from("| ");
+ middle_line = String::from("| |");
+ }
+ else {
+ top_line += "———— ";
+ middle_line += &(" ".to_owned() + &get_pretty_day(day_nb) + " |");
+ }
+ }
+ day_nb += 1
+ }
+ calendar += "|______________________________________|\n";
+ return calendar;
+}
+
+
+
+fn main() {
+ let args: Vec<_> = env::args().collect();
+ if args.len() <= 1
+ {
+ println!("At least one month must be specified");
+ return;
+ }
+
+ for month in env::args(){
+ match NaiveDate::parse_from_str(&("01-".to_owned() + &month), "%d-%m-%Y") {
+ Ok(date) => println!("{}", get_ascii_calendar(date)),
+ Err(error) => println!("could not parse .{}. due to: {}", month, error),
+ }
+ }
+}