Extend data baking to cosmic_jotdown
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
160
Cargo.lock
generated
|
@ -512,12 +512,6 @@ version = "0.6.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
|
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bit_field"
|
|
||||||
version = "0.10.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "1.3.2"
|
version = "1.3.2"
|
||||||
|
@ -851,15 +845,17 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cosmic-jotdown"
|
name = "cosmic-jotdown"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.nations.lol/fnmain/cosmic-jotdown#e555f2fa77b06a30a92142ff745406261839cd53"
|
source = "git+https://git.nations.lol/fnmain/cosmic-jotdown#baf0fe08ef784b0815ad6c7deb617f04993d8459"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cosmic-text",
|
"cosmic-text",
|
||||||
|
"databake",
|
||||||
"emath",
|
"emath",
|
||||||
"image",
|
"image",
|
||||||
"jotdown",
|
"jotdown",
|
||||||
"log",
|
"log",
|
||||||
"nominals",
|
"nominals",
|
||||||
"rangemap",
|
"rangemap",
|
||||||
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -903,37 +899,12 @@ dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-deque"
|
|
||||||
version = "0.8.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
|
|
||||||
dependencies = [
|
|
||||||
"crossbeam-epoch",
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-epoch"
|
|
||||||
version = "0.9.18"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
|
|
||||||
dependencies = [
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-utils"
|
name = "crossbeam-utils"
|
||||||
version = "0.8.19"
|
version = "0.8.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
|
checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crunchy"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crypto-common"
|
name = "crypto-common"
|
||||||
version = "0.1.6"
|
version = "0.1.6"
|
||||||
|
@ -1181,12 +1152,6 @@ dependencies = [
|
||||||
"web-sys",
|
"web-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "either"
|
|
||||||
version = "1.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "emath"
|
name = "emath"
|
||||||
version = "0.27.2"
|
version = "0.27.2"
|
||||||
|
@ -1422,22 +1387,6 @@ dependencies = [
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "exr"
|
|
||||||
version = "1.72.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4"
|
|
||||||
dependencies = [
|
|
||||||
"bit_field",
|
|
||||||
"flume",
|
|
||||||
"half",
|
|
||||||
"lebe",
|
|
||||||
"miniz_oxide",
|
|
||||||
"rayon-core",
|
|
||||||
"smallvec",
|
|
||||||
"zune-inflate",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastrand"
|
name = "fastrand"
|
||||||
version = "1.9.0"
|
version = "1.9.0"
|
||||||
|
@ -1472,15 +1421,6 @@ dependencies = [
|
||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "flume"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
|
|
||||||
dependencies = [
|
|
||||||
"spin",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "font-types"
|
name = "font-types"
|
||||||
version = "0.5.2"
|
version = "0.5.2"
|
||||||
|
@ -1648,16 +1588,6 @@ dependencies = [
|
||||||
"wasi",
|
"wasi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "gif"
|
|
||||||
version = "0.13.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2"
|
|
||||||
dependencies = [
|
|
||||||
"color_quant",
|
|
||||||
"weezl",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gl_generator"
|
name = "gl_generator"
|
||||||
version = "0.14.0"
|
version = "0.14.0"
|
||||||
|
@ -1765,16 +1695,6 @@ dependencies = [
|
||||||
"bitflags 2.5.0",
|
"bitflags 2.5.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "half"
|
|
||||||
version = "2.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"crunchy",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashbrown"
|
name = "hashbrown"
|
||||||
version = "0.14.3"
|
version = "0.14.3"
|
||||||
|
@ -1863,13 +1783,9 @@ dependencies = [
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"color_quant",
|
"color_quant",
|
||||||
"exr",
|
|
||||||
"gif",
|
|
||||||
"jpeg-decoder",
|
"jpeg-decoder",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"png",
|
"png",
|
||||||
"qoi",
|
|
||||||
"tiff",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1947,9 +1863,6 @@ name = "jpeg-decoder"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0"
|
checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0"
|
||||||
dependencies = [
|
|
||||||
"rayon",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "js-sys"
|
name = "js-sys"
|
||||||
|
@ -1986,12 +1899,6 @@ version = "3.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
|
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lebe"
|
|
||||||
version = "0.5.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.153"
|
version = "0.2.153"
|
||||||
|
@ -2578,15 +2485,6 @@ version = "1.0.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58"
|
checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "qoi"
|
|
||||||
version = "0.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
|
|
||||||
dependencies = [
|
|
||||||
"bytemuck",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quick-xml"
|
name = "quick-xml"
|
||||||
version = "0.31.0"
|
version = "0.31.0"
|
||||||
|
@ -2646,6 +2544,9 @@ name = "rangemap"
|
||||||
version = "1.5.1"
|
version = "1.5.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684"
|
checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "raw-window-handle"
|
name = "raw-window-handle"
|
||||||
|
@ -2659,26 +2560,6 @@ version = "0.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544"
|
checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon"
|
|
||||||
version = "1.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
|
|
||||||
dependencies = [
|
|
||||||
"either",
|
|
||||||
"rayon-core",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon-core"
|
|
||||||
version = "1.12.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
|
|
||||||
dependencies = [
|
|
||||||
"crossbeam-deque",
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "read-fonts"
|
name = "read-fonts"
|
||||||
version = "0.19.0"
|
version = "0.19.0"
|
||||||
|
@ -3012,9 +2893,6 @@ name = "spin"
|
||||||
version = "0.9.8"
|
version = "0.9.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
||||||
dependencies = [
|
|
||||||
"lock_api",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "spirv"
|
name = "spirv"
|
||||||
|
@ -3137,17 +3015,6 @@ dependencies = [
|
||||||
"syn 2.0.60",
|
"syn 2.0.60",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tiff"
|
|
||||||
version = "0.9.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e"
|
|
||||||
dependencies = [
|
|
||||||
"flate2",
|
|
||||||
"jpeg-decoder",
|
|
||||||
"weezl",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tinyvec"
|
name = "tinyvec"
|
||||||
version = "1.6.0"
|
version = "1.6.0"
|
||||||
|
@ -3621,12 +3488,6 @@ dependencies = [
|
||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "weezl"
|
|
||||||
version = "0.1.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wgpu"
|
name = "wgpu"
|
||||||
version = "0.19.4"
|
version = "0.19.4"
|
||||||
|
@ -4261,15 +4122,6 @@ version = "1.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
|
checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zune-inflate"
|
|
||||||
version = "0.2.54"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
|
|
||||||
dependencies = [
|
|
||||||
"simd-adler32",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zvariant"
|
name = "zvariant"
|
||||||
version = "3.15.2"
|
version = "3.15.2"
|
||||||
|
|
|
@ -20,7 +20,7 @@ egui-glyphon = { git = "https://git.nations.lol/fnmain/egui-glyphon" }
|
||||||
egui_extras = { version = "0.27.2", features = ["image", "http", "file"] }
|
egui_extras = { version = "0.27.2", features = ["image", "http", "file"] }
|
||||||
encase = { version = "0.7.0", features = ["glam"] }
|
encase = { version = "0.7.0", features = ["glam"] }
|
||||||
glam = "0.25.0"
|
glam = "0.25.0"
|
||||||
image = { version = "0.24.9", features = ["jpeg", "png"], defaut-features = false }
|
image = { version = "0.24.9", features = ["jpeg", "png"], default-features = false }
|
||||||
keyframe = { version = "1.1.1", default-features = false }
|
keyframe = { version = "1.1.1", default-features = false }
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
rangemap = "1.5.1"
|
rangemap = "1.5.1"
|
||||||
|
@ -55,6 +55,7 @@ opt-level = 2
|
||||||
databake = "0.1.7"
|
databake = "0.1.7"
|
||||||
glob = "0.3.1"
|
glob = "0.3.1"
|
||||||
jotdown = { git = "https://git.nations.lol/fnmain/jotdown", features = ["parser"] }
|
jotdown = { git = "https://git.nations.lol/fnmain/jotdown", features = ["parser"] }
|
||||||
|
cosmic-jotdown = { git = "https://git.nations.lol/fnmain/cosmic-jotdown", features = ["databake"] }
|
||||||
|
|
||||||
# If you want to use the bleeding edge version of egui and eframe:
|
# If you want to use the bleeding edge version of egui and eframe:
|
||||||
# egui = { git = "https://github.com/emilk/egui", branch = "master" }
|
# egui = { git = "https://github.com/emilk/egui", branch = "master" }
|
||||||
|
|
BIN
assets/images/business_card.jpg
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
assets/images/business_card_hi.jpg
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
assets/images/compute_article.jpg
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
assets/images/compute_article_hi.jpg
Normal file
After Width: | Height: | Size: 159 KiB |
BIN
assets/images/compute_home.jpg
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
assets/images/compute_home_hi.jpg
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
assets/images/git.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
assets/images/github_profile.jpg
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
assets/images/github_profile_hi.jpg
Normal file
After Width: | Height: | Size: 174 KiB |
BIN
assets/images/grezi.jpg
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
assets/images/grezi_hi.jpg
Normal file
After Width: | Height: | Size: 154 KiB |
BIN
assets/images/rust_contribs.jpg
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
assets/images/rust_contribs_hi.jpg
Normal file
After Width: | Height: | Size: 156 KiB |
BIN
assets/images/vscode.jpg
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
assets/images/vscode_hi.jpg
Normal file
After Width: | Height: | Size: 468 KiB |
19
build.rs
|
@ -1,29 +1,28 @@
|
||||||
use std::{borrow::Cow, path::Path};
|
use std::{borrow::Cow, path::Path};
|
||||||
|
|
||||||
|
use cosmic_jotdown::JotdownItem;
|
||||||
use databake::Bake;
|
use databake::Bake;
|
||||||
use jotdown::Event;
|
use jotdown::Event;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let out = std::env::var("OUT_DIR").unwrap();
|
let out = std::env::var("OUT_DIR").unwrap();
|
||||||
|
|
||||||
let jots = glob::glob("src/*.jot").unwrap();
|
let jots = glob::glob("src/*.dj").unwrap();
|
||||||
|
|
||||||
for path in jots.map(|p| p.unwrap()) {
|
for path in jots.map(|p| p.unwrap()) {
|
||||||
let file = std::fs::read_to_string(&path).unwrap();
|
let file = std::fs::read_to_string(&path).unwrap();
|
||||||
let name = path.file_name().unwrap();
|
let name = path.file_name().unwrap();
|
||||||
|
|
||||||
let mut jot = jotdown::Parser::new(&file).collect::<Vec<_>>();
|
let jot = cosmic_jotdown::jotdown_into_buffers(jotdown::Parser::new(&file).chain([
|
||||||
|
Event::Start(jotdown::Container::Paragraph, jotdown::Attributes(None)),
|
||||||
jot.push(Event::Start(
|
Event::Str("Click anywhere to return to home screen".into()),
|
||||||
jotdown::Container::Paragraph,
|
Event::End(jotdown::Container::Paragraph),
|
||||||
jotdown::Attributes(None),
|
]))
|
||||||
));
|
.collect::<Vec<_>>();
|
||||||
jot.push(Event::Str("Click anywhere to return to home screen".into()));
|
|
||||||
jot.push(Event::End(jotdown::Container::Paragraph));
|
|
||||||
|
|
||||||
std::fs::write(
|
std::fs::write(
|
||||||
Path::new(&out).join(name),
|
Path::new(&out).join(name),
|
||||||
Cow::Owned::<'_, [Event<'_>]>(jot)
|
Cow::Owned::<'_, [JotdownItem<'_>]>(jot)
|
||||||
.bake(&Default::default())
|
.bake(&Default::default())
|
||||||
.to_string(),
|
.to_string(),
|
||||||
)
|
)
|
||||||
|
|
75
src/app.rs
|
@ -13,7 +13,7 @@ use std::sync::Arc;
|
||||||
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
use arc_swap::ArcSwapAny;
|
use arc_swap::ArcSwapAny;
|
||||||
use cosmic_jotdown::Indent;
|
use cosmic_jotdown::{Indent, JotdownItem};
|
||||||
use eframe::egui::mutex::{Mutex, RwLock};
|
use eframe::egui::mutex::{Mutex, RwLock};
|
||||||
use eframe::egui::{
|
use eframe::egui::{
|
||||||
self, lerp, Align2, Id, Image, ImageSize, ImageSource, LayerId, OpenUrl, Pos2, Rect, Rounding,
|
self, lerp, Align2, Id, Image, ImageSize, ImageSource, LayerId, OpenUrl, Pos2, Rect, Rounding,
|
||||||
|
@ -21,13 +21,13 @@ use eframe::egui::{
|
||||||
};
|
};
|
||||||
use eframe::egui_wgpu::{self, wgpu};
|
use eframe::egui_wgpu::{self, wgpu};
|
||||||
use egui::{Color32, Frame};
|
use egui::{Color32, Frame};
|
||||||
|
use egui_glyphon::glyphon::cosmic_text;
|
||||||
use egui_glyphon::glyphon::cosmic_text::{Align, BufferRef};
|
use egui_glyphon::glyphon::cosmic_text::{Align, BufferRef};
|
||||||
use egui_glyphon::glyphon::{self, Attrs, Color, Edit, Editor, Weight};
|
use egui_glyphon::glyphon::{self, Attrs, Color, Edit, Editor, Weight};
|
||||||
use egui_glyphon::{BufferWithTextArea, GlyphonRenderer, GlyphonRendererCallback};
|
use egui_glyphon::{BufferWithTextArea, GlyphonRenderer, GlyphonRendererCallback};
|
||||||
use encase::ShaderType;
|
use encase::ShaderType;
|
||||||
use glam::Mat2;
|
use glam::Mat2;
|
||||||
use glyphon::{Buffer, FontSystem, Metrics};
|
use glyphon::{Buffer, FontSystem, Metrics};
|
||||||
use jotdown::Event;
|
|
||||||
use keyframe::functions;
|
use keyframe::functions;
|
||||||
use rangemap::RangeMap;
|
use rangemap::RangeMap;
|
||||||
use wgpu::util::DeviceExt;
|
use wgpu::util::DeviceExt;
|
||||||
|
@ -61,8 +61,9 @@ pub struct Portfolio {
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
pub enum State {
|
pub enum State {
|
||||||
|
Start,
|
||||||
Home,
|
Home,
|
||||||
Context(Option<Mat2>, &'static Cow<'static, [Event<'static>]>),
|
Context(Option<Mat2>, &'static Cow<'static, [JotdownItem<'static>]>),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
@ -75,33 +76,37 @@ pub struct ContextWindow {
|
||||||
|
|
||||||
pub struct ContextIcon {
|
pub struct ContextIcon {
|
||||||
pub icon: ImageSource<'static>,
|
pub icon: ImageSource<'static>,
|
||||||
pub content: &'static Cow<'static, [Event<'static>]>,
|
pub content: &'static Cow<'static, [JotdownItem<'static>]>,
|
||||||
pub angle_at: f32,
|
pub angle_at: f32,
|
||||||
pub name: &'static str,
|
pub name: &'static str,
|
||||||
}
|
}
|
||||||
|
|
||||||
const CONTEXT_METRICS: Metrics = Metrics::new(16.0, 18.0);
|
const CONTEXT_METRICS: Metrics = Metrics::new(18.0, 20.0);
|
||||||
const HOVER_TIME: f64 = 0.5;
|
const HOVER_TIME: f64 = 0.5;
|
||||||
|
|
||||||
const ABOUT_ME: Cow<'static, [Event<'static>]> =
|
const ABOUT_ME: Cow<'static, [JotdownItem<'static>]> =
|
||||||
include!(concat!(env!("OUT_DIR"), "/about_me.jot"));
|
include!(concat!(env!("OUT_DIR"), "/about_me.dj"));
|
||||||
const INKSCAPE: Cow<'static, [Event<'static>]> =
|
const INKSCAPE: Cow<'static, [JotdownItem<'static>]> =
|
||||||
include!(concat!(env!("OUT_DIR"), "/inkscape.jot"));
|
include!(concat!(env!("OUT_DIR"), "/inkscape.dj"));
|
||||||
const RUST: Cow<'static, [Event<'static>]> = include!(concat!(env!("OUT_DIR"), "/rust.jot"));
|
const RUST: Cow<'static, [JotdownItem<'static>]> = include!(concat!(env!("OUT_DIR"), "/rust.dj"));
|
||||||
const GIMP: Cow<'static, [Event<'static>]> = include!(concat!(env!("OUT_DIR"), "/gimp.jot"));
|
const GIMP: Cow<'static, [JotdownItem<'static>]> = include!(concat!(env!("OUT_DIR"), "/gimp.dj"));
|
||||||
const REAPER: Cow<'static, [Event<'static>]> = include!(concat!(env!("OUT_DIR"), "/reaper.jot"));
|
const REAPER: Cow<'static, [JotdownItem<'static>]> =
|
||||||
const TREE_SITTER: Cow<'static, [Event<'static>]> =
|
include!(concat!(env!("OUT_DIR"), "/reaper.dj"));
|
||||||
include!(concat!(env!("OUT_DIR"), "/tree_sitter.jot"));
|
const TREE_SITTER: Cow<'static, [JotdownItem<'static>]> =
|
||||||
const LINUX: Cow<'static, [Event<'static>]> = include!(concat!(env!("OUT_DIR"), "/linux.jot"));
|
include!(concat!(env!("OUT_DIR"), "/tree_sitter.dj"));
|
||||||
const PYTHON: Cow<'static, [Event<'static>]> = include!(concat!(env!("OUT_DIR"), "/python.jot"));
|
const LINUX: Cow<'static, [JotdownItem<'static>]> = include!(concat!(env!("OUT_DIR"), "/linux.dj"));
|
||||||
const KDENLIVE: Cow<'static, [Event<'static>]> =
|
const PYTHON: Cow<'static, [JotdownItem<'static>]> =
|
||||||
include!(concat!(env!("OUT_DIR"), "/kdenlive.jot"));
|
include!(concat!(env!("OUT_DIR"), "/python.dj"));
|
||||||
const JAVA: Cow<'static, [Event<'static>]> = include!(concat!(env!("OUT_DIR"), "/java.jot"));
|
const KDENLIVE: Cow<'static, [JotdownItem<'static>]> =
|
||||||
const SCRATCH: Cow<'static, [Event<'static>]> = include!(concat!(env!("OUT_DIR"), "/scratch.jot"));
|
include!(concat!(env!("OUT_DIR"), "/kdenlive.dj"));
|
||||||
const POSTGRESQL: Cow<'static, [Event<'static>]> =
|
const JAVA: Cow<'static, [JotdownItem<'static>]> = include!(concat!(env!("OUT_DIR"), "/java.dj"));
|
||||||
include!(concat!(env!("OUT_DIR"), "/postgresql.jot"));
|
const SCRATCH: Cow<'static, [JotdownItem<'static>]> =
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/scratch.dj"));
|
||||||
|
const POSTGRESQL: Cow<'static, [JotdownItem<'static>]> =
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/postgresql.dj"));
|
||||||
|
const GIT: Cow<'static, [JotdownItem<'static>]> = include!(concat!(env!("OUT_DIR"), "/git.dj"));
|
||||||
|
|
||||||
const CONTEXT_ICONS: [ContextIcon; 11] = [
|
const CONTEXT_ICONS: [ContextIcon; 12] = [
|
||||||
ContextIcon {
|
ContextIcon {
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
icon: ImageSource::Uri(Cow::Borrowed(concat!(
|
icon: ImageSource::Uri(Cow::Borrowed(concat!(
|
||||||
|
@ -213,6 +218,15 @@ const CONTEXT_ICONS: [ContextIcon; 11] = [
|
||||||
angle_at: -235.0,
|
angle_at: -235.0,
|
||||||
name: "postgresql",
|
name: "postgresql",
|
||||||
},
|
},
|
||||||
|
ContextIcon {
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
icon: ImageSource::Uri(Cow::Borrowed(concat!(env!("PHOST"), "/images/git.png"))),
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
icon: ImageSource::Uri(Cow::Borrowed("file://assets/images/git.png")),
|
||||||
|
content: &GIT,
|
||||||
|
angle_at: -77.0,
|
||||||
|
name: "git",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const NAME_PLATE: [&str; 3] = [
|
const NAME_PLATE: [&str; 3] = [
|
||||||
|
@ -232,7 +246,7 @@ pub struct ResolvedItem<'a> {
|
||||||
impl ContextWindow {
|
impl ContextWindow {
|
||||||
pub fn set_content(
|
pub fn set_content(
|
||||||
&mut self,
|
&mut self,
|
||||||
content: &'static Cow<'static, [Event<'static>]>,
|
content: &'static Cow<'static, [JotdownItem<'static>]>,
|
||||||
#[cfg(target_arch = "wasm32")] transform: Option<Mat2>,
|
#[cfg(target_arch = "wasm32")] transform: Option<Mat2>,
|
||||||
#[cfg(target_arch = "wasm32")] name: Option<&'static str>,
|
#[cfg(target_arch = "wasm32")] name: Option<&'static str>,
|
||||||
font_system: &mut FontSystem,
|
font_system: &mut FontSystem,
|
||||||
|
@ -240,11 +254,9 @@ impl ContextWindow {
|
||||||
#[cfg(target_arch = "wasm32")] states: &mut Vec<State>,
|
#[cfg(target_arch = "wasm32")] states: &mut Vec<State>,
|
||||||
) {
|
) {
|
||||||
self.size = Vec2::new(max_width / 1.5, 0.0);
|
self.size = Vec2::new(max_width / 1.5, 0.0);
|
||||||
let text =
|
|
||||||
cosmic_jotdown::jotdown_into_buffers(content.iter().cloned()).collect::<Vec<_>>();
|
|
||||||
|
|
||||||
let (size, text) = cosmic_jotdown::resolve_paragraphs(
|
let (size, text) = cosmic_jotdown::resolve_paragraphs(
|
||||||
&text,
|
content.as_ref(),
|
||||||
self.size,
|
self.size,
|
||||||
font_system,
|
font_system,
|
||||||
CONTEXT_METRICS,
|
CONTEXT_METRICS,
|
||||||
|
@ -361,6 +373,13 @@ impl Portfolio {
|
||||||
.set_onpopstate(Some(wasm_bindgen::JsCast::unchecked_ref(
|
.set_onpopstate(Some(wasm_bindgen::JsCast::unchecked_ref(
|
||||||
popstate_closure.as_ref(),
|
popstate_closure.as_ref(),
|
||||||
)));
|
)));
|
||||||
|
states.borrow_mut().push(State::Start);
|
||||||
|
web_sys::window()
|
||||||
|
.unwrap()
|
||||||
|
.history()
|
||||||
|
.unwrap()
|
||||||
|
.push_state(&wasm_bindgen::JsValue::from(0), "Home")
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
egui_extras::install_image_loaders(&cc.egui_ctx);
|
egui_extras::install_image_loaders(&cc.egui_ctx);
|
||||||
|
@ -538,7 +557,7 @@ impl Portfolio {
|
||||||
fn update_state(&mut self, ui: &mut egui::Ui) {
|
fn update_state(&mut self, ui: &mut egui::Ui) {
|
||||||
if let Some(state) = self.next_state.load().deref() {
|
if let Some(state) = self.next_state.load().deref() {
|
||||||
match state.deref() {
|
match state.deref() {
|
||||||
State::Home => {
|
State::Home | State::Start => {
|
||||||
self.zoomed = true;
|
self.zoomed = true;
|
||||||
self.click(ui, None, false);
|
self.click(ui, None, false);
|
||||||
}
|
}
|
||||||
|
|
12
src/git.dj
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Git (and related tooling) experience
|
||||||
|
|
||||||
|
I've been using git to do version control with my code since 2019 (which is when my [GitHub account](https://github.com/StratusFearMe21) was created).
|
||||||
|
|
||||||
|
![An image of my GitHub profile](images/github_profile.jpg#256x256)
|
||||||
|
|
||||||
|
Since learning GitHub I've also learned how to leverage git with programs like Woodpecker CI (See my [Linux experience](#linux)) which allow me to check and deploy code automatically.
|
||||||
|
|
||||||
|
- For a publication I was a founder of in highschool, [Compute](https://compute.nations.lol), I designed the infrastructure of the website to revolve around the git workflow (I also designed all the webpages on the site). See [this article](https://compute.nations.lol/master/how_to_run_a_journal.html) I wrote about the infrastructure behind the site.
|
||||||
|
|
||||||
|
![The home page of Compute](images/compute_home.jpg#256x256)
|
||||||
|
![An article written about Compute's infrastructure](images/compute_article.jpg#256x256)
|
|
@ -6,10 +6,14 @@ For those who don't know, *Inkscape* is very similar to Adobe Illustrator, but o
|
||||||
|
|
||||||
![Political Ad Campaign](images/pac1.jpg#256x362)
|
![Political Ad Campaign](images/pac1.jpg#256x362)
|
||||||
|
|
||||||
- This project was for my Senior Web Development class, and the assignment was to make a logo for a fictional company using what knowledge of Adobe Illustrator (Inkscape) we had
|
- This project was for my Senior year Web Development class, and the assignment was to make a logo for a fictional company using what knowledge of Adobe Illustrator (Inkscape) we had
|
||||||
|
|
||||||
![Bitogo Corp logo and sologan](images/bitogo.jpg#256x362)
|
![Bitogo Corp logo and sologan](images/bitogo.jpg#256x362)
|
||||||
|
|
||||||
|
- This project was also for my Senior year Web Development class, the assignment was to make a mock business, and make various promotional items for them
|
||||||
|
|
||||||
|
![A business card for the mock business](images/business_card.jpg#256x146)
|
||||||
|
|
||||||
- This project was also for my Senior US Government class. It's a flag representing the mock country where the Angry Birds franchise takes place
|
- This project was also for my Senior US Government class. It's a flag representing the mock country where the Angry Birds franchise takes place
|
||||||
|
|
||||||
![A mock flag for Bird Island](images/rovio.jpg#256x181)
|
![A mock flag for Bird Island](images/rovio.jpg#256x181)
|
||||||
|
@ -19,6 +23,3 @@ For those who don't know, *Inkscape* is very similar to Adobe Illustrator, but o
|
||||||
![Classic colorway](images/classic_scrappapercircus.jpg#256x256)
|
![Classic colorway](images/classic_scrappapercircus.jpg#256x256)
|
||||||
![Block colorway](images/block_scrappapercircus.jpg#256x256)
|
![Block colorway](images/block_scrappapercircus.jpg#256x256)
|
||||||
![Coptic colorway](images/coptic_scrappapercircus.jpg#256x256)
|
![Coptic colorway](images/coptic_scrappapercircus.jpg#256x256)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#![warn(clippy::all, rust_2018_idioms)]
|
#![warn(clippy::all, rust_2018_idioms)]
|
||||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
|
||||||
|
|
||||||
use eframe::egui;
|
|
||||||
|
|
||||||
// When compiling natively:
|
// When compiling natively:
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
fn main() -> eframe::Result<()> {
|
fn main() -> eframe::Result<()> {
|
||||||
|
use eframe::egui;
|
||||||
|
|
||||||
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
|
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
|
||||||
|
|
||||||
let native_options = eframe::NativeOptions {
|
let native_options = eframe::NativeOptions {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
My language of choice is Rust. Everything I write on my own time, and everything I write if I can, I write it in Rust. Even this portfolio is written in Rust!
|
My language of choice is Rust. Everything I write on my own time, and everything I write if I can, I write it in Rust. Even this portfolio is written in Rust!
|
||||||
|
|
||||||
This portfolio uses these Rust crates:
|
This portfolio uses these Rust crates including but not limited to:
|
||||||
|
|
||||||
- `jotdown`
|
- `jotdown`
|
||||||
- `databake`
|
- `databake`
|
||||||
|
@ -12,3 +12,7 @@ This portfolio uses these Rust crates:
|
||||||
- `keyframe`
|
- `keyframe`
|
||||||
- `glam`
|
- `glam`
|
||||||
- `wgpu`
|
- `wgpu`
|
||||||
|
|
||||||
|
You can view the code for this portfolio [here](https://git.nations.lol/fnmain/portfolio)
|
||||||
|
|
||||||
|
![A screenshot of my GitHub projects I've worked on in Rust](images/rust_contribs.jpg#256x256)
|
14
src/tree_sitter.dj
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Tree-sitter (and other IDE tooling) Experience
|
||||||
|
|
||||||
|
[tree-sitter](https://tree-sitter.github.io/tree-sitter/) is a parser generator that takes a grammar written in JavaScript notation, and outputs a very fast parser written in C with incremental capabilities. Parsers generated by tree-sitter take source code and generate an abstract syntax tree which you can either walk manually, or get specific nodes out of using S-expressions.
|
||||||
|
|
||||||
|
Because of tree-sitter's incremental-parsing and tree-querying capabilites, making language servers for languages with a supported grammar is relatively trivial.
|
||||||
|
|
||||||
|
- This is a snippet of [grezi](https://github.com/StratusFearMe21/grezi-next) source code, a plain-text based slideshow program that I made that uses exclusively tree-sitter for parsing, syntax highlighting, and running a language server that provides inline annotations.
|
||||||
|
|
||||||
|
![A snippet of grezi source code](images/grezi.jpg#256x368)
|
||||||
|
|
||||||
|
- This is an instance of a language server I made, with a parser backed by tree-sitter, providing syntax highlighting, folding ranges, and a document outline for a [djot](https://djot.net) document in VSCode (VSCode doesn't normally support djot)
|
||||||
|
|
||||||
|
![A VSCode window with syntax highlighted djot source](images/vscode.jpg#256x256)
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
# Tree-sitter Experience
|
|