@@ -455,16 +455,59 @@ protected void updateBounds(Element context, Integer new_line_begin, Integer new
455455 Integer new_col_end ) {
456456 Integer [] bounds = getBounds (context );
457457 Integer line_begin = bounds [0 ], col_begin = bounds [1 ], line_end = bounds [2 ], col_end = bounds [3 ];
458- if (new_line_begin != null && (line_begin == null || new_line_begin < line_begin ))
458+
459+ if (new_line_begin == null && new_col_begin == null && new_line_end == null && new_col_end == null )
460+ return ;
461+ if (new_line_begin == null || new_col_begin == null || new_line_end == null || new_col_end == null )
462+ throw new IllegalArgumentException ("the implementation of this method is all-or-nothing" );
463+
464+ boolean updateLineBegin = false ;
465+ boolean updateColBegin = false ;
466+ boolean updateLineEnd = false ;
467+ boolean updateColEnd = false ;
468+
469+ if (line_begin == null && col_begin == null && line_end == null && col_end == null ) {
470+ updateLineBegin = true ;
471+ updateColBegin = true ;
472+ updateLineEnd = true ;
473+ updateColEnd = true ;
474+ } else if (line_begin == null || col_begin == null || line_end == null || col_end == null )
475+ throw new IllegalArgumentException ("the implementation of this method is all-or-nothing" );
476+ else {
477+ if (new_line_begin < line_begin )
478+ updateLineBegin = true ;
479+
480+ if (updateLineBegin )
481+ updateColBegin = true ;
482+ else if (new_line_begin == line_begin && new_col_begin < col_begin )
483+ updateColBegin = true ;
484+
485+ if (new_line_end > line_end )
486+ updateLineEnd = true ;
487+
488+ if (updateLineEnd )
489+ updateColEnd = true ;
490+ else if (new_line_end == line_end && new_col_end > col_end )
491+ updateColEnd = true ;
492+
493+ if (new_line_end == line_end && updateColEnd ) {
494+ System .err .println ("updating col_end in " + contextString (context ));
495+ }
496+
497+ }
498+
499+ if (updateLineBegin )
459500 context .setAttribute (Y_MIN , new_line_begin .toString ());
460- if (new_col_begin != null && (col_begin == null || new_line_begin < line_begin
461- || new_line_begin == line_begin && new_col_begin < col_begin ))
501+ if (updateColBegin )
462502 context .setAttribute (X_MIN , new_col_begin .toString ());
463- if (new_line_end != null && ( line_end == null || new_line_end > line_end ) )
503+ if (updateLineEnd )
464504 context .setAttribute (Y_MAX , new_line_end .toString ());
465- if (new_col_end != null
466- && (col_end == null || new_line_end > line_end || new_line_end == line_end && new_col_end > col_end ))
505+ if (updateColEnd )
467506 context .setAttribute (X_MAX , new_col_end .toString ());
507+
508+ if (new_line_end == line_end && updateColEnd ) {
509+ System .err .println ("updated col_end in " + contextString (context ));
510+ }
468511 }
469512
470513 protected void updateBounds (Element context , Token ... newTokens ) {
0 commit comments