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

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

Added an entry for 1.15

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