103 lines
4.0 KiB
Diff
103 lines
4.0 KiB
Diff
diff -up gnutls-2.12.11/guile/modules/system/documentation/c-snarf.scm.docparse gnutls-2.12.11/guile/modules/system/documentation/c-snarf.scm
|
|
--- gnutls-2.12.11/guile/modules/system/documentation/c-snarf.scm.docparse 2011-04-08 02:30:44.000000000 +0200
|
|
+++ gnutls-2.12.11/guile/modules/system/documentation/c-snarf.scm 2011-09-29 08:38:28.000000000 +0200
|
|
@@ -1,6 +1,6 @@
|
|
;;; c-snarf.scm -- Parsing documentation "snarffed" from C files.
|
|
;;;
|
|
-;;; Copyright 2006, 2007, 2010 Free Software Foundation, Inc.
|
|
+;;; Copyright 2006, 2007, 2010, 2011 Free Software Foundation, Inc.
|
|
;;;
|
|
;;;
|
|
;;; This program is free software; you can redistribute it and/or modify
|
|
@@ -27,7 +27,7 @@
|
|
|
|
:export (run-cpp-and-extract-snarfing
|
|
parse-snarfing
|
|
- parse-snarfed-line snarf-line?))
|
|
+ parse-snarfed-line))
|
|
|
|
;;; Author: Ludovic Courtès
|
|
;;;
|
|
@@ -55,12 +55,6 @@
|
|
;;; Parsing magic-snarffed CPP output.
|
|
;;;
|
|
|
|
-(define (snarf-line? line)
|
|
- "Return true if @var{line} (a string) can be considered a line produced by
|
|
-the @code{snarf.h} snarfing macros."
|
|
- (and (>= (string-length line) 4)
|
|
- (string=? (substring line 0 4) "^^ {")))
|
|
-
|
|
(define (parse-c-argument-list arg-string)
|
|
"Parse @var{arg-string} (a string representing a ANSI C argument list,
|
|
e.g., @var{(const SCM first, SCM second_arg)}) and return a list of strings
|
|
@@ -99,7 +93,6 @@ of a procedure's documentation: @code{c-
|
|
(string-concatenate (reverse! result))
|
|
(loop (read) (cons str result)))))
|
|
|
|
- ;;(format (current-error-port) "doc-item: ~a~%" item)
|
|
(let* ((item (string-trim-both item #\space))
|
|
(space (string-index item #\space)))
|
|
(if (not space)
|
|
@@ -142,7 +135,7 @@ of a procedure's documentation: @code{c-
|
|
(define (parse-snarfed-line line)
|
|
"Parse @var{line}, a string that contains documentation returned for a
|
|
single function by the C preprocessor with the @code{-DSCM_MAGIC_SNARF_DOCS}
|
|
-option. @var{line} is assumed to obey the @code{snarf-line?} predicate."
|
|
+option. @var{line} is assumed to be a complete \"^^ { ... ^^ }\" sequence."
|
|
(define (caret-split str)
|
|
(let loop ((str str)
|
|
(result '()))
|
|
@@ -168,16 +161,43 @@ option. @var{line} is assumed to obey t
|
|
defined) output from @var{port} a return a list of alist, each of which
|
|
contains information about a specific function described in the C
|
|
preprocessor output."
|
|
+ (define start-marker "^^ {")
|
|
+ (define end-marker "^^ }")
|
|
+
|
|
+ (define (read-snarf-lines start)
|
|
+ ;; Read the snarf lines that follow START until and end marker is found.
|
|
+ (let loop ((line start)
|
|
+ (result '()))
|
|
+ (cond ((eof-object? line)
|
|
+ ;; EOF in the middle of a "^^ { ... ^^ }" sequence; shouldn't
|
|
+ ;; happen.
|
|
+ line)
|
|
+ ((string-contains line end-marker)
|
|
+ =>
|
|
+ (lambda (end)
|
|
+ (let ((result (cons (string-take line (+ 3 end))
|
|
+ result)))
|
|
+ (string-concatenate-reverse result))))
|
|
+ ((string-prefix? "#" line)
|
|
+ ;; Presumably a "# LINENUM" directive; skip it.
|
|
+ (loop (read-line port) result))
|
|
+ (else
|
|
+ (loop (read-line port)
|
|
+ (cons line result))))))
|
|
+
|
|
(let loop ((line (read-line port))
|
|
(result '()))
|
|
- ;;(format (current-error-port) "line: ~a~%" line)
|
|
- (if (eof-object? line)
|
|
- result
|
|
- (cond ((snarf-line? line)
|
|
- (loop (read-line port)
|
|
- (cons (parse-snarfed-line line) result)))
|
|
- (else
|
|
- (loop (read-line port) result))))))
|
|
+ (cond ((eof-object? line)
|
|
+ result)
|
|
+ ((string-contains line start-marker)
|
|
+ =>
|
|
+ (lambda (start)
|
|
+ (let ((line
|
|
+ (read-snarf-lines (string-drop line start))))
|
|
+ (loop (read-line port)
|
|
+ (cons (parse-snarfed-line line) result)))))
|
|
+ (else
|
|
+ (loop (read-line port) result)))))
|
|
|
|
|
|
;;; c-snarf.scm ends here
|