2 * Copyright (c) 1999-2002, Darren Hiebert
3 * Copyright 2009-2011 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
5 * This source code is released for free distribution under the terms of the
6 * GNU General Public License.
8 * Defines external interface to scope nesting levels for tags.
14 #include "general.h" /* must always come first */
17 #include "nestlevel.h"
20 * FUNCTION DEFINITIONS
23 extern NestingLevels
*nestingLevelsNew(void)
25 NestingLevels
*nls
= xCalloc (1, NestingLevels
);
29 extern void nestingLevelsFree(NestingLevels
*nls
)
32 for (i
= 0; i
< nls
->allocated
; i
++)
33 vStringDelete(nls
->levels
[i
].name
);
34 if (nls
->levels
) eFree(nls
->levels
);
38 extern void nestingLevelsPush(NestingLevels
*nls
,
39 const vString
*name
, int type
)
41 NestingLevel
*nl
= NULL
;
43 if (nls
->n
>= nls
->allocated
)
46 nls
->levels
= xRealloc(nls
->levels
,
47 nls
->allocated
, NestingLevel
);
48 nls
->levels
[nls
->n
].name
= vStringNew();
50 nl
= &nls
->levels
[nls
->n
];
53 vStringCopy(nl
->name
, name
);
57 extern void nestingLevelsPop(NestingLevels
*nls
)
59 const NestingLevel
*nl
= nestingLevelsGetCurrent(nls
);
62 vStringClear(nl
->name
);
66 extern NestingLevel
*nestingLevelsGetCurrent(NestingLevels
*nls
)
73 return &nls
->levels
[nls
->n
- 1];
76 /* vi:set tabstop=4 shiftwidth=4: */