Solution was suggested by FND in the irc:

The tiddler object lives too long.  The wikifier object is created new
every time the tiddler's text is interpreted into html.  So instead of
declaring "tiddler.numheading" I use "w.numheading" problem solved.

On Tue, Nov 30, 2010 at 9:12 PM, David Young <[email protected]> wrote:
> Hi all.
>
> The txt2tags parser allows a numbered heading syntax.  This means that
> I need to store the 6-levels of html headings permitted so that I use
> the appropriate section,subsection.subsubsection...  I've implemented
> something that works pretty well within a single formatter:
>
> // HTML doesn't have an inherent number scheme for header tags. Just treat
> // them as unnumbered for now.
> {
>        name: 't2tNumberedHeading',
>        match: '^ *\\+{1,6}[^\\+\n]',
>        restoreRegExp: /^( *\+{1,6}[^\+\n])/mg,
>        lookaheadRegExp: /^ *(\+{1,6})([^\+\n][^\n]*[^\+\n])\1[ \t]*$/mg,
>        handler: function(w)
>        {
>                if (!tiddler.numheading) {
>                        tiddler.numheading = [0,0,0,0,0,0];
>                }
>                this.lookaheadRegExp.lastIndex = w.matchStart;
>                var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
>                if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
>                        var text = lookaheadMatch[2];
>                        //may not be needed, since \n terminates this markup 
> anyways...
>                        if(config.browser.isIE)
>                                text = text.replace(/\n/g,"\r");
>                        var headingindex = lookaheadMatch[1].length - 1;
>                        tiddler.numheading[headingindex]++;
>                        //reset the next levels down to 0
>                        for(var i = headingindex + 1; i<=5; i++){
>                                tiddler.numheading[i] = 0;
>                        }
>                        text = " " + text;
>                        for (headingindex; headingindex >= 0; headingindex--) {
>                                text = tiddler.numheading[headingindex] + "." 
> + text;
>                        }
>                        
> createTiddlyElement(w.output,'h'+lookaheadMatch[1].length,null,null,text);
>                        w.nextMatch = lookaheadMatch.index + 
> lookaheadMatch[0].length;
>                } else {
>                        this.restoreRegExp.lastIndex = w.matchStart;
>                        var restoreMatch = this.restoreRegExp.exec(w.source);
>                        if (restoreMatch && restoreMatch.index == 
> w.matchStart) {
>                                
> w.output.appendChild(document.createTextNode(restoreMatch[1]));
>                        } else {
>                                //shouldn't be possible!
>                                //Only if you don't define restoreRegExp: 
> properly
>                                
> w.output.appendChild(document.createTextNode("### NUMBER HEADING
> SYNTAX ERROR ###"));
>                        }
>                }
>        }
> },
>
>
> This formatter works the first time i view a tiddler, but the problem
> is tiddler.numheading[].  It is stored with the tiddler between
> renderings.  This means that when I have a tiddler with 3 headings,
> they first show as "1 2 3", but then if I edit the tiddler, the
> headings are numbered "4 5 6" they just continue on.  The formatter
> can't re-set tiddler.numheading[] every time it runs, or else it will
> lose the "count" between sections.  Any suggestions on a proper
> variable to store numheading[]?  I think making it a member of tiddler
> is giving it too wide a scope.  Is there some sort of rendering
> object?
>
>
> --
> David Young
>



-- 
David Young

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWikiDev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/tiddlywikidev?hl=en.

Reply via email to