initial commit
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/*.pdf
|
5
Makefile
Normal file
5
Makefile
Normal file
@@ -0,0 +1,5 @@
|
||||
.PHONY: example
|
||||
example: example.pdf
|
||||
|
||||
%.pdf: %.typ
|
||||
typst compile --font-path template/fonts $<
|
7
example.typ
Normal file
7
example.typ
Normal file
@@ -0,0 +1,7 @@
|
||||
#import "template/template.typ": tultemplate
|
||||
|
||||
#tultemplate(
|
||||
"classic", "fm", "cs",
|
||||
title: "Návod na použití Typst TUL šablony",
|
||||
author: "Ondřej Mekina",
|
||||
)
|
1
template/assets/tul_logo.svg
Normal file
1
template/assets/tul_logo.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.0 KiB |
BIN
template/fonts/cabin/Cabin-Bold.ttf
Normal file
BIN
template/fonts/cabin/Cabin-Bold.ttf
Normal file
Binary file not shown.
BIN
template/fonts/cabin/Cabin-Italic.ttf
Normal file
BIN
template/fonts/cabin/Cabin-Italic.ttf
Normal file
Binary file not shown.
BIN
template/fonts/cabin/Cabin-Regular.ttf
Normal file
BIN
template/fonts/cabin/Cabin-Regular.ttf
Normal file
Binary file not shown.
93
template/fonts/cabin_license.txt
Normal file
93
template/fonts/cabin_license.txt
Normal file
@@ -0,0 +1,93 @@
|
||||
Copyright 2018 The Cabin Project Authors (https://github.com/impallari/Cabin.git)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
https://openfontlicense.org
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
BIN
template/fonts/tul_mono_remastered.ttf
Normal file
BIN
template/fonts/tul_mono_remastered.ttf
Normal file
Binary file not shown.
11
template/lang.typ
Normal file
11
template/lang.typ
Normal file
@@ -0,0 +1,11 @@
|
||||
#import "utils.typ": assert_in_dict
|
||||
|
||||
#let lang_ids = (
|
||||
cs: 0,
|
||||
en: 1,
|
||||
);
|
||||
|
||||
#let lang_id(lang_abbr) = {
|
||||
assert_in_dict(lang_abbr, lang_ids, "language abbreviation");
|
||||
return lang_ids.at(lang_abbr);
|
||||
};
|
20
template/template.typ
Normal file
20
template/template.typ
Normal file
@@ -0,0 +1,20 @@
|
||||
#import "template_classic.typ": template_classic
|
||||
#import "utils.typ": assert_in_dict
|
||||
|
||||
#let templates = (
|
||||
classic: template_classic,
|
||||
);
|
||||
|
||||
#let tultemplate(
|
||||
template_id,
|
||||
faculty_abbreviation,
|
||||
language,
|
||||
document_type: none,
|
||||
title: none, author: none, supervisor: none, study_programme: none,
|
||||
) = {
|
||||
assert_in_dict(template_id, templates, "template name");
|
||||
templates.at(template_id)(
|
||||
faculty_abbreviation, language, document_type,
|
||||
title, author, supervisor, study_programme
|
||||
);
|
||||
}
|
87
template/template_classic.typ
Normal file
87
template/template_classic.typ
Normal file
@@ -0,0 +1,87 @@
|
||||
#import "theme.typ": faculty_logotype, tul_logomark, faculty_color
|
||||
#import "lang.typ": lang_id
|
||||
#import "utils.typ": assert_in_dict
|
||||
|
||||
#let base_font = "Cabin";
|
||||
|
||||
#let classic_header(faculty_id, language) = {
|
||||
let logotype = faculty_logotype(faculty_id, language);
|
||||
grid(
|
||||
logotype,
|
||||
block(align(right, block(tul_logomark(faculty_id), height: 5em)), width: 100%),
|
||||
columns: 2
|
||||
);
|
||||
}
|
||||
|
||||
#let classic_info(
|
||||
faculty_id,
|
||||
language,
|
||||
document_type,
|
||||
title, author, supervisor, study_programme,
|
||||
) = {
|
||||
let lang_id = lang_id(language);
|
||||
|
||||
// document type
|
||||
if type(document_type) != type(none) {
|
||||
let document_types = (
|
||||
bp: ("Bakalářská práce", "Bachelor thesis"),
|
||||
dp: ("Diplomová práce", "Diploma thesis"),
|
||||
ds: ("Disertační práce", "Dissertation thesis"),
|
||||
);
|
||||
assert_in_dict(document_type, document_types, "document type abbreviation");
|
||||
text(document_types.at(document_type).at(lang_id), weight: "bold", font: base_font);
|
||||
v(0em);
|
||||
}
|
||||
|
||||
// title
|
||||
text(
|
||||
title, weight: "bold", size: 2em,
|
||||
faculty_color(faculty_id), font: base_font,
|
||||
);
|
||||
v(0em);
|
||||
|
||||
// other info
|
||||
// [field_name, field_value, bold]
|
||||
let info_fields = (
|
||||
(("Studijní program", "Study programme"), study_programme, false),
|
||||
(("Autor", "Author"), author, true),
|
||||
(("Vedoucí práce", "Vedoucí práce"), supervisor, false),
|
||||
);
|
||||
context {
|
||||
let max_field_name_width = calc.max(..info_fields.map((v) => {
|
||||
if type(v.at(1)) == type(none) {
|
||||
0pt
|
||||
} else {
|
||||
measure(v.at(0).at(lang_id) + ":").width
|
||||
}
|
||||
}));
|
||||
grid(
|
||||
columns: 2,
|
||||
rows: (auto, 1.2em),
|
||||
..info_fields.filter((v) => { type(v.at(1)) != type(none) }).map((v) => {
|
||||
(
|
||||
block(
|
||||
text(v.at(0).at(lang_id) + ":", style: "italic", font: base_font),
|
||||
width: max_field_name_width + 5em,
|
||||
),
|
||||
text(v.at(1), font: base_font, weight: if v.at(2) { "bold" } else { "regular" })
|
||||
)
|
||||
}).flatten()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#let template_classic(
|
||||
faculty_id,
|
||||
language,
|
||||
document_type,
|
||||
title, author, supervisor, study_programme
|
||||
) = {
|
||||
page({
|
||||
classic_header(faculty_id, language);
|
||||
align({
|
||||
classic_info(faculty_id, language, document_type, title, author, supervisor, study_programme);
|
||||
v(5em);
|
||||
}, bottom);
|
||||
}, margin: 2cm);
|
||||
}
|
93
template/theme.typ
Normal file
93
template/theme.typ
Normal file
@@ -0,0 +1,93 @@
|
||||
#import "lang.typ": lang_id
|
||||
#import "utils.typ": assert_in_dict
|
||||
|
||||
#let faculty_themes = (
|
||||
|
||||
fs: (
|
||||
rgb("#000000"),
|
||||
(
|
||||
"FAKULTA STROJNÍ TUL&",
|
||||
"FACULTY OF MECHANICAL ENGINEERING TUL&"
|
||||
),
|
||||
),
|
||||
|
||||
ft: (
|
||||
rgb("#924c14"),
|
||||
(
|
||||
"FAKULTA TEXTILNÍ TUL&",
|
||||
"FACULTY OF TEXTILE ENGINEERING TUL&",
|
||||
),
|
||||
),
|
||||
|
||||
fp: (
|
||||
rgb("#3c84e1"),
|
||||
(
|
||||
"FAKULTA\nPŘÍRODOVĚDNĚ-HUMANITNÍ\nA PEDAGOGICKÁ TUL&",
|
||||
"FACULTY OF SCIENCE,\nHUMANITIES AND\nEDUCATION TUL&",
|
||||
),
|
||||
),
|
||||
|
||||
ef: (
|
||||
rgb("#65a812"),
|
||||
(
|
||||
"EKONOMICKÁ FAKULTA TUL&",
|
||||
"FACULTY OF ECONOMICS TUL&",
|
||||
),
|
||||
),
|
||||
|
||||
fua: (
|
||||
rgb("#006443"),
|
||||
(
|
||||
"FUA\nTUL&",
|
||||
"FAA\nTUL&",
|
||||
),
|
||||
),
|
||||
|
||||
fm: (
|
||||
rgb("#ea7603"),
|
||||
(
|
||||
"FAKULTA MECHATRONIKY,\nINFORMATIKY A MEZIOBOROVÝCH\nSTUDIÍ TUL&",
|
||||
"FACULTY OF MECHATRONICS,\nINFORMATICS AND\nINTERDISCIPLINARY STUDIES TUL&",
|
||||
),
|
||||
),
|
||||
|
||||
fzs: (
|
||||
rgb("#00b0be"),
|
||||
(
|
||||
"FAKULTA ZDRAVOTNICKÝCH STUDIÍ TUL&",
|
||||
"FACULTY OF HEALTH STUDIES TUL&",
|
||||
),
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
#let faculty_theme(faculty_id) = {
|
||||
assert_in_dict(faculty_id, faculty_themes, "faculty abbreviation");
|
||||
return faculty_themes.at(faculty_id)
|
||||
}
|
||||
|
||||
#let faculty_color(faculty_id) = {
|
||||
let theme = faculty_theme(faculty_id);
|
||||
let theme_color = theme.at(0);
|
||||
assert(type(theme_color) == color);
|
||||
return theme_color;
|
||||
}
|
||||
|
||||
#let faculty_logotype_text(faculty_id, lang) = {
|
||||
let theme = faculty_theme(faculty_id);
|
||||
let logotype_text = theme.at(1).at(lang_id(lang));
|
||||
assert(type(logotype_text) == str);
|
||||
return logotype_text;
|
||||
}
|
||||
|
||||
#let faculty_logotype(faculty_id, lang) = {
|
||||
let theme_color = faculty_color(faculty_id);
|
||||
let logotype_text = faculty_logotype_text(faculty_id, lang);
|
||||
text(logotype_text, font: "TUL Mono", theme_color, weight: "black");
|
||||
}
|
||||
|
||||
#let tul_logomark(faculty_id) = {
|
||||
let theme_color = faculty_color(faculty_id);
|
||||
let image_raw = bytes(read("./assets/tul_logo.svg").replace("black", theme_color.to-hex()));
|
||||
image(image_raw, fit: "contain")
|
||||
}
|
8
template/utils.typ
Normal file
8
template/utils.typ
Normal file
@@ -0,0 +1,8 @@
|
||||
#let assert_in_dict(needle, dict, item_name) = {
|
||||
if str(needle) not in dict {
|
||||
panic(
|
||||
"unknown " + item_name + " '" + str(needle) +
|
||||
"', expected one of: " + dict.keys().map((k) => { "'" + str(k) + "'" }).join(", ")
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user