;;;; -*- Mode: Lisp; Syntax: Common-Lisp; Package: SYSTEM -*- ;;;; ;;;; Copyright (c) 2011, Juan Jose Garcia-Ripoll. ;;;; ;;;; This program is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Library General Public ;;;; License as published by the Free Software Foundation; either ;;;; version 2 of the License, or (at your option) any later version. ;;;; ;;;; See file '../Copyright' for full details. ;;;; (in-package "SYSTEM") (defun to-cdb-vector (object) (let* ((vector (make-array 128 :adjustable t :fill-pointer 0 :element-type '(unsigned-byte 8) :initial-element 0)) (stream (ext:make-sequence-output-stream vector :external-format #+unicode :utf-8 #-unicode :default))) (with-standard-io-syntax (let ((si::*print-package* (find-package "CL"))) (write object :stream stream :pretty nil :readably nil :escape t))) vector)) (defun from-cdb-vector (vector) (let* ((stream (ext:make-sequence-input-stream vector :external-format #+unicode :utf-8 #-unicode :default))) (read stream nil nil nil))) (defun search-help-file (string path) (let* ((key (to-cdb-vector string)) (value (ecl-cdb:lookup-cdb key path))) (when value (from-cdb-vector value)))) (defun dump-help-file (hash-table path &optional merge test) (when merge (error "DUMP-HELP-FILE does not suport yet the third argument")) (ecl-cdb:with-output-to-cdb (cdb nil path) (loop for k being the hash-key of hash-table using (hash-value v) do (ecl-cdb:add-record (to-cdb-vector k) (to-cdb-vector v) cdb))) ;; Testing the consistency of the output (when test (loop for k being the hash-key of hash-table using (hash-value v) for other-value = (search-help-file k path) unless (and other-value (equalp other-value v)) do (error "Symbol ~A not found in database ~A" k path))))