Compare commits
32 Commits
a677667415
...
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 |
@@ -1,2 +1,3 @@
|
||||
build
|
||||
.config
|
||||
.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
|
||||
tex_deps = build variables.tt library/*/*/*.tt song_choices.csv song_template.tt propers/*.tt purpose_processing.tt
|
||||
tpage = /usr/bin/vendor_perl/tpage
|
||||
docker = podman
|
||||
all: leadsheet_collection.pdf print_a3.pdf print_a4.pdf clean_intermediate
|
||||
%.pdf: %.tex
|
||||
cd build && \
|
||||
lualatex --shell-escape $<
|
||||
print_a3.pdf: songsheet_a3part.pdf
|
||||
cd build && \
|
||||
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
|
||||
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
|
||||
TOPDIR ::= $(shell pwd)
|
||||
build_dir ::= $(TOPDIR)/build
|
||||
config_dir ::= $(TOPDIR)/config
|
||||
docker ::= podman
|
||||
library_dir ::= $(TOPDIR)/library
|
||||
propers_dir ::= $(TOPDIR)/propers
|
||||
template_dir ::= $(TOPDIR)/templates
|
||||
song_choices ::= $(config_dir)/song_choices.csv
|
||||
user_variables ::= $(config_dir)/variables.tt
|
||||
export
|
||||
.PHONY: clean all
|
||||
*: $(build_dir)/dynamic_deps.mk
|
||||
$(build_dir)/dynamic_deps.mk: build_dir $(template_dir)/dynamic_deps.mk.tt $(song_choices) $(user_variables)
|
||||
$(MAKE) -C $(template_dir) $@
|
||||
include $(build_dir)/dynamic_deps.mk
|
||||
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:
|
||||
git submodule update --init --recursive
|
||||
init_docker:
|
||||
build_docker_image:
|
||||
$(docker) build -t songsheet_generator .
|
||||
build_in_docker:
|
||||
$(docker) run -v `pwd`:/tmp songsheet_generator make
|
||||
|
||||
pull_docker:
|
||||
$(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
@@ -1 +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 = {
|
||||
lyrics = 'um 1100'
|
||||
melody = '17. Jh.'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[%
|
||||
scores.gregorian = 'gregorio_scores/bmv/regina_caeli/regina_caeli.gabc';
|
||||
scores.gregorian = 'regina_caeli.gabc';
|
||||
credits = {
|
||||
lyrics = 'Rom um 1170'
|
||||
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 = {
|
||||
lyrics = "11. Jh."
|
||||
melody = "17. Jh. nach Henri Du Mont"
|
||||
@@ -15,7 +15,7 @@
|
||||
Wohlan denn, unsre Fürsprecherin,
|
||||
deine barmherzigen Augen
|
||||
wende uns zu
|
||||
und nach diesem Elend zeige uns Jesus,
|
||||
und nach diesem Elend zeige uns \\textsc{Jesus},
|
||||
die gebenedeite Frucht deines Leibes.
|
||||
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 = {
|
||||
lyrics = 'Liturgie'
|
||||
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 = {
|
||||
lyrics = 'Liturgie'
|
||||
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{../library/[% 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}
|
||||
|
||||
[% USE qr_codes = datafile('qr_codes.csv') %]
|
||||
[% USE qr_codes = datafile("${config_dir}/qr_codes.csv", delim= '|') %]
|
||||
|
||||
[% FOREACH qr_code = qr_codes -%]
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
\usepackage{ifthen}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{ltxtable}
|
||||
\usepackage{lyluatex}
|
||||
\usepackage[pass-fonts]{lyluatex}
|
||||
\usepackage{multirow}
|
||||
\usepackage[ngerman]{selnolig}
|
||||
\usepackage{svg}
|
||||
@@ -79,8 +79,7 @@ BoldFont = *-Bold
|
||||
\footnotesize Originaltitel: #1}}
|
||||
\newcommand{\TM}[1]{{
|
||||
\footnotesize T \& M: #1}}
|
||||
\newcommand{\arrangement}[1]{{
|
||||
\footnotesize S: #1}}
|
||||
\newcommand{\arrangement}[1]{}
|
||||
\newcommand{\lyrics}[1]{{
|
||||
\footnotesize T: #1}}
|
||||
\newcommand{\melody}[1]{{
|
||||
@@ -99,7 +98,7 @@ BoldFont = *-Bold
|
||||
\newcommand{\Outro}[1]{\par\textit{Outro} {#1}}
|
||||
\newcommand{\St}[2]{\par\textit{{#1}.} {#2}}
|
||||
|
||||
\setluaoption{ly}{staffsize}{14}
|
||||
%\setluaoption{ly}{staffsize}{14}
|
||||
|
||||
\setlength\parindent{0pt}
|
||||
\setlength\parskip{2mm plus 1mm minus 1.5mm}
|
||||
@@ -1,28 +1,44 @@
|
||||
[% PROCESS variables.tt -%]
|
||||
\documentclass[a4paper,12pt]{memoir}
|
||||
\usepackage[margin=2cm]{geometry}
|
||||
\usepackage[utf8]{inputenc}
|
||||
[% PROCESS variables.tt;
|
||||
IF proper != '';
|
||||
PROCESS "${propers_dir}/${proper}.tt";
|
||||
END;
|
||||
-%]
|
||||
\documentclass[a4paper,12pt]{article}
|
||||
\usepackage[ngerman]{babel}
|
||||
\usepackage{fontspec}
|
||||
\usepackage{multirow}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{svg}
|
||||
\usepackage{wrapfig}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{fontspec}
|
||||
\usepackage[margin=2cm]{geometry}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{hyperref}
|
||||
\usepackage{ifthen}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{ltxtable}
|
||||
\usepackage[pass-fonts=true]{lyluatex}
|
||||
\usepackage{multirow}
|
||||
\usepackage{svg}
|
||||
\usepackage[explicit]{titlesec}
|
||||
\usepackage{wrapfig}
|
||||
\usepackage{xcolor}
|
||||
|
||||
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
|
||||
\newcolumntype{Y}{>{\centering\arraybackslash}X}
|
||||
\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}{}}
|
||||
{\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{\ordinarium}[1]{\input{#1}}
|
||||
\newcommand{\original}[1]{{
|
||||
@@ -38,8 +54,6 @@
|
||||
\newcommand{\translation}[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{\VA}[1]{\textit{V/A:} {#1}\par}
|
||||
\newcommand{\V}[1]{\textit{V:} {#1}\par}
|
||||
@@ -53,8 +67,6 @@
|
||||
\setlength\parindent{0pt}
|
||||
\setlength\parskip{2mm plus 1mm minus 1.5mm}
|
||||
\setlist[itemize]{noitemsep}
|
||||
\setlength{\droptitle}{-1.875cm}
|
||||
\setlength{\droptitle}{-1.875cm}
|
||||
|
||||
[% IF gregorian -%]
|
||||
\usepackage[autocompile]{gregoriotex}
|
||||
@@ -63,23 +75,23 @@
|
||||
|
||||
\begin{document}
|
||||
\section*{[% title %]}
|
||||
\begin{centering}
|
||||
[% 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 -%]
|
||||
parts = ensemble
|
||||
parts = ensemble
|
||||
[% END -%]
|
||||
[% FOREACH song = song_choices %]
|
||||
\newpage
|
||||
[% template = song.template == '' ? "song_template.tt" : song.template -%]
|
||||
[% INCLUDE "$template"
|
||||
purpose = song.purpose
|
||||
title = song.title
|
||||
content = song.content
|
||||
variables = song.variables ? "${song.variables}/assignments.tt" : ''
|
||||
%]
|
||||
[% END %]
|
||||
[% 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; -%]
|
||||
|
||||
\end{document}
|
||||
@@ -7,9 +7,13 @@
|
||||
purpose_print = purpose_print ? purpose_print : 'Kyrie';
|
||||
ELSIF purpose == 'gloria';
|
||||
purpose_print = purpose_print ? purpose_print : 'Gloria';
|
||||
ELSIF purpose == 'graduale';
|
||||
ELSIF purpose == 'kehrvers';
|
||||
purpose_print = 'Antwortpsalm-Kehrvers';
|
||||
ELSIF purpose == 'graduale';
|
||||
purpose_print = 'Graduale';
|
||||
ELSIF purpose == 'tractus';
|
||||
purpose_print = 'Traktus';
|
||||
ELSIF purpose == 'ad_evangelium';
|
||||
purpose_print = passion ? 'Ruf vor der Passion' : lent ? 'Ruf vor dem Evangelium' : 'Halleluja';
|
||||
ELSIF purpose == 'credo';
|
||||
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
|
||||
color = 'blue'
|
||||
title = 'Sonntag'
|
||||
color = 'white'
|
||||
title = 'Hl. Messe'
|
||||
subtitle = ''
|
||||
credo = 'library/gebete/credo/apostolisch_de.tex'
|
||||
gregorian = 0
|
||||
@@ -9,4 +9,4 @@
|
||||
lent = 0
|
||||
meditations = 0
|
||||
-%]
|
||||
[%# PROCESS propers/per_annum_XIII.tt -%]
|
||||
[% PROCESS "${config_dir}/variables.tt" -%]
|
||||
Reference in New Issue
Block a user