NoTeX 1.0.0
A modern noteworthy LaTeX template
Loading...
Searching...
No Matches
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
18namespace notex::assets {
19
20namespace {
21
24std::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
42const 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
56const 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
63std::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
70const 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
84std::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
Accessor over the LaTeX template and font files embedded into the binary.
std::optional< EmbeddedFile > find_latex_file(std::string_view name)
Looks up a single embedded LaTeX template file by name.
Definition assets.cpp:63
const std::vector< EmbeddedFile > & latex_files()
Definition assets.cpp:56
const std::vector< EmbeddedFile > & font_files()
Definition assets.cpp:70
std::optional< EmbeddedFile > find_font_file(std::string_view name)
Looks up a single embedded font file by name.
Definition assets.cpp:84