module basic/Areas

imports basic/NatCon

exports

sorts Area
context-free syntax
  %% Areas describe the boundaries of substrings in files in a one dimensional
  %% fashion, but taking newlines into account. The begin-line, begin-column
  %% are styled after the UNIX standard. We offer both line-column and 
  %% offset-length representations because neither representation can be 
  %% computed from the other without the original file.

  %% All characters, including tabs and newlines, are counted as one character.
  %% Positions are calculated based on the original file, not as the file is
  %% displayed on screen. The '\n' character increases the line and returns
  %% the column position to 0.

  %% begin-line: the first line in a file is 1
  %% begin-column: the first column on a line is 0
  %% end-line: line on which the end-column occurs
  %% end-column: first column beyond last character

  %% Example: describing the area starting at T of "This" up to and including 
  %% R of "constructoR"

  %%  0123456789012345
  %% 1  This is an
  %% 2area constructoR
  %%       
  %%  area(1,2,2,16,2,26)

  "area" "("
    begin-line:NatCon "," 
    begin-column:NatCon ","
    end-line:NatCon ","
    end-column:NatCon ","
    offset:NatCon ","
    length:NatCon ")"
  -> Area {cons("area")}