source: project/release/3/nemo/trunk/nemo-eggdoc.scm @ 12237

Last change on this file since 12237 was 12237, checked in by Ivan Raikov, 12 years ago

Added an entry for nmodl-kinetic option.

File size: 22.2 KB
Line 
1;;
2;;
3;; nemo documentation for the Chicken Scheme module system.
4;;
5;;
6;; This program is free software: you can redistribute it and/or
7;; modify it under the terms of the GNU General Public License as
8;; published by the Free Software Foundation, either version 3 of the
9;; License, or (at your option) any later version.
10;;
11;; This program is distributed in the hope that it will be useful, but
12;; WITHOUT ANY WARRANTY; without even the implied warranty of
13;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14;; General Public License for more details.
15;;
16;; A full copy of the GPL license can be found at
17;; <http://www.gnu.org/licenses/>.
18;;
19;;
20
21
22(use eggdoc srfi-1)
23
24(define doc
25  `((eggdoc:begin
26
27     (name "nemo")
28
29     (description "Neuron model description language.")
30
31     (author (url "http://chicken.wiki.br/ivan raikov" "Ivan Raikov"))
32
33     (history
34      (version "1.8" "Bug fixes related to kinetic equation processing")
35      (version "1.6" "Added infix expression parser (nemo format)")
36      (version "1.0" "Initial release"))
37
38
39     (requires (url "args.html"          "args")
40               (url "datatype.html"      "datatype")
41               (url "digraph.html"       "digraph")
42               (url "environments.html"  "environments")
43               (url "graph-bfs.html"     "graph-bfs")
44               (url "graph-cycles.html"  "graph-cycles")
45               (url "lalr.html"          "lalr")
46               (url "matchable.html"     "matchable")
47               (url "mathh.html"         "mathh")
48               (url "strictly-pretty.html" "strictly-pretty")
49               (url "sxml-tools.html" "sxml-tools")
50               (url "sxml-transforms.html" "sxml-transforms")
51               (url "syntax-case.html" "syntax-case")
52               (url "varsubst.html"    "varsubst")
53               (url "vector-lib.html"  "vector-lib")
54               (url "varsubst.html"    "varsubst")
55               )
56
57
58     (usage "nemo [options...] [input files ...]")
59     (download "nemo.egg")
60
61     (documentation
62     
63      (p (tt "NEMO") " is a program that reads an on channel description "
64         "in a format based on ChannelML and generates a corresponding description "
65         "in the " (url "http://www.neuron.yale.edu/neuron/docs/help/neuron/nmodl/nmodl.html" "NMODL")
66         "language used by the " (url "http://www.neuron.yale.edu/neuron/" "NEURON simulator") ". ")
67
68      (subsection "Options"
69        (p (symbol-table
70            (describe "-i FORMAT"          "specify input format (nemo, xml, sxml, s-exp)")
71            (describe "--xml[=FILE]"       "write XML output to file (default: <model-name>.xml")
72            (describe "--sxml[=FILE]"      "write SXML output to file (default: <model-name>.sxml")
73            (describe "--nmodl[=FILE]"     "write NMODL output to file (default: <model-name>.mod")
74            (describe "--nmodl-method=METHOD"  "specify NMODL integration method (cnexp, derivimplicit)")
75            (describe "--nmodl-kinetic=STATES" "use NMODL kinetic equations for the given states")
76            (describe "-t"                 "use interpolation tables in generated code")
77            (describe "-h, --help"         "print help"))))
78
79      (subsection "Model description language"
80        (p "The following constructs comprise the model description language: ")
81        (p (ebnf-def "MODEL"
82            (ebnf-choice
83             ( (ebnf-form (ebnf-kw "INPUT ") 
84                          (ebnf-choice (ebnf-var "ID") 
85                             (ebnf-form (ebnf-var "ID") (ebnf-opt (ebnf-kw "AS ") (ebnf-var "LOCAL-ID")) 
86                                        (ebnf-opt (ebnf-kw "FROM ") (ebnf-var "NAMESPACE"))))
87                          "... )")
88               (comment "Declares one or several imported quantities. "
89                        "If the optional " (ebnf-kw "AS") " parameter is given, "
90                        "then the quantity is imported as " (ebnf-var "LOCAL-ID") ". "
91                        "If the optional " (ebnf-kw "FROM") " parameter is given, "
92                        "then the quantity is imported from namespace " (ebnf-var "NAMESPACE") ". "))
93               
94             ( (ebnf-form (ebnf-kw "OUTPUT") (ebnf-var "ID") )
95               (comment "Declares that an existing quantity be exported."))
96
97             ( (ebnf-form (ebnf-kw "CONST") (ebnf-var "ID") "=" (ebnf-var "EXPR"))
98               (comment "Declares a constant quantity (its value will be computed at declaration time)."))
99
100             ( (ebnf-form (ebnf-kw "DEFUN") (ebnf-var "ID") (ebnf-form (ebnf-var "ARG-ID") "..." )
101                          (ebnf-var "EXPR"))
102               (comment "Declares a function (a parameterized expression with no free variables)."))
103
104             ( (ebnf-form (ebnf-var "ID") "=" (ebnf-var "EXPR"))
105               (comment "Declares an assigned quantity "
106                        "(an expression that can refer to other quantities in the system)."))
107
108             ( (ebnf-form (ebnf-kw "STATE-COMPLEX") (ebnf-var "ID") (ebnf-var "TRANSITIONS")
109                          (ebnf-var "INITIAL-EXPR") (ebnf-var "OPEN-ID"))
110               (p "Declares a state complex quantity. See below for the syntax of state transition equations. "
111                  (ebnf-var "INITIAL-EXPR") " is an expression that computes the initial value. "
112                  (ebnf-var "OPEN-ID") " is the name of the open state. It must be one of the states "
113                  "defined by the transition equations. "))
114
115             ( (ebnf-form (ebnf-kw "COMPONENT") 
116                          (ebnf-form (ebnf-kw "TYPE") (ebnf-var "ID"))
117                          (ebnf-form (ebnf-kw "NAME") (ebnf-var "ID"))
118                          (ebnf-var "ELEMENTS"))
119               (p "Declares a system component (a quantity that can contain other quantities)."))
120             )))
121
122        (subsubsection "Expressions"
123          (p "Expressions in the model description language are defined as: ")
124          (p (ebnf-def "EXPR"
125               (ebnf-choice
126                       ( (ebnf-var "NUM")
127                         (comment "A numeric constant."))
128                       ( (ebnf-var "ID")
129                         (comment "A variable name."))
130                       ( (ebnf-form (ebnf-var "ID") (ebnf-form (ebnf-var "EXPR") "..."))
131                         (comment "A function invocation."))
132                       ( (ebnf-form (ebnf-var "EXPR") (ebnf-var "OP") (ebnf-var "EXPR") )
133                         (comment "Arithmetic operator invocation. The following operators are supported: "
134                                  (tt "+ - / * > < <= >= ^")))
135                       ( (ebnf-form (ebnf-kw "LET") (ebnf-form (ebnf-var "BINDINGS")) (ebnf-var "EXPR") )
136                         (comment "Local variables declaration. Each element in " 
137                                  (ebnf-var "BINDINGS") " is of the form: "
138                                  (ebnf-form (ebnf-var "ID") (ebnf-var "EXPR"))))
139                       ( (ebnf-form (ebnf-kw "IF") (ebnf-var "CONDITION")
140                                    (ebnf-kw "THEN") (ebnf-var "EXPR") 
141                                    (ebnf-kw "ELSE") (ebnf-var "EXPR") )
142                         (comment "Conditional expression. The expression after " (ebnf-kw "IF") 
143                                  " must be a comparison expression. ")))
144                       )))
145
146        (subsubsection "State transition equations"
147          (p "State transition equations in the model description language are defined as: ")
148          (p (ebnf-def "TRANSITION"
149               (ebnf-choice
150                ( (ebnf-form (ebnf-kw "->") (ebnf-var "SRC-ID") (ebnf-var "DEST-ID")
151                             (ebnf-var "EXPR") )
152                  (comment "Declares that a transition occurs from state "
153                           (ebnf-var "SRC-ID") " to state " (ebnf-var "DEST-ID") 
154                           " at rate computed by " (ebnf-var "EXPR") ". "))
155                ( (ebnf-form (ebnf-kw "<->") (ebnf-var "SRC-ID") (ebnf-var "DEST-ID")
156                             (ebnf-var "EXPR-1") (ebnf-var "EXPR-2") )
157                  (comment "Declares that a transition occurs from state "
158                           (ebnf-var "SRC-ID") " to state " (ebnf-var "DEST-ID") 
159                           " and vice versa, at rates computed by " (ebnf-var "EXPR-1")
160                           " and " (ebnf-var "EXPR-2") ". "))
161                ))))
162
163        (subsubsection "Ion channel definitions"
164          (p "Currently, the " (tt "NMODL") " code generator recognizes and generates code for "
165             "ion channel components that are defined as follows: ")
166          (p (ebnf-form (ebnf-compound "COMPONENT (TYPE ion-channel) (NAME {NAME})"
167
168               ( (ebnf-form (ebnf-kw "COMPONENT") (ebnf-form (ebnf-kw "TYPE") "gate") "..." )
169                 (comment "One or more gate definitions. Each component of type gate "
170                          "must export the state complexes that characterize the gate dynamics. "))
171               
172               ( (ebnf-form (ebnf-kw "COMPONENT") 
173                            (ebnf-form (ebnf-kw "TYPE") "pore") "...")
174                 (comment "Conductance law definition. This component must export a "
175                          "constant maximal conductance, or an assigned quantity whose "
176                          "equation represents the conductance law used. "))
177               
178               ( (ebnf-opt (ebnf-form (ebnf-kw "COMPONENT") (ebnf-form (ebnf-kw "TYPE") "permeating-substance") "..."))
179                 (comment ""))
180
181               ( (ebnf-opt (ebnf-form (ebnf-kw "COMPONENT") (ebnf-form (ebnf-kw "TYPE") "accumulating-substance") "..."))
182                 (comment ""))
183                           
184               ))))
185
186        (subsubsection "Hodgkin-Huxley ionic conductance extension"
187          (p "The Hodgkin-Huxley ionic conductance extension is a shortcut that declares "
188             "a state transition complex corresponding to the Hodgkin-Huxley formulation "
189             "of ion channel dynamics. ")
190
191          (p (ebnf-form (ebnf-compound "HH-IONIC-CONDUCTANCE"
192               ( (ebnf-form (ebnf-var "ION-NAME" )
193                            (comment "Ion name: exported variables will be of the form " (tt "{ion}_{id}") ". ")
194                           
195                            (ebnf-form (ebnf-kw "M-POWER") (ebnf-var "INTEGER") )
196                            (comment "Power of state variable " (tt "M") ". " )
197
198                            (ebnf-form (ebnf-kw "H-POWER") (ebnf-var "INTEGER") )
199                            (comment "Power of state variable " (tt "H") ". If zero, the initial value and "
200                                     "equations for this variable can be omitted. ")
201
202                            (ebnf-form (ebnf-kw "INITIAL-M") (ebnf-var "EXPR") )
203                            (comment "Expression that computes initial value for state variable " (tt "M") ". " )
204
205                            (ebnf-form (ebnf-kw "INITIAL-H") (ebnf-var "EXPR") )
206                            (comment "Expression that computes initial value for state variable " (tt "H") ". " )
207
208
209                            (ebnf-form (ebnf-kw "M-ALPHA") (ebnf-var "EXPR") )
210                            (comment "Closed state to open state rate expression for state variable " (tt "M") ". " )
211
212                            (ebnf-form (ebnf-kw "M-BETA") (ebnf-var "EXPR") )
213                            (comment "Open state to closed state rate expression for state variable " (tt "M") ". " )
214
215                            (ebnf-form (ebnf-kw "H-ALPHA") (ebnf-var "EXPR") )
216                            (comment "Closed state to open state rate expression for state variable " (tt "H") ". " )
217
218                            (ebnf-form (ebnf-kw "H-BETA") (ebnf-var "EXPR") )
219                            (comment "Open state to closed state rate expression for state variable " (tt "H") ". " )
220
221
222                            (ebnf-form (ebnf-kw "M-INF") (ebnf-var "EXPR") )
223                            (comment "Steady state expression for variable " (tt "M") ". " )
224
225                            (ebnf-form (ebnf-kw "M-TAU") (ebnf-var "EXPR") )
226                            (comment "Time constant expression for variable " (tt "M") ". " )
227
228                            (ebnf-form (ebnf-kw "H-INF") (ebnf-var "EXPR") )
229                            (comment "Steady state expression for variable " (tt "H") ". " )
230
231                            (ebnf-form (ebnf-kw "H-TAU") (ebnf-var "EXPR") )
232                            (comment "Time constant expression for variable " (tt "H") ". " )
233
234
235                            ))
236                 )))
237          )
238
239        )
240
241      )
242     (examples (pre #<<EOF
243
244;; Akemann and Knoepfel, J.Neurosci. 26 (2006) 4602
245
246(nemo-model PotIhCa
247
248  ((input v  cai cao)
249             
250   (const Vrest   = -68)
251   (const diam    = 20)
252   (const celsius = 24)
253   
254   (const temp_adj = (pow (3 ((celsius - 22) / 10))))
255
256   (defun ghk (v celsius ci co)
257     (let ((F 96485.0) (R 8.3145))
258       (let ((zeta ((2e-3 * F * v) / (R * (273.19 + celsius)))))
259         (if ((abs (1.0 - exp (neg (zeta)))) < 1e-6)
260             then (1e-6 * (2 * F) * (ci - (co * exp (neg (zeta)))) * (1.0 + (zeta / 2)))
261             else ((1e-6 * (2 * zeta * F) * (ci - (co * exp (neg (zeta))))) / (1.0 - exp (neg (zeta))))))))
262
263   
264   (decaying-pool (ca (initial 1e-4) (depth 0.1) (beta 1) (temp-adj temp_adj)))
265   
266   (component (type ion-channel) (name Kv1)
267             
268              (component (type gate)
269                         
270                         ;; rate functions
271                         (defun Kv1_amf (v) 
272                           (let ((cma 0.12889)
273                                 (cka -33.90877)
274                                 (cva 45))
275                             (cma * (exp (neg ((v + cva) / cka))))))
276                         
277                         (defun Kv1_bmf (v)
278                           (let ((cmb   0.12889)
279                                 (ckb   12.42101)
280                                 (cvb   45))
281                             (cmb * (exp (neg ((v + cvb) / ckb))))))
282                         
283                         (hh-ionic-conductance 
284                          (Kv1  ;; ion name: exported variables will be of the form {ion}_{id}
285                           (initial-m (Kv1_amf (Vrest) / (Kv1_amf (Vrest) + Kv1_bmf (Vrest))))
286                           (m-power   4)
287                           (h-power   0)
288                           (m-alpha   (temp_adj * Kv1_amf (v) ))
289                           (m-beta    (temp_adj * Kv1_bmf (v) ))))
290                         
291                         )
292             
293              (component (type pore)
294                         (const  gbar_Kv1  = 0.011)
295                         (output gbar_Kv1 ))
296             
297              (component (type permeating-substance) (name k)
298                         (const e_Kv1 = -85)
299                         (output e_Kv1 ))
300             
301              ) ;; end Kv1 current
302
303   (component (type ion-channel) (name Kv4)
304
305              (component (type gate)
306                         
307                         ;; rate functions
308                         
309                         
310                         (defun Kv4_amf (v) 
311                           (let ((can    0.15743)
312                                 (ckan   -32.19976)
313                                 (cvan   57))
314                             (can * exp (neg ((v + cvan) / ckan)))))
315                         
316
317                         (defun Kv4_bmf (v) 
318                           (let ((cbn   0.15743)
319                                 (ckbn  37.51346)
320                                 (cvbn  57))
321                             (cbn * exp (neg ((v + cvbn) / ckbn)))))
322
323                         
324                         (defun Kv4_ahf (v) 
325                           (let ((cah   0.01342)
326                                 (ckah  -7.86476)
327                                 (cvah  60))
328                             (cah / (1.0 + (exp (neg ((v + cvah) / ckah)))))))
329
330                         
331                         (defun Kv4_bhf (v) 
332                           (let ((cbh   0.04477)
333                                 (ckbh  11.3615)
334                                 (cvbh  54))
335                             (cbh / (1.0 + (exp (neg ((v + cvbh) / ckbh)))))))
336
337                         (hh-ionic-conductance 
338                          (Kv4  ;; ion name: exported variables will be of the form {ion}_{id}
339                           (initial-m (Kv4_amf (Vrest) / (Kv4_amf (Vrest) + Kv4_bmf (Vrest))) )
340                           (initial-h (Kv4_ahf (Vrest) / (Kv4_ahf (Vrest) + Kv4_bhf (Vrest))) ) 
341                           (m-power   4)
342                           (h-power   1)
343                           (m-alpha   (temp_adj * Kv4_amf (v)))
344                           (m-beta    (temp_adj * Kv4_bmf (v)))
345                           (h-alpha   (temp_adj * Kv4_ahf (v)))
346                           (h-beta    (temp_adj * Kv4_bhf (v)))
347                           ))
348                         
349                         )
350
351              (component (type pore)
352                         (const  gbar_Kv4  = 0.0039)
353                         (output gbar_Kv4 ))
354             
355              (component (type permeating-substance) (name k)
356                         (const e_Kv4 = -85)
357                         (output e_Kv4 ))
358             
359              ) ;; end Kv4 current
360
361
362   (component (type ion-channel) (name Ih)
363             
364              (component (type gate)
365                         
366                         ;; rate functions
367                         
368                         (defun Ih_inf (v)
369                           (let ((cvn   90.1)
370                                 (ckn   -9.9))
371                             (1.0 / (1.0 + exp (neg ((v + cvn) / ckn) )))))
372                         
373                         (defun Ih_tau (v)   
374                           (let ((cct  190)
375                                 (cat  720)
376                                 (cvt  81.5)
377                                 (ckt  11.9))
378                             (cct + (cat * exp (neg (pow (((v + cvt) / ckt) 2)))))))
379                         
380                         (hh-ionic-conductance 
381                          (Ih  ;; ion name: exported variables will be of the form {ion}_{id}
382                           (initial-m (Ih_inf (Vrest)))
383                           (m-power   1)
384                           (h-power   0)
385                           (m-inf     (Ih_inf (v)))
386                           (m-tau     (Ih_tau (v) / temp_adj))
387                           ))
388                         
389                         )
390
391              (component (type pore)
392                         (const  gbar_Ih  = 0.0002)
393                         (output gbar_Ih ))
394             
395              (component (type permeating-substance) (name non-specific)
396                         (const e_Ih = -30)
397                         (output e_Ih ))
398             
399              ) ;; end Ih current
400   
401   (component (type ion-channel) (name CaP)
402             
403              (component (type gate)
404                         
405                         ;; rate functions
406                         (defun CaP_inf (v) 
407                           (let ((cv  19)  (ck  5.5))
408                             (1.0 / (1.0 + exp (neg ((v + cv) / ck))))))
409                         
410                         (defun CaP_tau (v) 
411                           (if (v > -50) 
412                               then (1e3 * (0.000191 + (0.00376 * pow ((exp (neg ((v + 41.9) / 27.8)))  2))))
413                               else (1e3 * (0.00026367 + (0.1278 * exp (0.10327 * v))))))
414
415                         (hh-ionic-conductance 
416                          (CaP  ;; ion name: exported variables will be of the form {ion}_{id}
417                           (initial-m  (CaP_inf (Vrest)))
418                           (m-power    1)
419                           (h-power    0)
420                           (m-inf      (CaP_inf (v)))
421                           (m-tau      (CaP_tau (v) / temp_adj))))
422                         
423                         )
424
425              (component (type pore)
426                         (const gmax_CaP  = 0.01667)
427                         (gbar_CaP        = (gmax_CaP * ghk (v celsius cai cao)))
428                         (output gbar_CaP ))
429             
430              (component (type accumulating-substance) (name ca) )
431             
432             
433              ) ;; end CaP current
434
435
436   (component (type ion-channel) (name CaBK)
437             
438              (component (type gate)
439                         
440                         ;; rate functions
441                         
442                         (defun CaBK_zinf (ca) 
443                           (let ((zhalf 0.001))
444                             (1 / (1 + (zhalf / ca)))))
445
446                         (const CaBK_ztau = 1.0)
447                         
448                         (defun CaBK_minf (v)
449                           (let ((cvm  28.9)
450                                 (ckm  6.2))
451                             (1.0 / (1.0 + exp (neg ((v + 5.0 + cvm) / ckm))))))
452                         
453                         (defun CaBK_mtau (v)
454                           (let ((ctm     0.000505)
455                                 (cvtm1   86.4)
456                                 (cktm1   -10.1)
457                                 (cvtm2   -33.3)
458                                 (cktm2   10))
459                             (ctm + (1.0 / (exp (neg ((v + 5.0 + cvtm1) / cktm1)) +
460                                                exp (neg ((v + 5.0 + cvtm2) / cktm2)))))))
461                         
462                         (defun CaBK_hinf (v) 
463                           (let ((ch    0.085)
464                                 (cvh   32)
465                                 (ckh   -5.8))
466                             (ch + ((1.0 - ch) / (1.0 + (exp (neg ((v + 5.0 + cvh) / ckh))))))))
467                         
468                         (defun CaBK_htau (v)
469                           (let ((cth     0.0019)
470                                 (cvth1   48.5)
471                                 (ckth1   -5.2)
472                                 (cvth2   -54.2)
473                                 (ckth2   12.9))
474                             (cth + (1.0 / (exp (neg ((v + cvth1) / ckth1)) +
475                                                exp (neg ((v + cvth2) / ckth2)))))))
476                         
477                         (state-complex
478                          (CaBK_z
479                           (transitions (<-> C O (CaBK_zinf (cai) / CaBK_ztau)
480                                             ((1 - CaBK_zinf (cai)) / CaBK_ztau)))
481                           (initial   (CaBK_zinf (1e-4)))
482                           (open O)  (power 2)))
483                         
484                         (output CaBK_z ) 
485
486                         
487                         (hh-ionic-conductance 
488                          (CaBK  ;; ion name: exported variables will be of the form {ion}_{id}
489                           (initial-m  (CaBK_minf (Vrest) / temp_adj))
490                           (initial-h  (CaBK_hinf (Vrest) / temp_adj))
491                           (m-power    3)
492                           (h-power    1)
493                           (m-inf      (CaBK_minf (v) / temp_adj) )
494                           (m-tau      (CaBK_mtau (v) / temp_adj) )
495                           (h-inf      (CaBK_hinf (v) / temp_adj) )
496                           (h-tau      (CaBK_htau (v) / temp_adj) )))
497                         
498                         )
499             
500              (component (type pore)
501                         (const  gbar_CaBK  = 0.014)
502                         (output gbar_CaBK ))
503             
504              (component (type permeating-substance) (name k)
505                         (const e_CaBK = -85)
506                         (output e_CaBK ))
507             
508              ) ;; end BK current
509             
510             ))
511
512EOF
513))
514
515     (license
516      "Copyright 2008 Ivan Raikov and the Okinawa Institute of Science and Technology.
517
518This program is free software: you can redistribute it and/or modify
519it under the terms of the GNU General Public License as published by
520the Free Software Foundation, either version 3 of the License, or (at
521your option) any later version.
522
523This program is distributed in the hope that it will be useful, but
524WITHOUT ANY WARRANTY; without even the implied warranty of
525MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
526General Public License for more details.
527
528A full copy of the GPL license can be found at
529<http://www.gnu.org/licenses/>."))))
530
531
532(define nemo-eggdoc:css (make-parameter #<<EOF
533 <!--
534      CODE {
535            color: #666666;
536          }
537/*   DT.definition EM { font-weight: bold; font-style: normal; } */
538
539     DT.definition { 
540                   background: #eee;
541                   color: black;
542                   padding: 0.2em 1em 0.2em 0.7em;
543                   margin-left: 0.2em;
544border: 1px solid #bbc;
545                   font-family: "Andale Mono", monospace;
546                   /* font-size: 1.2em; */
547                   
548                 }
549     DD {
550                   margin-top: 0.8em;
551                   margin-bottom: 0.8em;
552     }
553     DIV.subsection {
554                    border-top: 1px solid #448;
555                    padding-left: 1em;
556                    margin-bottom: 1.2em;
557     }
558     DIV.subsubsection {
559                    border-top: 1px dotted #99c;
560                    /* border-left: 1px solid #99c; */
561                    padding-left: 1em;
562                    margin-bottom: 1.2em;
563     }
564     DIV.subsubsubsection {
565                    border-top: 1px solid #ddf;
566                    padding-left: 1em;
567                    margin-bottom: 1.2em;
568     }
569
570         DIV.section {
571                 margin-bottom: 1.5em;
572         }
573         a:link {
574                 color: #336;
575         }
576         a:visited { color: #666; }
577         a:active  { color: #966; }
578         a:hover   { color: #669; }
579         body { margin: 0; padding: 0; background: #fff; color: #000; font: 9pt "Lucida Grande", "Verdana", sans-serif; }
580         H2 {
581                 background: #336;
582                 color: #fff;
583                 padding-top: 0.5em;
584                 padding-bottom: 0.5em;
585                 padding-left: 16px;
586                 margin: 0 0 1em 0;
587        }
588        UL LI {
589                list-style: none;
590        }
591        TT {
592                font-family: "Andale Mono", monospace;
593                /* font-size: 1.2em; */
594        }
595        H3 {
596                color: #113;
597                margin-bottom: 0.5em;
598        }
599        H4, H5, H6 {
600                color: #113;
601                margin-bottom: 1.0em;
602        }
603        H5 {
604                font-weight: normal;
605                font-style: italic;
606                font-size: 100%;
607                margin-top: 1.2em;
608        }
609        H6 {
610                font-weight: bold;
611                font-size: 85%;
612                margin-top: 1.2em;
613        }
614     DIV#eggheader {
615         text-align: center;
616                 float: right;
617                 margin-right: 2em;
618     }
619     DIV#header IMG {
620            /* display: block; margin-left: auto; margin-right: auto;  */
621            /* float: right; */
622            border: none;  /* firefox */
623     }
624     DIV#footer {
625                background: #bbd;
626                padding: 0.7em ;
627                border-top: 1px solid #cce;
628     }
629     DIV#footer hr {
630                display: none;
631     }
632     DIV#footer a {
633                float: left;
634     }
635     DIV#revision-history {
636         float: right;
637     }
638     
639     DIV#body {
640                 margin: 1em 1em 1em 16px;
641         }
642
643     DIV#examples PRE {
644       background: #eef;
645       padding: 0.1em;
646       border: 1px solid #aac;
647     }
648     PRE#license, DIV#examples PRE {
649       padding: 0.5em;
650     }
651     DIV#examples PRE {
652       /* font-size: 85%; */
653     }
654     PRE { font-family: "Andale Mono", monospace; }
655     TABLE {
656       background: #eef;
657       padding: 0.2em;
658       border: 1px solid #aac;
659       border-collapse: collapse;
660       width: 100%;
661     }
662     TABLE.symbol-table TD.symbol {
663          font-family: "Andale Mono", monospace;
664          vertical-align: top;
665          /* font-size: 1.2em; */
666     }
667     TABLE.symbol-table TD {
668          font-family: "Andale Mono", monospace;
669          vertical-align: top;
670          /* font-size: 1.2em; */
671     }
672     TH {
673       text-align: left;
674       border-bottom: 1px solid #aac;
675       padding: 0.25em 0.5em 0.25em 0.5em;
676     } 
677     TD { padding: 0.25em 0.5em 0.25em 0.5em; }
678     -->
679EOF
680))
681
682
683
684(if (eggdoc->html
685     doc 
686     `( (eggdoc-style . ,(lambda (tag)
687                           `("<style type=\"text/css\">" ,(nemo-eggdoc:css)
688                             "</style>")))
689       
690        (comment
691         *macro*
692         . ,(lambda (tag . content) `(p . ,content))) 
693                         
694        (ebnf-def       ; Term definition
695         *macro*
696         . ,(lambda (tag term-def . others)
697              `(dl (dt (b (tt ,term-def)) (tt " ::= "))
698                   (dd ,@others))))
699                         
700        (ebnf-kw        ; Keyword
701         *macro*
702         . ,(lambda (tag kw)
703              `((b (tt ,kw)))))
704                         
705        (ebnf-var       ; Variable
706         *macro*
707         . ,(lambda (tag varname) `("{" (i ,varname) "}")))
708                         
709        (ebnf-choice    ; Choice of terms
710         *macro*
711         . ,(lambda (tag . terms)
712              (intersperse terms `(tt " | "))))
713
714        (ebnf-opt       ; Optional terms
715         . ,(lambda (tag . terms)
716              `(" [" ,@terms "] ")))
717                         
718        (ebnf-form      ; ( ... ) Form
719         *macro*
720         . ,(lambda (tag . terms)
721              `("( " ,@(intersperse terms " ") " )")))
722
723        (ebnf-compound  ; Compound form
724         *macro*
725         . ,(lambda (tag term-def . others)
726              `(dl (dt (b (tt ,term-def)) )
727                   (dd ,@others))))
728                         
729        ,@(eggdoc:make-stylesheet doc) ))
730   
731    (void))
Note: See TracBrowser for help on using the repository browser.