+ Qcomposition_function_table = intern ("composition-function-table");
+ staticpro (&Qcomposition_function_table);
+
+ /* Intern this now in case it isn't already done.
+ Setting this variable twice is harmless.
+ But don't staticpro it here--that is done in alloc.c. */
+ Qchar_table_extra_slots = intern ("char-table-extra-slots");
+
+ Fput (Qcomposition_function_table, Qchar_table_extra_slots, make_number (0));
+
+ DEFVAR_LISP ("composition-function-table", &Vcomposition_function_table,
+ doc: /* Char table of patterns and functions to make a composition.
+
+Each element is nil or an alist of PATTERNs vs FUNCs, where PATTERNs
+are regular expressions and FUNCs are functions. FUNC is responsible
+for composing text matching the corresponding PATTERN. FUNC is called
+with three arguments FROM, TO, and PATTERN. See the function
+`compose-chars-after' for more detail.
+
+This table is looked up by the first character of a composition when
+the composition gets invalid after a change in a buffer. */);
+ Vcomposition_function_table
+ = Fmake_char_table (Qcomposition_function_table, Qnil);
+