summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/tex/directions.h
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
committerKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
commitad547a6b5986815fda458221149728d9d9ab1d87 (patch)
tree16296910eb3eca724371474ea9aea3994dc69614 /Build/source/texk/web2c/luatexdir/tex/directions.h
parent947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff)
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 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.h168
1 files changed, 168 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..92d6cc18f12
--- /dev/null
+++ b/Build/source/texk/web2c/luatexdir/tex/directions.h
@@ -0,0 +1,168 @@
+/* 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/>. */
+
+
+#ifndef DIRECTIONS_H
+# define DIRECTIONS_H
+
+/*
+#define dir_swap 4
+*/
+
+#define dir_min_value 0
+#define dir_max_value 3
+
+#define check_dir_value(d) \
+ if ((d < dir_min_value) || (d > dir_max_value)) \
+ d = dir_min_value;
+
+#define is_mirrored(a) 0
+
+#define is_rotated(a) (a == dir_RTT)
+
+/*
+
+ # 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)) \
+ )
+
+ # 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)) \
+ )
+
+ # 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) \
+ )
+
+ # 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))
+
+ # 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) \
+ )
+
+ # define dir_TLT_or_TRT(a) (a == dir_TLT || a == dir_TRT)
+ # define dir_LTL_or_RTT(a) (a == dir_LTL || a == dir_RTT)
+
+*/
+
+/* TLT TRT LTL RTT */
+
+# define dir_TLT_or_TRT(a) (a < 2)
+# define dir_LTL_or_RTT(a) (a > 1)
+
+# define textdir_parallel(a,b) ( \
+ (dir_TLT_or_TRT(a) && dir_TLT_or_TRT(b)) || \
+ (dir_LTL_or_RTT(a) && dir_LTL_or_RTT(b)) \
+)
+
+# define pardir_parallel(a,b) ( \
+ (dir_TLT_or_TRT(a) && dir_TLT_or_TRT(b)) || \
+ (dir_LTL_or_RTT(a) && dir_LTL_or_RTT(b)) \
+)
+
+# define pardir_opposite(a,b) ( \
+ (a == dir_LTL && b == dir_RTT) || \
+ (a == dir_RTT && b == dir_LTL) \
+)
+
+# define textdir_opposite(a,b) ( \
+ (a == dir_TLT && b == dir_TRT) || \
+ (a == dir_TRT && b == dir_TLT) \
+)
+
+# define glyphdir_opposite(a,b) 0
+
+# define pardir_eq(a,b) ( \
+ (dir_TLT_or_TRT(a) && dir_TLT_or_TRT(b)) || \
+ (a == dir_LTL && b == dir_LTL) || \
+ (a == dir_RTT && b == dir_RTT) \
+)
+
+# define textdir_eq(a,b) ( \
+ (a == dir_TLT && b == dir_TLT) || \
+ (a == dir_TRT && b == dir_TRT) || \
+ (a == dir_LTL && dir_LTL_or_RTT(b)) || \
+ (a == dir_RTT && dir_LTL_or_RTT(b)) \
+)
+
+# define glyphdir_eq(a,b) ( \
+ (a != dir_LTL && b != dir_LTL) || \
+ (a == dir_LTL && b == dir_LTL) \
+)
+
+# define partextdir_eq(a,b) ( \
+ (dir_TLT_or_TRT(a) && dir_LTL_or_RTT(b)) || \
+ (a == dir_LTL && b == dir_TLT) || \
+ (a == dir_RTT && b == dir_TRT) \
+)
+
+# define textglyphdir_orthogonal(a) (a != dir_RTT)
+
+# define textdir_is_L(a) (a == dir_TLT)
+
+# define push_dir(p,a) { \
+ halfword dir_tmp=new_dir((a)); \
+ vlink(dir_tmp)=p; \
+ p=dir_tmp; \
+}
+
+# define push_dir_node(p,a) { \
+ halfword dir_tmp=copy_node((a)); \
+ vlink(dir_tmp)=p; \
+ p=dir_tmp; \
+}
+
+# define pop_dir_node(p) { \
+ halfword dir_tmp=p; \
+ p=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_par(int d);
+extern void print_dir_text(halfword 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