Compare commits
34 Commits
8b42375cfd
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c468ec7d57 | |||
| 96273071bb | |||
| 5b4d0f989e | |||
| ad51af8cfb | |||
| d5238e26c6 | |||
| 56364a4bb2 | |||
| e39e2b8748 | |||
| b7ba46c249 | |||
| 50dcb2e45f | |||
| 349641c275 | |||
| 8f2f66b0c5 | |||
| 1dc2207c33 | |||
| 6938f650fd | |||
| 12dc7edf0e | |||
| 5cade9cd94 | |||
| 39d9f65428 | |||
| 3bcb5a1553 | |||
| 9574691953 | |||
| 0bc4c14ed2 | |||
| ca0740b810 | |||
| 0ae5cba75c | |||
| 0f7023da16 | |||
| 930123771c | |||
| fe5ba3a18f | |||
| 6f60bdd652 | |||
| 02557ee6bc | |||
| ed6a1fb612 | |||
| ba15df5873 | |||
| 27c25eb147 | |||
| b265bf42dc | |||
| 707cff52b4 | |||
| 190885e5da | |||
| a677667415 | |||
| 8542a74a47 |
@@ -1,2 +1,3 @@
|
|||||||
build
|
build
|
||||||
|
.config
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|||||||
+20
-3
@@ -1,5 +1,22 @@
|
|||||||
FROM archlinux:latest
|
FROM debian:sid-slim
|
||||||
|
|
||||||
RUN pacman -Syu --noconfirm texlive texlive-langgerman lilypond pdftk perl-template-toolkit make inkscape
|
|
||||||
|
|
||||||
WORKDIR /tmp
|
ENV LANG=C.UTF-8 \
|
||||||
|
LC_ALL=C.UTF-8 \
|
||||||
|
# ConTeXt cache can be created on runtime and does not need to
|
||||||
|
# increase image size
|
||||||
|
TEXLIVE_INSTALL_NO_CONTEXT_CACHE=1 \
|
||||||
|
# As we will not install regular documentation why would we want to
|
||||||
|
# install perl docs…
|
||||||
|
NOPERLDOC=1
|
||||||
|
|
||||||
|
|
||||||
|
RUN apt-get -q update && \
|
||||||
|
apt-get -qy upgrade && \
|
||||||
|
apt-get install -qy --no-install-recommends git make lilypond texlive-extra-utils texlive-font-utils texlive-latex-base texlive-latex-extra texlive-luatex texlive-lang-german texlive-music libtemplate-perl pdftk-java inkscape fonts-ebgaramond fonts-dosis && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
ENV HOME /data
|
||||||
|
WORKDIR /data
|
||||||
|
|
||||||
|
VOLUME ["/data"]
|
||||||
|
|||||||
@@ -1,51 +1,39 @@
|
|||||||
.PHONY: all
|
TOPDIR ::= $(shell pwd)
|
||||||
tex_deps = build variables.tt library/*/*/*.tt song_choices.csv song_template.tt propers/*.tt purpose_processing.tt
|
build_dir ::= $(TOPDIR)/build
|
||||||
tpage = /usr/bin/vendor_perl/tpage
|
config_dir ::= $(TOPDIR)/config
|
||||||
docker = podman
|
docker ::= podman
|
||||||
all: leadsheet_collection.pdf print_a3.pdf print_a4.pdf clean_intermediate
|
library_dir ::= $(TOPDIR)/library
|
||||||
%.pdf: %.tex
|
propers_dir ::= $(TOPDIR)/propers
|
||||||
cd build && \
|
template_dir ::= $(TOPDIR)/templates
|
||||||
lualatex --shell-escape $<
|
song_choices ::= $(config_dir)/song_choices.csv
|
||||||
print_a3.pdf: songsheet_a3part.pdf
|
user_variables ::= $(config_dir)/variables.tt
|
||||||
cd build && \
|
export
|
||||||
pdftk A=$< B=$< shuffle A B output - | pdfjam -o a4.pdf --nup 1x2 --paper a4paper --clip true /dev/stdin && \
|
.PHONY: clean all
|
||||||
pdfbook2 --paper a3paper -s -n -o 0 -i 0 -t 0 -b 0 a4.pdf && \
|
*: $(build_dir)/dynamic_deps.mk
|
||||||
mv a4-book.pdf print_a3.pdf && \
|
$(build_dir)/dynamic_deps.mk: build_dir $(template_dir)/dynamic_deps.mk.tt $(song_choices) $(user_variables)
|
||||||
rm a4.pdf
|
$(MAKE) -C $(template_dir) $@
|
||||||
print_a4.pdf: songsheet_a4part.pdf
|
include $(build_dir)/dynamic_deps.mk
|
||||||
cd build && \
|
|
||||||
pdftk A=$< B=$< shuffle A B output - | pdfjam -o $@ --nup 1x2 --paper a4paper /dev/stdin;
|
|
||||||
songsheet_a3part.pdf: songsheet_a5.pdf
|
|
||||||
cd build && \
|
|
||||||
pdftk $< cat ~3-4 output $@
|
|
||||||
# cp $< $@
|
|
||||||
songsheet_a4part.pdf: songsheet_a5.pdf
|
|
||||||
# cp $< $@
|
|
||||||
# Uncomment this if songsheet.pdf has 12 pages or less, and you want to use an a4 sheet inside a folded a3 sheet
|
|
||||||
cd build && \
|
|
||||||
pdftk $< cat 3-4 output $@
|
|
||||||
songsheet_a5.pdf: songsheet.pdf
|
|
||||||
cd build && \
|
|
||||||
pdfjam -o $@ --nup 2x1 --paper a5paper --landscape $<
|
|
||||||
songsheet.tex: songsheet.tt $(tex_deps) header.tt head.tt footer.tt
|
|
||||||
$(tpage) $< > build/$@
|
|
||||||
musician_scores.tex: musician_scores.tt $(tex_deps)
|
|
||||||
$(tpage) $< > build/$@
|
|
||||||
leadsheet_collection.tex: musician_scores.tt $(tex_deps)
|
|
||||||
$(tpage) --define parts=band $< > build/$@
|
|
||||||
chornoten.tex: musician_scores.tt $(tex_deps)
|
|
||||||
$(tpage) --define parts=choir $< > build/$@
|
|
||||||
clean_intermediate:
|
|
||||||
cd build && \
|
|
||||||
rm songsheet_a3part.pdf songsheet_a4part.pdf songsheet_a5.pdf
|
|
||||||
build:
|
|
||||||
mkdir build
|
|
||||||
clean:
|
clean:
|
||||||
rm -r build
|
$(RM) -r build
|
||||||
|
all: leadsheet_collection.pdf choir_scores.pdf print_a3.pdf clean_intermediate #print_a4.pdf
|
||||||
|
print_%.pdf: songsheet.pdf
|
||||||
|
$(MAKE) -C $(build_dir) $@
|
||||||
|
%.pdf: build %.tex
|
||||||
|
$(MAKE) -C $(build_dir) $@
|
||||||
|
clean_intermediate:
|
||||||
|
$(MAKE) -C $(build_dir) clean_intermediate
|
||||||
|
build_dir:
|
||||||
|
mkdir -p $(build_dir)
|
||||||
|
build: build_dir build-Makefile
|
||||||
|
cp build-Makefile $(build_dir)/Makefile && \
|
||||||
|
cp -r library/gregorio_scores $(build_dir)
|
||||||
init:
|
init:
|
||||||
git submodule update --init --recursive
|
git submodule update --init --recursive
|
||||||
init_docker:
|
build_docker_image:
|
||||||
$(docker) build -t songsheet_generator .
|
$(docker) build -t songsheet_generator .
|
||||||
build_in_docker:
|
pull_docker:
|
||||||
$(docker) run -v `pwd`:/tmp songsheet_generator make
|
$(docker) pull gitea.leopold.fajtak.at/leopold/songsheet_generator:latest
|
||||||
|
tex_deps ::= $(template_dir)/variables.tt $(config_dir)/qr_codes.csv $(config_dir)/variables.tt $(dynamic_deps)
|
||||||
|
songsheet.tex: $(template_dir)/songsheet.tt $(tex_deps) $(template_dir)/header.tt $(template_dir)/head.tt $(template_dir)/footer.tt
|
||||||
|
%.tex: build $(tex_deps)
|
||||||
|
$(MAKE) -C $(template_dir) $@
|
||||||
|
|||||||
+163
@@ -0,0 +1,163 @@
|
|||||||
|
# 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
|
||||||
|
*.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/
|
||||||
|
|
||||||
|
# Flet
|
||||||
|
storage/
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Flet app
|
||||||
|
|
||||||
|
Flet app using Flet extension.
|
||||||
|
|
||||||
|
To run the app:
|
||||||
|
|
||||||
|
1. Install dependencies from pyproject.toml:
|
||||||
|
|
||||||
|
```
|
||||||
|
poetry install
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Build app:
|
||||||
|
|
||||||
|
```
|
||||||
|
poetry run flet build macos -v
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Run app:
|
||||||
|
|
||||||
|
```
|
||||||
|
poetry run flet run
|
||||||
|
```
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
[project]
|
||||||
|
name = "songsheet_generator"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = ""
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.9"
|
||||||
|
authors = [
|
||||||
|
{ name = "Leopold Fajtak", email = "leopold@fajtak.at" }
|
||||||
|
]
|
||||||
|
dependencies = [
|
||||||
|
"flet==0.26.0"
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.flet]
|
||||||
|
# org name in reverse domain name notation, e.g. "com.mycompany".
|
||||||
|
# Combined with project.name to build bundle ID for iOS and Android apps
|
||||||
|
org = "at.fajtak.songsheet_generator"
|
||||||
|
|
||||||
|
# project display name that is used as an app title on Android and iOS home screens,
|
||||||
|
# shown in window titles and about app dialogs on desktop.
|
||||||
|
product = "Songsheet Generator"
|
||||||
|
|
||||||
|
# company name to display in about app dialogs
|
||||||
|
company = "Leopold Fajtak"
|
||||||
|
|
||||||
|
# copyright text to display in about app dialogs
|
||||||
|
copyright = "Copyright (C) 2025 by Leopold Fajtak"
|
||||||
|
|
||||||
|
[tool.flet.app]
|
||||||
|
path = "src/songsheet_generator"
|
||||||
|
|
||||||
|
[tool.uv]
|
||||||
|
dev-dependencies = [
|
||||||
|
"flet[all]==0.26.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.poetry]
|
||||||
|
package-mode = false
|
||||||
|
|
||||||
|
[tool.poetry.group.dev.dependencies]
|
||||||
|
flet = {extras = ["all"], version = "0.26.0"}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
flet[all]
|
||||||
|
dependency_injector
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
import flet as ft
|
||||||
|
from pathlib import PurePath
|
||||||
|
from songsheet_generator.service.config_service import ConfigService
|
||||||
|
|
||||||
|
class ConfigComponent(ft.Column):
|
||||||
|
# application's root control is a Column containing all other controls
|
||||||
|
def __init__(self, config_service: ConfigService):
|
||||||
|
super().__init__()
|
||||||
|
self.config_service = config_service
|
||||||
|
self.path = ft.TextField(label="Bibliothek Pfad", value = self.config_service.library_path, on_change=self.textbox_changed)
|
||||||
|
self.width = 600
|
||||||
|
self.controls = [
|
||||||
|
self.path,
|
||||||
|
ft.ElevatedButton(text="Save config", on_click=self.save_config)
|
||||||
|
]
|
||||||
|
|
||||||
|
def textbox_changed(self, e):
|
||||||
|
self.config_service.library_path = e.control.value
|
||||||
|
|
||||||
|
def save_config(self, e):
|
||||||
|
self.config_service.save_config_to_storage()
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
import flet as ft
|
||||||
|
from songsheet_generator.types.song_purpose import SongPurpose
|
||||||
|
from songsheet_generator.types.song import Song
|
||||||
|
from songsheet_generator.service.song_service import SongService
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
class SongComponent(ft.Column):
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
song_service: SongService,
|
||||||
|
song_delete = lambda a : None,
|
||||||
|
song: Song = Song(),
|
||||||
|
):
|
||||||
|
super().__init__()
|
||||||
|
self.song_service = song_service
|
||||||
|
self.song = song
|
||||||
|
self.delete = song_delete
|
||||||
|
self.display_song = ft.Row(spacing=0, controls=[
|
||||||
|
ft.Text(self.song.purpose.display_name, weight=ft.FontWeight.BOLD),
|
||||||
|
ft.Text(self.song.path),
|
||||||
|
])
|
||||||
|
self.edit_purpose = ft.Dropdown(
|
||||||
|
label = "Messteil",
|
||||||
|
hint_text="Teil der Messe, der gesungen wird",
|
||||||
|
options=[ ft.dropdown.Option(key=purpose.key, text=purpose.display_name) for purpose in SongPurpose.get_all_purposes() ],
|
||||||
|
autofocus=True,
|
||||||
|
)
|
||||||
|
self.edit_path = ft.Dropdown(
|
||||||
|
label="Pfad",
|
||||||
|
options = [ft.dropdown.Option(key=path) for path in self.song_service.all_songs()]
|
||||||
|
)
|
||||||
|
|
||||||
|
self.edit_name = ft.TextField(expand=1)
|
||||||
|
|
||||||
|
self.display_view = ft.Row(
|
||||||
|
alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
|
||||||
|
vertical_alignment=ft.CrossAxisAlignment.CENTER,
|
||||||
|
controls=[
|
||||||
|
self.display_song,
|
||||||
|
ft.Row(
|
||||||
|
spacing=0,
|
||||||
|
controls=[
|
||||||
|
ft.IconButton(
|
||||||
|
icon=ft.Icons.CREATE_OUTLINED,
|
||||||
|
tooltip="Lied bearbeiten",
|
||||||
|
on_click=self.edit_clicked,
|
||||||
|
),
|
||||||
|
ft.IconButton(
|
||||||
|
ft.Icons.DELETE_OUTLINE,
|
||||||
|
tooltip="Lied entfernen",
|
||||||
|
on_click=self.delete_clicked,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
self.edit_view = ft.Row(
|
||||||
|
visible=False,
|
||||||
|
alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
|
||||||
|
vertical_alignment=ft.CrossAxisAlignment.CENTER,
|
||||||
|
controls=[
|
||||||
|
self.edit_purpose,
|
||||||
|
self.edit_path,
|
||||||
|
ft.IconButton(
|
||||||
|
icon=ft.Icons.DONE_OUTLINE_OUTLINED,
|
||||||
|
icon_color=ft.Colors.GREEN,
|
||||||
|
tooltip="Update Song",
|
||||||
|
on_click=self.save_clicked,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
self.controls = [self.display_view, self.edit_view]
|
||||||
|
|
||||||
|
def edit_clicked(self, e):
|
||||||
|
self.edit_purpose.value = self.song.purpose.key
|
||||||
|
self.edit_path.value = self.song.path
|
||||||
|
self.display_view.visible = False
|
||||||
|
self.edit_view.visible = True
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
def save_clicked(self, e):
|
||||||
|
self.song.purpose = SongPurpose(self.edit_purpose.value)
|
||||||
|
self.display_song.controls[0].value = self.song.purpose.display_name
|
||||||
|
self.display_song.controls[1].value = Path(self.song.path)
|
||||||
|
self.display_view.visible = True
|
||||||
|
self.edit_view.visible = False
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
def delete_clicked(self, e):
|
||||||
|
self.delete(self)
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
import flet as ft
|
||||||
|
from pathlib import Path
|
||||||
|
from .song_component import SongComponent
|
||||||
|
from songsheet_generator.types.song_purpose import SongPurpose
|
||||||
|
from songsheet_generator.types.song import Song
|
||||||
|
from songsheet_generator.service.song_service import SongService
|
||||||
|
from songsheet_generator.containers import Services
|
||||||
|
|
||||||
|
class SongsComponent(ft.Column):
|
||||||
|
# application's root control is a Column containing all other controls
|
||||||
|
def __init__(self, song_service: SongService):
|
||||||
|
super().__init__()
|
||||||
|
self.song_service = song_service
|
||||||
|
self.songs = ft.Column()
|
||||||
|
self.purpose = ft.Dropdown(
|
||||||
|
label = "Messteil",
|
||||||
|
hint_text="Teil der Messe, der gesungen wird",
|
||||||
|
options=[ ft.dropdown.Option(key=purpose.key, text=purpose.display_name) for purpose in SongPurpose.get_all_purposes() ],
|
||||||
|
autofocus=True,
|
||||||
|
)
|
||||||
|
self.path = ft.Dropdown(
|
||||||
|
label="Pfad",
|
||||||
|
options = [ft.dropdown.Option(key=path) for path in self.song_service.all_songs()]
|
||||||
|
)
|
||||||
|
self.width = 600
|
||||||
|
self.controls = [
|
||||||
|
ft.Row(
|
||||||
|
controls=[
|
||||||
|
self.purpose,
|
||||||
|
self.path,
|
||||||
|
ft.FloatingActionButton(
|
||||||
|
icon=ft.Icons.ADD, on_click=self.add_clicked
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
self.songs,
|
||||||
|
]
|
||||||
|
|
||||||
|
def add_clicked(self, s):
|
||||||
|
# todo use dependency injection and the factory design pattern
|
||||||
|
self.songs.controls.append(SongComponent(song_service = self.song_service, song_delete = self.song_delete, song = Song(SongPurpose(self.purpose.value), Path(self.path.value))))
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
def song_delete(self, song):
|
||||||
|
self.songs.controls.remove(song)
|
||||||
|
self.update()
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
"""Containers module"""
|
||||||
|
|
||||||
|
from dependency_injector import containers, providers
|
||||||
|
from service.config_service_impl import ConfigServiceImpl
|
||||||
|
from service.song_service_impl import SongServiceImpl
|
||||||
|
from components.song_component import SongComponent
|
||||||
|
|
||||||
|
class Services(containers.DeclarativeContainer):
|
||||||
|
config_service = providers.Singleton(ConfigServiceImpl)
|
||||||
|
song_service = providers.Singleton(SongServiceImpl, config_service = config_service)
|
||||||
|
song_component_factory = providers.Factory(SongComponent, song_service=song_service)
|
||||||
|
|
||||||
|
class Application(containers.DeclarativeContainer):
|
||||||
|
services = providers.Container(
|
||||||
|
Services
|
||||||
|
)
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
import flet as ft
|
||||||
|
from dependency_injector.wiring import Provide, inject
|
||||||
|
from components.songs_component import SongsComponent
|
||||||
|
from components.config_component import ConfigComponent
|
||||||
|
from service.config_service import ConfigService
|
||||||
|
from service.song_service import SongService
|
||||||
|
from songsheet_generator.containers import Application
|
||||||
|
|
||||||
|
def main(
|
||||||
|
page: ft.Page,
|
||||||
|
song_service: SongService = Provide[Application.services.song_service],
|
||||||
|
config_service: ConfigService = Provide[Application.services.config_service]):
|
||||||
|
|
||||||
|
page.title = "Songsheet Generator"
|
||||||
|
page.horizontal_alignment = ft.CrossAxisAlignment.CENTER
|
||||||
|
page.update()
|
||||||
|
|
||||||
|
config_service.set_page(page)
|
||||||
|
|
||||||
|
lieder = SongsComponent(song_service)
|
||||||
|
config = ConfigComponent(config_service)
|
||||||
|
|
||||||
|
tabs = ft.Tabs(
|
||||||
|
selected_index=1,
|
||||||
|
animation_duration=300,
|
||||||
|
tabs = [
|
||||||
|
ft.Tab(
|
||||||
|
text="Lieder",
|
||||||
|
content=lieder,
|
||||||
|
),
|
||||||
|
ft.Tab(
|
||||||
|
text="Events",
|
||||||
|
content=ft.Text("Events"),
|
||||||
|
),
|
||||||
|
ft.Tab(
|
||||||
|
text="Config",
|
||||||
|
content=config,
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
#add application's root control to the page
|
||||||
|
page.add(tabs)
|
||||||
|
|
||||||
|
|
||||||
|
container1 = Application()
|
||||||
|
container1.wire(modules=[__name__])
|
||||||
|
ft.app(main)
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import flet as ft
|
||||||
|
from abc import ABC, abstractmethod
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
class ConfigService(ABC):
|
||||||
|
@property
|
||||||
|
@abstractmethod
|
||||||
|
def library_path(self) -> Path:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def set_page(self, page: ft.Page):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def save_config_to_storage(self):
|
||||||
|
pass
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import flet as ft
|
||||||
|
from .config_service import ConfigService
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
class ConfigServiceImpl(ConfigService):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.library_path: Path = Path.home()
|
||||||
|
self.page = None
|
||||||
|
|
||||||
|
def set_page(self, page: ft.Page):
|
||||||
|
self.page = page
|
||||||
|
if self.page.client_storage.contains_key("library_path"):
|
||||||
|
self.library_path = Path(self.page.client_storage.get("library_path"))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def library_path(self) -> Path:
|
||||||
|
return self._library_path
|
||||||
|
|
||||||
|
@library_path.setter
|
||||||
|
def library_path(self, value: Path):
|
||||||
|
self._library_path = value
|
||||||
|
|
||||||
|
def save_config_to_storage(self):
|
||||||
|
if self.page:
|
||||||
|
self.page.client_storage.set("library_path", self.library_path)
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
class Library():
|
||||||
|
def __init__(self):
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
|
class SongService(ABC):
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def all_songs():
|
||||||
|
pass
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
from .config_service import ConfigService
|
||||||
|
from .song_service import SongService
|
||||||
|
|
||||||
|
class SongServiceImpl(SongService):
|
||||||
|
|
||||||
|
def __init__(self, config_service: ConfigService):
|
||||||
|
self.config_service = config_service
|
||||||
|
|
||||||
|
def all_songs(self):
|
||||||
|
assignments_paths = list(self.config_service.library_path.rglob('assignments.tt'))
|
||||||
|
return [ p.parent.relative_to(self.config_service.library_path) for p in assignments_paths ]
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
from pathlib import PurePath
|
||||||
|
from .song_purpose import SongPurpose
|
||||||
|
|
||||||
|
class Song():
|
||||||
|
def __init__(self,
|
||||||
|
purpose: SongPurpose = SongPurpose(),
|
||||||
|
path: PurePath = PurePath(),):
|
||||||
|
self.purpose = purpose
|
||||||
|
self.path = path
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
class SongPurpose():
|
||||||
|
all_purposes = {
|
||||||
|
"introitus": ["Eröffnung", "Eröffnung"],
|
||||||
|
"kyrie": ["Kyrie", "Kyrie"],
|
||||||
|
"gloria": ["Gloria", "Gloria"],
|
||||||
|
"kehrvers": ["Antwortpsalm-Kehrvers", "Antwortpsalm-Kehrvers"],
|
||||||
|
"graduale": ["Graduale", "Graduale"],
|
||||||
|
"ad_evangelium": ["Ruf vor dem Evangelium/der Passion", "Ruf vor dem Evangelium/der Passion"],
|
||||||
|
"credo": ["Glaubensbekenntnis", "Glaubensbekenntnis"],
|
||||||
|
"offertorium": ["Zur Gabenbereitung", "Zur Gabenbereitung"],
|
||||||
|
"sanctus": ["Sanctus", "Sanctus"],
|
||||||
|
"agnus": ["Agnus Dei", "Agnus Dei"],
|
||||||
|
"communio": ["Zur Kommunion", "Zur Kommunion"],
|
||||||
|
"BMV": ["Marianische Antiphon", "Marianische Antiphon"],
|
||||||
|
"": ["", "Leer"]
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, key=""):
|
||||||
|
self.key = key
|
||||||
|
try:
|
||||||
|
[self.print_name, self.display_name] = self.all_purposes.get(key)
|
||||||
|
except KeyError:
|
||||||
|
printf(f"{key} is not a purpose option.")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_all_purposes(cls):
|
||||||
|
return [cls(key) for key in cls.all_purposes.keys()]
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
.PRECIOUS: %.tex
|
||||||
|
%.pdf: %.tex
|
||||||
|
lualatex --shell-escape $<
|
||||||
|
print_a3.pdf: songsheet_a3part.pdf
|
||||||
|
pdftk A=$< B=$< shuffle A B output - | pdfjam -o a4.pdf --nup 1x2 --paper a4paper --clip true /dev/stdin && \
|
||||||
|
pdfbook2 --paper a3paper -s -n -o 0 -i 0 -t 0 -b 0 a4.pdf && \
|
||||||
|
mv a4-book.pdf print_a3.pdf && \
|
||||||
|
rm a4.pdf
|
||||||
|
print_a4.pdf: songsheet_a4part.pdf
|
||||||
|
pdftk A=$< B=$< shuffle A B output - | pdfjam -o $@ --nup 1x2 --paper a4paper /dev/stdin;
|
||||||
|
songsheet_a3part.pdf: songsheet_a5.pdf
|
||||||
|
cp $< $@
|
||||||
|
# pdftk $< cat ~3-4 output $@
|
||||||
|
songsheet_a4part.pdf: songsheet_a5.pdf
|
||||||
|
# cp $< $@
|
||||||
|
# Uncomment this if songsheet.pdf has 12 pages or less, and you want to use an a4 sheet inside a folded a3 sheet
|
||||||
|
pdftk $< cat 3-4 output $@
|
||||||
|
songsheet_a5.pdf: songsheet.pdf
|
||||||
|
pdfjam -o $@ --nup 2x1 --paper a5paper --landscape $<
|
||||||
|
%.tex:
|
||||||
|
$(MAKE) -C $(TOPDIR) $@
|
||||||
|
clean_intermediate:
|
||||||
|
$(RM) songsheet_a3part.pdf songsheet_a4part.pdf songsheet_a5.pdf
|
||||||
Executable
+1
@@ -0,0 +1 @@
|
|||||||
|
podman run -v `pwd`:/data songsheet_generator make "$@"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
description | url
|
||||||
|
@@ -0,0 +1,15 @@
|
|||||||
|
purpose | template | assignments_directory | overrides
|
||||||
|
| | freie_lieder/adeste_fideles |
|
||||||
|
introitus | | |
|
||||||
|
#confiteor | | | lyrics = "\\input{${library_dir}/gebete/confiteor/confiteor_de.tex}"
|
||||||
|
kyrie | | |
|
||||||
|
gloria | | |
|
||||||
|
graduale | | |
|
||||||
|
tractus | | |
|
||||||
|
#credo | | | lyrics = "\\input{${library_dir}/gebete/credo/apostolisch_de.tex}"
|
||||||
|
offertorium | | |
|
||||||
|
sanctus | | |
|
||||||
|
agnus | | |
|
||||||
|
communio | | |
|
||||||
|
#BMV | | |
|
||||||
|
| | |
|
||||||
|
Can't render this file because it contains an unexpected character in line 4 and column 27.
|
@@ -0,0 +1,8 @@
|
|||||||
|
[%# set variables proper, color, title, subtitle, credo, gregorian, small_head, small_footer, lent, meditations -%]
|
||||||
|
[%
|
||||||
|
proper = ''
|
||||||
|
gregorian = 0
|
||||||
|
small_head = 0
|
||||||
|
small_footer = 0
|
||||||
|
meditations = 0
|
||||||
|
-%]
|
||||||
+1
-1
Submodule library/freie_lieder updated: 851607514a...8286f88156
@@ -0,0 +1,2 @@
|
|||||||
|
*/*/*.glog
|
||||||
|
*/*/*.gtex
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
[%
|
[%
|
||||||
scores.gregorian = 'gregorio_scores/agnus_dei/agnus_viii.gabc';
|
scores.gregorian = 'agnus_viii.gabc';
|
||||||
-%]
|
-%]
|
||||||
|
|||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
name:Alma Redemptoris (simple tone);
|
||||||
|
office-part:Antiphona;
|
||||||
|
book:The Liber Usualis, 1961, p. 277 & Chants of the Church, 1956, p. 83;
|
||||||
|
transcriber:Andrew Hinkley, Leopold Fajtak;
|
||||||
|
%%
|
||||||
|
(c4) AL(c/ef/gh)ma(g) *() Re(g)dem(g)ptó(h)ris(i) Ma(j)ter,(g) (;) quæ(e) pér(e)vi(e)a(f) c<sp>'æ</sp>(e)li(d) por(e)ta(f) ma(h)nes,(g) (;) Et(h) stel(j)la(i) ma(h)ris,(g) (;) suc(e)cúr(f)re(e) ca(d)dén(e)ti(g) (;) súr(e)ge(f)re(g) qui(h) cu(j)rat(i) pó(k)pu(j)lo(j) :(:) Tu(j) quæ(i) ge(j)nu(j)í(k)sti,(g) (;) na(j)tú(i)ra(h) mi(g)rán(f)te,(e) (;) tu(e)um(e) san(h)ctum(g) Ge(f)ni(e)tó(de)rem(fe) :(:) Vir(j)go(i) pri(h)us(g) ac(h) po(g)sté(e)ri(f)us,(g) (;) Ga(h)bri(h)é(j)lis(h) ab(g) o(f)re(e) (;) su(f)mens(e) il(g)lud(g) A(h)ve,(g) (;) pec(j)ca(i)tó(j)rum(hg) mi(h)se(f)ré(ed)re.(c) (::)
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[%
|
||||||
|
scores.gregorian = 'alma_redemptoris_mater_simplex.gabc';
|
||||||
|
after_song = '
|
||||||
|
\\textit{
|
||||||
|
Erhabne Mutter des Erlösers,
|
||||||
|
du allzeit offene Pforte des Himmels
|
||||||
|
und Stern des Meeres,
|
||||||
|
komm, hilf deinem Volke,
|
||||||
|
das sich müht, vom Falle aufzustehn.
|
||||||
|
Du hast geboren, der Natur zum Staunen,
|
||||||
|
deinen heiligen Schöpfer.
|
||||||
|
die du, Jungfrau davor und danach,
|
||||||
|
aus Gabriels Mund vernahmst das selige Ave,
|
||||||
|
o erbarme dich der Sünder.
|
||||||
|
}';
|
||||||
|
-%]
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
[%
|
[%
|
||||||
scores.gregorian = 'gregorio_scores/bmv/ave_regina_caelorum.gabc';
|
scores.gregorian = 'ave_regina_caelorum.gabc';
|
||||||
credits = {
|
credits = {
|
||||||
lyrics = 'um 1100'
|
lyrics = 'um 1100'
|
||||||
melody = '17. Jh.'
|
melody = '17. Jh.'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[%
|
[%
|
||||||
scores.gregorian = 'gregorio_scores/bmv/regina_caeli/regina_caeli.gabc';
|
scores.gregorian = 'regina_caeli.gabc';
|
||||||
credits = {
|
credits = {
|
||||||
lyrics = 'Rom um 1170'
|
lyrics = 'Rom um 1170'
|
||||||
melody = '16. Jh.'
|
melody = '16. Jh.'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[%
|
[%
|
||||||
scores.gregorian = 'gregorio_scores/bmv/salve_regina_simplex/salve_regina_simplex.gabc';
|
scores.gregorian = 'salve_regina_simplex.gabc';
|
||||||
credits = {
|
credits = {
|
||||||
lyrics = "11. Jh."
|
lyrics = "11. Jh."
|
||||||
melody = "17. Jh. nach Henri Du Mont"
|
melody = "17. Jh. nach Henri Du Mont"
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
Wohlan denn, unsre Fürsprecherin,
|
Wohlan denn, unsre Fürsprecherin,
|
||||||
deine barmherzigen Augen
|
deine barmherzigen Augen
|
||||||
wende uns zu
|
wende uns zu
|
||||||
und nach diesem Elend zeige uns Jesus,
|
und nach diesem Elend zeige uns \\textsc{Jesus},
|
||||||
die gebenedeite Frucht deines Leibes.
|
die gebenedeite Frucht deines Leibes.
|
||||||
O gütige, o milde, o süße Jungfrau \\textsc{Maria}.}';
|
O gütige, o milde, o süße Jungfrau \\textsc{Maria}.}';
|
||||||
-%]
|
-%]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[%
|
[%
|
||||||
scores.gregorian = 'gregorio_scores/kyrie/kyrie_viii/kyrie_viii.gabc';
|
scores.gregorian = 'kyrie/kyrie_viii/kyrie_viii.gabc';
|
||||||
credits = {
|
credits = {
|
||||||
lyrics = 'Liturgie'
|
lyrics = 'Liturgie'
|
||||||
melody = 'Vat. VIII'
|
melody = 'Vat. VIII'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[%
|
[%
|
||||||
scores.gregorian = 'gregorio_scores/kyrie/kyrie_xvi/kyrie_xvi.gabc';
|
scores.gregorian = 'kyrie/kyrie_xvi/kyrie_xvi.gabc';
|
||||||
credits = {
|
credits = {
|
||||||
lyrics = 'Liturgie'
|
lyrics = 'Liturgie'
|
||||||
melody = 'Vat. XVI'
|
melody = 'Vat. XVI'
|
||||||
|
|||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
name:Kyrie XVI (forma ordinaria);
|
||||||
|
office-part:Kyriale;
|
||||||
|
mode:3;
|
||||||
|
book:Graduale Romanum, 1974, p. 763 & Liber cantualis, 1983, p. 17;
|
||||||
|
transcriber:Pierre François;
|
||||||
|
commentary:XI-XIII. s.;
|
||||||
|
%%
|
||||||
|
(c4) KY(g)ri(hi)e(ii) *() e(g)lé(h_)i(i)son. (i.) <i>bis</i>(::)
|
||||||
|
Chrí(k)ste(ij) e(h)lé(h_)i(i)son. (i.) <i>bis</i>(::)
|
||||||
|
Ký(g)ri(hi)e(ii) e(g)lé(h_)i(i)son.(i.) (::)
|
||||||
|
Ký(g)ri(hi)e(ii) () e(g)lé(hj)i(h)son.(ig/hvGFE.) (::)
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
\paper {
|
|
||||||
% #(set-paper-size "a4")
|
|
||||||
#(define fonts
|
|
||||||
(make-pango-font-tree "EB Garamond" "DejaVu Sans" "DejaVu Sans Mono" (/ staff-height pt 20)))
|
|
||||||
}
|
|
||||||
\header {tagline = ##f}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#(set-global-staff-size 14)
|
|
||||||
\paper {
|
|
||||||
#(define fonts
|
|
||||||
(set-global-fonts
|
|
||||||
#:roman "EB Garamond"
|
|
||||||
#:factor (/ staff-height pt 18)
|
|
||||||
))
|
|
||||||
% #(set-paper-size "a4")
|
|
||||||
}
|
|
||||||
\header {tagline = ##f}
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
[% title = 'Erster Advent\-sonntag'
|
||||||
|
color = 'purple'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Zu dir, Herr, erhebe ich meine Seele. Mein Gott, dir vertraue ich.
|
||||||
|
Lass mich nicht scheitern, lass meine Feinde nicht triumphieren!
|
||||||
|
Denn niemand, der auf dich hofft, wird zuschanden.
|
||||||
|
Zeige mir, Herr, deine Wege, lehre mich deine Pfade}{Ps 25 (24), 1--3a, 4}'
|
||||||
|
offertorium = '\gradualverse{Zu dir, Herr, erhebe ich meine Seele. Mein Gott, dir vertraue ich.
|
||||||
|
Lass mich nicht scheitern, lass meine Feinde nicht triumphieren!
|
||||||
|
Denn niemand, der auf dich hofft, wird zuschanden.}{Ps 25 (24), 1--3a}'
|
||||||
|
communio = '\gradualverse{Der Herr wird seinen Segen spenden,
|
||||||
|
und unsere Erde bringt ihre Frucht hervor.}{Ps 85 (84), 13}' -%]
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[% title = 'Zweiter Advent\-sonntag'
|
||||||
|
color = 'purple'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Der Herr wird kommen, um die Welt zu erlösen.
|
||||||
|
Volk Gottes, mach dich bereit.
|
||||||
|
Höre auf ihn, und dein Herz wird sich freuen.}{Vgl. Jes 30, 19.30}'
|
||||||
|
offertorium = '\gradualverse{Willst du uns nicht wieder beleben,
|
||||||
|
dass dein Volk an dir sich freue?
|
||||||
|
Lass uns schauen, Herr, deine Huld und schenk uns dein Heil.}{Ps 85 (84), 7--8}'
|
||||||
|
communio = '\gradualverse{Jerusalem, erhebe dich,
|
||||||
|
steig auf den Berg und schau die Freude,
|
||||||
|
die von deinem Gott zu dir kommt.}{Bar 5, 5; 4, 36}'
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
[% title = 'Dritter Advent\-sonntag'
|
||||||
|
color = 'pink'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Freut euch im Herrn zu jeder Zeit! Noch einmal sage ich: Freut euch!
|
||||||
|
Denn der Herr ist nahe.}{Phil 4, 4.5}'
|
||||||
|
offertorium = '\gradualverse{Du hast wieder Gefallen gefunden, Herr, an deinem Land,
|
||||||
|
du hast Jakobs Unglück gewendet.
|
||||||
|
Du hast deinem Volk die Schuld vergeben, all seine Sünden zugedeckt.}{Ps 85 (94) 2--3}'
|
||||||
|
communio = '\gradualverse{Sagt den Verzagten: Habt Mut, fürchtet euch nicht!
|
||||||
|
Seht, hier ist euer Gott!
|
||||||
|
Er selbst wird kommen und euch erretten.}{Jes 35, 4}' -%]
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
[% title = 'Vierter Advent\-sonntag'
|
||||||
|
color = 'purple'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Tauet, ihr Himmel, von oben!
|
||||||
|
Ihr Wolken, regnet herab den Gerechten!
|
||||||
|
Tu dich auf, o Erde, und sprosse den Heiland hervor!}{Vgl. Jes 45, 8}'
|
||||||
|
offertorium = '\gradualverse{Sei gegrüßt, Maria, du Begnadete, der Herr ist mit dir.
|
||||||
|
Gesegnet bist du unter den Frauen,, und gesegnet ist die Frucht deines Leibes.}{Lk 1, 28b,42b}'
|
||||||
|
communio = '\gradualverse{Seht, die Jungfrau wird empfangen und einen Sohn gebären.
|
||||||
|
Sein Name ist Immanuel, Gott mit uns.}{Jes 7, 14}' -%]
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
[% title = 'Christkönigssonntag'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'white'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{
|
||||||
|
Würdig ist das Lamm, das geschlachtet ist, Macht zu empfangen,
|
||||||
|
Reichtum und Weisheit, Kraft und Ehre.
|
||||||
|
Ihm sei die Herrlichkeit und die Herrschermacht in Ewigkeit.
|
||||||
|
}{Offb 5, 12; 1, 6}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Fordre von mir, und ich gebe dir die Völker zum Erbe,
|
||||||
|
die Enden der Erde zum Eigentum.
|
||||||
|
}{Ps 2, 8}'
|
||||||
|
communio = '\gradualverse{
|
||||||
|
Der Herr thront als König in Ewigkeit.
|
||||||
|
Der Herr segne sein Volk mit Frieden.
|
||||||
|
}{Ps 29 (28), 10–11}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
[% title = 'Taufe des Herrn'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'white'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{
|
||||||
|
Als Jesus getauft war, öffnete sich der Himmel,
|
||||||
|
und er sah den Geist Gottes wie eine Taube auf sich herabkommen.
|
||||||
|
Und die Stimme des Vaters aus dem Himmel sprach:
|
||||||
|
Das ist mein geliebter Sohn, an dem ich Gefallen habe.
|
||||||
|
}{Vgl. Mt 3, 16–17}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Hochgelobt sei der da kommt im Namen des Herrn.
|
||||||
|
Hosanna in der Höhe.
|
||||||
|
}{Mt 21, 9}'
|
||||||
|
communio = '\gradualverse{
|
||||||
|
Dieser ist es, über den Johannes gesagt hat:
|
||||||
|
Ich habe es gesehen und lege Zeugnis ab:
|
||||||
|
Dieser ist der Sohn Gottes.
|
||||||
|
}{Joh 1, 30.34}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
[% title = 'Hochfest der ohne Erbsünde empfangenen Jungfrau und Gottesmutter Maria'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'white'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{
|
||||||
|
Von Herzen will ich mich freuen über den Herrn.
|
||||||
|
Meine Seele soll jubeln über meinen Gott.
|
||||||
|
Denn er kleidet mich in Gewänder des Heils,
|
||||||
|
er hüllt mich in den Mantel der Rettung
|
||||||
|
und schmückt mich köstlich wie eine Braut.
|
||||||
|
}{Jes 61,10}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Sei gegrüßt, du Begnadete, der Herr ist mit dir.
|
||||||
|
Gesegnet bist du unter den Frauen und gesegnet ist die Frucht deines Leibes.
|
||||||
|
}{vgl. Lk 1,28; 42}'
|
||||||
|
communio = '\gradualverse{
|
||||||
|
Großes hat man von dir gesagt, Maria,
|
||||||
|
denn aus dir ging hervor die Sonne der Gerechtigkeit,
|
||||||
|
Christus, unser Gott.
|
||||||
|
}{}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
[% title = 'Zweiter Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Alle Welt bete dich an, o Gott, und singe dein Lob,
|
||||||
|
sie lobsinge deinem Namen, du Allerhöchster.}{Ps 66 (65), 4}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Jauchzt vor Gott, alle Länder der Erde! Spielt zum Ruhm seines Namens!
|
||||||
|
Ihr alle, die ihr Gott fürchtet, kommt und hört;
|
||||||
|
ich will euch erzählen, was er mir Gutes getan hat.
|
||||||
|
}{Ps 66 (65), 1-2,16}'
|
||||||
|
communio = '\gradualverse{Herr, du deckst mir den Tisch vor den Augen meiner Feinde.
|
||||||
|
Du füllst mir reichlich den Becher.
|
||||||
|
}{Ps 23 (22), 5}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{Wir haben die Liebe erkannt und an die Liebe geglaubt,
|
||||||
|
die Gott zu uns hat.}{1 Joh 4, 16}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
[% title = 'Dritter Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Singet dem Herrn ein neues Lied, singt dem Herrn, alle Lande!
|
||||||
|
Hoheit und Pracht sind vor seinem Angesicht,
|
||||||
|
Macht und Glanz in seinem Heiligtum!}{Ps 96 (95), 1.6}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Die Rechte des Herrn ist erhoben, die Rechte des Herrn wirkt mit Macht.
|
||||||
|
Ich werde nicht sterben, sondern leben, um die Taten des Herrn zu verkünden.
|
||||||
|
}{Ps 118 (117), 16.17}'
|
||||||
|
communio = '\gradualverse{Blickt auf zum Herrn, so wird euer Gesicht leuchten,
|
||||||
|
und ihr braucht nicht zu erröten.}{Ps 34 (33), 6}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{
|
||||||
|
Ich bin das Licht der Welt – so spricht der Herr.
|
||||||
|
Wer mir nachfolgt, wird nicht in der Finsternis gehen.
|
||||||
|
Er wird das Licht des Lebens haben.}{Joh 8, 12}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
[% title = 'Vierter Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Hilf uns, Herr, unser Gott, führe uns aus den Völkern zusammen!
|
||||||
|
Wir wollen deinen heiligen Namen preisen,
|
||||||
|
uns rühmen, weil wir dich loben dürfen.}{Ps 106 (105), 47}'
|
||||||
|
offertorium = '\gradualverse{ Lass dein Angesicht leuchten über deinem Knecht,
|
||||||
|
hilf mir in deiner Güte.
|
||||||
|
Herr, lass mich nicht scheitern, denn ich rufe zu dir.
|
||||||
|
}{Ps 31 (30), 17–18}'
|
||||||
|
communio = '\gradualverse{}{}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{Selig, die vor Gott arm sind; denn ihnen gehört das Himmelreich.
|
||||||
|
Selig, die keine Gewalt anwenden; denn sie werden das Land erben.
|
||||||
|
}{Mt 5, 3.5}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
[% title = 'Fünfter Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Kommt, lasst uns niederfallen,
|
||||||
|
uns verneigen vor dem Herrn, unserem Schöpfer!
|
||||||
|
Denn er ist unser Gott.}{Ps 95 (94), 6–7}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Auf dem Weg deiner Gebote gehn meine Schritte,
|
||||||
|
meine Füße wanken nicht auf deinen Pfaden.
|
||||||
|
Wende dein Ohr mir zu, vernimm meine Rede!
|
||||||
|
Wunderbar erweise deine Huld!
|
||||||
|
Du rettest alle, die sich an deiner Rechten vor den Feinden bergen
|
||||||
|
}{Ps 17 (16), 5.6b-7}'
|
||||||
|
communio = '\gradualverse{Wir wollen dem Herrn danken für seine Huld,
|
||||||
|
für sein wunderbares Tun an den Menschen,
|
||||||
|
weil er die hungernde Seele mit seinen Gaben erfüllt hat.
|
||||||
|
}{Ps 107 (106), 8–9}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{Selig, die trauern; denn sie werden getröstet werden.
|
||||||
|
Selig, die hungern und dürsten nach der Gerechtigkeit;
|
||||||
|
denn sie werden satt werden.
|
||||||
|
}{Mt 5, 4.6}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
[% title = 'Sechster Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Sei mir ein schützender Fels, eine feste Burg, die mich rettet.
|
||||||
|
Denn du bist mein Fels und meine Burg;
|
||||||
|
um deines Namens willen wirst du mich führen und leiten.}{Ps 31 (30), 3–4}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Gepriesen seist du, Herr! Lehre mich deine Gesetze.
|
||||||
|
Mit meinen Lippen verkünde ich alle Urteile deines Mundes.
|
||||||
|
}{Ps 119 (118), 12-13}'
|
||||||
|
communio = '\gradualverse{Alle aßen und wurden satt; er gab ihnen, was sie begehrten.
|
||||||
|
Ihr Verlangen wurde erfüllt.}{Vgl. Ps 78 (77), 29–30}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{Gott hat die Welt so geliebt, dass er seinen einzigen Sohn hingab,
|
||||||
|
damit jeder, der an ihn glaubt, nicht zugrunde geht,
|
||||||
|
sondern das ewige Leben hat.
|
||||||
|
}{Joh 3, 16}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
[% title = 'Siebter Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Herr, ich baue auf deine Huld,
|
||||||
|
mein Herz soll über deine Hilfe frohlocken.
|
||||||
|
Singen will ich dem Herrn, weil er mir Gutes getan hat.}{Ps 13 (12), 6}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Vernimm mein lautes Schreien, mein König und mein Gott, denn ich flehe zu dir.
|
||||||
|
}{Ps 5, 3}'
|
||||||
|
communio = '\gradualverse{Herr, verkünden will ich all deine Wunder.
|
||||||
|
Ich will jauchzen und an dir mich freuen,
|
||||||
|
für dich, du Höchster, will ich singen und spielen.}{Ps 9, 2–3}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{Ja, Herr, ich glaube, dass du der Messias bist,
|
||||||
|
der Sohn Gottes, der in die Welt kommen soll.
|
||||||
|
}{Joh 11, 27}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[% title = 'Achter Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Der Herr wurde mein Halt.
|
||||||
|
Er führte mich hinaus ins Weite,
|
||||||
|
er befreite mich, denn er hat an mir Gefallen.}{Ps 18 (17), 19.20}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Herr, wende dich mir zu und errette mich, in deiner Huld bring mir Hilfe!
|
||||||
|
}{Ps 6, 5}'
|
||||||
|
communio = '\gradualverse{Singen will ich dem Herrn, weil er mir Gutes getan hat,
|
||||||
|
den Namen des Höchsten will ich preisen.}{Ps 13 (12), 6}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{Ich bin bei euch alle Tage bis zum Ende der Welt – so spricht der Herr.
|
||||||
|
}{Mt 28, 20}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
[% title = '31. Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{
|
||||||
|
Freuen sollen sich alle, die den Herrn suchen.
|
||||||
|
Sucht den Herrn und seine Macht, sucht sein Antlitz allezeit.
|
||||||
|
}{Ps 38 (37), 22–23}'
|
||||||
|
offertorium = "\\gradualverse{
|
||||||
|
Lobe den Herrn, meine Seele, und alles in mir seinen heiligen Namen!
|
||||||
|
Lobe den Herrn, meine Seele, und vergiss nicht, was er dir Gutes getan hat!
|
||||||
|
}{Ps 103, 1-2}"
|
||||||
|
communio = '\gradualverse{
|
||||||
|
Herr, du zeigst mir den Pfad zum Leben;
|
||||||
|
vor deinem Angesicht herrscht Freude in Fülle.
|
||||||
|
}{Ps 16 (15), 11}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{
|
||||||
|
So spricht der Herr:
|
||||||
|
Wie mich der lebendige Vater gesandt hat
|
||||||
|
und wie ich durch den Vater lebe,
|
||||||
|
so wird jeder, der mich isst, durch mich leben.
|
||||||
|
}{Joh 6, 57}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
[% title = '32. Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{
|
||||||
|
Herr, lass mein Gebet zu dir dringen,
|
||||||
|
wende dein Ohr meinem Flehen zu.
|
||||||
|
}{Ps 88 (87), 3}'
|
||||||
|
offertorium = "\\gradualverse{
|
||||||
|
Festige meine Schritte wie du es verheißen hast.
|
||||||
|
Lass kein Unrecht über mich herrschen!
|
||||||
|
}{Ps 119 (118), 133}"
|
||||||
|
communio = '\gradualverse{
|
||||||
|
Der Herr ist mein Hirte, nichts wird mir fehlen.
|
||||||
|
Er lässt mich lagern auf grünen Auen
|
||||||
|
und führt mich zum Ruheplatz am Wasser.
|
||||||
|
}{Ps 23 (22), 1--2}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{
|
||||||
|
Die Jünger erkannten den Herrn Jesus,
|
||||||
|
als er das Brot brach.
|
||||||
|
}{Vgl. Lk 24, 35}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
[% title = '33. Sonntag im Jahreskreis'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'green'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{
|
||||||
|
So spricht der Herr:
|
||||||
|
Ich sinne Gedanken des Friedens und nicht des Unheils.
|
||||||
|
Wenn ihr mich anruft, so werde ich euch erhören
|
||||||
|
und euch aus der Gefangenschaft von allen Orten zusammenführen
|
||||||
|
}{Vgl. Jer 29, 11.12.14}'
|
||||||
|
offertorium = "\\gradualverse{
|
||||||
|
Aus der Tiefe rufe ich, Herr zu dir:
|
||||||
|
Herr, höre meine Stime!
|
||||||
|
}{Ps 130 (129), 1--2}"
|
||||||
|
communio = '\gradualverse{
|
||||||
|
Gott nahe zu sein ist mein Glück.
|
||||||
|
Ich setze mein Vertrauen auf Gott, den Herrn.
|
||||||
|
}{Ps 73 (72), 28}\par
|
||||||
|
\textit{oder}\par
|
||||||
|
\gradualverse{
|
||||||
|
So spricht der Herr:
|
||||||
|
Amen, ich sage euch: Betet und bittet, um was ihr wollt,
|
||||||
|
glaubt nur, dass ihr es schon erhalten habt,
|
||||||
|
dann wird es euch zuteil.
|
||||||
|
}{Mk 11, 23–24}';
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
[% title = 'Darstellung des Herrn'
|
||||||
|
subtitle = ''
|
||||||
|
color = 'white'
|
||||||
|
lent = 0
|
||||||
|
introitus = '\gradualverse{Wir haben dein Heil empfangen, o Gott, inmitten deines Tempels.
|
||||||
|
Wie dein Name, Gott, so reicht dein Ruhm bis an die Enden der Erde;
|
||||||
|
deine rechte Hand ist voll von Gerechtigkeit.
|
||||||
|
}{Vgl. Ps 48 (47), 10–11}'
|
||||||
|
offertorium = '\gradualverse{
|
||||||
|
Anmut ist ausgegossen über deine Lippen, darum hat Gott dich für immer gesegnet.
|
||||||
|
}{Ps 45 (44), 2}'
|
||||||
|
communio = '\gradualverse{Meine Augen haben das Heil gesehen,
|
||||||
|
das du vor allen Völkern bereitet hast.
|
||||||
|
}{Lk 2, 30–31}';
|
||||||
|
-%]
|
||||||
@@ -1 +0,0 @@
|
|||||||
description : url
|
|
||||||
|
@@ -1,15 +0,0 @@
|
|||||||
purpose : content : template : variables
|
|
||||||
: : :
|
|
||||||
introitus : : :
|
|
||||||
#confiteor : \input{library/gebete/confiteor/confiteor_de.tex} : :
|
|
||||||
kyrie : : :
|
|
||||||
gloria : : :
|
|
||||||
graduale : : :
|
|
||||||
tractus : : :
|
|
||||||
#credo : \input{library/gebete/credo/apostolisch_de.tex} : :
|
|
||||||
offertorium : : :
|
|
||||||
sanctus : : :
|
|
||||||
agnus : : :
|
|
||||||
communio : : :
|
|
||||||
#BMV : : :
|
|
||||||
: : :
|
|
||||||
|
@@ -1,54 +0,0 @@
|
|||||||
[% PROCESS purpose_processing.tt;
|
|
||||||
IF variables;
|
|
||||||
PROCESS "$variables";
|
|
||||||
END;
|
|
||||||
-%]
|
|
||||||
\song{[% purpose_print ? purpose_print : purpose %]}{[% song_title -%]}{
|
|
||||||
[% before_song -%]
|
|
||||||
\begin{samepage}
|
|
||||||
[% IF scores -%]
|
|
||||||
[% IF scores.gregorian AND (gregorian OR NOT scores.congregation) -%]
|
|
||||||
[% IF NOT gregorian -%]
|
|
||||||
\textbf{\LARGE{Activate gregorian}}
|
|
||||||
[% ELSE -%]
|
|
||||||
\gregorioscore{[% scores.gregorian %]}
|
|
||||||
[% END -%]
|
|
||||||
[% ELSE -%]
|
|
||||||
\lilypondfile{[% IF parts;
|
|
||||||
IF parts == 'band';
|
|
||||||
IF scores.leadsheet;
|
|
||||||
GET "../library/${scores.leadsheet}";
|
|
||||||
ELSE;
|
|
||||||
GET "../library/${scores.SATB}";
|
|
||||||
END;
|
|
||||||
ELSIF parts == 'SATB';
|
|
||||||
IF scores.SATB;
|
|
||||||
GET "../library/${scores.SATB}";
|
|
||||||
ELSE;
|
|
||||||
GET "../library/${scores.leadsheet}";
|
|
||||||
END;
|
|
||||||
END;
|
|
||||||
ELSE;
|
|
||||||
GET "../library/${scores.congregation}";
|
|
||||||
END; %]}
|
|
||||||
[% END -%]
|
|
||||||
[% ELSIF lyrics -%]
|
|
||||||
[% lyrics %]
|
|
||||||
[% END -%]
|
|
||||||
[% IF credits -%]
|
|
||||||
\leavevmode\\*
|
|
||||||
[% FOREACH key = credits.keys -%]
|
|
||||||
\[% key %]{[% credits.$key %]}
|
|
||||||
[% END -%]
|
|
||||||
[% END -%]
|
|
||||||
\end{samepage}
|
|
||||||
[% content -%]
|
|
||||||
[% IF (meditation && meditations) || (parts && meditation) -%]
|
|
||||||
\leavevmode\par\smallskip
|
|
||||||
[% meditation %]
|
|
||||||
[% END -%]
|
|
||||||
[% IF after_song -%]
|
|
||||||
\leavevmode\par\smallskip
|
|
||||||
[% after_song %]
|
|
||||||
[% END -%]
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
[% PROCESS variables.tt -%]
|
|
||||||
[% parts = 0 -%]
|
|
||||||
[% INCLUDE header.tt -%]
|
|
||||||
\begin{document}
|
|
||||||
[% INCLUDE head.tt %]
|
|
||||||
|
|
||||||
[% USE song_choices = datafile('song_choices.csv') %]
|
|
||||||
|
|
||||||
[% FOREACH song = song_choices %]
|
|
||||||
[% template = song.template == '' ? "song_template.tt" : song.template -%]
|
|
||||||
[% INCLUDE "$template"
|
|
||||||
purpose = song.purpose
|
|
||||||
content = song.content
|
|
||||||
variables = song.variables ? "${song.variables}/assignments.tt" : ''
|
|
||||||
%]
|
|
||||||
[% END %]
|
|
||||||
|
|
||||||
[% INCLUDE footer.tt %]
|
|
||||||
|
|
||||||
\end{document}
|
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
tpage_defs = --define config_dir=$(config_dir) --define library_dir=$(library_dir) --define propers_dir=$(propers_dir)
|
||||||
|
tpage = tpage $(tpage_defs)
|
||||||
|
tex_deps = *.tt $(config_dir)/variables.tt $(dynamic_deps)
|
||||||
|
songsheet.tex: songsheet.tt $(tex_deps) header.tt head.tt footer.tt
|
||||||
|
$(tpage) $< > $(build_dir)/$@
|
||||||
|
full_scores.tex: musician_scores.tt $(tex_deps)
|
||||||
|
$(tpage) --define parts=full $< > $(build_dir)/$@
|
||||||
|
choir_scores.tex: musician_scores.tt $(tex_deps)
|
||||||
|
$(tpage) --define parts=SATB $< > $(build_dir)/$@
|
||||||
|
leadsheets.tex: musician_scores.tt $(tex_deps)
|
||||||
|
$(tpage) --define parts=band $< > $(build_dir)/$@
|
||||||
|
$(build_dir)/dynamic_deps.mk: dynamic_deps.mk.tt $(song_choices) $(user_variables)
|
||||||
|
$(tpage) $< > $@
|
||||||
|
violin_parts.tex: musician_scores.tt $(tex_deps)
|
||||||
|
$(tpage) --define parts=violin $< > $(build_dir)/$@
|
||||||
|
viola_parts.tex: musician_scores.tt $(tex_deps)
|
||||||
|
$(tpage) --define parts=viola $< > $(build_dir)/$@
|
||||||
|
cello_parts.tex: musician_scores.tt $(tex_deps)
|
||||||
|
$(tpage) --define parts=cello $< > $(build_dir)/$@
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
dynamic_deps = [% PROCESS variables.tt;
|
||||||
|
USE song_choices = datafile("${config_dir}/song_choices.csv", delim= '|');
|
||||||
|
FOREACH song = song_choices;
|
||||||
|
IF song.variables != '';
|
||||||
|
GET "${library_dir}/${song.variables}/* ";
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
IF proper != '';
|
||||||
|
GET "${propers_dir}/${proper}.tt";
|
||||||
|
END;
|
||||||
|
-%]
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[% IF parts == '' -%]
|
||||||
|
\newpage\null\thispagestyle{empty}\newpage
|
||||||
|
[% END -%]
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
\vspace*{\fill}
|
\vspace*{\fill}
|
||||||
|
|
||||||
[% USE qr_codes = datafile('qr_codes.csv') %]
|
[% USE qr_codes = datafile("${config_dir}/qr_codes.csv", delim= '|') %]
|
||||||
|
|
||||||
[% FOREACH qr_code = qr_codes -%]
|
[% FOREACH qr_code = qr_codes -%]
|
||||||
|
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
\usepackage{ifthen}
|
\usepackage{ifthen}
|
||||||
\usepackage[utf8]{inputenc}
|
\usepackage[utf8]{inputenc}
|
||||||
\usepackage{ltxtable}
|
\usepackage{ltxtable}
|
||||||
\usepackage{lyluatex}
|
\usepackage[pass-fonts]{lyluatex}
|
||||||
\usepackage{multirow}
|
\usepackage{multirow}
|
||||||
\usepackage[ngerman]{selnolig}
|
\usepackage[ngerman]{selnolig}
|
||||||
\usepackage{svg}
|
\usepackage{svg}
|
||||||
@@ -79,8 +79,7 @@ BoldFont = *-Bold
|
|||||||
\footnotesize Originaltitel: #1}}
|
\footnotesize Originaltitel: #1}}
|
||||||
\newcommand{\TM}[1]{{
|
\newcommand{\TM}[1]{{
|
||||||
\footnotesize T \& M: #1}}
|
\footnotesize T \& M: #1}}
|
||||||
\newcommand{\arrangement}[1]{{
|
\newcommand{\arrangement}[1]{}
|
||||||
\footnotesize S: #1}}
|
|
||||||
\newcommand{\lyrics}[1]{{
|
\newcommand{\lyrics}[1]{{
|
||||||
\footnotesize T: #1}}
|
\footnotesize T: #1}}
|
||||||
\newcommand{\melody}[1]{{
|
\newcommand{\melody}[1]{{
|
||||||
@@ -99,7 +98,7 @@ BoldFont = *-Bold
|
|||||||
\newcommand{\Outro}[1]{\par\textit{Outro} {#1}}
|
\newcommand{\Outro}[1]{\par\textit{Outro} {#1}}
|
||||||
\newcommand{\St}[2]{\par\textit{{#1}.} {#2}}
|
\newcommand{\St}[2]{\par\textit{{#1}.} {#2}}
|
||||||
|
|
||||||
\setluaoption{ly}{staffsize}{14}
|
%\setluaoption{ly}{staffsize}{14}
|
||||||
|
|
||||||
\setlength\parindent{0pt}
|
\setlength\parindent{0pt}
|
||||||
\setlength\parskip{2mm plus 1mm minus 1.5mm}
|
\setlength\parskip{2mm plus 1mm minus 1.5mm}
|
||||||
@@ -1,28 +1,44 @@
|
|||||||
[% PROCESS variables.tt -%]
|
[% PROCESS variables.tt;
|
||||||
\documentclass[a4paper,12pt]{memoir}
|
IF proper != '';
|
||||||
\usepackage[margin=2cm]{geometry}
|
PROCESS "${propers_dir}/${proper}.tt";
|
||||||
\usepackage[utf8]{inputenc}
|
END;
|
||||||
|
-%]
|
||||||
|
\documentclass[a4paper,12pt]{article}
|
||||||
\usepackage[ngerman]{babel}
|
\usepackage[ngerman]{babel}
|
||||||
\usepackage{fontspec}
|
|
||||||
\usepackage{multirow}
|
|
||||||
\usepackage{graphicx}
|
|
||||||
\usepackage{xcolor}
|
|
||||||
\usepackage{svg}
|
|
||||||
\usepackage{wrapfig}
|
|
||||||
\usepackage{enumitem}
|
\usepackage{enumitem}
|
||||||
|
\usepackage{fontspec}
|
||||||
|
\usepackage[margin=2cm]{geometry}
|
||||||
|
\usepackage{graphicx}
|
||||||
\usepackage{hyperref}
|
\usepackage{hyperref}
|
||||||
\usepackage{ifthen}
|
\usepackage{ifthen}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
\usepackage{ltxtable}
|
\usepackage{ltxtable}
|
||||||
\usepackage[pass-fonts=true]{lyluatex}
|
\usepackage[pass-fonts=true]{lyluatex}
|
||||||
|
\usepackage{multirow}
|
||||||
|
\usepackage{svg}
|
||||||
|
\usepackage[explicit]{titlesec}
|
||||||
|
\usepackage{wrapfig}
|
||||||
|
\usepackage{xcolor}
|
||||||
|
|
||||||
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
|
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
|
||||||
\newcolumntype{Y}{>{\centering\arraybackslash}X}
|
\newcolumntype{Y}{>{\centering\arraybackslash}X}
|
||||||
\newcommand{\mytable}[1]{\LTXtable{\textwidth}{#1}}
|
\newcommand{\mytable}[1]{\LTXtable{\textwidth}{#1}}
|
||||||
|
|
||||||
\setmainfont[Numbers={OldStyle, Proportional},RawFeature={+ss06}]{EB Garamond}
|
\newcommand{\raisedrulefill}[2][0ex]{\leaders\hbox{\rule[#1]{1pt}{#2}}\hfill}
|
||||||
|
\setmainfont[
|
||||||
|
Path = ../fonts/EBGaramond12/fonts/ttf/,
|
||||||
|
Extension = .ttf,
|
||||||
|
UprightFont = *-Regular,
|
||||||
|
BoldFont = *-Bold,
|
||||||
|
ItalicFont = *-Italic,
|
||||||
|
BoldItalicFont = *-BoldItalic,
|
||||||
|
Numbers = {OldStyle, Proportional},
|
||||||
|
RawFeature = {+ss06}
|
||||||
|
]{EBGaramond}
|
||||||
|
%\titleformat{\subsection}{\normalfont\Large}{\thesubsection. }{0em}{#1}
|
||||||
\newcommand{\song}[3]{\ifthenelse{\equal{#1}{}}
|
\newcommand{\song}[3]{\ifthenelse{\equal{#1}{}}
|
||||||
{\subsection*{#2}\par{#3}\par}
|
{\subsection*{#2}\par{#3}\par}
|
||||||
{\subsection*{\textbf{#1} {#2}}\par{#3}\par}}
|
{\subsection*{\textit{#1} {#2}}\par{#3}\par}}
|
||||||
\newcommand{\gradualverse}[2]{#1\hfill\textit{#2}}
|
\newcommand{\gradualverse}[2]{#1\hfill\textit{#2}}
|
||||||
\newcommand{\ordinarium}[1]{\input{#1}}
|
\newcommand{\ordinarium}[1]{\input{#1}}
|
||||||
\newcommand{\original}[1]{{
|
\newcommand{\original}[1]{{
|
||||||
@@ -38,8 +54,6 @@
|
|||||||
\newcommand{\translation}[1]{
|
\newcommand{\translation}[1]{
|
||||||
Ü: #1}
|
Ü: #1}
|
||||||
|
|
||||||
\setmainfont[Numbers={OldStyle, Proportional},RawFeature={+ss06}]{EB Garamond}
|
|
||||||
|
|
||||||
\newcommand{\Chorus}[2][]{\ifthenelse{\equal {#1} {} }{\textit{Ref.} {#2}\par}{\textit{Ref. {#1}.} {#2}\par}}
|
\newcommand{\Chorus}[2][]{\ifthenelse{\equal {#1} {} }{\textit{Ref.} {#2}\par}{\textit{Ref. {#1}.} {#2}\par}}
|
||||||
\newcommand{\VA}[1]{\textit{V/A:} {#1}\par}
|
\newcommand{\VA}[1]{\textit{V/A:} {#1}\par}
|
||||||
\newcommand{\V}[1]{\textit{V:} {#1}\par}
|
\newcommand{\V}[1]{\textit{V:} {#1}\par}
|
||||||
@@ -53,8 +67,6 @@
|
|||||||
\setlength\parindent{0pt}
|
\setlength\parindent{0pt}
|
||||||
\setlength\parskip{2mm plus 1mm minus 1.5mm}
|
\setlength\parskip{2mm plus 1mm minus 1.5mm}
|
||||||
\setlist[itemize]{noitemsep}
|
\setlist[itemize]{noitemsep}
|
||||||
\setlength{\droptitle}{-1.875cm}
|
|
||||||
\setlength{\droptitle}{-1.875cm}
|
|
||||||
|
|
||||||
[% IF gregorian -%]
|
[% IF gregorian -%]
|
||||||
\usepackage[autocompile]{gregoriotex}
|
\usepackage[autocompile]{gregoriotex}
|
||||||
@@ -63,23 +75,23 @@
|
|||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\section*{[% title %]}
|
\section*{[% title %]}
|
||||||
\begin{centering}
|
|
||||||
[% subtitle %]
|
[% subtitle %]
|
||||||
\end{centering}
|
\vfill
|
||||||
|
[% parts %]
|
||||||
|
|
||||||
[% USE song_choices = datafile('song_choices.csv') %]
|
[% USE song_choices = datafile("${config_dir}/song_choices.csv", delim= '|') %]
|
||||||
[% IF parts == 0 -%]
|
[% IF parts == 0 -%]
|
||||||
parts = ensemble
|
parts = ensemble
|
||||||
[% END -%]
|
[% END -%]
|
||||||
[% FOREACH song = song_choices %]
|
[% FOREACH song = song_choices %]
|
||||||
\newpage
|
\newpage
|
||||||
[% template = song.template == '' ? "song_template.tt" : song.template -%]
|
[% template = song.template == '' ? "song_template.tt" : song.template;
|
||||||
[% INCLUDE "$template"
|
INCLUDE "$template"
|
||||||
purpose = song.purpose
|
purpose = song.purpose
|
||||||
title = song.title
|
assignments = song.assignments_directory ? "${library_dir}/${song.assignments_directory}/assignments.tt" : ''
|
||||||
content = song.content
|
directory = song.assignments_directory ? "${library_dir}/${song.assignments_directory}" : ''
|
||||||
variables = song.variables ? "${song.variables}/assignments.tt" : ''
|
overrides = song.overrides;
|
||||||
%]
|
-%]
|
||||||
[% END %]
|
[% END; -%]
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
@@ -7,9 +7,13 @@
|
|||||||
purpose_print = purpose_print ? purpose_print : 'Kyrie';
|
purpose_print = purpose_print ? purpose_print : 'Kyrie';
|
||||||
ELSIF purpose == 'gloria';
|
ELSIF purpose == 'gloria';
|
||||||
purpose_print = purpose_print ? purpose_print : 'Gloria';
|
purpose_print = purpose_print ? purpose_print : 'Gloria';
|
||||||
ELSIF purpose == 'graduale';
|
ELSIF purpose == 'kehrvers';
|
||||||
purpose_print = 'Antwortpsalm-Kehrvers';
|
purpose_print = 'Antwortpsalm-Kehrvers';
|
||||||
|
ELSIF purpose == 'graduale';
|
||||||
|
purpose_print = 'Graduale';
|
||||||
ELSIF purpose == 'tractus';
|
ELSIF purpose == 'tractus';
|
||||||
|
purpose_print = 'Traktus';
|
||||||
|
ELSIF purpose == 'ad_evangelium';
|
||||||
purpose_print = passion ? 'Ruf vor der Passion' : lent ? 'Ruf vor dem Evangelium' : 'Halleluja';
|
purpose_print = passion ? 'Ruf vor der Passion' : lent ? 'Ruf vor dem Evangelium' : 'Halleluja';
|
||||||
ELSIF purpose == 'credo';
|
ELSIF purpose == 'credo';
|
||||||
purpose_print = 'Glaubensbekenntnis';
|
purpose_print = 'Glaubensbekenntnis';
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
[% PROCESS purpose_processing.tt;
|
||||||
|
IF assignments;
|
||||||
|
PROCESS "$assignments";
|
||||||
|
END;
|
||||||
|
IF overrides != '';
|
||||||
|
"\[% $overrides %\]" | evaltt;
|
||||||
|
END;
|
||||||
|
-%]
|
||||||
|
\song{[% purpose_print ? purpose_print : purpose %]}{[% song_title -%]}{
|
||||||
|
[% before_song -%]
|
||||||
|
\begin{samepage}
|
||||||
|
[% IF scores;
|
||||||
|
IF scores.gregorian AND (gregorian OR NOT scores.congregation);
|
||||||
|
IF NOT gregorian;
|
||||||
|
GET '\\textbf{\\LARGE{Activate gregorian}}';
|
||||||
|
GET "\n";
|
||||||
|
ELSE;
|
||||||
|
GET "\\gresetgregpath{{${directory}/}}";
|
||||||
|
GET "\\gregorioscore{${scores.gregorian}}\n";
|
||||||
|
END;
|
||||||
|
ELSE;
|
||||||
|
IF parts;
|
||||||
|
GET '\lilypondfile{';
|
||||||
|
IF parts == 'band';
|
||||||
|
IF scores.band;
|
||||||
|
GET "${directory}/${scores.band}";
|
||||||
|
ELSIF scores.leadsheet;
|
||||||
|
GET "${directory}/${scores.leadsheet}";
|
||||||
|
ELSIF scores.full;
|
||||||
|
GET "${directory}/${scores.full}";
|
||||||
|
ELSE;
|
||||||
|
GET "${directory}/${scores.SATB}";
|
||||||
|
END;
|
||||||
|
ELSIF parts == 'full';
|
||||||
|
IF scores.full;
|
||||||
|
GET "${directory}/${scores.full}";
|
||||||
|
ELSIF scores.leadsheet;
|
||||||
|
GET "${directory}/${scores.leadsheet}";
|
||||||
|
ELSE;
|
||||||
|
GET "${directory}/${scores.SATB}";
|
||||||
|
END;
|
||||||
|
ELSIF parts == 'SATB';
|
||||||
|
IF scores.SATB;
|
||||||
|
GET "${directory}/${scores.SATB}";
|
||||||
|
ELSE;
|
||||||
|
GET "${directory}/${scores.leadsheet}";
|
||||||
|
END;
|
||||||
|
ELSE;
|
||||||
|
IF scores.${parts};
|
||||||
|
GET "${directory}/${scores.$parts}";
|
||||||
|
ELSE;
|
||||||
|
IF scores.full;
|
||||||
|
GET "${directory}/${scores.full}";
|
||||||
|
ELSIF scores.leadsheet;
|
||||||
|
GET "${directory}/${scores.leadsheet}";
|
||||||
|
ELSE;
|
||||||
|
GET "${directory}/${scores.SATB}";
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
GET "}\n";
|
||||||
|
ELSE;
|
||||||
|
IF scores.congregation;
|
||||||
|
GET "\\lilypondfile{${directory}/${scores.congregation}}\n";
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
ELSIF lyrics;
|
||||||
|
GET lyrics;
|
||||||
|
END; %]
|
||||||
|
[% IF credits -%]
|
||||||
|
\leavevmode\\*
|
||||||
|
[% FOREACH key = credits.keys;
|
||||||
|
# Workaround because PERL keeps resolving \\$ to $
|
||||||
|
s = "\\ ${key}{${credits.$key}}\n";
|
||||||
|
GET s.replace('(\W) ', '$1');
|
||||||
|
END; -%]
|
||||||
|
[% END -%]
|
||||||
|
\end{samepage}
|
||||||
|
[% content -%]
|
||||||
|
[% IF (meditation && meditations) || (parts && meditation) -%]
|
||||||
|
\leavevmode\par\smallskip
|
||||||
|
[% meditation %]
|
||||||
|
[% END -%]
|
||||||
|
[% IF after_song -%]
|
||||||
|
\leavevmode\par\smallskip
|
||||||
|
[% after_song %]
|
||||||
|
[% END -%]
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
[% PROCESS variables.tt;
|
||||||
|
IF proper != '';
|
||||||
|
PROCESS "${propers_dir}/${proper}.tt";
|
||||||
|
END;
|
||||||
|
-%]
|
||||||
|
[% parts = 0 -%]
|
||||||
|
[% INCLUDE header.tt -%]
|
||||||
|
\begin{document}
|
||||||
|
[% INCLUDE head.tt %]
|
||||||
|
|
||||||
|
[% USE song_choices = datafile("${config_dir}/song_choices.csv", delim= '|') %]
|
||||||
|
|
||||||
|
[%
|
||||||
|
FOREACH song = song_choices;
|
||||||
|
template = song.template == '' ? "song_template.tt" : song.template;
|
||||||
|
INCLUDE "$template"
|
||||||
|
purpose = song.purpose
|
||||||
|
assignments = song.assignments_directory ? "${library_dir}/${song.assignments_directory}/assignments.tt" : ''
|
||||||
|
directory = song.assignments_directory ? "${library_dir}/${song.assignments_directory}" : ''
|
||||||
|
overrides = song.overrides;
|
||||||
|
END;
|
||||||
|
-%]
|
||||||
|
|
||||||
|
[% INCLUDE footer.tt %]
|
||||||
|
|
||||||
|
\end{document}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[% DEFAULT
|
[% DEFAULT
|
||||||
color = 'blue'
|
color = 'white'
|
||||||
title = 'Sonntag'
|
title = 'Hl. Messe'
|
||||||
subtitle = ''
|
subtitle = ''
|
||||||
credo = 'library/gebete/credo/apostolisch_de.tex'
|
credo = 'library/gebete/credo/apostolisch_de.tex'
|
||||||
gregorian = 0
|
gregorian = 0
|
||||||
@@ -9,4 +9,4 @@
|
|||||||
lent = 0
|
lent = 0
|
||||||
meditations = 0
|
meditations = 0
|
||||||
-%]
|
-%]
|
||||||
[%# PROCESS propers/per_annum_XIII.tt -%]
|
[% PROCESS "${config_dir}/variables.tt" -%]
|
||||||
Reference in New Issue
Block a user