;;; GNU Emacs code converted from Mocklisp
(require 'mlsupport)

(ml-defun (ml-foo 
 (setq-default latex-italics-toggle 0)))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default latex-quotes-toggle 0)))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default latex-bold-toggle 0)))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default latex-ref-toggle 0)))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default latex-subscript-toggle 0)))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default latex-alltt-toggle 0)))

(ml-foo)



(ml-defun (ml-foo 
 (setq-default enum-item-spacing "\n")))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default enuming 0)))

(ml-foo)

(ml-defun (ml-foo 
 			;are we enuming or listing?
(setq-default in-latex-list-toggle 0)))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default in-latex-enum-toggle 0)))

(ml-foo)



(ml-defun 
    (begin/end-latex-italics
	(ml-if (toggle-var "latex-italics-toggle")
	    (insert-string (concat "{" double-backslash "it "))
	    (insert-string (concat "}"))
	)
    )
)

(ml-defun 
    (begin/end-latex-quotes
	(ml-if (toggle-var "latex-quotes-toggle")
	    (insert-string "``")
	    (insert-string "''")
	)
    )
)

(ml-defun
    (begin/end-latex-bold
	(ml-if (toggle-var "latex-bold-toggle")
	    (insert-string
		(concat "{" double-backslash
			"bf "))
	    (insert-string
		(concat "}"))
	)
    )
)

(ml-defun
    (begin/end-latex-ref
	(ml-if (toggle-var "latex-ref-toggle")
	    (insert-string "{" double-backslash "cite ")
	    (insert-string "}")
	)
    )
)

(ml-defun 
    (begin/end-latex-subscript
	(ml-if (toggle-var "latex-subscript-toggle")
	    (insert-string (concat double-backslash "*<"))
	    (insert-string (concat double-backslash "*>"))
	)
    )
)

(ml-defun 
    (insert-bullet-item 
	(insert-string 
	    (concat "\n"
		    (int-to-string enum-item-spacing)
		    "\n" double-backslash "item\n"
	    )
	)
    )
)

(ml-defun 
    (check-match-of-latex-font-changes
	(while t
	       (ml-if (error-occured
		       (ml-re-search-forward "\\fB\\|\\fI"))
		   (progn   
		       (beginning-of-buffer)
		       (error "Font changes match OK")
		   )
	       )
	       (ml-search-forward "\\f")
	       (ml-if (/= (following-char) ?P)
		   (error "Font change mismatch")
	       )
	)
    )
)

(ml-defun (ml-foo 
 (setq-default list-item-spacing 3)))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default enum-item-spacing 3)))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default list-item (concat double-backslash "item\n"))))

(ml-foo)


(ml-defun (ml-foo 
 (setq-default enum-item (concat double-backslash "item\n"))))

(ml-foo)



(ml-defun 
    (set-list-item-spacing
	(setq list-item-spacing (ml-arg 1 "list item spacing: "))
	(setq enum-item-spacing list-item-spacing)
	;(setq list-item (concat ".sp ." (int-to-string list-item-spacing) "v\nlist\n"))
	;(setq enum-item (concat ".sp ." (int-to-string enum-item-spacing) "v\nenum\n"))
	(novalue)
    )
)

(ml-defun 
    (insert-list-item
	(ml-if prefix-argument-provided
	    (set-list-item-spacing ml-prefix-arg)
	)
	(insert-string
	    (ml-if enuming
		enum-item
		list-item
	    )
	)
    )
)

	    
(ml-defun 
    (le-abbrev-hook
	(beginning-of-line)
	(insert-string (concat ".sp "
			       (int-to-string list-item-spacing) "v\nlist"))
	;(next-line) (next-line)
    )
)

(ml-defun 
    (Es
       (setq enuming 1)
       (ml-if prefix-argument-provided
	   (set-list-item-spacing ml-prefix-arg)
       )
       (local-bind-to-key "insert-list-item" "\^l")
       (insert-string
	   (concat double-backslash "\BeginEnum{"
		   (int-to-string enum-item-spacing) "}"
		   enum-item
	   )
       )
       (novalue)
    )
)
(ml-defun 
    (Ee
       (insert-string (concat double-backslash "EndEnum\n"))
       (local-unset-key "\^l")
       (novalue)
    )
)

(ml-defun 
    (Ls
       (setq enuming 0)			;i.e., we?r listing now
       (ml-if prefix-argument-provided
	   (set-list-item-spacing ml-prefix-arg)
       )
       (local-bind-to-key "insert-list-item" "\^l")
       (insert-string
	   (concat ".(l F\n.(L 1\n"
		   list-item
	   )
       )
       (novalue)
    )
)
(ml-defun 
    (Le
       (insert-string ".)L 1\n.)l F\n")
       (local-unset-key "\^l")
       (novalue)
    )
)

