NoTeX
1.0.0
A modern noteworthy LaTeX template
Toggle main menu visibility
Loading...
Searching...
No Matches
notex
src
notex
assets.cpp
1
10
11
#include "
notex/assets.hpp
"
12
13
#include "notex/embedded_fonts.hpp"
14
#include "notex/embedded_latex.hpp"
15
16
#include <string>
17
18
namespace
notex::assets
{
19
20
namespace
{
21
24
std::string decode_hex(std::string_view hex) {
25
const
auto
nibble = [](
char
c) ->
unsigned
{
26
return
c <= '9' ? static_cast<unsigned>(c -
'0'
)
27
: static_cast<unsigned>(c -
'a'
+ 10);
28
};
29
30
std::string decoded;
31
decoded.reserve(hex.size() / 2);
32
for
(std::size_t i = 0; i + 1 < hex.size(); i += 2) {
33
decoded.push_back(
34
static_cast<
char
>
((nibble(hex[i]) << 4) | nibble(hex[i + 1])));
35
}
36
return
decoded;
37
}
38
42
const
std::vector<std::string>& decoded_font_bytes() {
43
static
const
std::vector<std::string> storage = [] {
44
std::vector<std::string> result;
45
result.reserve(detail::embedded_fonts().size());
46
for
(
const
auto
& raw : detail::embedded_fonts()) {
47
result.push_back(decode_hex(raw.hex_content));
48
}
49
return
result;
50
}();
51
return
storage;
52
}
53
54
}
// namespace
55
56
const
std::vector<EmbeddedFile>&
latex_files
() {
57
static
const
std::vector<EmbeddedFile> files(
58
detail::embedded_latex_files().begin(),
59
detail::embedded_latex_files().end());
60
return
files;
61
}
62
63
std::optional<EmbeddedFile>
find_latex_file
(std::string_view name) {
64
for
(
const
auto
& file :
latex_files
()) {
65
if
(file.name == name)
return
file;
66
}
67
return
std::nullopt;
68
}
69
70
const
std::vector<EmbeddedFile>&
font_files
() {
71
static
const
std::vector<EmbeddedFile> files = [] {
72
std::vector<EmbeddedFile> result;
73
const
auto
& raw_files = detail::embedded_fonts();
74
const
auto
& decoded = decoded_font_bytes();
75
result.reserve(raw_files.size());
76
for
(std::size_t i = 0; i < raw_files.size(); ++i) {
77
result.push_back(
EmbeddedFile
{raw_files[i].name, decoded[i]});
78
}
79
return
result;
80
}();
81
return
files;
82
}
83
84
std::optional<EmbeddedFile>
find_font_file
(std::string_view name) {
85
for
(
const
auto
& file :
font_files
()) {
86
if
(file.name == name)
return
file;
87
}
88
return
std::nullopt;
89
}
90
91
}
// namespace notex::assets
assets.hpp
Accessor over the LaTeX template and font files embedded into the binary.
notex::assets
Definition
assets.hpp:20
notex::assets::find_latex_file
std::optional< EmbeddedFile > find_latex_file(std::string_view name)
Looks up a single embedded LaTeX template file by name.
Definition
assets.cpp:63
notex::assets::latex_files
const std::vector< EmbeddedFile > & latex_files()
Definition
assets.cpp:56
notex::assets::font_files
const std::vector< EmbeddedFile > & font_files()
Definition
assets.cpp:70
notex::assets::find_font_file
std::optional< EmbeddedFile > find_font_file(std::string_view name)
Looks up a single embedded font file by name.
Definition
assets.cpp:84
notex::assets::EmbeddedFile
Definition
assets.hpp:25
Generated by
1.17.0