the snake is dead long live the king

This commit is contained in:
Daylin Morgan 2023-04-21 08:39:19 -05:00
parent a7826fba58
commit 5ccf1753d3
Signed by: daylin
GPG Key ID: C1E52E7DD81DF79F
27 changed files with 475 additions and 639 deletions

View File

@ -29,17 +29,20 @@ jobs:
sudo apt update
sudo apt install inkscape
- name: Setup PDM
uses: pdm-project/setup-pdm@v2
- name: checkout repo
uses: actions/checkout@v3
- name: Install Dependencies
run: pdm install
- name: Setup nim
uses: jiro4989/setup-nim-action@v1
with:
nim-version: '1.6.12' # default is 'stable'
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Get Deps
run: nimble install --depsOnly -y
- name: Build Logo's
run: pdm run make all
run: make all
- name: Upload GitHub Pages artifact
uses: actions/upload-pages-artifact@v1.0.3

170
.gitignore vendored
View File

@ -1,173 +1,13 @@
# Created by https://www.toptal.com/developers/gitignore/api/python
# Edit at https://www.toptal.com/developers/gitignore?templates=python
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
# End of https://www.toptal.com/developers/gitignore/api/python
**/*.svg
!assets/logo.svg
**/*.png
docs/*
!docs/index.html
!docs/ascii-variants/
!docs/ascii-variants/**
!docs/ascii
.task.mk
bin/

View File

@ -1,9 +1,3 @@
SRC := $(shell find logo/ -type f)
CONDA := source $$(conda info --base)/etc/profile.d/conda.sh; conda activate;
SVGS := $(shell find -type f -wholename "./docs/*.svg")
PNGS := $(patsubst ./docs/svg/%.svg,./docs/png/%.png, $(SVGS))
REV := $(shell date +'%Y.%m.%d-' )$(shell git describe --always --dirty | sed s'/dirty/dev/')
.PHONY: all
all:
@ -15,7 +9,14 @@ all:
@$(MAKE) docs/png/index.html
@$(MAKE) pngs
pngs: $(PNGS) ## generate all of the logo pngs
svgs: ## generate all svgs
nimble run
pngs: ## generate all of the logo pngs
nimble pngs
ascii: ## generate all ascii variants
./scripts/ascii.nims
docs/png/index.html: docs/index.html
@cat docs/index.html |\
@ -24,27 +25,6 @@ docs/png/index.html: docs/index.html
sed s'/My Logos/My Logos but PNG/g' \
> docs/png/index.html
docs/png/%.png: docs/svg/%.svg
@inkscape --export-filename=$@ $<
svgs: $(SRC) ## generate all of the logo svgs
./scripts/generate-all.py $(REV)
lint: ## apply isort/black/flake8
@isort logo
@black logo
@flake8 logo
bootstrap: pdm-env ## bootstrap the conda environment
conda-env:
$(CONDA) CONDA_ALWAYS_YES="true" mamba create -p ./env python --force
pdm-env: conda-env
$(CONDA) conda activate ./env; \
pip install pdm; \
pdm install
clean: ## remove old files
rm -f *.svg *.png
rm -f docs/*.svg

View File

@ -1,4 +1,4 @@
<div align="center">
<h1> Logo </h1>
<img width="400" src="./assets/logo.svg" />
</div>
</div>

View File

@ -1,2 +1,52 @@
<!-- © 2022 Daylin Morgan | rev. 2022.08.13-9eb3dd5-dev -->
<svg baseProfile="full" height="800" version="1.1" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[/*darkcss*/.background{fill:#1e1e2e;}.fg{fill:#f5e0dc;stroke:#f5e0dc;}.border{fill:none;stroke-width:5;}.logo{stroke-width:35;fill:none;stroke-linejoin:round;stroke-linecap:round;}.d{stroke-width:15;}]]></style></defs><g class="background" id="bg"><circle cx="400.0" cy="400.0" r="400.0" /><circle class="fg border" cx="400.0" cy="400.0" r="380.0" /></g><g class="fg logo" id="m"><path d="M 280.4,548.0l -160.0,0 l 80.0,-280.0 l 199.6,400.0 l 199.6,-400.0 l 80.0,280.0 l -160.0, 0" /><circle class="d" cx="400.0" cy="268.0" r="136.0" /><path class="fg d" d="M 264.0,268.0 a 1 1 0 0 0 272.0 0 z" /></g></svg>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- © 2023 Daylin Morgan | rev. da2aae4 -->
<svg height="800" width="800" xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<style type="text/css">
/* dark css */
.background {
fill: #1e1e2e;
}
.fg {
fill:#f5e0dc;
stroke:#f5e0dc;
}
.border {
fill:none;
stroke-width: 5;
}
.logo {
stroke-width: 35;
fill: none;
stroke-linejoin: round;
stroke-linecap: round;
}
.d {
stroke-width: 15;
}
</style>
</defs>
<g>
<circle class="background" cx="400.0" cy="400.0" r="400.0"/>
<circle class="fg border" cx="400.0" cy="400.0" r="380.0"/>
</g>
<g class="fg logo">
<path d=" M 280.4,548.0
l -160.0,0
l 80.0,-280.0
l 199.6,400.0
l 199.6,-400.0
l 80.0,280.0
l -160.0, 0
"/>
<g class="d">
<circle cx="400.0" cy="268.0" r="136.0"/>
<path class="fg" d="M 264.0,268.0 a 1 1 0 0 0 272.0 0 z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 892 B

After

Width:  |  Height:  |  Size: 1.1 KiB

2
config.nims Normal file
View File

@ -0,0 +1,2 @@
--mm:orc
--threads:on

30
docs/ascii Normal file
View File

@ -0,0 +1,30 @@
                      ...::::::::::...                      
                 .:::::::..........:::::::.                 
              .::::.... .................:::::              
           .:::.. ........        ........ ..:::.           
         :-:.. ........  .:--==--:.  ........ ..:-:         
       .-:. ......... .-+++=----=+++-. ......... .:-.       
      :-. .......... -*+:.        .:+*- .......... .-:      
     -: ........... +#:  ..........  :#+ ........... :-     
   .-: .......  .. -%  .            .  %- ..  ....... :-.   
   -: ........++.. #*:----------------:*# ..++........ :-   
  -- ....... +@@#. #@@@@@@@@@@@@@@@@@@@@# .#@@+ ....... --  
 .= ....... :@%%@#.-@%%%%%%%%%%%%%%%%%%@-.#@%%@: ....... =. 
 -: ....... *@%:#@#.+@@%%%@@@@@@@@%%%@@+.#@#:%@* ....... :- 
 -........ -@@= :%@#.-%@@@@%%%%%%@@@@%-.#@%: =@@- ........- 
.=.........#@#.. :%@#..=*%@@@@@@@@%*=..#@%: ..#@#.........=.
.=....... =@@- .. :%@#.  .:-====-:.  .#@%: .. -@@= .......=.
 -........%@* .... :%@#...        ...#@%: .... *@%........- 
 -: .... +@%: ..... :%@#. ........ .#@%: ..... :%@+ .... :- 
 .= ... :@@+ .     . .%@#. ...... .#@%. .     . +@@: ... =. 
  -- ...*@%::::::::::.:%@#. .... .#@%:.::::::::::%@*... --  
   -: .:@@@@@@@@@@@@@%:.%@#. .. .#@%.:%@@@@@@@@@@@@@:. :-   
   .-: .:-:-:------:-:. :%@#....#@%: .:-:------:-:-:. :-.   
     -:               .. :%@#..#@%: ..               :-     
      :-. ............... :%@##@%: ............... .-:      
       .-:. .............. :%@@%: .............. .:-.       
         :-:.. ............ :**: ............ ..:-:         
           .:::.. ...........  ........... ..:::.           
              .::::.... .................:::::              
                 .:::::::..........:::::::.                 
                      ...::::::::::...                      

View File

@ -0,0 +1,15 @@
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⡶⠶⠶⢶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠟⠁⠀⠀⠀⠀⠈⠻⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣤⡀⢸⣏⣀⣀⣀⣀⣀⣀⣀⣀⣹⡇⢀⣤⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣸⣿⣷⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⣾⣿⣇⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢠⣿⡏⢿⣷⡻⣿⣿⣿⣿⣿⣿⣿⣿⢟⣾⡿⢹⣿⡄⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣼⣿⠀⠈⢿⣷⡈⠛⠿⠿⠿⠿⠛⢁⣾⡿⠁⠀⣿⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢰⣿⠇⠀⠀⠈⢿⣷⡀⠀⠀⠀⠀⢀⣾⡿⠁⠀⠀⠸⣿⡆⠀⠀⠀⠀
⠀⠀⠀⠀⣾⣿⣀⣀⣀⣀⣈⢿⣷⡀⠀⠀⢀⣾⡿⣁⣀⣀⣀⣀⣿⣷⠀⠀⠀⠀
⠀⠀⠀⠘⠿⠿⠿⠿⠿⠿⠿⠋⢿⣷⡀⢀⣾⡿⠙⠿⠿⠿⠿⠿⠿⠿⠃⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣷⣾⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

View File

@ -0,0 +1,41 @@
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣤⣴⣶⣶⣶⣶⣦⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⡿⠟⠛⠋⠉⠉⠉⠉⠙⠛⠻⢿⣿⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⡀⠀⠀⠀⠀⣼⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣧⠀⠀⠀⠀⢀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣆⠀⠀⠀⣿⣿⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣿⣿⠀⠀⠀⣰⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣆⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⣰⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣆⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⣰⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⢿⣿⣿⣿⣆⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⣰⣿⣿⣿⡿⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⡇⠈⢿⣿⣿⣿⣆⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⣰⣿⣿⣿⡿⠁⢸⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⡿⠀⠀⠈⢿⣿⣿⣿⣆⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⣰⣿⣿⣿⡿⠁⠀⠀⢿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⠇⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠸⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⡟⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠀⠀⠈⠛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠁⠀⠀⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⢻⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠈⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⡿⠁⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⠈⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⡿⠁⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠀⠀⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⠀⠀⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣆⣰⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

View File

@ -0,0 +1,30 @@
                      ...::::::::::...                      
                 .:::::::..........:::::::.                 
              .::::.... .................:::::              
           .:::.. ........        ........ ..:::.           
         :-:.. ........  .:--==--:.  ........ ..:-:         
       .-:. ......... .-+++=----=+++-. ......... .:-.       
      :-. .......... -*+:.        .:+*- .......... .-:      
     -: ........... +#:  ..........  :#+ ........... :-     
   .-: .......  .. -%  .            .  %- ..  ....... :-.   
   -: ........++.. #*:----------------:*# ..++........ :-   
  -- ....... +@@#. #@@@@@@@@@@@@@@@@@@@@# .#@@+ ....... --  
 .= ....... :@%%@#.-@%%%%%%%%%%%%%%%%%%@-.#@%%@: ....... =. 
 -: ....... *@%:#@#.+@@%%%@@@@@@@@%%%@@+.#@#:%@* ....... :- 
 -........ -@@= :%@#.-%@@@@%%%%%%@@@@%-.#@%: =@@- ........- 
.=.........#@#.. :%@#..=*%@@@@@@@@%*=..#@%: ..#@#.........=.
.=....... =@@- .. :%@#.  .:-====-:.  .#@%: .. -@@= .......=.
 -........%@* .... :%@#...        ...#@%: .... *@%........- 
 -: .... +@%: ..... :%@#. ........ .#@%: ..... :%@+ .... :- 
 .= ... :@@+ .     . .%@#. ...... .#@%. .     . +@@: ... =. 
  -- ...*@%::::::::::.:%@#. .... .#@%:.::::::::::%@*... --  
   -: .:@@@@@@@@@@@@@%:.%@#. .. .#@%.:%@@@@@@@@@@@@@:. :-   
   .-: .:-:-:------:-:. :%@#....#@%: .:-:------:-:-:. :-.   
     -:               .. :%@#..#@%: ..               :-     
      :-. ............... :%@##@%: ............... .-:      
       .-:. .............. :%@@%: .............. .:-.       
         :-:.. ............ :**: ............ ..:-:         
           .:::.. ...........  ........... ..:::.           
              .::::.... .................:::::              
                 .:::::::..........:::::::.                 
                      ...::::::::::...                      

View File

@ -0,0 +1,50 @@
..::::..
.=*####****####*=.
.+##*=:. .:=*##+.
.*%*: :*%*.
=@*. .*@=
*@- -@*
*@: :@*
-@+ +@-
:: *% %* ::
.%@@%: %%********************************%% :%@@%.
+@%%@%: #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@# :%@%%@+
:@%%@%%%: +@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@+ :%%%@%%@:
#@%@%@%%%: .%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%. :%%%@%@%@#
-@%%%.+@%%%: -@@%@@@@@@@@@@@@@@@@@@@@@@@@@@%@@- :%%%@+.%%%@-
%%%@+ +@%%%: :%@%%%@@@@@@@@@@@@@@@@@@@@%%%@%: :%%%@+ +@%%%
=@%%% +@%%%: .+@@@%%%%@@@@@@@@@@@@%%%%@@@+. :%%%@+ %%%@=
.%%%@= +@%%%: .+%@@@@%%%%%%%%%%%%@@@@%+: :%@%@+ =@%%%.
+@%%# +@%@%: -+#%@@@@@@@@@@@@%#+- :%@%@+ #%%@+
:@%%@: +@%@%: .:-=+****+==:. :%@%@+ :@%%@:
#@%@* +@%@%: :%@%@+ *@%@#
-@%%%. +@%@%: :%@%@+ .%%%@-
%%%@+ +@%@%: :%@%@+ +@%%%
=@%%% +@%@%: :%@%@+ %%%@=
.%%%@= +@%@%: :%@%@+ =@%%%.
+@%@# +@%@%: :%@%@+ #@%@+
:@%%%: +@%@%: :%@%@+ :%%%@:
#%%%%##################= +@%@%: :%@%@+ =##################%%%%#
%@@@@@@@@@@@@@@@@@@@@@@%. +@%@%: :%@%@+ .%@@@@@@@@@@@@@@@@@@@@@@%
:--------------------: +@%@%: :%@%@+ :--------------------:
+@%@%: :%@%@+
+@%@%: :%@%@+
+@%@%::%@%@+
+@%@%%@%@+
+@%@@%@+
+@@@@+
=##=

26
logo.nimble Normal file
View File

@ -0,0 +1,26 @@
# Package
version = "0.1.0"
author = "Daylin Morgan"
description = "Daylin's handy logo generator"
license = "MIT"
srcDir = "src"
bin = @["logo"]
binDir = "bin"
# Dependencies
requires "nim >= 1.6.12",
"nimsvg"
proc getSvgs(): seq[string] =
(gorgeEx "find -type f -wholename \"./docs/*.svg\"").output.split("\n")
proc makePng(svg: string) =
echo svg & " -> " & svg.replace("svg","png")
exec "inkscape --export-filename=" & svg.replace("svg","png") & " " & svg
task pngs, "fetch dependencies":
for svg in getSvgs():
makePng(svg)

View File

@ -1 +0,0 @@
from .main import generate

View File

@ -1,20 +0,0 @@
import argparse
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument("-bg", "--background", help="background")
parser.add_argument("-b", "--border", help="include border", action="store_true")
parser.add_argument("--debug", help="add grid to debug logo", action="store_true")
parser.add_argument(
"-o", "--output", help="output file to save to", default="logo.svg"
)
parser.add_argument(
"-t",
"--theme",
help="theme for color [light,dark][default: dark]",
default="dark",
)
parser.add_argument("--no-minify", help="pretty print svg", action="store_true")
return parser.parse_args()

View File

@ -1,46 +0,0 @@
from collections import namedtuple
from dataclasses import dataclass
Center = namedtuple("Center", "x y")
SCALE = 800
@dataclass
class Coordinates:
"""Class for housing/calculating relevant cordinates"""
my1: int
my1: int
my2: int
mx1: int
mx2: int
dr: int
border_gap: int
def __post_init__(self):
self.scale_coordinates(SCALE)
# Nominal Values
u = (SCALE - self.my1 - self.my2 - self.dr) / 2
# v = SCALE / 2 - (self.mx1 + self.mx2)
# assert D_R < M_X1 + M_X2/2
# Coordinate Shape Centers
self.mc = Center(SCALE / 2, u + self.dr + self.my2)
self.dc = Center(SCALE / 2, u + self.dr)
def scale_coordinates(self, scale):
for k in self.__dataclass_fields__:
v = getattr(self, k)
setattr(self, k, v * scale)
coord = Coordinates(
my1=0.15,
my2=0.35,
mx1=0.13,
mx2=0.2,
dr=0.17,
border_gap=0.025,
)

View File

@ -1,70 +0,0 @@
import svgwrite
from .cli import get_args
from .config import SCALE, coord
from .shapes import circle, m
from .utils import debug, get_style, minify_css
def generate(
name, background, border, theme, comment=None, debug_mode=False, no_minify=False
):
if comment and any([debug_mode, no_minify]):
raise ValueError("Can't specify comment and pretty output (debug/no-minify)")
print(f"generating: {name}")
dwg = svgwrite.Drawing(filename=name, size=(SCALE, SCALE), debug=debug)
style = get_style(theme)
dwg.defs.add(dwg.style(style if (debug_mode or no_minify) else minify_css(style)))
bg = dwg.add(dwg.g(id="bg", class_="background"))
if background == "rect":
bg.add(dwg.rect(insert=(0, 0), size=(SCALE,) * 2))
if border:
bg.add(
dwg.rect(
insert=(coord.border_gap, coord.border_gap),
size=(
(SCALE - 2 * coord.border_gap),
(SCALE - 2 * coord.border_gap),
),
class_="fg border",
)
)
elif background == "circle":
bg.add(dwg.circle((SCALE / 2,) * 2, r=SCALE / 2))
if border:
bg.add(
dwg.circle(
(SCALE / 2,) * 2,
r=(SCALE - 2 * coord.border_gap) / 2,
class_="fg border",
)
)
logo = dwg.add(dwg.g(id="m", class_="fg logo"))
m(dwg, logo, coord)
circle(dwg, logo, coord)
if debug_mode:
debug(dwg, SCALE)
if comment:
with open(name, "w") as f:
f.write(f"<!-- {comment} -->\n")
f.write(dwg.tostring())
else:
dwg.save(pretty=(debug_mode or no_minify))
def main():
args = get_args()
generate(
args.output,
args.background,
args.border,
args.theme,
args.debug,
args.no_minify,
)

View File

@ -1,25 +0,0 @@
def circle(dwg, g, coord):
move_to = (str(coord.dc.x - coord.dr), str(coord.dc.y))
circle = dwg.circle(center=coord.dc, r=coord.dr, class_="d")
filled = dwg.path(
d=f"M {','.join(move_to)} a 1 1 0 0 0 {coord.dr*2} 0 z", class_="fg d"
)
g.add(circle)
g.add(filled)
def m(dwg, g, coord):
start_end_offset = 0.15 * (coord.mx1)
move_to = (str(coord.mc.x - coord.mx1 - start_end_offset), str(coord.mc.y))
m = dwg.path(
d=f"M {','.join(move_to)}"
f"l -{coord.mx2},0 "
f"l {coord.mx2/2},-{coord.my2} "
f"l {coord.mx2/2+coord.mx1+start_end_offset},{coord.my2+coord.my1} "
f"l {coord.mx1+coord.mx2/2+start_end_offset},-{coord.my1+coord.my2} "
f"l {coord.mx2/2},{coord.my2} "
f"l -{coord.mx2}, 0"
)
g.add(m)

View File

@ -1,24 +0,0 @@
from importlib.resources import files
def read_css(file):
return files("logo").joinpath(f"css/{file}").read_text()
def minify_css(style):
return "".join(style.split())
def get_style(theme="dark"):
style = read_css(f"{theme}.css")
style += read_css("base.css")
return style
def debug(dwg, scale):
hlines = dwg.add(dwg.g(id="hlines", stroke="green"))
for y in range(0, scale, int(scale / 20)):
hlines.add(dwg.line(start=(0, y), end=(scale, y)))
vlines = dwg.add(dwg.g(id="vline", stroke="blue"))
for x in range(0, scale, int(scale / 20)):
vlines.add(dwg.line(start=(x, 0), end=(x, scale)))

169
pdm.lock
View File

@ -1,169 +0,0 @@
[[package]]
name = "black"
version = "22.6.0"
requires_python = ">=3.6.2"
summary = "The uncompromising code formatter."
dependencies = [
"click>=8.0.0",
"mypy-extensions>=0.4.3",
"pathspec>=0.9.0",
"platformdirs>=2",
"tomli>=1.1.0; python_full_version < \"3.11.0a7\"",
]
[[package]]
name = "click"
version = "8.1.3"
requires_python = ">=3.7"
summary = "Composable command line interface toolkit"
dependencies = [
"colorama; platform_system == \"Windows\"",
]
[[package]]
name = "colorama"
version = "0.4.5"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
summary = "Cross-platform colored terminal text."
[[package]]
name = "flake8"
version = "4.0.1"
requires_python = ">=3.6"
summary = "the modular source code checker: pep8 pyflakes and co"
dependencies = [
"mccabe<0.7.0,>=0.6.0",
"pycodestyle<2.9.0,>=2.8.0",
"pyflakes<2.5.0,>=2.4.0",
]
[[package]]
name = "isort"
version = "5.10.1"
requires_python = ">=3.6.1,<4.0"
summary = "A Python utility / library to sort Python imports."
[[package]]
name = "mccabe"
version = "0.6.1"
summary = "McCabe checker, plugin for flake8"
[[package]]
name = "mypy-extensions"
version = "0.4.3"
summary = "Experimental type system extensions for programs checked with the mypy typechecker."
[[package]]
name = "pathspec"
version = "0.9.0"
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
summary = "Utility library for gitignore style pattern matching of file paths."
[[package]]
name = "platformdirs"
version = "2.5.2"
requires_python = ">=3.7"
summary = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
[[package]]
name = "pycodestyle"
version = "2.8.0"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
summary = "Python style guide checker"
[[package]]
name = "pyflakes"
version = "2.4.0"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
summary = "passive checker of Python programs"
[[package]]
name = "svgwrite"
version = "1.4.3"
requires_python = ">=3.6"
summary = "A Python library to create SVG drawings."
[[package]]
name = "tomli"
version = "2.0.1"
requires_python = ">=3.7"
summary = "A lil' TOML parser"
[metadata]
lock_version = "4.0"
content_hash = "sha256:15a59b7f453339840a0b62e3c329e1cf92be16a2d0c205b6a8c75921cb75413e"
[metadata.files]
"black 22.6.0" = [
{url = "https://files.pythonhosted.org/packages/07/eb/a757135497a3be31ab8c00ef239070c7277ad11b618104950a756bcab3c1/black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"},
{url = "https://files.pythonhosted.org/packages/19/b0/13864fd5f3090ca5379f3dcf6034f1e4f02b59620e7b8b5c6f0c85622c0b/black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"},
{url = "https://files.pythonhosted.org/packages/1a/84/203163902ee26bcf1beaef582ee0c8df3f325da3e961b68d2ece959e19d3/black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"},
{url = "https://files.pythonhosted.org/packages/1d/d2/bc58bae8ec35f5a3c796d71d5bda113060678483e623a019fb889edd8d97/black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"},
{url = "https://files.pythonhosted.org/packages/2b/70/1d0e33a4df4ed73e9f02f698a29b5d94ff58e39f029c939ecf96a10fb1f3/black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"},
{url = "https://files.pythonhosted.org/packages/2b/d9/7331e50dad8d5149a9e2285766960ac6b732ae9b3b9796e10916ad88ff61/black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"},
{url = "https://files.pythonhosted.org/packages/3e/fd/5e47b4d77549909e484de906a69fccc3fcfb782131d8b449073ad8b3ed3e/black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"},
{url = "https://files.pythonhosted.org/packages/40/d1/3f366d7887d1fb6e3e487a6c975a9e9e13618757ed0d5427197fa9e28290/black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"},
{url = "https://files.pythonhosted.org/packages/46/eb/f489451de8b3e91bd82ee722b9a8493b94f8719ea6649e5b8bba2376056d/black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"},
{url = "https://files.pythonhosted.org/packages/55/33/752544332a2d3be0f6d54ef808075681b68ddc15cfcb90ff128f2d30c85c/black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"},
{url = "https://files.pythonhosted.org/packages/57/62/2961a0a57bdf768ccb5aea16327400be6e6bde4fb47ac05af7e9535c5289/black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"},
{url = "https://files.pythonhosted.org/packages/61/11/551b0d067a7e6836fc0997ab36ee46ec65259fea8f30104f4870092f3301/black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"},
{url = "https://files.pythonhosted.org/packages/63/96/814e02033701f51701444d5505b5e2594453b1f7e913764a097b1f701633/black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"},
{url = "https://files.pythonhosted.org/packages/80/ff/cfcfa4cdb42d8fff75b6b4dc355a1186a95de4714df8cc2a60f69f7b17f8/black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"},
{url = "https://files.pythonhosted.org/packages/86/9c/2a8a13993bc63a50bda7436ecba902231fd9a88dd1cd233e6e3f534e071c/black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"},
{url = "https://files.pythonhosted.org/packages/8a/90/69274ed80397ada663ce3c4cc0c70b7fb20b529f9baf4bf9ddf4edc14ccd/black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"},
{url = "https://files.pythonhosted.org/packages/9b/22/ff6d904dcb6f92bd7c20b178ed0aa9e6814ae6452df6c573806dbc465b85/black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"},
{url = "https://files.pythonhosted.org/packages/a7/51/d0acd9f74a946a825a148dcc392433c2332ae405967d76292b9e64712dc8/black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"},
{url = "https://files.pythonhosted.org/packages/ac/9d/b06f45e8dff2b10bf4644ba7a74490538c0272ae48308e04c6f551671b89/black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"},
{url = "https://files.pythonhosted.org/packages/c4/67/a4e9125bf1a4eb5a2624b3b979af2dc6ee8d3c4ee0b3d2867173db4916fa/black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"},
{url = "https://files.pythonhosted.org/packages/d6/45/985c13ac6b2f67504cda61fc1d95365eb6446a4c6988ffe0f0f311f7a617/black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"},
{url = "https://files.pythonhosted.org/packages/e7/fe/4533d110ddced851a359cbbb162685814719690ee01939a34be023410854/black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"},
{url = "https://files.pythonhosted.org/packages/fc/37/032c45b55f901ee3fe780fbc17fe2dc262c809d94de1288201350d8d680b/black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"},
]
"click 8.1.3" = [
{url = "https://files.pythonhosted.org/packages/59/87/84326af34517fca8c58418d148f2403df25303e02736832403587318e9e8/click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
{url = "https://files.pythonhosted.org/packages/c2/f1/df59e28c642d583f7dacffb1e0965d0e00b218e0186d7858ac5233dce840/click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
]
"colorama 0.4.5" = [
{url = "https://files.pythonhosted.org/packages/2b/65/24d033a9325ce42ccbfa3ca2d0866c7e89cc68e5b9d92ecaba9feef631df/colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"},
{url = "https://files.pythonhosted.org/packages/77/8b/7550e87b2d308a1b711725dfaddc19c695f8c5fa413c640b2be01662f4e6/colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"},
]
"flake8 4.0.1" = [
{url = "https://files.pythonhosted.org/packages/34/39/cde2c8a227abb4f9ce62fe55586b920f438f1d2903a1a22514d0b982c333/flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"},
{url = "https://files.pythonhosted.org/packages/e6/84/d8db922289195c435779b4ca3a3f583f263f87e67954f7b2e83c8da21f48/flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"},
]
"isort 5.10.1" = [
{url = "https://files.pythonhosted.org/packages/ab/e9/964cb0b2eedd80c92f5172f1f8ae0443781a9d461c1372a3ce5762489593/isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
{url = "https://files.pythonhosted.org/packages/b8/5b/f18e227df38b94b4ee30d2502fd531bebac23946a2497e5595067a561274/isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
]
"mccabe 0.6.1" = [
{url = "https://files.pythonhosted.org/packages/06/18/fa675aa501e11d6d6ca0ae73a101b2f3571a565e0f7d38e062eec18a91ee/mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
{url = "https://files.pythonhosted.org/packages/87/89/479dc97e18549e21354893e4ee4ef36db1d237534982482c3681ee6e7b57/mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
]
"mypy-extensions 0.4.3" = [
{url = "https://files.pythonhosted.org/packages/5c/eb/975c7c080f3223a5cdaff09612f3a5221e4ba534f7039db34c35d95fa6a5/mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
{url = "https://files.pythonhosted.org/packages/63/60/0582ce2eaced55f65a4406fc97beba256de4b7a95a0034c6576458c6519f/mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
]
"pathspec 0.9.0" = [
{url = "https://files.pythonhosted.org/packages/42/ba/a9d64c7bcbc7e3e8e5f93a52721b377e994c22d16196e2b0f1236774353a/pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"},
{url = "https://files.pythonhosted.org/packages/f6/33/436c5cb94e9f8902e59d1d544eb298b83c84b9ec37b5b769c5a0ad6edb19/pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"},
]
"platformdirs 2.5.2" = [
{url = "https://files.pythonhosted.org/packages/ed/22/967181c94c3a4063fe64e15331b4cb366bdd7dfbf46fcb8ad89650026fec/platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
{url = "https://files.pythonhosted.org/packages/ff/7b/3613df51e6afbf2306fc2465671c03390229b55e3ef3ab9dd3f846a53be6/platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
]
"pycodestyle 2.8.0" = [
{url = "https://files.pythonhosted.org/packages/08/dc/b29daf0a202b03f57c19e7295b60d1d5e1281c45a6f5f573e41830819918/pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
{url = "https://files.pythonhosted.org/packages/15/94/bc43a2efb7b8615e38acde2b6624cae8c9ec86faf718ff5676c5179a7714/pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
]
"pyflakes 2.4.0" = [
{url = "https://files.pythonhosted.org/packages/15/60/c577e54518086e98470e9088278247f4af1d39cb43bcbd731e2c307acd6a/pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
{url = "https://files.pythonhosted.org/packages/43/fb/38848eb494af7df9aeb2d7673ace8b213313eb7e391691a79dbaeb6a838f/pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
]
"svgwrite 1.4.3" = [
{url = "https://files.pythonhosted.org/packages/16/c1/263d4e93b543390d86d8eb4fc23d9ce8a8d6efd146f9427364109004fa9b/svgwrite-1.4.3.zip", hash = "sha256:a8fbdfd4443302a6619a7f76bc937fc683daf2628d9b737c891ec08b8ce524c3"},
{url = "https://files.pythonhosted.org/packages/84/15/640e399579024a6875918839454025bb1d5f850bb70d96a11eabb644d11c/svgwrite-1.4.3-py3-none-any.whl", hash = "sha256:bb6b2b5450f1edbfa597d924f9ac2dd099e625562e492021d7dd614f65f8a22d"},
]
"tomli 2.0.1" = [
{url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
{url = "https://files.pythonhosted.org/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
]

View File

@ -1,28 +0,0 @@
[project]
name = "logo"
authors = [
{name = "Daylin Morgan", email = "daylinmorgan@gmail.com"},
]
dependencies = [
"svgwrite>=1.4.3",
]
requires-python = ">=3.10"
license = {text = "MIT"}
dynamic = ["version"]
[project.scripts]
logo = "logo.main:main"
[build-system]
requires = ["pdm-pep517>=1.0.0"]
build-backend = "pdm.pep517.api"
[tool.pdm.dev-dependencies]
dev = [
"black>=22.6.0",
"isort>=5.10.1",
"flake8>=4.0.1",
]
[tool.pdm]
version = {use_scm=true}

55
scripts/ascii.nims Executable file
View File

@ -0,0 +1,55 @@
#!/usr/bin/env -S nim e --hints:off
import std/[strformat]
type
AsciiLogo = object
braille: bool
threshold: int
color: bool
height: int
baseFile: string
const baseImg = "./docs/png/logo-dark.png"
proc fileName(al: AsciiLogo): string =
result = "./docs/ascii-variants/logo"
if al.braille:
result &= "-braille"
if al.threshold != 0:
result &= &"-threshold{al.threshold}"
if al.color:
result &= "-color"
if al.height != 0:
result &= &"-h{al.height}"
result &= ".txt"
proc make(al: AsciiLogo) =
var cmd: string
if al.baseFile != "":
cmd = &"ascii-image-converter {al.baseFile}"
else:
cmd = &"ascii-image-converter {baseImg}"
if al.braille:
cmd &= " --braille "
if al.threshold != 0:
cmd &= &" --threshold {al.threshold} "
if al.color:
cmd &= &" --color "
if al.height != 0:
cmd &= &" --height {al.height} "
cmd &= &" > {al.fileName}"
exec cmd
when isMainModule:
mkDir("./docs/ascii-variants/")
for al in @[
AsciiLogo(braille: true, threshold: 20),
AsciiLogo(braille: true, height: 15, threshold: 20),
AsciiLogo(braille: false, height: 50),
AsciiLogo(color: true, height: 30, baseFile: "./docs/png/logo-bg-circle-b-dark.png")
]:
al.make()
cpFile("./docs/ascii-variants/logo-color-h30.txt", "./docs/ascii")

View File

@ -1,47 +0,0 @@
#!/usr/bin/env python3
import sys
from pathlib import Path
from logo import generate
PROJECT_ROOT = Path(__file__).parent.parent
def main():
rev = sys.argv[1]
comment = f"© 2022 Daylin Morgan | rev. {rev}"
if not ( PROJECT_ROOT / "docs" / "svg").is_dir():
print("making docs directory")
(PROJECT_ROOT / "docs" / "svg").mkdir(exist_ok=True)
for theme in ["dark", "light"]:
for background in ["rect", "circle", None]:
for border in [True, False]:
name = ["logo"]
if background:
name.append(f"bg-{background}")
if border:
name.append("b")
name.append(theme)
name = f"{PROJECT_ROOT}/docs/svg/{'-'.join(name)}.svg"
generate(
name=name,
background=background,
border=border,
theme=theme,
comment=comment,
)
generate(
name=f"{PROJECT_ROOT}/docs/{theme}.svg",
background="circle",
border=True,
theme=theme,
comment=comment,
)
if __name__ == "__main__":
main()

View File

@ -1,7 +0,0 @@
[flake8]
ignore = F405,F403
max_line_length = 88
exclude =
.git,
__pycache__
per-file-ignores = __init__.py:F401

151
src/logo.nim Normal file
View File

@ -0,0 +1,151 @@
import std/[os, strformat, strutils]
import nimsvg
const
baseCSS = slurp "css/base.css"
lightCSS = slurp "css/light.css"
darkCSS = slurp "css/dark.css"
version = staticExec "git describe --tags HEAD --always"
type
Style = enum
stLight, stDark
Background = enum
bgNone, bgCircle, bgSquare
Point = object
x, y: float64
Logo = object
background: Background
border: bool
style: Style
const scale = 800
proc calcCoordinates(my1, my2, mx1, mx2, dr, gap: float64): tuple[my1, my2, mx1,
mx2, dr, gap: float64, mc, dc: Point] =
# not very DRY...
result.my1 = my1 * scale
result.my2 = my2 * scale
result.mx1 = mx1 * scale
result.mx2 = mx2 * scale
result.dr = dr * scale
result.gap = gap * scale
let u = (scale - result.my1 - result.my2 - result.dr) / 2
# v = SCALE / 2 - (self.mx1 + self.mx2)
# assert D_R < M_X1 + M_X2/2
# Coordinate Shape Centers
result.mc = Point(x: scale / 2, y: u + result.dr + result.my2)
result.dc = Point(x: scale / 2, y: u + result.dr)
const coord = calcCoordinates(
my1 = 0.15,
my2 = 0.35,
mx1 = 0.13,
mx2 = 0.2,
dr = 0.17,
gap = 0.025,
)
proc drawM(): Nodes =
let startEndOffset = 0.15 * (coord.mx1)
let moveTo = Point(x: coord.mc.x - coord.mx1 - startEndOffset, y: coord.mc.y)
# path(
buildSvg:
path(d = &"""
M {moveTo.x},{moveTo.y}
l -{coord.mx2},0
l {coord.mx2/2},-{coord.my2}
l {coord.mx2/2+coord.mx1+startEndOffset},{coord.my2+coord.my1}
l {coord.mx1+coord.mx2/2+startEndOffset},-{coord.my1+coord.my2}
l {coord.mx2/2},{coord.my2}
l -{coord.mx2}, 0
"""
)
proc drawD(): Nodes =
let start = Point(x: coord.dc.x - coord.dr, y: coord.dc.y)
buildSvg:
g(class = "d"):
circle(cx = coord.dc.x, cy = coord.dc.y, r = coord.dr)
path(class = "fg", d = &"M {start.x},{start.y} a 1 1 0 0 0 {coord.dr*2} 0 z")
proc addBackground(bg: Background, border: bool = true): Nodes =
buildSvg:
g:
if bg == bgCircle:
circle(class = "background", cx = scale/2, cy = scale/2, r = scale/2)
if border:
circle(class = "fg border", cx = scale/2, cy = scale/2, r = (
scale-2*coord.gap)/2)
elif bg == bgSquare:
rect(class = "background", height = scale, width = scale, x = 0, y = 0)
if border:
rect(class = "fg border", height = scale-2*coord.gap,
width = scale-2*coord.gap, x = coord.gap, y = coord.gap)
proc addStyle(s: Style): Nodes =
var css: string
case s:
of stDark: css &= darkCSS
of stLight: css &= lightCSS
css &= baseCSS
buildSvg:
style(type = "text/css"):
t: css
proc fname(l: Logo): string =
var name = @["logo"]
case l.background
of bgSquare: name.add("bg-rect")
of bgCircle: name.add("bg-circle")
else: discard
case l.border:
of true: name.add("b")
else: discard
case l.style:
of stLight: name.add("light")
of stDark: name.add("dark")
name.join("-") & ".svg"
proc makeLogo(l: Logo, prefix = "docs/svg", fileName = "") =
if not dirExists(prefix): createDir(prefix)
let fname = prefix / (if fileName == "": l.fname() else: fileName)
buildSvgFile(fname):
t: &"<!-- © 2023 Daylin Morgan | rev. {version} -->"
svg(height = scale, width = scale):
defs: embed addStyle(l.style)
if l.background != bgNone: embed addBackground(l.background, l.border)
g(class = "fg logo"):
embed drawM()
embed drawD()
when isMainModule:
for bg in @[bgNone, bgSquare, bgCircle]:
for style in @[stLight, stDark]:
for border in @[true, false]:
Logo(
background: bg,
border: border,
style: style
).makeLogo()
let defaults = @[
(Logo(background: bgCircle, border: true, style: stDark), "light.svg"),
(Logo(background: bgCircle, border: true, style: stLight), "dark.svg")
]
for (logo, fname) in defaults:
logo.makeLogo(fileName = fname, prefix = "docs")
when defined(makeDefault):
Logo(background: bgCircle, border: true, style: stDark).makeLogo(
prefix = "assets", "logo.svg")