(ml-defun 
    (begin/end-latex-list
	(ml-if (toggle-var "in-latex-list-toggle")
	    (Ls)
	    (Le)
	)
    )
)

(ml-defun 
    (begin/end-latex-enum
	(ml-if (toggle-var "in-latex-enum-toggle")
	    (Es)
	    (Ee)
	)
    )
)

(ml-defun
    (insert-latex-list-template af
	(setq enuming 0)			;i.e., we`re listing now
	(ml-if prefix-argument-provided
	    (progn   
		(setq af (ml-arg 1 "Type of list (I, A, 1, a, i): "))
		(ml-if (/= ml-prefix-arg 0)
		    (set-list-item-spacing ml-prefix-arg)
		)
	    )
	    (setq af "1")
	)
	(insert-string 
	    double-backslash "BeginList" af "{0." list-item-spacing "}\n"
	    list-item
	    "\n"
	    double-backslash "EndList\n"
	)
	(ml-previous-line) (ml-previous-line)
	(local-bind-to-key "insert-list-item" "\^l")
    )
)

;The following doesnt work currently due to some misunderstanding of and/or
;bug in gosmacs lisp parm passing.
(ml-defun 
    (insert-indented-latex-list-template-bogus af
	(insert-string ".(l F\n")
	(ml-if prefix-argument-provided
	    (ml-provide-prefix-argument ml-prefix-arg
		(insert-latex-list-template af))
	    (insert-latex-list-template af)
	)
	(ml-next-line) (ml-next-line)
	(insert-string ".)l F\n")
	(ml-previous-line) (ml-previous-line) (ml-previous-line)
    )
)

(ml-defun
    (insert-indented-latex-list-template af
	(setq enuming 0)			;i.e., we`re listing now
	(ml-if prefix-argument-provided
	    (progn   
		(setq af (ml-arg 1 "Type of list (I, A, 1, a, i): "))
		(ml-if (/= ml-prefix-arg 0)
		    (set-list-item-spacing ml-prefix-arg)
		)
	    )
	    (setq af "1")
	)
	(insert-string)
	(insert-string ".(l F\n")
	(insert-string 
	    ".(L " af "\n"
	    list-item
	    "\n"
	    ".)L " af "\n"
	)
	(insert-string ".)l F\n")
	(ml-previous-line) (ml-previous-line) (ml-previous-line)
	(local-bind-to-key "insert-list-item" "\^l")
    )
)

(ml-defun 
    (insert-latex-enum-template af
	(setq enuming 1)
	(insert-string 
	    double-backslash "BeginEnum" "{0." enum-item-spacing "}\n"
	    ;double-backslash "BeginEnum\n"
	    enum-item
	    "\n"
	    double-backslash "EndEnum\n"
	)
	(ml-previous-line) (ml-previous-line)
	(local-bind-to-key "insert-list-item" "\^l")
    )
)

(ml-defun 
    (insert-indented-latex-enum-template af
	(insert-string ".(l F\n")
	(insert-latex-enum-template)
	(ml-next-line) (ml-next-line)
	(insert-string ".)l F\n")
	(ml-previous-line) (ml-previous-line) (ml-previous-line)
    )
)

(ml-defun 
    (insert-latex-alltt-template
	(insert-string 
	    double-backslash "begin{alltt}"
	    "\n"
	    double-backslash "end{alltt}\n"
	)
	(ml-previous-line) (ml-previous-line)
    )
)

(ml-defun 
    (insert-latex-section s
	(ml-if prefix-argument-provided
	    (setq s ml-prefix-arg)
	    (setq s 1)
	)
	(ml-if (= s 1)
	    (insert-string double-backslash "section{}")
	    (ml-if (= s 2)
		(insert-string double-backslash "subsection{}")
		(ml-if (= s 3)
		    (insert-string double-backslash "subsubsection{}")
		    (ml-if (= s 4)
			(insert-string double-backslash "paragraph{}\medskip")
		    )
		)
	    )
	)
	(insert-string double-backslash "indent")
	(ml-provide-prefix-argument 8 (backward-character))
    )
)

(ml-defun 
    (insert-latex-center-template
	(insert-string 
	    double-backslash "begin{center}\n"
	    "\n"
	    double-backslash "end{center}\n"
	)
	(ml-previous-line) (ml-previous-line)
    )
)

(ml-defun 
    (insert-latex-verbatim-template
	(insert-string 
	    double-backslash "begin{verbatim}\n"
	    "\n"
	    double-backslash "end{verbatim}\n"
	)
	(ml-previous-line) (ml-previous-line)
    )
)