summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/tex/postlinebreak.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/tex/postlinebreak.c')
-rw-r--r--Build/source/texk/web2c/luatexdir/tex/postlinebreak.c85
1 files changed, 48 insertions, 37 deletions
diff --git a/Build/source/texk/web2c/luatexdir/tex/postlinebreak.c b/Build/source/texk/web2c/luatexdir/tex/postlinebreak.c
index 2711f53d25e..f9341eabe14 100644
--- a/Build/source/texk/web2c/luatexdir/tex/postlinebreak.c
+++ b/Build/source/texk/web2c/luatexdir/tex/postlinebreak.c
@@ -22,7 +22,7 @@
#include "nodes.h"
static const char _svn_version[] =
- "$Id: postlinebreak.c 1694 2008-12-28 20:53:16Z oneiros $ $URL: http://scm.foundry.supelec.fr/svn/luatex/trunk/src/texk/web2c/luatexdir/tex/postlinebreak.c $";
+ "$Id: postlinebreak.c 2294 2009-04-15 19:40:11Z taco $ $URL: http://scm.foundry.supelec.fr/svn/luatex/trunk/source/texk/web2c/luatexdir/tex/postlinebreak.c $";
/* So far we have gotten a little way into the |line_break| routine, having
covered its important |try_break| subroutine. Now let's consider the
@@ -216,42 +216,53 @@ void ext_post_line_break(boolean d,
halfword a = alink(r);
halfword v = vlink(r);
assert(a != null);
- if (v == null) { /* nested disc, let's unfold */
- fprintf(stderr, "Nested disc [%d]<-[%d]->null\n", (int) a,
- (int) r);
- do {
- halfword d;
- while (alink(a) != null)
- a = alink(a);
- assert(type(a) == nesting_node);
- assert(subtype(a) == no_break_head(0)); /* No_break */
- d = a - subtype(a); /* MAGIC subtype is offset of nesting with disc */
- assert(type(d) == disc_node);
- v = vlink(d);
- a = alink(d);
- fprintf(stderr, "Up to disc [%d]<-[%d]->[%d] & link [%d]\n",
- (int) a, (int) d, (int) v, (int) vlink_no_break(d));
- assert(a != null);
- couple_nodes(a, vlink_no_break(d));
- vlink_no_break(d) = null;
- tlink_no_break(d) = null;
- flush_node(d);
- } while (v == null);
- couple_nodes(r, v);
- fprintf(stderr, "Close list [%d]<->[%d] a=[%d]\n", (int) r,
- (int) v, (int) alink(r));
- a = alink(r);
- }
- if (vlink_no_break(r) != null) {
- flush_node_list(vlink_no_break(r));
- vlink_no_break(r) = null;
- tlink_no_break(r) = null;
- }
- if (vlink_pre_break(r) != null) {
- couple_nodes(a, vlink_pre_break(r));
- couple_nodes(tlink_pre_break(r), r);
- vlink_pre_break(r) = null;
- tlink_pre_break(r) = null;
+ assert(v != null);
+ switch (subtype(r)) {
+ case select_disc:
+ if (vlink_pre_break(r) != null) {
+ flush_node_list(vlink_pre_break(r));
+ vlink_pre_break(r) = null;
+ tlink_pre_break(r) = null;
+ }
+ if (vlink_no_break(r) != null) {
+ couple_nodes(a, vlink_no_break(r));
+ couple_nodes(tlink_no_break(r), r);
+ vlink_no_break(r) = null;
+ tlink_no_break(r) = null;
+ }
+
+ assert(type(a)==disc_node && subtype(a)==init_disc);
+ flush_node_list(vlink_no_break(a));
+ vlink_no_break(a) = null;
+ tlink_no_break(a) = null;
+ flush_node_list(vlink_pre_break(a));
+ vlink_pre_break(a) = null;
+ tlink_pre_break(a) = null;
+ flush_node_list(vlink_post_break(a));
+ vlink_post_break(a) = null;
+ tlink_post_break(a) = null;
+
+ break;
+ case init_disc:
+ assert(type(v)==disc_node && subtype(v)==select_disc);
+ subtype(v) = syllable_disc; /* not special any more */
+ flush_node_list(vlink_no_break(v));
+ vlink_no_break(v) = vlink_post_break(r);
+ tlink_no_break(v) = tlink_post_break(r);
+ vlink_post_break(r) = null;
+ tlink_post_break(r) = null;
+ default:
+ if (vlink_no_break(r) != null) {
+ flush_node_list(vlink_no_break(r));
+ vlink_no_break(r) = null;
+ tlink_no_break(r) = null;
+ }
+ if (vlink_pre_break(r) != null) {
+ couple_nodes(a, vlink_pre_break(r));
+ couple_nodes(tlink_pre_break(r), r);
+ vlink_pre_break(r) = null;
+ tlink_pre_break(r) = null;
+ }
}
if (vlink_post_break(r) != null) {
couple_nodes(r, vlink_post_break(r));