;ELC   
;;; Compiled by rms@psilocin.gnu.ai.mit.edu on Mon Aug  4 02:18:30 1997
;;; from file /home/fsf/rms/e19/lisp/progmodes/cpp.el
;;; in Emacs version 20.0.92.8
;;; with bytecomp version 2.33
;;; with all optimizations.
;;; This file uses opcodes which do not exist in Emacs 18.

(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`cpp.el' was compiled for Emacs 19.29 or later"))


(custom-declare-group 'cpp nil "Highlight or hide text according to cpp conditionals." :group 'C :prefix "cpp-")
(custom-declare-variable 'cpp-config-file '(convert-standard-filename ".cpp.el") "*File name to save cpp configuration." :type 'file :group 'cpp)
(custom-declare-variable 'cpp-known-face ''invisible "*Face used for known cpp symbols." :type 'face :group 'cpp)
(custom-declare-variable 'cpp-unknown-face ''highlight "*Face used for unknown cpp symbols." :type 'face :group 'cpp)
(custom-declare-variable 'cpp-face-type ''light "*Indicate what background face type you prefer.\nCan be either light or dark for color screens, mono for monochrome\nscreens, and none if you don't use a window system." :options '(light dark mono nil) :type 'symbol :group 'cpp)
(custom-declare-variable 'cpp-known-writable 't "*Non-nil means you are allowed to modify the known conditionals." :type 'boolean :group 'cpp)
(custom-declare-variable 'cpp-unknown-writable 't "*Non-nil means you are allowed to modify the unknown conditionals." :type 'boolean :group 'cpp)
(custom-declare-variable 'cpp-edit-list 'nil "Alist of cpp macros and information about how they should be displayed.\nEach entry is a list with the following elements:\n0. The name of the macro (a string).\n1. Face used for text that is `ifdef' the macro.\n2. Face used for text that is `ifndef' the macro.\n3. `t', `nil', or `both' depending on what text may be edited." :type '(repeat (list string face face (choice (const t) (const nil) (const both)))) :group 'cpp)
(byte-code "! B!BB" [boundp cpp-overlay-list nil current-load-list make-variable-buffer-local cpp-callback-data cpp-state-stack] 2)
#@61 Alist of strings and names of the defined face collections.
(defconst cpp-face-type-list '(("light color background" . light) ("dark color background" . dark) ("monochrome" . mono) ("tty" . none)) (#$ . 2223))
(byte-code "\nB! \nB! \nB!	\nBŇ" [(("writable" . t) ("read-only")) cpp-writable-list current-load-list boundp cpp-button-event nil cpp-edit-buffer make-variable-buffer-local (("false") ("true" . t) ("both" . both)) cpp-branch-list] 2)
(custom-declare-variable 'cpp-face-default-list 'nil "Alist of faces you can choose from for cpp conditionals.\nEach element has the form (STRING . FACE), where STRING\nserves as a name (for `cpp-highlight-buffer' only)\nand FACE is either a face (a symbol)\nor a cons cell (background-color . COLOR)." :type '(repeat (cons string (choice face (cons (const background-color) string)))) :group 'cpp)
(custom-declare-variable 'cpp-face-light-name-list ''("light gray" "light blue" "light cyan" "light yellow" "light pink" "pale green" "beige" "orange" "magenta" "violet" "medium purple" "turquoise") "Background colours useful with dark foreground colors." :type '(repeat string) :group 'cpp)
(custom-declare-variable 'cpp-face-dark-name-list ''("dim gray" "blue" "cyan" "yellow" "red" "dark green" "brown" "dark orange" "dark khaki" "dark violet" "purple" "dark turquoise") "Background colours useful with light foreground colors." :type '(repeat string) :group 'cpp)
(custom-declare-variable 'cpp-face-light-list 'nil "Alist of names and faces to be used for light backgrounds." :type '(repeat (cons string face)) :group 'cpp)
(custom-declare-variable 'cpp-face-dark-list 'nil "Alist of names and faces to be used for dark backgrounds." :type '(repeat (cons string face)) :group 'cpp)
(custom-declare-variable 'cpp-face-mono-list ''(("bold" . bold) ("bold-italic" . bold-italic) ("italic" . italic) ("underline" . underline)) "Alist of names and faces to be used for monochrome screens." :type '(repeat (cons string face)) :group 'cpp)
(custom-declare-variable 'cpp-face-none-list ''(("default" . default) ("invisible" . invisible)) "Alist of names and faces available even if you don't use a window system." :type '(repeat (cons string face)) :group 'cpp)
#@63 All faces used for highlighting text inside cpp conditionals.
(defvar cpp-face-all-list (append cpp-face-light-list cpp-face-dark-list cpp-face-mono-list cpp-face-none-list) (#$ . 4460))
#@46 List of cpp macros used in the local buffer.
(defvar cpp-parse-symbols nil (#$ . 4653))
(byte-code "!QB" [make-variable-buffer-local cpp-parse-symbols "'\\|\"\\|/\\*\\|//\\|" "\\(^[ 	]*#[ 	]*\\(ifdef\\|ifndef\\|if\\|" "elif\\|else\\|endif\\)\\b\\)" cpp-parse-regexp current-load-list] 3)
#@238 Highlight C code according to preprocessor conditionals.
This command pops up a buffer which you should edit to specify
what kind of highlighting to use, and the criteria for highlighting.
A prefix arg suppresses display of that buffer.
(defalias 'cpp-highlight-buffer #[(arg) "= > !   	eb!#D`eZ_ \"єѕ{ӘQ Ԙ] єb֏@טs #@!@ܘ w@ޔ`Tߔߕ{ޕ`{ !\"#!䘃  #\"$?!昃  #\"$?!瘃  #\"$?!蘃 ĉ)*#\"\"* #\"$?!옃*	!	@@?	@A@#\"F/#\"\"/	B	)?!;#\"\"?!,)( !)	[	@8b!))6h?h " [buffer-invisibility-spec t cpp add-to-invisibility-spec nil cpp-parse-symbols cpp-parse-reset cpp-edit-list cpp-edit-load cpp-state-stack cpp-progress-message "Parsing..." re-search-forward cpp-parse-regexp "Parsing...%d%%" 100 buffer-size 0 match "'" "\"" (forward-sexp) ((error (cpp-parse-error "Unterminated string or character"))) "/*" search-forward "*/" error "Unterminated comment" "//" "^\n" 1 2 expr type to from "ifdef" cpp-parse-open "ifndef" "if" "elif" cpp-unknown-face cpp-known-face cpp-parse-close "else" cpp-parse-error "Top level #else" entry "endif" "Parser error" message "Parsing...done" 3 "Unclosed conditional" arg cpp-parse-edit] 6 (#$ . 4962) "P"])
#@70 Push information about conditional-beginning onto `cpp-state-stack'.
(defalias 'cpp-parse-open #[(branch expr begin end) "\n\" \nÉO\nÕOP  \n\"# \nÉO\n\"0 \nÉO\n\"F \nÉO\nÕOP0 \n	\nFB\n\f` \n\fB\f\n\"o 	\n\"	\n\"" [string-match "\\b[ 	]*/\\*.*\\*/[ 	]*\\b" expr 0 nil "\\b[ 	]*/\\*" "\\b[ 	]*\\(//.*\\)?$" "[ 	]+" branch begin end cpp-state-stack cpp-parse-symbols assoc cpp-edit-list cpp-make-known-overlay cpp-make-unknown-overlay] 4 (#$ . 6298)])
(defalias 'cpp-parse-close #[(from to) "	@A@\n\"	@@	@8	@8	A * ɂ+ 8?8=	G\"\f\"\fB` \f#=o \f!~ =~ \f# \f! \f!, \"," [assoc cpp-state-stack cpp-edit-list 2 3 end begin branch entry 1 make-overlay from overlay priority read-only face cpp-make-known-overlay to cpp-overlay-list overlay-put invisible cpp-make-overlay-hidden default cpp-make-overlay-read-only cpp-make-overlay-sticky cpp-make-unknown-overlay] 6])
(defalias 'cpp-parse-error #[(error) "e`\"#" [error "%s at line %d" count-lines] 6])
#@46 Reset display of cpp conditionals to normal.
(defalias 'cpp-parse-reset #[nil " @!A " [cpp-overlay-list delete-overlay nil] 3 (#$ . 7401) nil])
#@48 Edit display information for cpp conditionals.
(defalias 'cpp-parse-edit #[nil " !p!  )" [cpp-parse-symbols cpp-highlight-buffer t buffer pop-to-buffer "*CPP Edit*" cpp-edit-mode cpp-edit-buffer cpp-edit-reset] 2 (#$ . 7564) nil])
(defalias 'cpp-make-known-overlay #[(start end) "	\n\"\f= !/ \f= \f#\n/ ##B)" [make-overlay start end overlay cpp-known-face invisible cpp-make-overlay-hidden default overlay-put face cpp-known-writable modification-hooks (cpp-signal-read-only) insert-in-front-hooks (cpp-signal-read-only) cpp-overlay-list] 4])
(defalias 'cpp-make-unknown-overlay #[(start end) "	\n\"\f= ! \f= \f#\n/ ##B)" [make-overlay start end overlay cpp-unknown-face invisible cpp-make-overlay-hidden default overlay-put face cpp-unknown-writable modification-hooks (cpp-signal-read-only) insert-in-front-hooks (cpp-signal-read-only) cpp-overlay-list] 4])
(defalias 'cpp-make-overlay-hidden #[(overlay) "	#	#	#	#" [overlay-put overlay invisible cpp intangible t modification-hooks (cpp-signal-read-only) insert-in-front-hooks (cpp-signal-read-only)] 4])
(defalias 'cpp-make-overlay-read-only #[(overlay) "	#	#	#" [overlay-put overlay modification-hooks (cpp-signal-read-only) insert-in-front-hooks (cpp-signal-read-only) insert-behind-hooks (cpp-signal-read-only)] 4])
(defalias 'cpp-make-overlay-sticky #[(overlay) "	#	#" [overlay-put overlay insert-in-front-hooks (cpp-grow-overlay) insert-behind-hooks (cpp-grow-overlay)] 4])
(defalias 'cpp-signal-read-only #[(overlay after start end &optional len) "? \n!W \n!V !" [after overlay-start overlay start overlay-end end error "This text is read only"] 2])
(defalias 'cpp-grow-overlay #[(overlay after start end &optional len) " \n\n!^\n!]#" [after move-overlay overlay start overlay-start end overlay-end] 6])
(byte-code "! B	  	!	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#	#! :B!" [boundp cpp-edit-map nil current-load-list make-keymap suppress-keymap define-key [down-mouse-2] cpp-push-button [mouse-2] ignore " " scroll-up "" scroll-down [delete] "" cpp-edit-apply "a" "A" "r" cpp-edit-reset "R" "s" cpp-edit-save "S" "l" cpp-edit-load "L" "h" cpp-edit-home "H" "b" cpp-edit-background "B" "k" cpp-edit-known "K" "u" cpp-edit-unknown "t" cpp-edit-true "T" "f" cpp-edit-false "F" "w" cpp-edit-write "W" "X" cpp-edit-toggle-known "x" "Y" cpp-edit-toggle-unknown "y" "q" bury-buffer "Q" cpp-edit-symbols make-variable-buffer-local] 4)
#@178 Major mode for editing the criteria for highlighting cpp conditionals.
Click on objects to change them.  
You can also use the keyboard accelerators indicated like this: [K]ey.
(defalias 'cpp-edit-mode #[nil "  !	!" [kill-all-local-variables buffer-disable-undo auto-save-mode -1 t buffer-read-only cpp-edit-mode major-mode "CPP Edit" mode-name use-local-map cpp-edit-map] 2 (#$ . 10296)])
#@54 Apply edited display information to original buffer.
(defalias 'cpp-edit-apply #[nil " !" [cpp-edit-home cpp-highlight-buffer t] 2 (#$ . 10710) nil])
#@49 Reset display information from original buffer.
(defalias 'cpp-edit-reset #[nil "p `qq\n	 c!\"ѱ\"c\"c\"c\"cc\"@\"c#!$c'(\"@\"c+!$c.(\"@\"%c\nf\n@668\"9A@:98<9 98 ?\nA9 : :@ = < <@ = ?= A 98\"896GB V6C B OD \"E 6\"c:!F 6G %H c<!I 6G %H c?J\"@K 6L %c- cM \f\"b-" [nil window-start symbols pos start buffer-read-only buffer cpp-edit-buffer cpp-parse-symbols cpp-edit-symbols erase-buffer "CPP Display Information for `" cpp-make-button buffer-name cpp-edit-home "'\n\nClick mouse-2 on item you want to change or use\n" "or switch to this buffer and type the keyboard equivalents.\n" "Keyboard equivalents are indicated with brackets like [T]his.\n\n" "[H]ome (display the C file)" "  " "[A]pply new settings" cpp-edit-apply "\n" "[S]ave settings" cpp-edit-save "[L]oad settings" cpp-edit-load "\n\n" "[B]ackground: " rassq cpp-face-type cpp-face-type-list cpp-edit-background "\n[K]nown conditionals: " cpp-face-name cpp-known-face cpp-edit-known t " [X] " cpp-known-writable cpp-writable-list cpp-edit-toggle-known "\n[U]nknown conditionals: " cpp-unknown-face cpp-edit-unknown " [Y] " cpp-unknown-writable cpp-edit-toggle-unknown format "\n\n\n%39s: %14s %14s %7s\n\n" "Expression" "[T]rue Face" "[F]alse Face" "[W]rite" symbol assoc cpp-edit-list entry true 2 false 3 both write default delq 39 0 ": " "%39s: " cpp-edit-true 14 " " cpp-edit-false cpp-branch-list cpp-edit-write 6 set-window-start] 7 (#$ . 10871) nil])
#@25 Load cpp configuration.
(defalias 'cpp-edit-load #[nil " \n! \n! \nP! \n!=%  " [init-file-user file-readable-p cpp-config-file load-file "~/" major-mode cpp-edit-mode cpp-edit-reset] 3 (#$ . 12512) nil])
#@47 Save the current cpp configuration in a file.
(defalias 'cpp-edit-save #[nil "!\nq\f!q DE\"\nDE\"DE\"\fDE\"DE\"DE\"\f!*" [require pp cpp-edit-buffer find-file-noselect cpp-config-file buffer erase-buffer setq cpp-known-face quote cpp-unknown-face cpp-face-type cpp-known-writable cpp-unknown-writable cpp-edit-list write-file] 6 (#$ . 12743) nil])
#@33 Switch back to original buffer.
(defalias 'cpp-edit-home #[nil "  !" [cpp-button-event read-event pop-to-buffer cpp-edit-buffer] 2 (#$ . 13156) nil])
#@33 Change default face collection.
(defalias 'cpp-edit-background #[nil "! " [call-interactively cpp-choose-default-face cpp-edit-reset] 2 (#$ . 13320) nil])
#@40 Select default for known conditionals.
(defalias 'cpp-edit-known #[nil "\n\" " [cpp-choose-face "Known face" cpp-known-face cpp-edit-reset] 3 (#$ . 13486) nil])
#@42 Select default for unknown conditionals.
(defalias 'cpp-edit-unknown #[nil "\n\" " [cpp-choose-face "Unknown face" cpp-unknown-face cpp-edit-reset] 3 (#$ . 13658) nil])
#@116 Toggle writable status for known conditionals.
With optional argument ARG, make them writable iff ARG is positive.
(defalias 'cpp-edit-toggle-known #[(arg) " 	 !X   " [arg cpp-known-writable prefix-numeric-value 0 nil t cpp-edit-reset] 2 (#$ . 13839) "@P"])
#@118 Toggle writable status for unknown conditionals.
With optional argument ARG, make them writable iff ARG is positive.
(defalias 'cpp-edit-toggle-unknown #[(arg) " 	 !X   " [arg cpp-unknown-writable prefix-numeric-value 0 nil t cpp-edit-reset] 2 (#$ . 14122) "@P"])
#@69 Select SYMBOL's true FACE used for highlighting taken conditionals.
(defalias 'cpp-edit-true #[(symbol face) "	!A\n " [cpp-edit-list-entry-get-or-create symbol face cpp-edit-reset] 2 (#$ . 14410) (let ((symbol (cpp-choose-symbol))) (list symbol (cpp-choose-face "True face" (nth 1 (assoc symbol cpp-edit-list)))))])
#@72 Select SYMBOL's false FACE used for highlighting untaken conditionals.
(defalias 'cpp-edit-false #[(symbol face) "	!AA\n " [cpp-edit-list-entry-get-or-create symbol face cpp-edit-reset] 2 (#$ . 14737) (let ((symbol (cpp-choose-symbol))) (list symbol (cpp-choose-face "False face" (nth 2 (assoc symbol cpp-edit-list)))))])
#@130 Set which branches of SYMBOL should be writable to BRANCH.
BRANCH should be either nil (false branch), t (true branch) or 'both.
(defalias 'cpp-edit-write #[(symbol branch) "\n! " [3 cpp-edit-list-entry-get-or-create symbol branch cpp-edit-reset] 3 (#$ . 15071) (list (cpp-choose-symbol) (cpp-choose-branch))])
(defalias 'cpp-edit-list-entry-get-or-create #[(symbol) "	\n\" 	ĉį\nB)" [assoc symbol cpp-edit-list entry nil both] 6])
(defalias 'cpp-choose-symbol #[nil " 	\"$" [cpp-button-event cpp-callback-data completing-read "Symbol: " mapcar list cpp-edit-symbols nil t] 5])
(defalias 'cpp-choose-branch #[nil " BD\"$\"A" [cpp-button-event x-popup-menu "Branch" cpp-branch-list assoc completing-read "Branch: " nil t] 6])
(defalias 'cpp-choose-face #[(prompt default) " \nBD\"2 \"@& \nR) \nP$\"A)6 " [cpp-button-event x-popup-menu prompt cpp-face-default-list rassq default name assoc completing-read " (default " "): " ": " nil t cpp-face-all-list] 6])
(defalias 'cpp-choose-default-face #[(type) "?i =' \n \"\n\"\n	\"\n=N \fA \"\f\f\"\f	\"\n=a 	\"\n	\n" [type light cpp-face-light-list mapcar cpp-create-bg-face cpp-face-light-name-list append cpp-face-all-list cpp-face-type cpp-face-none-list cpp-face-default-list dark cpp-face-dark-list cpp-face-dark-name-list mono cpp-face-mono-list none] 3 nil (list (if cpp-button-event (x-popup-menu cpp-button-event (list "Screen type" (cons "Screen type" cpp-face-type-list))) (cdr (assoc (completing-read "Screen type: " cpp-face-type-list nil t) cpp-face-type-list))))])
(defalias 'cpp-make-button #[(name callback &optional data face padding) "\n\"É `\nc9 \nGV* `\nOc9 \nGZ\"c`\nc`\nX \n\f\"A>R ςT )Y \n\f\nDDq D$#+" [format "%s" name nil to from padding 0 make-string 32 face assoc cpp-face-all-list check (default invisible) bold add-text-properties append (mouse-face highlight) cpp-callback callback data cpp-data] 10])
(defalias 'cpp-push-button #[(event) "	A@)@)!q	A@)A@:# \nA@@& \nA@)\"\"		E \"!T \f\"T \f\"!," [window-buffer event position pos get-text-property cpp-data cpp-callback cpp-button-event fun cpp-callback-data call-interactively lookup-key global-map [down-mouse-2] [down-mouse-2]] 5 nil "@e"])
(defalias 'cpp-create-bg-face #[(color) "BB" [color background-color] 3])
(byte-code "		 \n\n !" [cpp-choose-default-face window-system cpp-face-type none] 2)
(defalias 'cpp-face-name #[(face) "		 	\n \" \f@ 	\")" [rassq face default cpp-face-all-list entry format "<%s>"] 4])
(byte-code "! B" [boundp cpp-progress-time 0 current-load-list] 2)
(defalias 'cpp-progress-message #[(&rest args) " A@\nU? 	\")" [current-time time cpp-progress-time apply message args] 4])
(provide 'cpp)
