aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/guile/skribilo/ast.scm33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/guile/skribilo/ast.scm b/src/guile/skribilo/ast.scm
index 3ed33c9..746cbbf 100644
--- a/src/guile/skribilo/ast.scm
+++ b/src/guile/skribilo/ast.scm
@@ -123,41 +123,48 @@
(define (handle-ast-error c)
;; Issue a user-friendly error message for error condition C.
+ (define (show-location obj)
+ (let ((location (and (ast? obj) (ast-loc obj))))
+ (if (location? location)
+ (format (current-error-port) "~a:~a:~a: "
+ (location-file location)
+ (location-line location)
+ (location-column location)))))
+
(cond ((ast-orphan-error? c)
- (let* ((node (ast-orphan-error:ast c))
- (location (and (ast? node) (ast-loc node))))
- (format (current-error-port) "orphan node: ~a~a~%"
- node
- (if (location? location)
- (string-append " "
- (location-file location) ":"
- (location-line location))
- ""))))
+ (let ((node (ast-orphan-error:ast c)))
+ (show-location node)
+ (format (current-error-port) (_ "orphan node: ~a~%")
+ node)))
((ast-cycle-error? c)
(let ((object (ast-cycle-error:object c)))
+ (show-location object)
(format (current-error-port)
- "cycle found in AST: ~a~%" object)))
+ (_ "cycle found in AST: ~a~%") object)))
((markup-unknown-option-error? c)
(let ((markup (markup-unknown-option-error:markup c))
(option (markup-unknown-option-error:option c)))
+ (show-location markup)
(format (current-error-port)
- "~a: unknown markup option for `~a'~%"
+ (_ "~a: unknown markup option for `~a'~%")
option markup)))
((markup-already-bound-error? c)
(let ((markup (markup-already-bound-error:markup c))
(ident (markup-already-bound-error:ident c)))
+ (show-location markup)
(format (current-error-port)
- "`~a' (~a): markup identifier already bound~%"
+ (_ "`~a' (~a): markup identifier already bound~%")
ident
(if (markup? markup)
(markup-markup markup)
markup))))
(else
- (format (current-error-port) "undefined resolution error: ~a~%"
+ (format (current-error-port)
+ (_ "undefined AST error: ~a~%")
c))))
(register-error-condition-handler! ast-error? handle-ast-error)