1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
|
;;; struktex.el --- AUCTeX style for `struktex.sty'
;; Copyright (C) 2006 Free Software Foundation, Inc.
;; Author: J. Hoffmann <j.hoffmann_(at)_fh-aachen.de>
;; Maintainer: j.hoffmann_(at)_fh-aachen.de
;; Created: 2006/01/17
;; Keywords: tex
;;; Commentary:
;; This file adds support for `struktex.sty'
;;; Code:
(TeX-add-style-hook
"struktex"
(lambda ()
;; Add declaration to the list of environments which have an optional
;; argument for each item.
(add-to-list 'LaTeX-item-list
'("declaration" . LaTeX-item-argument))
(LaTeX-add-environments
"centernss"
'("struktogramm" LaTeX-env-struktogramm)
'("declaration" LaTeX-env-declaration))
(TeX-add-symbols
'("PositionNSS" 1)
'("assert" [ "Height" ] "Assertion")
'("assign" [ "Height" ] "Statement")
"StrukTeX"
'("case" TeX-mac-case)
"switch" "Condition"
"caseend"
'("declarationtitle" "Title")
'("description" "Name" "Meaning")
"emptyset"
'("exit" [ "Height" ] "What" )
'("forever" TeX-mac-forever)
"foreverend"
'("ifthenelse" TeX-mac-ifthenelse)
"change"
"ifend"
'("inparallel" TeX-mac-inparallel)
'("task" "Description")
"inparallelend"
"sProofOn"
"sProofOff"
'("until" TeX-mac-until)
"untilend"
'("while" TeX-mac-while)
"whileend"
'("return" [ "Height" ] "Return value")
'("sub" [ "Height" ] "Task")
'("CenterNssFile" TeX-arg-file)
'("centernssfile" TeX-arg-file))
(TeX-run-style-hooks
"pict2e"
"emlines2"
"curves"
"struktxp"
"struktxf"
"ifthen")
;; Filling
;; Fontification
))
(defun LaTeX-env-struktogramm (environment)
"Insert ENVIRONMENT with width, height specifications and optional title."
(let ((width (read-string "Width: "))
(height (read-string "Height: "))
(title (read-string "Title (optional): ")))
(LaTeX-insert-environment environment
(concat
(format "(%s,%s)" width height)
(if (not (zerop (length title)))
(format "[%s]" title))))))
(defun LaTeX-env-declaration (environment)
"Insert ENVIRONMENT with an optional title."
(let ((title (read-string "Title (optional): ")))
(LaTeX-insert-environment environment
(if (not (zerop (length title)))
(format "[%s]" title)))))
(defun TeX-mac-case (macro)
"Insert \\case with all arguments, the needed \\switch(es) and the final \\caseend.
These are optional height and the required arguments slope, number of cases,
condition, and the texts for the different cases"
(let ((height (read-string "Height (optional): "))
(slope (read-string "Slope: "))
(number (read-string "Number of cases: "))
(condition (read-string "Condition: "))
(text (read-string "Case no. 1: "))
(count 1)
)
(setq number-int (string-to-number number))
(insert (concat (if (not (zerop (length height)))
(format "[%s]" height))
(format "{%s}{%s}{%s}{%s}"
slope number condition text)))
(while (< count number-int)
(end-of-line)
(newline-and-indent)
(newline-and-indent)
(setq prompt (format "Case no. %d: " (+ 1 count)))
(insert (format "\\switch{%s}" (read-string prompt)))
(setq count (1+ count)))
(end-of-line)
(newline-and-indent)
(newline-and-indent)
(insert "\\caseend")))
(defun TeX-mac-forever (macro)
"Insert \\forever-block with all arguments.
This is only the optional height"
(let ((height (read-string "Height (optional): ")))
(insert (if (not (zerop (length height)))
(format "[%s]" height)))
(end-of-line)
(newline-and-indent)
(newline-and-indent)
(insert "\\foreverend")))
(defun TeX-mac-ifthenelse (macro)
"Insert \\ifthenelse with all arguments.
These are optional height and the required arguments left slope, right slope,
condition, and the possible values of the condition"
(let ((height (read-string "Height (optional): "))
(lslope (read-string "Left slope: "))
(rslope (read-string "Right slope: "))
(condition (read-string "Condition: "))
(conditionvl (read-string "Condition value left: "))
(conditionvr (read-string "Condition value right: ")))
(insert (concat (if (not (zerop (length height)))
(format "[%s]" height))
(format "{%s}{%s}{%s}{%s}{%s}"
lslope rslope condition conditionvl conditionvr)))
(end-of-line)
(newline-and-indent)
(newline-and-indent)
(insert "\\change")
(end-of-line)
(newline-and-indent)
(newline-and-indent)
(insert "\\ifend")))
(defun TeX-mac-inparallel (macro)
"Insert \\inparallel with all arguments, the needed \\task(es) and the final \\inparallelend.
These are optional height and the required arguments number of tasks
and the descriptions for the parallel tasks"
(let ((height (read-string "Height (optional): "))
(number (read-string "Number of parallel tasks: "))
(text (read-string "Task no. 1: "))
(count 1)
)
(setq number-int (string-to-number number))
(insert (concat (if (not (zerop (length height)))
(format "[%s]" height))
(format "{%s}{%s}" number text)))
(while (< count number-int)
(end-of-line)
(newline-and-indent)
(newline-and-indent)
(setq prompt (format "Task no. %d: " (+ 1 count)))
(insert (format "\\task{%s}" (read-string prompt)))
(setq count (1+ count)))
(end-of-line)
(newline-and-indent)
(newline-and-indent)
(insert "\\inparallelend")))
(defun TeX-mac-until (macro)
"Insert \\until with all arguments.
These are the optional height and the required argument condition"
(let ((height (read-string "Height (optional): "))
(condition (read-string "Condition: ")))
(insert (concat (if (not (zerop (length height)))
(format "[%s]" height))
(format "{%s}" condition)))
(end-of-line)
(newline-and-indent)
(newline-and-indent)
(insert "\\untilend")))
(defun TeX-mac-while (macro)
"Insert \\while with all arguments.
These are the optional height and the required argument condition"
(let ((height (read-string "Height (optional): "))
(condition (read-string "Condition: ")))
(insert (concat (if (not (zerop (length height)))
(format "[%s]" height))
(format "{-%s-}" condition)))
(end-of-line)
(newline-and-indent)
(newline-and-indent)
(insert "\\whileend")))
(defvar LaTeX-struktex-package-options '("curves" "draft" "emlines" "final"
"pict2e" "anygradient" "verification"
"nofiller")
"Package options for the struktex package.")
;;; struktex.el ends here.
|