typeset 0.1.0
縦書き・横書きの日本語組版ライブラリ(JLReq 水準、ラスタ / PDF / SVG)
読み取り中…
検索中…
一致する文字列を見つけられません
hyphenation.hpp
[詳解]
1#ifndef TYPESET_TEXT_HYPHENATION_HPP
2#define TYPESET_TEXT_HYPHENATION_HPP
3
4#include <cstddef>
5#include <cstdint>
6#include <map>
7#include <memory>
8#include <string>
9#include <unordered_map>
10#include <vector>
11
21namespace typeset::text {
22
24public:
30 size_t addPatterns(const std::string& utf8);
31
33 void addException(const std::string& utf8Word);
34
35 bool empty() const { return patterns_.empty() && exceptions_.empty(); }
36 size_t patternCount() const { return patterns_.size(); }
37
44 std::vector<size_t> hyphenate(const std::u32string& word, int minLeft = 2, int minRight = 3) const;
45
47 size_t addPatternFile(const std::string& path);
48
49private:
51 std::unordered_map<std::u32string, std::vector<uint8_t>> patterns_;
53 std::unordered_map<std::u32string, std::vector<size_t>> exceptions_;
54};
55
64public:
66 Hyphenator& forLanguage(const std::string& language);
68 const Hyphenator* find(const std::string& language) const;
70 void setDefaultLanguage(const std::string& language);
71 const std::string& defaultLanguage() const { return default_; }
72 bool empty() const { return byLanguage_.empty(); }
73
74private:
76 std::map<std::string, Hyphenator> byLanguage_;
77 std::string default_;
78};
79
81constexpr char32_t kSoftHyphen = 0x00AD;
82
83} // namespace typeset::text
84
85#endif // TYPESET_TEXT_HYPHENATION_HPP
言語ごとのパターン。TextStyle::language(BCP47)で引く。 完全一致 → 主言語("en-GB" なら "en")→ 既定の言語(setDefaultLanguage)の順に探す。
Hyphenator & forLanguage(const std::string &language)
言語にパターンを足す(無ければ作る)。最初に足した言語が既定になる
const std::string & defaultLanguage() const
const Hyphenator * find(const std::string &language) const
言語のパターン(無ければ既定の言語、それも無ければ nullptr)
void setDefaultLanguage(const std::string &language)
見つからなかったときに使う言語(空で無効)
void addException(const std::string &utf8Word)
例外(as-so-ciate のようにハイフンで区切った綴り)を 1 つ足す
std::vector< size_t > hyphenate(const std::u32string &word, int minLeft=2, int minRight=3) const
単語の分割位置。返るのは「先頭から k 文字目の後ろで切ってよい」の k(1 始まり、昇順)。 文字数は UTF-32 の符号位置で数える
size_t addPatterns(const std::string &utf8)
TeX のパターンを読む。\patterns{ ... } と \hyphenation{ ... } のブロック、 または 1 行 1 パターンの素のリストを受け付ける(% から行末まではコメント)
size_t addPatternFile(const std::string &path)
ファイルから読む(見つからなければ 0)
size_t patternCount() const
text/char_class — JLReq の文字クラス
Definition style.hpp:9
constexpr char32_t kSoftHyphen
ソフトハイフン