diff options
author | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-06-13 18:16:16 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-06-13 18:16:16 +0200 |
commit | 9db0c39e07509226287ef0075dfda8d2386416ed (patch) | |
tree | 6daf69803dd8c7cc1eadfeebe65653de6c4a23c1 /tex/context/base/mkiv/typo-lin.lua | |
parent | 5baf21b979124606cb6503be4e16d403f233ecd4 (diff) | |
download | context-9db0c39e07509226287ef0075dfda8d2386416ed.tar.gz |
2016-06-13 17:04:00
Diffstat (limited to 'tex/context/base/mkiv/typo-lin.lua')
-rw-r--r-- | tex/context/base/mkiv/typo-lin.lua | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tex/context/base/mkiv/typo-lin.lua b/tex/context/base/mkiv/typo-lin.lua index 37fff48f7..10d83661e 100644 --- a/tex/context/base/mkiv/typo-lin.lua +++ b/tex/context/base/mkiv/typo-lin.lua @@ -77,6 +77,7 @@ local traverse_id = nuts.traverse_id local insert_before = nuts.insert_before local insert_after = nuts.insert_after local find_tail = nuts.tail +local rehpack = nuts.rehpack ----- remove_node = nuts.remove local getsubtype = nuts.getsubtype @@ -93,6 +94,8 @@ local setprop = nuts.setprop local getprop = nuts.rawprop -- getprop local effectiveglue = nuts.effective_glue +local n_is_zero_glue = nodes.is_zero_glue +local n_getglue = nodes.getglue local nodepool = nuts.pool local new_kern = nodepool.kern @@ -100,8 +103,10 @@ local new_leftskip = nodepool.leftskip local new_rightskip = nodepool.rightskip local new_hlist = nodepool.hlist local new_rule = nodepool.rule +local new_glue = nodepool.glue local texgetcount = tex.getcount +local texgetskip = tex.getskip local setmetatableindex = table.setmetatableindex local formatters = string.formatters @@ -238,9 +243,47 @@ function paragraphs.normalize(head,islocal) -- can be an option, maybe we need a proper state in lua itself ... is this check still needed? return head, false end + -- this can become a separate handler but it makes sense to integrate it here + local parfillleftskip = texgetskip("parfillleftskip") + if not n_is_zero_glue(parfillleftskip) then + local last = nil -- a nut + local done = false + for line in traverse_id(hlist_code,tonut(head)) do + if getsubtype(line) == line_code and not getprop(line,"line") then + if done then + last = line + else + done = true + end + end + end + if last then -- only if we have more than one line + local head = getlist(last) + local current = head + if current then + if getid(current) == glue_code and getsubtype(current,leftskip_code) then + current = getnext(current) + end + if current then + head, current = insert_before(head,current,new_glue(n_getglue(parfillleftskip))) + if head == current then + setlist(last,head) + end + -- can be a 'rehpack(h )' + rehpack(last) + end + end + end + end + -- normalizer for line in traverse_id(hlist_code,tonut(head)) do if getsubtype(line) == line_code and not getprop(line,"line") then normalize(line) + if done then + last = line + else + done = true + end end end return head, true |