+{\catcode`\#=12
+\directlua{%
+ function gb(a)
+ local t = tex.getbox(a)
+ local x = {}
+ for n in node.traverse_id(node.id('hlist'), t.head) do
+ local b = n.glue_order>0 and 0 or math.floor(100*math.pow(n.glue_set, 3)+0.5);
+ if b<=12 then x[#x+1]={2,b} % decent
+ elseif n.glue_sign==1 and b>=100 then x[#x+1]={0,b} %very loose
+ elseif n.glue_sign==1 then x[#x+1]={1,b} % loose
+ else x[#x+1]={3,b} end %tight
+ end
+ x[0]={2, 0}
+ local d = 0
+ for i=1,#x do
+ d = d + math.floor(math.pow(tex.linepenalty + x[i][2], 2)+0.5)
+ if math.abs(x[i][1]-x[i-1][1])>=1 then d = d + tex.adjdemerits end
+ end
+ tex.sprint(-2,tostring(d) )
+ end
+}}
+\protected\def\getbadness#1{\par\medskip\textcolor{blue}{\small demerits: \directlua{gb(#1)}}}
+
+\noindent
+\vrule\copy40010\vrule\relax\getbadness{40010}
+
+\medskip
+\noindent
+\vrule\copy40012\vrule\relax\getbadness{40012}
+
+\newpage
+\noindent
+\vrule\copy40014\vrule\relax\getbadness{40014}
+
+\clearpage
+\R28\zw
+\ltjenableadjust[lineend=extended, priority=true]
+\setbox40000=\vtop{\sample{lineend=extended, priority=true}}
+\ltjdisableadjust
+\ltjenableadjust[lineend=true, priority=false, priority=true]
+\setbox40002=\vtop{\sample{linened=true,priority=true}}
+\ltjdisableadjust
+\ltjenableadjust[lineend=false, priority=false, priority=true]
+\setbox40004=\vtop{\sample{lineend=false,priority=true}}
+\ltjdisableadjust
+\ltjenableadjust[lineend=extended, priority=false]
+\setbox40010=\vtop{\sample{lineend=extended, priority=false}}
+\ltjdisableadjust
+\ltjenableadjust[lineend=true, priority=false, priority=false]
+\setbox40012=\vtop{\sample{linened=true,priority=false}}
+\ltjdisableadjust
+\ltjenableadjust[lineend=false, priority=false, priority=false]
+\setbox40014=\vtop{\sample{lineend=false,priority=false}}
+\ltjdisableadjust
+