diff options
author | Taco Hoekwater <taco@elvenkind.com> | 2010-04-04 13:55:46 +0000 |
---|---|---|
committer | Taco Hoekwater <taco@elvenkind.com> | 2010-04-04 13:55:46 +0000 |
commit | f372862c42d234710b6057449b46818e63181c90 (patch) | |
tree | a9ebec66dd31ac37aed442502ebd1b9fe76245ec /Build/source/texk/web2c/luatexdir/tex/directions.h | |
parent | 2dad291ab056f30816e0aea61970f38033c2f6a5 (diff) |
import luatex 0.60.0 (with small local changes, see luatexdir/ChangeLog)
and do an autoreconf
git-svn-id: svn://tug.org/texlive/trunk@17680 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/tex/directions.h')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/tex/directions.h | 347 |
1 files changed, 347 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/tex/directions.h b/Build/source/texk/web2c/luatexdir/tex/directions.h new file mode 100644 index 00000000000..bea50879b64 --- /dev/null +++ b/Build/source/texk/web2c/luatexdir/tex/directions.h @@ -0,0 +1,347 @@ +/* directions.h + + Copyright 2009 Taco Hoekwater <taco@luatex.org> + + This file is part of LuaTeX. + + LuaTeX is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + LuaTeX is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU General Public License along + with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */ + +/* $Id: directions.h 3523 2010-03-19 13:28:08Z taco $ */ + +#ifndef DIRECTIONS_H +# define DIRECTIONS_H + +# define dir_T 0 +# define dir_L 1 +# define dir_B 2 +# define dir_R 3 + +# define dir_TLT 0 +# define dir_TRT 4 +# define dir_LTL 9 +# define dir_RTT 24 + + +/* # define dir_array_size 25 */ /* |dir_RTT + 1| */ + +/* inv(primary) == tertiary */ +/* +boolean _is_mirrored[dir_array_size]; +_is_mirrored[dir_TLT] = 0; +_is_mirrored[dir_TRT] = 0; +_is_mirrored[dir_LTL] = 0; +_is_mirrored[dir_RTT] = 0; +*/ + +#define is_mirrored(a) 0 + +/* secondary == tertiary */ +/* +boolean _is_rotated[dir_array_size]; +_is_rotated[dir_TLT] = 0; +_is_rotated[dir_TRT] = 0; +_is_rotated[dir_LTL] = 0; +_is_rotated[dir_RTT] = 1; +*/ + +#define is_rotated(a) (a == dir_RTT) + +/* secondary == secondary */ +/* +boolean _textdir_parallel[dir_array_size][dir_array_size]; +_textdir_parallel[dir_TLT][dir_TLT] = 1; +_textdir_parallel[dir_TLT][dir_TRT] = 1; +_textdir_parallel[dir_TLT][dir_LTL] = 0; +_textdir_parallel[dir_TLT][dir_RTT] = 0; +_textdir_parallel[dir_TRT][dir_TLT] = 1; +_textdir_parallel[dir_TRT][dir_TRT] = 1; +_textdir_parallel[dir_TRT][dir_LTL] = 0; +_textdir_parallel[dir_TRT][dir_RTT] = 0; +_textdir_parallel[dir_LTL][dir_TLT] = 0; +_textdir_parallel[dir_LTL][dir_TRT] = 0; +_textdir_parallel[dir_LTL][dir_LTL] = 1; +_textdir_parallel[dir_LTL][dir_RTT] = 1; +_textdir_parallel[dir_RTT][dir_TLT] = 0; +_textdir_parallel[dir_RTT][dir_TRT] = 0; +_textdir_parallel[dir_RTT][dir_LTL] = 1; +_textdir_parallel[dir_RTT][dir_RTT] = 1; +*/ + +#define textdir_parallel(a,b) (((a == dir_TLT || a == dir_TRT)&&(b == dir_TLT || b == dir_TRT)) || \ + ((a == dir_LTL || a == dir_RTT)&&(b == dir_LTL || b == dir_RTT))) + + +/* primary == primary */ +/* +boolean _pardir_parallel[dir_array_size][dir_array_size]; +_pardir_parallel[dir_TLT][dir_TLT] = 1; +_pardir_parallel[dir_TLT][dir_TRT] = 1; +_pardir_parallel[dir_TLT][dir_LTL] = 0; +_pardir_parallel[dir_TLT][dir_RTT] = 0; +_pardir_parallel[dir_TRT][dir_TLT] = 1; +_pardir_parallel[dir_TRT][dir_TRT] = 1; +_pardir_parallel[dir_TRT][dir_LTL] = 0; +_pardir_parallel[dir_TRT][dir_RTT] = 0; +_pardir_parallel[dir_LTL][dir_TLT] = 0; +_pardir_parallel[dir_LTL][dir_TRT] = 0; +_pardir_parallel[dir_LTL][dir_LTL] = 1; +_pardir_parallel[dir_LTL][dir_RTT] = 1; +_pardir_parallel[dir_RTT][dir_TLT] = 0; +_pardir_parallel[dir_RTT][dir_TRT] = 0; +_pardir_parallel[dir_RTT][dir_LTL] = 1; +_pardir_parallel[dir_RTT][dir_RTT] = 1; +*/ + + +#define pardir_parallel(a,b) (((a == dir_TLT || a == dir_TRT)&&(b == dir_TLT || b == dir_TRT)) || \ + ((a == dir_LTL || a == dir_RTT)&&(b == dir_LTL || b == dir_RTT))) + + +/* inv(primary) == primary */ +/* +boolean _pardir_opposite[dir_array_size][dir_array_size]; +_pardir_opposite[dir_TLT][dir_TLT] = 0; +_pardir_opposite[dir_TLT][dir_TRT] = 0; +_pardir_opposite[dir_TLT][dir_LTL] = 0; +_pardir_opposite[dir_TLT][dir_RTT] = 0; +_pardir_opposite[dir_TRT][dir_TLT] = 0; +_pardir_opposite[dir_TRT][dir_TRT] = 0; +_pardir_opposite[dir_TRT][dir_LTL] = 0; +_pardir_opposite[dir_TRT][dir_RTT] = 0; +_pardir_opposite[dir_LTL][dir_TLT] = 0; +_pardir_opposite[dir_LTL][dir_TRT] = 0; +_pardir_opposite[dir_LTL][dir_LTL] = 0; +_pardir_opposite[dir_LTL][dir_RTT] = 1; +_pardir_opposite[dir_RTT][dir_TLT] = 0; +_pardir_opposite[dir_RTT][dir_TRT] = 0; +_pardir_opposite[dir_RTT][dir_LTL] = 1; +_pardir_opposite[dir_RTT][dir_RTT] = 0; +*/ + +#define pardir_opposite(a,b) ((a == dir_LTL && b == dir_RTT)||(a == dir_RTT && b == dir_LTL)) + + +/* inv(secondary) == secondary */ +/* +boolean _textdir_opposite[dir_array_size][dir_array_size]; +_textdir_opposite[dir_TLT][dir_TLT] = 0; +_textdir_opposite[dir_TLT][dir_TRT] = 1; +_textdir_opposite[dir_TLT][dir_LTL] = 0; +_textdir_opposite[dir_TLT][dir_RTT] = 0; +_textdir_opposite[dir_TRT][dir_TLT] = 1; +_textdir_opposite[dir_TRT][dir_TRT] = 0; +_textdir_opposite[dir_TRT][dir_LTL] = 0; +_textdir_opposite[dir_TRT][dir_RTT] = 0; +_textdir_opposite[dir_LTL][dir_TLT] = 0; +_textdir_opposite[dir_LTL][dir_TRT] = 0; +_textdir_opposite[dir_LTL][dir_LTL] = 0; +_textdir_opposite[dir_LTL][dir_RTT] = 0; +_textdir_opposite[dir_RTT][dir_TLT] = 0; +_textdir_opposite[dir_RTT][dir_TRT] = 0; +_textdir_opposite[dir_RTT][dir_LTL] = 0; +_textdir_opposite[dir_RTT][dir_RTT] = 0; +*/ + +#define textdir_opposite(a,b) ((a == dir_TLT && b == dir_TRT)||(a == dir_TRT && b == dir_TLT)) + + +/* inv(tertiary) == tertiary */ +/* +boolean _glyphdir_opposite[dir_array_size][dir_array_size]; +_glyphdir_opposite[dir_TLT][dir_TLT] = 0; +_glyphdir_opposite[dir_TLT][dir_TRT] = 0; +_glyphdir_opposite[dir_TLT][dir_LTL] = 0; +_glyphdir_opposite[dir_TLT][dir_RTT] = 0; +_glyphdir_opposite[dir_TRT][dir_TLT] = 0; +_glyphdir_opposite[dir_TRT][dir_TRT] = 0; +_glyphdir_opposite[dir_TRT][dir_LTL] = 0; +_glyphdir_opposite[dir_TRT][dir_RTT] = 0; +_glyphdir_opposite[dir_LTL][dir_TLT] = 0; +_glyphdir_opposite[dir_LTL][dir_TRT] = 0; +_glyphdir_opposite[dir_LTL][dir_LTL] = 0; +_glyphdir_opposite[dir_LTL][dir_RTT] = 0; +_glyphdir_opposite[dir_RTT][dir_TLT] = 0; +_glyphdir_opposite[dir_RTT][dir_TRT] = 0; +_glyphdir_opposite[dir_RTT][dir_LTL] = 0; +_glyphdir_opposite[dir_RTT][dir_RTT] = 0; +*/ + +#define glyphdir_opposite(a,b) 0 + + +/* primary == primary */ +/* +boolean _pardir_eq[dir_array_size][dir_array_size]; +_pardir_eq[dir_TLT][dir_TLT] = 1; +_pardir_eq[dir_TLT][dir_TRT] = 1; +_pardir_eq[dir_TLT][dir_LTL] = 0; +_pardir_eq[dir_TLT][dir_RTT] = 0; +_pardir_eq[dir_TRT][dir_TLT] = 1; +_pardir_eq[dir_TRT][dir_TRT] = 1; +_pardir_eq[dir_TRT][dir_LTL] = 0; +_pardir_eq[dir_TRT][dir_RTT] = 0; +_pardir_eq[dir_LTL][dir_TLT] = 0; +_pardir_eq[dir_LTL][dir_TRT] = 0; +_pardir_eq[dir_LTL][dir_LTL] = 1; +_pardir_eq[dir_LTL][dir_RTT] = 0; +_pardir_eq[dir_RTT][dir_TLT] = 0; +_pardir_eq[dir_RTT][dir_TRT] = 0; +_pardir_eq[dir_RTT][dir_LTL] = 0; +_pardir_eq[dir_RTT][dir_RTT] = 1; +*/ + +#define pardir_eq(a,b) (((a == dir_TLT || a == dir_TRT)&&(b == dir_TLT || b == dir_TRT))|| \ + (a == dir_LTL && b == dir_LTL) || \ + (a == dir_RTT && b == dir_RTT)) + +/* secondary == secondary */ +/* +boolean _textdir_eq[dir_array_size][dir_array_size]; +_textdir_eq[dir_TLT][dir_TLT] = 1; +_textdir_eq[dir_TLT][dir_TRT] = 0; +_textdir_eq[dir_TLT][dir_LTL] = 0; +_textdir_eq[dir_TLT][dir_RTT] = 0; +_textdir_eq[dir_TRT][dir_TLT] = 0; +_textdir_eq[dir_TRT][dir_TRT] = 1; +_textdir_eq[dir_TRT][dir_LTL] = 0; +_textdir_eq[dir_TRT][dir_RTT] = 0; +_textdir_eq[dir_LTL][dir_TLT] = 0; +_textdir_eq[dir_LTL][dir_TRT] = 0; +_textdir_eq[dir_LTL][dir_LTL] = 1; +_textdir_eq[dir_LTL][dir_RTT] = 1; +_textdir_eq[dir_RTT][dir_TLT] = 0; +_textdir_eq[dir_RTT][dir_TRT] = 0; +_textdir_eq[dir_RTT][dir_LTL] = 1; +_textdir_eq[dir_RTT][dir_RTT] = 1; +*/ + +#define textdir_eq(a,b) ((a == dir_TLT && b == dir_TLT) || \ + (a == dir_TRT && b == dir_TRT) || \ + (a == dir_LTL && (b == dir_LTL || b == dir_RTT)) || \ + (a == dir_RTT && (b == dir_LTL || b == dir_RTT)) + + +/* tertiary == tertiary */ +/* +boolean _glyphdir_eq[dir_array_size][dir_array_size]; +_glyphdir_eq[dir_TLT][dir_TLT] = 1; +_glyphdir_eq[dir_TLT][dir_TRT] = 1; +_glyphdir_eq[dir_TLT][dir_LTL] = 0; +_glyphdir_eq[dir_TLT][dir_RTT] = 1; +_glyphdir_eq[dir_TRT][dir_TLT] = 1; +_glyphdir_eq[dir_TRT][dir_TRT] = 1; +_glyphdir_eq[dir_TRT][dir_LTL] = 0; +_glyphdir_eq[dir_TRT][dir_RTT] = 1; +_glyphdir_eq[dir_LTL][dir_TLT] = 0; +_glyphdir_eq[dir_LTL][dir_TRT] = 0; +_glyphdir_eq[dir_LTL][dir_LTL] = 1; +_glyphdir_eq[dir_LTL][dir_RTT] = 0; +_glyphdir_eq[dir_RTT][dir_TLT] = 1; +_glyphdir_eq[dir_RTT][dir_TRT] = 1; +_glyphdir_eq[dir_RTT][dir_LTL] = 0; +_glyphdir_eq[dir_RTT][dir_RTT] = 1; +*/ + +#define glyphdir_eq(a,b) ((a != dir_LTL && b != dir_LTL) || \ + (a == dir_LTL && b == dir_LTL)) + + +/* primary == secondary */ +/* +boolean _partextdir_eq[dir_array_size][dir_array_size]; +_partextdir_eq[dir_TLT][dir_TLT] = 0; +_partextdir_eq[dir_TLT][dir_TRT] = 0; +_partextdir_eq[dir_TLT][dir_LTL] = 1; +_partextdir_eq[dir_TLT][dir_RTT] = 1; +_partextdir_eq[dir_TRT][dir_TLT] = 0; +_partextdir_eq[dir_TRT][dir_TRT] = 0; +_partextdir_eq[dir_TRT][dir_LTL] = 1; +_partextdir_eq[dir_TRT][dir_RTT] = 1; +_partextdir_eq[dir_LTL][dir_TLT] = 1; +_partextdir_eq[dir_LTL][dir_TRT] = 0; +_partextdir_eq[dir_LTL][dir_LTL] = 0; +_partextdir_eq[dir_LTL][dir_RTT] = 0; +_partextdir_eq[dir_RTT][dir_TLT] = 0; +_partextdir_eq[dir_RTT][dir_TRT] = 1; +_partextdir_eq[dir_RTT][dir_LTL] = 0; +_partextdir_eq[dir_RTT][dir_RTT] = 0; +*/ + +#define partextdir_eq(a,b) (((a == dir_TLT || a == dir_TRT)&&(b == dir_LTL || b == dir_RTT)) || \ + (a == dir_LTL && b == dir_TLT) || \ + (a == dir_RTT && b == dir_TRT)) + + +/* secondary != tertiary */ +/* +boolean _textglyphdir_orthogonal[dir_array_size] +_textglyphdir_orthogonal[dir_TLT] = 1; +_textglyphdir_orthogonal[dir_TRT] = 1; +_textglyphdir_orthogonal[dir_LTL] = 1; +_textglyphdir_orthogonal[dir_RTT] = 0; +*/ + +#define textglyphdir_orthogonal(a) (a != dir_RTT) + +/* secondary == L */ +/* +boolean _textdir_is[dir_array_size]; +_textdir_is[dir_TLT] = 1; +_textdir_is[dir_TRT] = 1; +_textdir_is[dir_LTL] = 1; +_textdir_is[dir_RTT] = 0; +*/ + +# define textdir_is_L(a) (a == dir_TLT) + +# define push_dir(a) \ + { halfword dir_tmp=new_dir((a)); \ + vlink(dir_tmp)=dir_ptr; \ + dir_ptr=dir_tmp; \ + } + +# define push_dir_node(a) \ + { halfword dir_tmp=copy_node((a)); \ + vlink(dir_tmp)=dir_ptr; \ + dir_ptr=dir_tmp; \ + } + +# define pop_dir_node() \ + { halfword dir_tmp=dir_ptr; \ + dir_ptr=vlink(dir_tmp); \ + flush_node(dir_tmp); \ + } + +extern halfword dir_ptr; + +extern halfword text_dir_ptr; + +extern void initialize_directions(void); +extern halfword new_dir(int s); + +extern const char *string_dir(int d); +extern void print_dir(int d); + +extern void scan_direction(void); + +extern halfword do_push_dir_node(halfword p, halfword a); +extern halfword do_pop_dir_node(halfword p); + +scaled pack_width(int curdir, int pdir, halfword p, boolean isglyph); +scaled_whd pack_width_height_depth(int curdir, int pdir, halfword p, + boolean isglyph); + +void update_text_dir_ptr(int val); + +#endif |