typeset 0.1.0
縦書き・横書きの日本語組版ライブラリ(JLReq 水準、ラスタ / PDF / SVG)
読み取り中…
検索中…
一致する文字列を見つけられません
writing_mode.hpp
[詳解]
1#ifndef TYPESET_WRITING_MODE_HPP
2#define TYPESET_WRITING_MODE_HPP
3
4#include "typeset/geom.hpp"
5
19namespace typeset {
20
21enum class WritingMode : uint8_t {
25};
26
27inline bool isVertical(WritingMode wm) { return wm != WritingMode::HorizontalTb; }
28
32enum class TextOrientation : uint8_t {
33 Mixed,
34 Upright,
35 Sideways,
36};
37
44 Pt inline_ = 0.0f;
45 Pt block = 0.0f;
46};
47
54inline Point toPhysical(WritingMode wm, LogicalPoint p, Point lineOrigin) {
55 if (wm == WritingMode::HorizontalTb) {
56 return Point{lineOrigin.x + p.inline_, lineOrigin.y + p.block};
57 }
58 // 縦組み: inline は下へ、block は右へ(rl / lr で共通。列の送りは上位層)
59 return Point{lineOrigin.x + p.block, lineOrigin.y + p.inline_};
60}
61
63inline LogicalPoint toLogical(WritingMode wm, Point p, Point lineOrigin) {
64 if (wm == WritingMode::HorizontalTb) {
65 return LogicalPoint{p.x - lineOrigin.x, p.y - lineOrigin.y};
66 }
67 return LogicalPoint{p.y - lineOrigin.y, p.x - lineOrigin.x};
68}
69
76inline constexpr float kSidewaysRotation = -1.5707963267948966f; // -90°
77
78} // namespace typeset
79
80#endif // TYPESET_WRITING_MODE_HPP
geom — 単位と幾何
constexpr float kSidewaysRotation
横倒しグリフの回転角(ラジアン)
Point toPhysical(WritingMode wm, LogicalPoint p, Point lineOrigin)
論理座標 → 物理座標
float Pt
Definition geom.hpp:17
TextOrientation
縦組み中の文字の正立/横倒し(CSS text-orientation 相当)
@ Upright
すべて正立
@ Sideways
すべて横倒し
bool isVertical(WritingMode wm)
LogicalPoint toLogical(WritingMode wm, Point p, Point lineOrigin)
物理座標 → 論理座標(toPhysical の逆)
@ HorizontalTb
横組み
@ VerticalLr
縦組み・行は左から右へ
@ VerticalRl
縦組み・行は右から左へ(日本語の既定)
論理座標。inline_ は行頭からの送り、block は行の中心線からのずれ (block 正方向は横組みで下、縦組み(rl)で左、縦組み(lr)で右…ではなく、 **縦組みでは常に右を正**とする。...