anchor.diff:  ;;;;
   ;;;; pseudonyms.lisp
   
  -(in-package #:pseudonyms)
  +(in-package :pseudonyms)
   
   ;;; ========================================================================
   ;;; GLOBAL VARIABLES
   
   (defparameter *pseudonym-table*
     (make-weak-hash-table :test #'equal :weakness :key)
  -  "This is a global package-name-indexed hashtable holding name-pseudonym plists.")
  +  "This is a global package-name-indexed hashtable holding package-name-and-pseudonym plists.")
   
   ;;; ========================================================================
   ;;; HELPER FUNCTIONS AND TYPES
  
positive.code: ;;; ========================================================================
  ;;; DEFINE/UNDEFINE FUNCTIONS
  
  (defun defpseudonym (raw-name raw-pseudonym &key (package (package-name *package*)))
    "This, given a package name and a pseudonym for it, allows you to use a local pseudonym in
  form $pseudonym:symbol instead of name:symbol within your code. This pseudonym is local to the
  package you called defpseudonym in (as shown by the global variable *PACKAGE*).
  
negative.code: (defun pseudonym-reader (stream char)
    "This is the reader macro for local pseudonyms."
    (declare (ignore char))
    (labels ((valid (char)
  	     (when (equal char (or #\Space #\Tab #\Return #\Newline))
  	       (error "Whitespace encountered when processing nickname."))))
      (let* ((table (gethash (package-name *package*) *pseudonym-table*))
  	   (pseudlist (loop for char = (read-char stream)
  			 collect char
  			 do (when (valid char))
  			 until (equal (peek-char nil stream) #\:)))
  	   (pseudonym (concatenate 'string pseudlist))
  	   (name (string=-getf-key table pseudonym))
  	   (intern-p (eq 2 (list-length (loop for char = (peek-char nil stream)
  					   while (equal char #\:)
  					   do (read-char stream)
  					   collect char))))
  	   (symbol (read stream)))
        ;;(format t "debug: ~S ~S ~S ~S ~S ~S ~S~%"
        ;;(package-name *package*) pseudlist table name pseudonym symbol intern-p)
        ;;(format t "debug: ~S ~S ~S~%" symbol name intern-p)
        (assert (not (null name)) ()
  	      "Pseudonym ~S was not set. Check your spelling or use defpseudonym."
  	      pseudonym)
        (if (or intern-p (find-symbol (string symbol) name))
  	  (intern (string symbol) name)
  	  (error "Symbol ~S not found in the ~A package."
  		 (string symbol) (string name))))))
  
  ;; todo: named readtables
  ;; todo: customizable macro character?
  ;; DONE: fix : / :: issue
  