4 * Copyright (c) 1999-2002, Darren Hiebert
5 * Copyright 2009-2010 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
7 * This source code is released for free distribution under the terms of the
8 * GNU General Public License.
10 * Defines external interface to scope nesting levels for tags.
16 #include "general.h" /* must always come first */
19 #include "nestlevel.h"
22 * FUNCTION DEFINITIONS
25 extern NestingLevels
*nestingLevelsNew(void)
27 NestingLevels
*nls
= xCalloc (1, NestingLevels
);
31 extern void nestingLevelsFree(NestingLevels
*nls
)
34 for (i
= 0; i
< nls
->allocated
; i
++)
35 vStringDelete(nls
->levels
[i
].name
);
36 if (nls
->levels
) eFree(nls
->levels
);
40 extern void nestingLevelsPush(NestingLevels
*nls
,
41 const vString
*name
, int type
)
43 NestingLevel
*nl
= NULL
;
45 if (nls
->n
>= nls
->allocated
)
48 nls
->levels
= xRealloc(nls
->levels
,
49 nls
->allocated
, NestingLevel
);
50 nls
->levels
[nls
->n
].name
= vStringNew();
52 nl
= &nls
->levels
[nls
->n
];
55 vStringCopy(nl
->name
, name
);
59 extern void nestingLevelsPop(NestingLevels
*nls
)
61 const NestingLevel
*nl
= nestingLevelsGetCurrent(nls
);
64 vStringClear(nl
->name
);
68 extern NestingLevel
*nestingLevelsGetCurrent(NestingLevels
*nls
)
75 return &nls
->levels
[nls
->n
- 1];
78 /* vi:set tabstop=4 shiftwidth=4: */