anchor.diff:    ;
   
   function_beginning :
  -     ((dt_FILLER | dt_LINE_TERMINATOR | dt_COMMENT | dt_BRACKET_COMMENT) -> template() "")* { leadingComments = $text; }
  +     (((dt_FILLER | dt_LINE_TERMINATOR | dt_COMMENT | dt_BRACKET_COMMENT) { appendToLeadingComments($text, $start.getCharPositionInLine()); }) -> template() "")*
     ;
   
   function_separator :
  
positive.code: 
  function_body :
       t_FUNCTION (t_FILLER? output_params t_FILLER? t_ASSIGN)? t_FILLER? name t_FILLER? (input_params t_FILLER?)?
       (stmt_separator -> template(original={$text}, extra={getCommentStringToInsert()}) "<original><extra>")
       (t_FILLER? stmt_or_function)* t_FILLER? 
       t_END
    ;
  
negative.code:         //fudge factor to point following stuff back to location preceding inserted newlines
          offsetTracker.recordOffsetChange(-1, lineLength);
       }
       ((function_separator_blob { appendToLeadingComments($text, $start.getCharPositionInLine()); }) -> template() "")*
       -> template(gap={"\n\n"}) "<gap>"
    ;
  
  