[net-nittin-irc-cvs] CVS update: net-nittin-irc/example/cliki.lisp
Brian Mastenbrook
bmastenbrook at common-lisp.net
Sat Dec 13 14:03:40 UTC 2003
Update of /project/net-nittin-irc/cvsroot/net-nittin-irc/example
In directory common-lisp.net:/tmp/cvs-serv9160
Modified Files:
cliki.lisp
Log Message:
Fixed handling in the case of an end-of-file.
Date: Sat Dec 13 09:03:40 2003
Author: bmastenbrook
Index: net-nittin-irc/example/cliki.lisp
diff -u net-nittin-irc/example/cliki.lisp:1.2 net-nittin-irc/example/cliki.lisp:1.3
--- net-nittin-irc/example/cliki.lisp:1.2 Sat Dec 13 08:11:34 2003
+++ net-nittin-irc/example/cliki.lisp Sat Dec 13 09:03:39 2003
@@ -1,4 +1,4 @@
-;;;; $Id: cliki.lisp,v 1.2 2003/12/13 13:11:34 bmastenbrook Exp $
+;;;; $Id: cliki.lisp,v 1.3 2003/12/13 14:03:39 bmastenbrook Exp $
;;;; $Source: /project/net-nittin-irc/cvsroot/net-nittin-irc/example/cliki.lisp,v $
;;;; cliki.lisp - CLiki as an infobot; only works on SBCL.
@@ -33,7 +33,7 @@
(let ((stream (socket-make-stream s :input t :output t :buffering :full)))
;; we are exceedingly unportable about proper line-endings here.
;; Anyone wishing to run this under non-SBCL should take especial care
- (format stream "GET ~A HTTP/1.0~%Host: ~A~%~%" url host)
+ (format stream "GET ~A HTTP/1.0~%Host: ~A~%User-Agent: CLiki Bot~%~%" url host)
(force-output stream)
(list
(let* ((l (read-line stream))
@@ -52,7 +52,7 @@
(setf str (regex-replace-all " " str "%20"))
(setf str (regex-replace-all "," str "%2C"))
(setf str (regex-replace-all "`" str "%60"))
- (format t "hi ~A~%" str)
+ ;(format t "hi ~A~%" str)
str)
(defun cliki-first-sentence (term)
@@ -76,19 +76,23 @@
(let ((first-line ""))
(loop for i from 1 to 5 do ;; scan the first 5 lines
(progn
- (setf first-line (concatenate 'string first-line (read-line stream)))
+ (multiple-value-bind (next-line missing-newline-p)
+ (read-line stream nil)
+ (if next-line
+ (setf first-line (concatenate 'string first-line next-line (string #\newline)))
+ (return-from cliki-return (format nil "The end of the page was reached before a definition was found in ~A" cliki-url))))
(setf first-line (regex-replace-all "\\r" first-line " "))
(setf first-line (regex-replace-all "\\n" first-line " "))
(setf first-line (regex-replace-all "_\\(([^)]*)\\)" first-line "\\1"))
(setf first-line (regex-replace-all "\\*\\(([^)]*)\\)" first-line "\\1"))
(setf first-line (regex-replace-all "<[^>]+>" first-line ""))
- (setf first-line (regex-replace-all "^([^.]+)\\..*$" first-line "\\1."))
+ (setf first-line (regex-replace-all "^(([^.]|\\.\\S)+)\\.\\s+.*$" first-line "\\1."))
(setf first-line (regex-replace-all "(\\s)\\s+" first-line "\\1"))
(setf first-line (regex-replace-all "^\\s(.+)$" first-line "\\1"))
- (when (scan "^[^.]+\\.$" first-line)
+ (when (scan "^([^.]|\\.\\S)+\\.$" first-line)
(setf first-line (concatenate 'string first-line " " cliki-url))
(return-from cliki-return first-line))))
- (format nil "No definition was found in the first 5 lines of ~A." cliki-url)))
+ (format nil "No definition was found in the first 5 lines of ~A" cliki-url)))
(if stream (close stream)))))
(condition (c &rest whatever) (return-from cliki-return (format nil "An error was encountered in lookup.")))))))
More information about the Net-nittin-irc-cvs
mailing list