
(provide (quote symbol))

(defvar sym-completion-buffer nil "\
Buffer containing user-entered symbols for identifier completion.")

(make-variable-buffer-local (quote sym-completion-buffer))

(defvar sym-end-display "<<" "\
*Display marker after string to be created in symbol mode.")

(defvar sym-end-marker (make-marker) "\
Marker at end of symbol.")

(make-variable-buffer-local (quote sym-end-marker))

(setq-default sym-end-marker (make-marker))

(defvar sym-original nil "\
Text string originally present, to be replaced in symbol-mode.")

(make-variable-buffer-local (quote sym-original))

(defvar sym-start-display ">>" "\
*Display marker before string to be created in symbol mode.")

(defvar sym-start nil "\
Position of start of symbol in buffer.")

(make-variable-buffer-local (quote sym-start))

(defvar symbol-mode-map nil "\
Key-map for Symbol Mode.")

(defun symbol-mode nil "\
Major mode for inserting symbols in place.  Like any other mode,
    except that newline terminates it, and the following commands
    are available:
      TAB  attempt to complete last identifier typed
    Meant to be called from sym-read-string, which initializes." (interactive) (byte-code "È  !Ɖǉ(" [symbol-mode-map major-mode mode-name nil sym-set-local-keys use-local-map symbol-mode "Symbol"] 4))

(defun add-symbol nil "\
Add the symbol before point to the template-mode completion list." (interactive) (byte-code "!`!`\"!)" [start nil forward-word -1 1 sym-enter-id buffer-substring] 6))

(defun expand-symbol nil "\
Expand the symbol before point using the template-mode completion list." (interactive) (byte-code "!`!`\"!!	!*" [start result nil forward-word -1 1 sym-complete-id buffer-substring backward-kill-word insert-before-markers] 7))

(defun sym-abort-recursive-edit nil "\
Catch abort and repair entry." (interactive) (byte-code " 	!W 	!\"  (" [sym-start sym-end-marker nil sym-reposition-point marker-position delete-region sym-reset-display abort-recursive-edit] 7))

(defun sym-backward-char nil "\
Move point left one character, if possible." (interactive) (byte-code " `V !  (" [sym-start nil sym-reposition-point backward-char 1 ding] 4))

(defun sym-backward-kill-word nil "\
Delete the previous word in symbol-mode." (interactive) (byte-code " `V !   (" [sym-start nil sym-reposition-point backward-kill-word 1 sym-reset-display ding] 5))

(defun sym-backward-word nil "\
Move point left one word, if possible." (interactive) (byte-code " `V !  (" [sym-start nil sym-reposition-point backward-word 1 ding] 4))

(defun sym-complete-id (string) "\
Expand the identifier STRING using the completion table." (byte-code "
\" qeb
Pd#.  ` `\"	q!!
*" [start text-buffer string sym-completion-buffer t nil message "Expanding %s..." buffer-name re-search-forward "^" beginning-of-line end-of-line buffer-substring bury-buffer "Expanding done."] 9))

(defun sym-create-display nil "\
Create the displayed string (if necessary) in symbol-mode." (byte-code "	!U! 
G!!!!	`\"`(" [sym-start sym-end-marker sym-original sym-start-display sym-end-display marker-position delete-char insert-before-markers search-backward set-marker] 8))

(defun sym-delete-backward-char nil "\
Delete the previous character created in symbol-mode." (interactive) (byte-code " `V !   (" [sym-start nil sym-reposition-point delete-backward-char 1 sym-reset-display ding] 5))

(defun sym-delete-char nil "\
Delete the following character created in symbol-mode." (interactive) (byte-code " `!W !   (" [sym-end-marker nil sym-reposition-point marker-position delete-char 1 sym-reset-display ding] 6))

(defun sym-enter-id (string) "\
Enter STRING into the identifier completion table." (interactive) (byte-code "Ȉ\" q `!`\"ʉ		< \"k m?[ !`!`\"g ȉ	o?g  3 	 \"? !\" cq!\"-" [text-buffer prefix suffix found end-line string sym-completion-buffer start nil more t message "Adding %s..." buffer-name beginning-of-buffer end-of-line buffer-substring string-lessp beginning-of-line 2 newline string-equal insert "
" bury-buffer "Adding Done."] 17))

(defun sym-expand-last-id nil "\
Try to expand last identifier created in symbol-mode." (interactive) (byte-code "È `
VI `!`W  !`
W) 
b`\"	GVF 	G!	!	!K  *" [end-id string sym-start nil sym-reposition-point re-search-backward "\\W" forward-char 1 buffer-substring 0 delete-char sym-complete-id insert-before-markers ding] 9))

(defun sym-forward-char nil "\
Move point right one character, if possible." (interactive) (byte-code " `!W !  (" [sym-end-marker nil sym-reposition-point marker-position forward-char 1 ding] 5))

(defun sym-forward-word nil "\
Move point right one word, if possible." (interactive) (byte-code " `!W !  (" [sym-end-marker nil sym-reposition-point marker-position forward-word 1 ding] 5))

(defun sym-illegal-command nil "\
Catch all illegal symbol-mode commands." (interactive) (byte-code " !(" [nil ding message "That command is not allowed in symbol-mode."] 3))

(defun sym-kill-line nil "\
Kill the current symbol line in symbol-mode" (interactive) (byte-code " `!W `!\"   (" [sym-end-marker nil sym-reposition-point marker-position delete-region sym-reset-display ding] 7))

(defun sym-kill-word nil "\
Delete the following word in symbol-mode." (interactive) (byte-code " `!W !   (" [sym-end-marker nil sym-reposition-point marker-position kill-word 1 sym-reset-display ding] 6))

(defun sym-position-end nil "\
Position point at end of symbol line." (interactive) (byte-code "!b(" [sym-end-marker nil marker-position] 2))

(defun sym-position-start nil "\
Position point at start of symbol line." (interactive) (byte-code "b(" [sym-start nil] 1))

(defun sym-read-string (prompt original) "\
Read characters and insert them at point.  First arg PROMPT is a
    message to prompt the user.  Second arg ORIGINAL is an initial
    string to use if all input is deleted." (byte-code "` `\"	
  \"׎̉?t  !\" !` m \"p ΉC )-" [save-mode save-name save-keymap sym-input sym-valid-response sym-start sym-end-marker sym-original original major-mode mode-name prompt nil sym-check-validity-hook t sym-start-display sym-end-display make-marker set-marker current-local-map symbol-mode message "%s" ((byte-code "	!W b
G!	!bG!!" [sym-start sym-end-marker sym-start-display sym-end-display major-mode save-mode mode-name save-name save-keymap marker-position delete-backward-char delete-char use-local-map] 6)) recursive-edit buffer-substring marker-position sym-reposition-point boundp funcall] 14))

(defun sym-reposition-point nil "\
Reposition point within the symbol line, if necessary." (interactive) (byte-code "`W `	!V 	!b(" [sym-start sym-end-marker nil marker-position] 3))

(defun sym-reset-display nil "\
Reset the displayed string in symbol-mode." (byte-code "	!U\" 
G!G!!!	`\"`(" [sym-start sym-end-marker sym-start-display sym-end-display sym-original marker-position delete-backward-char delete-char insert-before-markers search-backward set-marker] 8))

(defun sym-self-insert-command nil "\
Insert this character in symbol-mode." (interactive) (byte-code "È	!  !	!U 
\"  )" [sym-char last-input-char blink-matching-paren nil char-to-string sym-reposition-point sym-create-display insert-before-markers 41 char-syntax blink-matching-open] 7))

(defun sym-set-local-keys nil "\
Create key-map for Symbol Mode." (byte-code " 	\"	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	@ #	A #	B #	C D #	E #	F #	G #	H #	I #	J #	K #	L #	M #	N O #	P Q #	R Q #	S Q #	T Q #	U Q #	V Q #	W Q #	X Q #	Y Q #	Z Q #	[ Q #	\\ Q #	] Q #	^ Q #	_ Q #	` Q #	a Q #	b Q #	c Q #	d Q #	e Q #	f Q #	g Q #	h Q #	i Q #	j Q #	k Q #	l Q #	m Q #	n Q #	o Q #	p Q #	q Q #	r Q #	s Q #	t Q #	u Q #	v Q #	w Q #	x Q #	y Q #	z Q #	{ Q #	| Q #	} Q #	~ Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #	 Q #)" [empty-keymap symbol-mode-map t nil make-keymap suppress-keymap define-key "" sym-delete-backward-char "" sym-position-start "" sym-backward-char "" sym-delete-char "" sym-position-end "" sym-forward-char "" sym-abort-recursive-edit "	" sym-expand-last-id "
" exit-recursive-edit "" sym-kill-line "" "" sym-illegal-command "" "" "" "" sym-transpose-chars "" "" "" "	" "" "" "" "" "g" "i" "k" "" "" sym-backward-word "" "" sym-forward-word "" "" "" "" "" "" " " "%" "(" ")" ";" "<" ">" "^" "b" "d" sym-kill-word "f" "g" "i" "j" "k" "q" "t" "y" "z" "" sym-backward-kill-word " " sym-self-insert-command "!" "\"" "#" "$" "%" "&" "'" "(" ")" "*" "+" "," "-" "." "/" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" ":" ";" "<" "=" ">" "?" "@" "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "[" "\\" "]" "^" "_" "`" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "{" "|" "}" "~"] 157))

(defun sym-transpose-chars nil "\
Interchange characters arond point, moving forward one character.
    If at end of symbol line, the previous two characters are exchanged." (interactive) (byte-code "È `	V< `
!W !9 `	TV7 
!!!
\"9  >  )" [save-position sym-start sym-end-marker nil sym-reposition-point marker-position transpose-chars 1 backward-char set-marker ding] 10))
