fixed a xli reader bug of not placing the comment text inside a proper list
This commit is contained in:
parent
d2505bdbcd
commit
2bccba995c
@ -721,8 +721,6 @@ static int read_pair (qse_xli_t* xli)
|
|||||||
{
|
{
|
||||||
xli->tok_status &= ~TOK_STATUS_ENABLE_NSTR;
|
xli->tok_status &= ~TOK_STATUS_ENABLE_NSTR;
|
||||||
|
|
||||||
if (get_token (xli) <= -1) goto oops;
|
|
||||||
|
|
||||||
/* insert a pair with an empty list */
|
/* insert a pair with an empty list */
|
||||||
pair = qse_xli_insertpairwithemptylist (xli, parlist, QSE_NULL, key, name);
|
pair = qse_xli_insertpairwithemptylist (xli, parlist, QSE_NULL, key, name);
|
||||||
if (pair == QSE_NULL) goto oops;
|
if (pair == QSE_NULL) goto oops;
|
||||||
@ -832,7 +830,10 @@ static int read_list (qse_xli_t* xli, qse_xli_list_t* parlist)
|
|||||||
link = make_list_link (xli, parlist);
|
link = make_list_link (xli, parlist);
|
||||||
if (link == QSE_NULL) return -1;
|
if (link == QSE_NULL) return -1;
|
||||||
|
|
||||||
if (__read_list (xli) <= -1)
|
/* get_token() here is to read the token after the left brace.
|
||||||
|
* it must be called after the xli->parlink has been updated
|
||||||
|
* in case there are comments at the beginning of the list */
|
||||||
|
if (get_token (xli) <= -1 || __read_list (xli) <= -1)
|
||||||
{
|
{
|
||||||
free_list_link (xli, link);
|
free_list_link (xli, link);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -156,6 +156,32 @@ static int write_to_current_stream (qse_xli_t* xli, const qse_char_t* ptr, qse_s
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int write_indentation (qse_xli_t* xli, int depth)
|
||||||
|
{
|
||||||
|
static const qse_char_t tabs[16] =
|
||||||
|
{
|
||||||
|
QSE_T('\t'), QSE_T('\t'), QSE_T('\t'), QSE_T('\t'),
|
||||||
|
QSE_T('\t'), QSE_T('\t'), QSE_T('\t'), QSE_T('\t'),
|
||||||
|
QSE_T('\t'), QSE_T('\t'), QSE_T('\t'), QSE_T('\t'),
|
||||||
|
QSE_T('\t'), QSE_T('\t'), QSE_T('\t'), QSE_T('\t')
|
||||||
|
};
|
||||||
|
|
||||||
|
if (depth <= QSE_COUNTOF(tabs))
|
||||||
|
{
|
||||||
|
if (write_to_current_stream (xli, tabs, depth, 0) <= -1) return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
if (write_to_current_stream (xli, tabs, QSE_COUNTOF(tabs), 0) <= -1) return -1;
|
||||||
|
for (i = QSE_COUNTOF(tabs); i < depth; i++)
|
||||||
|
{
|
||||||
|
if (write_to_current_stream (xli, QSE_T("\t"), 1, 0) <= -1) return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int write_list (qse_xli_t* xli, qse_xli_list_t* list, int depth)
|
static int write_list (qse_xli_t* xli, qse_xli_list_t* list, int depth)
|
||||||
{
|
{
|
||||||
qse_xli_atom_t* curatom;
|
qse_xli_atom_t* curatom;
|
||||||
@ -166,15 +192,10 @@ static int write_list (qse_xli_t* xli, qse_xli_list_t* list, int depth)
|
|||||||
{
|
{
|
||||||
case QSE_XLI_PAIR:
|
case QSE_XLI_PAIR:
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
qse_xli_pair_t* pair = (qse_xli_pair_t*)curatom;
|
qse_xli_pair_t* pair = (qse_xli_pair_t*)curatom;
|
||||||
|
|
||||||
for (i = 0; i < depth; i++)
|
if (write_indentation (xli, depth) <= -1 ||
|
||||||
{
|
write_to_current_stream (xli, pair->key, qse_strlen(pair->key), 0) <= -1) return -1;
|
||||||
if (write_to_current_stream (xli, QSE_T("\t"), 1, 0) <= -1) return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (write_to_current_stream (xli, pair->key, qse_strlen(pair->key), 0) <= -1) return -1;
|
|
||||||
|
|
||||||
if (pair->alias)
|
if (pair->alias)
|
||||||
{
|
{
|
||||||
@ -211,7 +232,8 @@ static int write_list (qse_xli_t* xli, qse_xli_list_t* list, int depth)
|
|||||||
case QSE_XLI_LIST:
|
case QSE_XLI_LIST:
|
||||||
{
|
{
|
||||||
if (write_to_current_stream (xli, QSE_T(" {\n"), 3, 0) <= -1 ||
|
if (write_to_current_stream (xli, QSE_T(" {\n"), 3, 0) <= -1 ||
|
||||||
write_list (xli, (qse_xli_list_t*)pair->val, ++depth) <= -1 ||
|
write_list (xli, (qse_xli_list_t*)pair->val, depth + 1) <= -1 ||
|
||||||
|
write_indentation (xli, depth) <= -1 ||
|
||||||
write_to_current_stream (xli, QSE_T("}\n"), 2, 0) <= -1) return -1;
|
write_to_current_stream (xli, QSE_T("}\n"), 2, 0) <= -1) return -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user