该笔记的顺序开始会按照源码的DEK对源码解释的顺序来进行,后面可能会举出一个例子通过一步一步的运行来理解源码。
Tex源码里有许多的数据结构,其中有些基本上可以说是Tex的核心,理解了这些数据结构和Tex对这些数据结构的操作就基本上理解了Tex。
(1)最开始的一个数据结构是关于ASCII的:
ASCII_code=0..255;
define
text_char=char;{即,text_char是char的别名}
xord:array[text_char] of ASCII_code;
xchr:array[ASCII_code] of text_char;
数据结构xord和xchr用于在ASCII字符和ASCII序数之间转换,比如字母'p',其ASCII为'160(八进制160),因此xord['p']='160,xchr['160]='p'。该
数据结构的图示最后会统一给出。
对照ASCII我们可以看出,只有'40到'176才有可以显示的字符,其余或者不可显示或者没有定义,因此:
....{从'40到'176定义xchr}
1 for i=0 to '37 do xchr[i]='
';{定义为空格,可以改变}
2 for i='177 to '377 do xchr[i]='
';{定义为空格,可以改变}
3 for i='200 to '377 do
xord[xchr[i]]=i;{若上面两个定义没有改变,
此处没有实际的意义}
4 for i='0 to '176 do
xord[xchr[i]]=i;{同样,此处也没有意义}
可以看出,Tex提供一种机制来对Tex的内部ASCII机制进行改变,只有我们将代码1,2处的'
'变为其他字符即可。
(2)
在源代码的第21节,Tex除了会对一些变量和数据结构进行初始化(包括对xchr的初始化),这儿提一下这些数据结构(前面的序号是该初始化出现的
小节):
21 xord[0..255], xchr[0..255]
254 xeq_level[int_base..eqtb_size]
251 hash[hash_base..undefined_control_sequence-1]
481 read_open[0..16]
551 font_used[internal_font_number]
928 hyph_word[hyph_pointer],
hyph_list[hyph_pointer]
1343 write_open[0..17]