TeX in C
Explore TeX with modern c compiler.
linebreak.h
浏览该文件的文档.
1 #pragma once
2 #ifndef INC_LINEBREAK_H
4 #define INC_LINEBREAK_H
5 #include "global.h"
6 
11 // [p303#817]
12 #define tightfit 3
13 #define loosefit 1
14 #define veryloosefit 0
15 #define decentfit 2
16 // [p304#819]
17 #define activenodesize 3
18 #define unhyphenated 0
19 #define hyphenated 1
20 #define lastactive active
21 // [p304#821]
22 #define passivenodesize 2
23 // [p304#822]
24 #define deltanodesize 7
25 #define deltanode 2
26 // [p308#829]
27 #define deactivate 60
28 
29 
31 #define fitness subtype /* |veryloosefit..tightfit| on final line for this break}*/
32 #define breaknode rlink /* pointer to the corresponding passive node}*/
33 #define linenumber llink /* line that begins at this breakpoint}*/
34 #define totaldemerits(x) mem[x+2].int_ /* the quantity that \TeX\ minimizes}*/
36 #define curbreak rlink /* in passive node, points to position of this breakpoint}*/
37 #define prevbreak llink /* points to passive node that should precede this one}*/
38 #define serial info /* serial number for symbolic identification}*/
39 
40 
42 #define checkshrinkage(x) \
43  ((shrinkorder(x) != NORMAL) && (shrink(x) != 0) ? (x) = finiteshrink(x) : 0)
44 
46 #define copytocuractive(x) (curactivewidth[(x)-1] = activewidth[(x)-1])
47 
49 #define updatewidth(x) (curactivewidth[(x)-1] += mem[r + (x)].sc)
51 #define awfulbad 1073741823L
53 #define setbreakwidthtobackground(x) (breakwidth[(x)-1] = background[(x)-1])
54 
55 
57 #define converttobreakwidth(x) \
58  (mem[prevr + (x)].sc += -curactivewidth[(x)-1] + breakwidth[(x)-1])
59 #define storebreakwidth(x) (activewidth[(x)-1] = breakwidth[(x)-1])
60 #define newdeltatobreakwidth(x) \
61  (mem[q + (x)].sc = breakwidth[(x)-1] - curactivewidth[(x)-1])
63 #define newdeltafrombreakwidth(x) \
64  (mem[q + (x)].sc = curactivewidth[(x)-1] - breakwidth[(x)-1])
65 
67 #define combinetwodeltas(x) \
68  (mem[prevr + (x)].sc = mem[prevr + (x)].sc + mem[r + (x)].sc)
69 #define downdatewidth(x) (curactivewidth[(x)-1] -= mem[prevr + (x)].sc)
71 #define updateactive(x) (activewidth[(x)-1] += mem[r + (x)].sc)
72  // end group S813x861_P302x318
74 
80 #define storebackground(x) (activewidth[(x)-1] = background[(x)-1])
81 
83 #define actwidth activewidth[0]
85 #define kernbreak() \
86  { \
87  if (!is_char_node(link(curp)) && (autobreaking)) { \
88  if (type(link(curp)) == GLUE_NODE) trybreak(0, unhyphenated); \
89  } \
90  actwidth += width(curp); \
91  }
92 
94 #define nextbreak prevbreak /* new name for |prevbreak| after links are reversed}*/
95  // end group S862x890_P319x329
97 
98 extern Pointer justbox;
100 extern HalfWord passnumber;
101 extern Scaled activewidth[6];
102 extern Scaled curactivewidth[6];
103 extern Scaled background[6];
104 extern Scaled breakwidth[6];
106 extern Pointer curp;
107 extern Integer threshold;
109 extern Integer minimumdemerits;
110 extern Pointer bestplace[tightfit - veryloosefit + 1];
113 
114 extern void linebreak(long finalwidowpenalty);
115 extern HalfWord finiteshrink(HalfWord p);
116 extern void trybreak(long pi, SmallNumber breaktype);
117 
118 
120 extern Integer fewestdemerits;
121 extern HalfWord bestline;
123 
124 #endif /* INC_LINEBREAK_H */
uint32_t HalfWord
[p43#113]: HalfWord(16=>32) .
Definition: tex_types.h:127
#define veryloosefit
Definition: linebreak.h:14
HalfWord finiteshrink(HalfWord p)
Definition: linebreak.c:570
Scaled background[6]
Definition: linebreak.c:30
Pointer bestplace[tightfit - veryloosefit+1]
Definition: linebreak.c:43
void linebreak(long finalwidowpenalty)
Definition: linebreak.c:54
#define tightfit
Definition: linebreak.h:12
HalfWord easyline
Definition: linebreak.c:50
Scaled activewidth[6]
Definition: linebreak.c:28
void trybreak(long pi, SmallNumber breaktype)
p308#829
Definition: linebreak.c:594
HalfWord passnumber
Definition: linebreak.c:25
Integer threshold
Definition: linebreak.c:38
Pointer justbox
Definition: linebreak.c:21
Pointer passive
Definition: linebreak.c:24
Boolean noshrinkerroryet
Definition: linebreak.c:34
Scaled discwidth
Definition: linebreak.c:47
Integer minimaldemerits[tightfit - veryloosefit+1]
Definition: linebreak.c:41
Integer minimumdemerits
Definition: linebreak.c:42
Pointer curp
Definition: linebreak.c:37
Scaled breakwidth[6]
Definition: linebreak.c:31
Scaled curactivewidth[6]
Definition: linebreak.c:29
Integer actuallooseness
Definition: linebreak.c:1087
HalfWord bestline
Definition: linebreak.c:1086
Pointer bestbet
Definition: linebreak.c:1084
Integer fewestdemerits
Definition: linebreak.c:1085
Pointer curq
Definition: linebreak.h:119
Pointer printednode
Definition: linebreak.h:99
Boolean secondpass
Definition: linebreak.h:105
Boolean finalpass
Definition: linebreak.h:105
Pointer ligstack
Definition: linebreak.h:119
Pointer hb
Definition: linebreak.h:119
Pointer ha
Definition: linebreak.h:119
Scaled secondwidth
Definition: linebreak.h:111
Scaled firstindent
Definition: linebreak.h:111
Scaled firstwidth
Definition: linebreak.h:111
Integer linediff
Definition: linebreak.h:122
HalfWord lastspecialline
Definition: linebreak.h:112
Scaled secondindent
Definition: linebreak.h:111
Pointer initlist
Definition: linebreak.h:119
int64_t Integer
Integer(64) =
Definition: tex_types.h:42
Integer Scaled
[p38#101]: Scaled::Integer(64) = we need Pascal's Integer(32/64), dependent upon the bit size of the...
Definition: tex_types.h:106
size_t Pointer
Pointer::size_t(64), a flag or a location in mem or eqtb.
Definition: tex_types.h:45
bool Boolean
布尔类型定义
Definition: tex_types.h:11
UChar SmallNumber
[p38#101]: SmallNumber::UChar(8) = [0, 255] only need: (6bit)[0, 63] .
Definition: tex_types.h:112