(module token mzscheme
(require (lib "struct.ss"))
(require (only (lib "lex.ss" "parser-tools")
position struct:position make-position position?
position-offset position-line position-col
set-position-offset! set-position-line! set-position-col!))
(define-struct/properties region (source start end)
([prop:custom-write (lambda (r port write?)
(fprintf port
"#<region:~a:~a-~a:~a>"
(position-line (region-start r))
(position-col (region-start r))
(position-line (region-end r))
(position-col (region-end r))))]))
(define (region->string r)
(format "~a:~a:~a-~a:~a"
(object-name (region-source r))
(position-line (region-start r))
(position-col (region-start r))
(position-line (region-end r))
(position-col (region-end r))))
(define-struct regexp-contents (pattern global? case-insensitive?) #f)
(define-struct token (type contents location) #f)
(provide (all-defined)
(struct position (offset line col))))