;ELC   
;;; Compiled
;;; in Emacs version 29.4
;;; with all optimizations.


#@65 Construct a mode-hook name based on the symbol MODE.

(fn MODE)
(defalias 'derived-mode-hook-name #[257 "\300\301!\302P!\207" [intern symbol-name "-hook"] 4 (#$ . 83)])
(byte-code "\300\301\302\303#\304\301\305\306#\207" [function-put derived-mode-hook-name speed -1 put byte-optimizer byte-compile-inline-expand] 5)#@59 Construct a map name based on the symbol MODE.

(fn MODE)
(defalias 'derived-mode-map-name #[257 "\300\301!\302P!\207" [intern symbol-name "-map"] 4 (#$ . 406)])
(byte-code "\300\301\302\303#\304\301\305\306#\207" [function-put derived-mode-map-name speed -1 put byte-optimizer byte-compile-inline-expand] 5)#@68 Construct a syntax-table name based on the symbol MODE.

(fn MODE)
(defalias 'derived-mode-syntax-table-name #[257 "\300\301!\302P!\207" [intern symbol-name "-syntax-table"] 4 (#$ . 721)])
(byte-code "\300\301\302\303#\304\301\305\306#\207" [function-put derived-mode-syntax-table-name speed -1 put byte-optimizer byte-compile-inline-expand] 5)#@69 Construct an abbrev-table name based on the symbol MODE.

(fn MODE)
(defalias 'derived-mode-abbrev-table-name #[257 "\300\301!\302P!\207" [intern symbol-name "-abbrev-table"] 4 (#$ . 1072)])
(byte-code "\300\301\302\303#\304\301\305\306#\207" [function-put derived-mode-abbrev-table-name speed -1 put byte-optimizer byte-compile-inline-expand] 5)#@2609 Create a new mode CHILD which is a variant of an existing mode PARENT.

The arguments are as follows:

CHILD:     the name of the command for the derived mode.
PARENT:    the name of the command for the parent mode (e.g. `text-mode')
           or nil if there is no parent.
NAME:      a string that will appear in the mode line (e.g. "HTML")
DOCSTRING: an optional documentation string--if you do not supply one,
           the function will attempt to invent something useful.
KEYWORD-ARGS:
           optional arguments in the form of pairs of keyword and value.
           The following keyword arguments are currently supported:

           :group GROUP
                   Declare the customization group that corresponds
                   to this mode.  The command `customize-mode' uses this.
           :syntax-table TABLE
                   Use TABLE instead of the default (CHILD-syntax-table).
                   A nil value means to simply use the same syntax-table
                   as the parent.
           :abbrev-table TABLE
                   Use TABLE instead of the default (CHILD-abbrev-table).
                   A nil value means to simply use the same abbrev-table
                   as the parent.
           :after-hook FORM
                   A single Lisp form which is evaluated after the mode
                   hooks have been run.  It should not be quoted.
           :interactive BOOLEAN
                   Whether the derived mode should be `interactive' or not.
                   The default is t.

BODY:      forms to execute just before running the
           hooks for the new mode.  Do not use `interactive' here.

Here is how you could define LaTeX-Thesis mode as a variant of LaTeX mode:

  (define-derived-mode LaTeX-thesis-mode LaTeX-mode "LaTeX-Thesis")

You could then make new key bindings for `LaTeX-thesis-mode-map'
without changing regular LaTeX mode.  In this example, BODY is empty,
and DOCSTRING is generated by default.

As a more complex example, the following command uses `sgml-mode' as
the parent, and then sets the variable `case-fold-search' to nil:

  (define-derived-mode article-mode sgml-mode "Article"
    "Major mode for editing technical articles."
    (setq case-fold-search nil))

Note that if the documentation string had been left out, it would have
been generated automatically, with a reference to the keymap.

The new mode runs the hook named MODE-hook.  For `foo-mode',
the hook will be named `foo-mode-hook'.

See Info node `(elisp)Derived Modes' for more details.

(fn CHILD PARENT NAME [DOCSTRING] [KEYWORD-ARGS...] &rest BODY)
(defalias 'define-derived-mode '(macro . #[1155 "\203 ;\204 B\262\300\262\301=\203 \300\262\302\303!\304P!\262\302\303!\305P!\262\302\303!\306P!\262\307\211	\302\303!\310P!\262\300\307\300\311\n@!\203\255 	\211A\262\242\211\312\267\202\244 \n\211A\262\f\242\262\210\202I \n\211A\262\f\242\262\300\262\210\202I \n\211A\262\f\242\262	\300\262\210\202I \n\211A\262\f\242\266\202\202I \n\211A\262\f\242\262\210\202I \nA\262\210\202I \313%\262\314\315\316BB\317\320\321D\322BB\323\321	D\324\325\326\"FE\317\327\321DD\323\321D\330\321DFE\331\315\332BBD\317\320\321D\333BB\323\321D\334\335\325\336\"DFE\n\205F\314\315D\317\327\321DD\323\321D\337\321DF\315\340BBF\317\320\321D\341BB\323\321D\342\335\325\343\"DFEF\f\205\214\314\315D\317\327\321DD\323\321D\344\321DF\315\314\345\321D\346BBEEF\317\320\321D\347BB\323\321D\350\335\325\351\"DFEF\323\321D\352\321DF\205\245\323\321D\353F\354\300\205\261\355\356\206\270\357C\360\361\321!DE\360\362E\2052\314\363\320\321#D\364BB\323\321%D\365\320\321'D\366BBFE\317\367D\370 \371BBE\205\372\373\374 DDC\317\375\376\"\377BBEE\2050\317\201@ \201A  \201B BB\201C !\201D BBE\201E  \201F BBE\257\201G D\205C\201H D\205O\360\201I E BBBBBBBB\201J \205q\201K \201L \300E\201M BBC\201N \321DDC\"BBBBBB\257\207" [nil fundamental-mode intern symbol-name "-map" "-syntax-table" "-abbrev-table" t "-hook" keywordp #s(hash-table size 5 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (:group 94 :abbrev-table 107 :syntax-table 123 :after-hook 139 :interactive 151)) derived-mode-make-docstring progn defvar (nil) unless get quote ('variable-documentation) put 'variable-documentation format "Hook run after entering %s mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" boundp 'definition-name with-no-warnings ((make-sparse-keymap)) ('variable-documentation) 'variable-documentation purecopy "Keymap for `%s'." 'definition-name ((make-syntax-table)) ('variable-documentation) 'variable-documentation "Syntax table for `%s'." 'definition-name define-abbrev-table (nil) ('variable-documentation) 'variable-documentation "Abbrev table for `%s'." 'derived-mode-parent 'custom-mode-group defun (interactive) delay-mode-hooks kill-all-local-variables setq major-mode mode-name if ('mode-class) 'mode-class ('mode-class) keymap-parent set-keymap-parent ((current-local-map)) let parent char-table-parent (and parent (not (eq parent (standard-syntax-table)))) set-char-table-parent ((syntax-table)) or abbrev-table-get (:parents) eq (local-abbrev-table) abbrev-table-put (:parents (list local-abbrev-table)) use-local-map set-syntax-table local-abbrev-table append push lambda (delayed-after-hook-functions) run-mode-hooks] 43 (#$ . 1427)]))
(byte-code "\300\301\302\303#\210\304\301\305\306#\304\301\307\310#\300\207" [put define-derived-mode edebug-form-spec (&define name symbolp sexp [&optional stringp] [&rest keywordp sexp] def-body) function-put doc-string-elt 4 lisp-indent-function defun] 5)#@112 Construct a docstring for a new mode if none is provided.

(fn PARENT CHILD &optional DOCSTRING SYNTAX ABBREV)
(defalias 'derived-mode-make-docstring #[1282 "\300\301!\302P!\262\300\301!\303P!\262;\204\305 \204M \304\305\306\2039 \307\310	\2032 \311\2023 \312	#\202: \313\203G \307\314\n\"\202H \313$P\202\303 \307\315\203^ \203^ \316\202p \203f \317\202p \203o \320\202p \313\305\321	\203\210 \n\203\210 \307\322#\202\240 	\204\222 \n\203\237 \307\323\206\233 \f\"\202\240 \313#\204\253 \203\257 \313\202\260 \324\f	\204\274 \n\203\300 \324\202\301 \313&\262\325\326\301!!\"\204\327\305\330\n\204\336 \331\202\367 \332\325\307\333\326\301!!\"\"?\205\365 \307\334\"\335Q\307\336\"\337$Q\262\325\340\"\204\341\301!\342R\262\207" [intern symbol-name "-map" "-hook" "Major-mode.\n" internal--format-docstring-line "Uses keymap `%s'%s%s." format "%s abbrev table `%s'" "," " and" "" " and syntax-table `%s'" "Major mode derived from `%s' by `define-derived-mode'.\nIt inherits all of the parent's attributes, but has its own keymap%s:\n\n%s\n\nwhich more-or-less shadow%s %s's corresponding table%s." ",\nabbrev table and syntax table" "\nand abbrev table" "\nand syntax table" "  `%s'%s" ", `%s' and `%s'" " and `%s'" "s" string-match regexp-quote "\n\n" "%s%s%s" "This mode " "In addition to any hooks its parent mode " "[`‘]%s['’]" "`%s' " "might have run, this mode " "runs the hook `%s'" ", as the final or penultimate step during initialization." "\\\\[{[]" "\n\n\\{" "}"] 18 (#$ . 7232)])#@66 Construct a setup-function name based on a MODE name.

(fn MODE)
(defalias 'derived-mode-setup-function-name #[257 "\300\301!\302P!\207" [intern symbol-name "-setup"] 4 (#$ . 8804)])
(byte-code "\300\301\302\303#\210\304\301\305\306#\307\301\310\311#\207" [make-obsolete derived-mode-setup-function-name nil "28.1" function-put speed -1 put byte-optimizer byte-compile-inline-expand] 5)#@218 Initialize variables for a new MODE.
Right now, if they don't already exist, set up a blank keymap, an
empty syntax table, and an empty abbrev table -- these will be merged
the first time the mode is used.

(fn MODE)
(defalias 'derived-mode-init-mode-variables #[257 "\300\301\302!\303P!\262!\2043 \304\305\301\302!\303P!\262\306\307\310\"F!\210\311\301\302!\303P!\262\312\313#\210\300\301\302!\314P!\262!\204f \304\305\301\302!\314P!\262\315\307\316\"F!\210\311\301\302!\314P!\262\312\313#\210\300\301\302!\317P!\262!\203w \313\207\304\305\301\302!\317P!\262\320\321\322\323DD\324BB\325BB\307\326\"F!\207" [boundp intern symbol-name "-map" eval defvar (make-sparse-keymap) format "Keymap for %s." put derived-mode-unmerged t "-syntax-table" (make-char-table 'syntax-table nil) "Syntax table for %s." "-abbrev-table" progn define-abbrev-table derived-mode-abbrev-table-name quote (nil) ((make-abbrev-table)) "Abbrev table for %s."] 9 (#$ . 9198)])#@75 Set the keymap of the new MODE, maybe merging with the parent.

(fn MODE)
(defalias 'derived-mode-set-keymap #[257 "\211\300\301!\302P!\262\303!\304 \211\203 \305N\203 \306\"\210\307\305\310#\210\311!\207" [intern symbol-name "-map" eval current-local-map derived-mode-unmerged derived-mode-merge-keymaps put nil use-local-map] 8 (#$ . 10183)])#@81 Set the syntax table of the new MODE, maybe merging with the parent.

(fn MODE)
(defalias 'derived-mode-set-syntax-table #[257 "\211\300\301!\302P!\262\303 \304!\305N\203 \306\"\210\307\305\310#\210\311!\207" [intern symbol-name "-syntax-table" syntax-table eval derived-mode-unmerged derived-mode-merge-syntax-tables put nil set-syntax-table] 8 (#$ . 10543)])#@125 Set the abbrev table for MODE if it exists.
Always merge its parent into it, since the merge is non-destructive.

(fn MODE)
(defalias 'derived-mode-set-abbrev-table #[257 "\211\301\302!\303P!\262\304!\305\"\210\211\211\207" [local-abbrev-table intern symbol-name "-abbrev-table" eval derived-mode-merge-abbrev-tables] 7 (#$ . 10919)])#@40 Run the mode hook for MODE.

(fn MODE)
(defalias 'derived-mode-run-hooks #[257 "\211\300\301!\302P!\262\303!\205 \304!\207" [intern symbol-name "-hook" boundp run-hooks] 5 (#$ . 11266)])#@153 Merge an OLD keymap into a NEW one.
The old keymap is set to be the last cdr of the new one, so that there will
be automatic inheritance.

(fn OLD NEW)
(defalias 'derived-mode-merge-keymaps #[514 "\211\211:\203k \211@:\203, \300@@!\301\"\301\"\302!\203* \302!\203* \303\"\210\266\304@!\203d \211@GS\211\305Y\203c \300!\301\"\301\"\302!\203Z \302!\203Z \303\"\210\266\211S\262\2027 \210\211A\262\202 \210\211GS\233\241\207" [vector lookup-key keymapp derived-mode-merge-keymaps vectorp 0] 10 (#$ . 11464)])#@135 Merge an OLD syntax table into a NEW one.
Where the new table already has an entry, nothing is copied from the old one.

(fn OLD NEW)
(defalias 'derived-mode-merge-syntax-tables #[514 "\300\"\207" [set-char-table-parent] 5 (#$ . 12003)])#@16 

(fn OLD NEW)
(defalias 'derived-mode-merge-abbrev-tables #[514 "\205 \300\301\302\"\"\207" [mapatoms make-closure #[257 "\301\302!\300\"\206 \303\300\302!JK$\207" [V0 intern-soft symbol-name define-abbrev] 6 "\n\n(fn SYMBOL)"]] 6 (#$ . 12248)])
(provide 'derived)
