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;
|
||||
|
||||
if (get_token (xli) <= -1) goto oops;
|
||||
|
||||
/* insert a pair with an empty list */
|
||||
pair = qse_xli_insertpairwithemptylist (xli, parlist, QSE_NULL, key, name);
|
||||
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);
|
||||
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);
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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:
|
||||
{
|
||||
int i;
|
||||
qse_xli_pair_t* pair = (qse_xli_pair_t*)curatom;
|
||||
|
||||
for (i = 0; i < depth; i++)
|
||||
{
|
||||
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 (write_indentation (xli, depth) <= -1 ||
|
||||
write_to_current_stream (xli, pair->key, qse_strlen(pair->key), 0) <= -1) return -1;
|
||||
|
||||
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:
|
||||
{
|
||||
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;
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user