1#ifndef TYPESET_STYLE_HPP
2#define TYPESET_STYLE_HPP
131 for (
const std::string& f :
features) {
134 if (!tag.empty() && (tag[0] ==
'+' || tag[0] ==
'-')) { on = tag[0] ==
'+'; tag = tag.substr(1); }
135 const size_t eq = tag.find(
'=');
136 if (eq != std::string::npos) { on = tag.substr(eq + 1) !=
"0"; tag = tag.substr(0, eq); }
137 const size_t br = tag.find(
'[');
138 if (br != std::string::npos) tag = tag.substr(0, br);
140 if (tag ==
"palt" || tag ==
"halt" || tag ==
"pwid" || tag ==
"hwid" || tag ==
"vpal" ||
141 tag ==
"vhal" || tag ==
"twid" || tag ==
"qwid")
return true;
148 std::vector<TextLayer> out;
言語ごとのパターン。TextStyle::language(BCP47)で引く。 完全一致 → 主言語("en-GB" なら "en")→ 既定の言語(setDefaultLanguage)の順に探す。
text/char_class — JLReq の文字クラス
Direction
段落の基底方向(UAX #9)。Auto は最初の強い文字で決める(和文・欧文は LTR)
BlockAlign
行送り方向の揃え(箱の中での段落の位置。inl::originInBox)
TextOrientation
縦組み中の文字の正立/横倒し(CSS text-orientation 相当)
KinsokuLevel
約物の詰め・和欧間・ぶら下げ
EmojiPresentation
絵文字の表示形式
@ KnuthPlass
段落全体でデメリットを最小化。組版品質が要る用途向け
@ Greedy
各ブレーク候補で即断。画面のリアルタイム描画向け
bool justify
行末を揃える(グルーを伸縮させる)。false なら自然幅のまま
int hyphenMinLeft
行末に残す最小の文字数 / 次の行へ送る最小の文字数
const text::HyphenationDictionary * hyphenation
欧文のハイフネーション辞書(言語ごとのパターン。TextStyle::language で引く)。 nullptr なら単語内では切らない(テキスト中のソフトハイフン U+00AD は辞書が無くても常に...
LineBreakStrategy strategy
float linePenalty
Knuth–Plass の行あたりのペナルティ(行数を増やしにくくする)
float hyphenPenalty
単語内で切るときのペナルティ(Knuth–Plass の demerits に効く)
float tolerance
Knuth–Plass が許容するグルーの伸び率上限
std::vector< std::string > family
フォールバック順の family(FontSet に登録したキー、または family 名)
std::map< std::string, float > variations
バリアブルフォントの軸の値("wght" → 700、"wdth" → 75 など、デザイン座標)。 wght を書かなくても、face に wght 軸があれば weight が入る。軸の無い fac...
float firstLineIndent
一字下げ(em 単位。日本語段落の既定は 1)
float hangingIndent
ぶら下げインデント: 2 行目以降の字下げ(em)。途中からの字下げは Annotation::indent
int tabWidth
preserveSpaces のとき、タブを何桁ごとのタブ位置で空白に展開するか
std::vector< TabStop > tabStops
タブストップ(行頭からの位置、pt)。空なら tabWidth × em ごとの左揃えタブ。preserveSpaces のときは使わず空白に展開する
std::u16string ellipsis
行数上限(ParagraphLayouter::layout の maxLines)で切れたとき、最後の行の末尾に置く省略記号(空なら置かない)
bool preserveSpaces
欧文間隔を伸縮しない固定幅の箱にする(コードブロック等。行頭の空白も残る)
float rotation
段落全体の回転(度。時計回りが正。行頭(emitParagraph の origin)を中心に回す)
Direction direction
基底方向。RTL の段落では Start / End が入れ替わり、一字下げは行の終端側(右)に付く。 行の中の双方向テキスト(アラビア文字・ヘブライ文字の混在)は方向に関わらず UAX #9 で並べ替...
Pt resolvedLinePitch(Pt fontSize) const
実効の行送り
TextOrientation orientation
縦組み中の文字の向き(既定: 和文正立・欧文横倒し)
Pt linePitch
行送り(pt)。0 なら size × lineHeight
float kanjiSkipStretch
和字同士の字間に許す伸び(em)。JLReq の追い出し(字間を空けて行末を揃える)に 使う。pTeX の kanjiskip の stretch に相当。0 でベタ組み固定
float kanjiSkipShrink
和字同士の字間に許す縮み(em)。通常 0(詰めるのは約物のアキだけ)
std::u16string lineEndProhibited
行末に置かない文字を足す
bool punctuationSpacing
約物の詰め(JLReq のアキ量表を適用する)。false ならベタ組み
float weakKinsokuPenalty
弱い禁則のペナルティ(Knuth–Plass の demerits に効く。Greedy では「切れる」扱い)
KinsokuLevel kinsoku
禁則の強さ
std::u16string lineStartAllowed
行頭禁則から外す文字
bool hangingPunctuation
行末に来た句読点を版面外へ出す
std::u16string lineStartProhibited
禁則の追加・除外(KAG3 の wwFollowing / wwLeading 相当)。文字クラスより優先する
std::u16string lineEndAllowed
行末禁則から外す文字
Pt position
行頭からの位置(pt。一字下げは含まない)
char32_t decimalChar
Decimal のときに揃える文字
下線・打消し線(TextStyle::underline / strikethrough)
std::optional< Paint > color
無ければ TextStyle::fill
Pt thickness
0 でフォントのメトリクス
float offset
位置の補正(em)。文字から離れる向きが正(横組み: 下、縦組み: 右)
static TextLayer outlined(Stroke s)
Pt blur
ぼかし半径(pt)。ラスタと SVG はガウスぼかし、PDF はぼかさずに置く
Point offset
ずらし(pt、物理座標。右・下が正。縦組みでも同じ向き)
std::optional< Stroke > stroke
static TextLayer filled(Paint c)
std::optional< Paint > fill
影(TextStyle::shadow)。層の一番下に「塗り = color、offset、blur」の 1 層として置く糖衣
bool hasProportionalFeature() const
features に字幅を変える feature(palt / halt / pwid / hwid / vpal / vhal / twid / qwid)が有効に入っているか
float baselineShift
ベースラインのずらし(このスタイルの em 単位)。注記側が正(横組み: 上、縦組み: 右)。上付き文字・脚注記号用
Paint fill
塗り(単色またはグラデーション)
std::optional< TextShadow > shadow
影。layers の下に 1 層足す
std::optional< TextDecoration > underline
std::string language
BCP47(シェイピングの言語タグ。"ja" で日本語字形が選ばれる)
EmojiPresentation emojiPresentation
絵文字の表示形式(既定は異体字セレクタに従う)
std::vector< std::string > features
OpenType feature(HarfBuzz の書式: "palt" "+liga" "-kern" "liga=0" "ss01")。そのまま HarfBuzz へ渡す。 palt / halt...
bool fakeBold
合成ボールド/斜体(フォントに該当ウェイト・斜体が無い場合に明示指定する)
std::optional< Stroke > stroke
縁取り
std::optional< TextDecoration > strikethrough
std::optional< TextOrientation > orientation
縦組み中の向きの部分指定(段落の指定を上書き)
std::vector< TextLayer > layers
外観の層(下から上)。空なら fill / stroke の 1 層。指定すると fill / stroke は描画に使わない (下線の既定色としては fill が使われる)
float letterSpacing
字間(em 単位)。組版層ではクラスタ間の Glue として扱う
std::vector< TextLayer > resolvedLayers() const
実際に描く層(下から上): shadow → layers(空なら fill / stroke の 1 層)