Subject: Re: (dsssl) newbie coding question From: Brandon Ibach <bibach@xxxxxxxxxxxxxx> Date: Tue, 2 Oct 2001 01:52:04 -0500 |
Quoting Trent Shipley <tcshipley@xxxxxxxxxxxxx>: > Unfortunately constructs like the below dont work. Depending on the > variation that I try the OpenJade parser says there is no current > node to provide a context, or the function fails to return a value of > type style, or it an object having a given id number can't be found. > > (define p-style-prime > (cond ((has-ancestor "NOTE")(note-p-style)) > (else (standard-p-style)))) > The problem with this (define) has to do with DSSSL's processing model. Top-level (define)s, such as this, are evaluated before document processing begins. Therefore, there is no "current node" to examine. What you want is to create a *procedure* which, upon every invocation, will evaluate the properties of the current node to determine which style to use: (define (p-style-prime n) (cond ((have-ancestor? "NOTE" n) note-p-style) (else standard-p-style))) Note the parens around "p-style-prime", indicating a procedure definition, with an argument, "n". Also, you would not want the parens around "note-p-style" or "standard-p-style", as these are style values, not procedures. You don't want to invoke the style, you just want to return it. Now, the usage would look like: (define (STANDARD-PARAGRAPH) (make paragraph use: (p-style-prime (current-node)) ...)) Note the parens, again, around "p-style-prime", to invoke it as a procedure, passing the result of the (current-node) procedure, which, of course, returns the "current node" (or, "this-node"). :) > Ideally the cast would be polymorphic so that a call to > p-style-prime uses the current (nodal) context. However, a call with > the form (p-style-prime this-node) would be fine provided someone can > tell me how to name "this-node". > Well, we have the latter, above. Wanna shoot for the former? Let's use DSSSL's "optional" feature to provide a default for the argument to our procedure: (define (p-style-prime #!optional (n (current-node))) (cond ((have-ancestor? "NOTE" n) note-p-style) (else standard-p-style))) The only change here is declaring that the "n" argument is "optional", and providing a default for it. Unless you explicitly specify a value for "n" in your invocation of (p-style-prime), DSSSL will automatically supply the result of the (current-node) procedure as a default value for "n". Thus, the usage becomes: (define (STANDARD-PARAGRAPH) (make paragraph use: (p-style-prime) ...)) I hope this is all clear. If not, let me know. :) -Brandon :) DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
(dsssl) newbie coding question, Trent Shipley | Thread | Re: (dsssl) newbie coding question, Holger Klawitter |
(dsssl) polymorphic em, Trent Shipley | Date | Re: (dsssl) polymorphic em, Brandon Ibach |
Month |