LOCAL Bool texteditor_insertfilter_stackfilter(texteditor_insertfilter_t *filter, taditerator_result *result)
{
- W nestlevel;
+ W nestlevel, err;
TADSTACK_DATATYPE type;
for (;;) {
}
nestlevel = tadstack_nestlevel(&filter->tadstack);
- if (nestlevel > 0) {
+ if (nestlevel != 0) {
continue;
}
- type = tadstack_currentdata(&filter->tadstack);
+ err = tadstack_currentdata(&filter->tadstack, &type);
if (type != TADSTACK_DATATYPE_TEXT) {
continue;
}
#include "tadlangcode.h"
#include "tadsegment.h"
+#ifdef BCHAN_CONFIG_DEBUG
+# define DP(arg) printf arg
+# define DP_ER(msg, err) printf("%s (%d/%x)\n", msg, err>>16, err)
+#else
+# define DP(arg) /**/
+# define DP_ER(msg, err) /**/
+#endif
+
+#if 0
+# define DP_STATE(state) printf("%s\n", state)
+#else
+# define DP_STATE(state) /**/
+#endif
+
EXPORT W tadstack_nestlevel(tadstack_t *stack)
{
return stack->nestlevel;
}
-EXPORT VOID tadstack_currentlang(tadstack_t *stack, TC **lang, W *len)
+EXPORT W tadstack_currentlangcode(tadstack_t *stack, tadlangcode *langcode)
{
+ if (stack->nestlevel < 0) {
+ return -1;
+ }
if (stack->data[stack->nestlevel].type != TADSTACK_DATATYPE_TEXT) {
- *lang = NULL;
- *len = 0;
- return;
+ return -1;
}
- *lang = stack->data[stack->nestlevel].currentlang;
- *len = 1;
+ *langcode = stack->data[stack->nestlevel].currentlang;
+ return 0;
}
-EXPORT TADSTACK_DATATYPE tadstack_currentdata(tadstack_t *stack)
+EXPORT W tadstack_currentdata(tadstack_t *stack, TADSTACK_DATATYPE *type)
{
- return stack->data[stack->nestlevel].type;
+ if (stack->nestlevel < 0) {
+ return -1;
+ }
+ *type = stack->data[stack->nestlevel].type;
+ return 0;
}
-EXPORT RECT tadstack_currentview(tadstack_t *stack)
+EXPORT W tadstack_currentview(tadstack_t *stack, RECT *r)
{
- return stack->data[stack->nestlevel].view;
+ if (stack->nestlevel < 0) {
+ return -1;
+ }
+ *r = stack->data[stack->nestlevel].view;
+ return 0;
}
-EXPORT RECT tadstack_currentdraw(tadstack_t *stack)
+EXPORT W tadstack_currentdraw(tadstack_t *stack, RECT *r)
{
- return stack->data[stack->nestlevel].draw;
+ if (stack->nestlevel < 0) {
+ return -1;
+ }
+ *r = stack->data[stack->nestlevel].draw;
+ return 0;
}
-EXPORT UNITS tadstack_currenthunit(tadstack_t *stack)
+EXPORT W tadstack_currenthunit(tadstack_t *stack, UNITS *units)
{
- return stack->data[stack->nestlevel].h_unit;
+ if (stack->nestlevel < 0) {
+ return -1;
+ }
+ *units = stack->data[stack->nestlevel].h_unit;
+ return 0;
}
-EXPORT UNITS tadstack_currentvunit(tadstack_t *stack)
+EXPORT W tadstack_currentvunit(tadstack_t *stack, UNITS *units)
{
- return stack->data[stack->nestlevel].v_unit;
+ if (stack->nestlevel < 0) {
+ return -1;
+ }
+ *units = stack->data[stack->nestlevel].v_unit;
+ return 0;
}
LOCAL VOID tadstack_pushTEXTstack(tadstack_t *stack, RECT view, RECT draw, UNITS h_unit, UNITS v_unit, UH lang, UH bgpat)
{
+ TC ch = lang | 0xFE00;
+
stack->nestlevel++;
stack->data[stack->nestlevel].type = TADSTACK_DATATYPE_TEXT;
stack->data[stack->nestlevel].v_unit = v_unit;
stack->data[stack->nestlevel].lang = lang;
stack->data[stack->nestlevel].bgpat = bgpat;
- stack->data[stack->nestlevel].currentlang[0] = lang;
+ TCtotadlangcode(&ch, 1, &(stack->data[stack->nestlevel].currentlang));
}
LOCAL VOID tadstack_pushFIGstack(tadstack_t *stack, RECT view, RECT draw, UNITS h_unit, UNITS v_unit, W ratio)
EXPORT TADSTACK_RESULT tadstack_inputcharactor(tadstack_t *stack, TC ch)
{
TADSTACK_RESULT ret = TADSTACK_RESULT_OK;
+ TADLANGCODE_PARSER_RESULT parser_result;
switch (stack->state) {
case TADSTACK_STATE_START:
+ DP_STATE("START");
tadstack_pushTEXTstack(stack, (RECT){{0, 0, 0, 0}}, (RECT){{0, 0, 0, 0}}, 0, 0, 0x21, 0);
stack->state = TADSTACK_STATE_TEXT;
ret = TADSTACK_RESULT_PUSH_STACK;
break;
case TADSTACK_STATE_TEXT:
+ DP_STATE("TEXT");
if ((ch & 0xFE00) == 0xFE00) {
- stack->data[stack->nestlevel].currentlang[0] = ch;
- ret = TADSTACK_RESULT_LANGUAGE_CHANGE;
- if (ch == 0xFEFE) {
+ tadlangcode_parser_initialize(&stack->langparser);
+ parser_result = tadlangcode_parser_inputchar(&stack->langparser, ch);
+ if (parser_result == TADLANGCODE_PARSER_RESULT_DETERMINED) {
+ tadlangcode_parser_getlangcode(&stack->langparser, &(stack->data[stack->nestlevel].currentlang));
+ tadlangcode_parser_finalize(&stack->langparser);
+ ret = TADSTACK_RESULT_LANGUAGE_CHANGE;
+ } else if (parser_result == TADLANGCODE_PARSER_RESULT_CONTINUE) {
+ ret = TADSTACK_RESULT_LANGUAGE_CHANGE;
stack->state = TADSTACK_STATE_TEXT_LANGCODE;
+ } else {
+ ret = TADSTACK_RESULT_FORMAT_ERROR;
}
break;
}
ret = TADSTACK_RESULT_OK;
break;
case TADSTACK_STATE_TEXT_LANGCODE:
- if ((ch & 0xFE00) != 0xFE00) {
- ret = TADSTACK_RESULT_FORMAT_ERROR;
- break;
- }
- if (ch != 0xFEFE) {
+ DP_STATE("TEXT_LANGCODE");
+ parser_result = tadlangcode_parser_inputchar(&stack->langparser, ch);
+ if (parser_result == TADLANGCODE_PARSER_RESULT_DETERMINED) {
+ tadlangcode_parser_getlangcode(&stack->langparser, &(stack->data[stack->nestlevel].currentlang));
+ tadlangcode_parser_finalize(&stack->langparser);
stack->state = TADSTACK_STATE_TEXT;
+ ret = TADSTACK_RESULT_OK;
+ } else if (parser_result == TADLANGCODE_PARSER_RESULT_CONTINUE) {
+ ret = TADSTACK_RESULT_OK;
+ } else {
+ ret = TADSTACK_RESULT_FORMAT_ERROR;
}
- ret = TADSTACK_RESULT_OK;
break;
case TADSTACK_STATE_FIG:
+ DP_STATE("FIG");
return TADSTACK_RESULT_FORMAT_ERROR;
}
switch (stack->state) {
case TADSTACK_STATE_START:
+ DP_STATE("START");
if (segid == TS_TEXT) {
ret = tadstack_handle_textsegment(stack, bin, len);
} else if (segid == TS_FIG) {
ret = tadstack_handle_figsegment(stack, bin, len);
+ } else if ((TS_TPAGE <= segid)&&(segid <= TS_TAPPL)) {
+ tadstack_pushTEXTstack(stack, (RECT){{0, 0, 0, 0}}, (RECT){{0, 0, 0, 0}}, 0, 0, 0x21, 0);
+ stack->state = TADSTACK_STATE_TEXT;
+ ret = TADSTACK_RESULT_PUSH_STACK;
} else if ((TS_FPRIM <= segid)&&(segid <= TS_FAPPL)) {
tadstack_pushFIGstack(stack, (RECT){{0, 0, 0, 0}}, (RECT){{0, 0, 0, 0}}, 0, 0, 0);
stack->state = TADSTACK_STATE_FIG;
}
break;
case TADSTACK_STATE_TEXT:
+ DP_STATE("TEXT");
if ((TS_FPRIM <= segid)&&(segid <= TS_FAPPL)) {
ret = TADSTACK_RESULT_FORMAT_ERROR;
break;
ret = TADSTACK_RESULT_OK;
break;
case TADSTACK_STATE_TEXT_LANGCODE:
+ DP_STATE("TEXT_LANGCODE");
ret = TADSTACK_RESULT_FORMAT_ERROR;
break;
case TADSTACK_STATE_FIG:
- if ((0xA0 <= segid)&&(segid <= 0xAF)) {
+ DP_STATE("FIG");
+ if ((TS_TPAGE <= segid)&&(segid <= TS_TAPPL)) {
ret = TADSTACK_RESULT_FORMAT_ERROR;
break;
}
return ret;
}
+EXPORT TADSTACK_RESULT tadstack_inputlangcode(tadstack_t *stack, tadlangcode *langcode)
+{
+ TADSTACK_RESULT ret = TADSTACK_RESULT_OK;
+
+ switch (stack->state) {
+ case TADSTACK_STATE_START:
+ DP_STATE("START");
+ tadstack_pushTEXTstack(stack, (RECT){{0, 0, 0, 0}}, (RECT){{0, 0, 0, 0}}, 0, 0, 0x21, 0);
+ stack->state = TADSTACK_STATE_TEXT;
+ stack->data[stack->nestlevel].currentlang = *langcode;
+ ret = TADSTACK_RESULT_PUSH_STACK;
+ break;
+ case TADSTACK_STATE_TEXT:
+ DP_STATE("TEXT");
+ stack->data[stack->nestlevel].currentlang = *langcode;
+ ret = TADSTACK_RESULT_LANGUAGE_CHANGE;
+ break;
+ case TADSTACK_STATE_TEXT_LANGCODE:
+ DP_STATE("TEXT_LANGCODE");
+ ret = TADSTACK_RESULT_FORMAT_ERROR;
+ break;
+ case TADSTACK_STATE_FIG:
+ DP_STATE("FIG");
+ ret = TADSTACK_RESULT_FORMAT_ERROR;
+ break;
+ }
+
+ return ret;
+}
+
EXPORT TADSTACK_RESULT tadstack_inputsegment(tadstack_t *stack, tadsegment *segment)
{
UB segid;
case TADSEGMENT_TYPE_CHARACTOR:
return tadstack_inputcharactor(stack, segment->value.ch);
case TADSEGMENT_TYPE_LANGCODE:
- /* TODO */
- return TADSTACK_RESULT_LANGUAGE_CHANGE;
+ return tadstack_inputlangcode(stack, &segment->value.lang);
}
return TADSTACK_RESULT_FORMAT_ERROR;
}
TADSTACK_STATE_FIG,
} state;
W nestlevel;
+ tadlangcode_parser_t langparser;
struct {
TADSTACK_DATATYPE type;
RECT view;
/* for text */
UH lang;
UH bgpat;
- UH currentlang[1]; /* temporary length */
+ tadlangcode currentlang;
/* for fig */
W ratio;
} data[16];
IMPORT TADSTACK_RESULT tadstack_inputvsegment(tadstack_t *stack, UH segid, UB *bin, W len);
IMPORT TADSTACK_RESULT tadstack_inputsegment(tadstack_t *stack, tadsegment *segment);
IMPORT W tadstack_nestlevel(tadstack_t *stack);
-IMPORT VOID tadstack_currentlang(tadstack_t *stack, TC **lang, W *len);
-IMPORT TADSTACK_DATATYPE tadstack_currentdata(tadstack_t *stack);
-IMPORT RECT tadstack_currentview(tadstack_t *stack);
-IMPORT RECT tadstack_currentdraw(tadstack_t *stack);
-IMPORT UNITS tadstack_currenthunit(tadstack_t *stack);
-IMPORT UNITS tadstack_currentvunit(tadstack_t *stack);
+IMPORT W tadstack_currentlangcode(tadstack_t *stack, tadlangcode *langcode);
+IMPORT W tadstack_currentdata(tadstack_t *stack, TADSTACK_DATATYPE *type);
+IMPORT W tadstack_currentview(tadstack_t *stack, RECT *r);
+IMPORT W tadstack_currentdraw(tadstack_t *stack, RECT *r);
+IMPORT W tadstack_currenthunit(tadstack_t *stack, UNITS *units);
+IMPORT W tadstack_currentvunit(tadstack_t *stack, UNITS *units);
#endif
/*
* tadtsvparser.c
*
- * Copyright (c) 2012 project bchan
+ * Copyright (c) 2012-2014 project bchan
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
#include <tcode.h>
#include "tadstack.h"
+#include "tadlangcode.h"
#ifdef BCHAN_CONFIG_DEBUG
# define DP(arg) printf arg
TADTSVPARSER_RESULT ret = TADTSVPARSER_RESULT_IGNORE_SEGMENT;
TADSTACK_RESULT stk_result;
TADSTACK_DATATYPE type;
- TC *lang;
- W lang_len;
+ tadlangcode lang;
+ Bool is_system;
+ W err;
stk_result = tadstack_inputcharactor(&parser->tadstack, ch);
if (stk_result == TADSTACK_RESULT_FORMAT_ERROR) {
case TADTSVPARSER_STATE_START:
DP_STATE("START inputcharactor");
if (stk_result == TADSTACK_RESULT_PUSH_STACK) {
- type = tadstack_currentdata(&parser->tadstack);
- if (type == TADSTACK_DATATYPE_TEXT) {
+ err = tadstack_currentdata(&parser->tadstack, &type);
+ if (!(err < 0) && (type == TADSTACK_DATATYPE_TEXT)) {
parser->state = TADTSVPARSER_STATE_READING_VALUE;
} else {
ret = TADTSVPARSER_RESULT_FORMAT_ERROR;
ret = TADTSVPARSER_RESULT_FIELD;
break;
}
- tadstack_currentlang(&parser->tadstack, &lang, &lang_len);
- //printf("lang %04x, %d, ch = %04x\n", lang[0], lang_len, ch);
- if ((lang_len == 1)&&((lang[0] & 0xFF) == 0x21)) {
+ tadstack_currentlangcode(&parser->tadstack, &lang);
+ is_system = tadlangcodecmpTC((TC[]){0xFE21}, 1, &lang);
+ if (is_system != False) {
if (ch == TK_TAB) {
ret = TADTSVPARSER_RESULT_FIELD_END;
} else if (ch == TK_NL) {
TADTSVPARSER_RESULT ret = TADTSVPARSER_RESULT_IGNORE_SEGMENT;
TADSTACK_RESULT stk_result;
TADSTACK_DATATYPE type;
- W nest;
+ W nest, err;
stk_result = tadstack_inputvsegment(&parser->tadstack, segid, bin, len);
if (stk_result == TADSTACK_RESULT_FORMAT_ERROR) {
case TADTSVPARSER_STATE_START:
DP_STATE("START inputvsegment");
if (stk_result == TADSTACK_RESULT_PUSH_STACK) {
- type = tadstack_currentdata(&parser->tadstack);
- if (type == TADSTACK_DATATYPE_TEXT) {
+ err = tadstack_currentdata(&parser->tadstack, &type);
+ if (!(err < 0) && (type == TADSTACK_DATATYPE_TEXT)) {
parser->state = TADTSVPARSER_STATE_READING_VALUE;
} else {
ret = TADTSVPARSER_RESULT_FORMAT_ERROR;
case TADTSVPARSER_STATE_READING_VALUE_NESTED_SEGMENT:
return TADTSVPARSER_RESULT_RECORD_END;
}
+ return TADTSVPARSER_RESULT_FORMAT_ERROR;
}
EXPORT VOID tadtsvparser_initialize(tadtsvparser_t *parser)
return ok;
}
+LOCAL UNITTEST_RESULT test_tadstack_3()
+{
+ tadstack_t stack;
+ tadlangcode langcode;
+ TADSTACK_DATATYPE type;
+ RECT r;
+ UNITS units;
+ W err;
+ UNITTEST_RESULT ok = UNITTEST_RESULT_PASS;
+
+ tadstack_initialize(&stack);
+
+ err = tadstack_nestlevel(&stack);
+ if (err >= 0) {
+ printf("tadstack_nestlevel: %d\n", err);
+ ok = UNITTEST_RESULT_FAIL;
+ }
+ err = tadstack_currentlangcode(&stack, &langcode);
+ if (err >= 0) {
+ printf("tadstack_currentlangcode: %d\n", err);
+ ok = UNITTEST_RESULT_FAIL;
+ }
+ err = tadstack_currentdata(&stack, &type);
+ if (err >= 0) {
+ printf("tadstack_currentdata: %d\n", err);
+ ok = UNITTEST_RESULT_FAIL;
+ }
+ err = tadstack_currentview(&stack, &r);
+ if (err >= 0) {
+ printf("tadstack_currentview: %d\n", err);
+ ok = UNITTEST_RESULT_FAIL;
+ }
+ err = tadstack_currentdraw(&stack, &r);
+ if (err >= 0) {
+ printf("tadstack_currentdraw: %d\n", err);
+ ok = UNITTEST_RESULT_FAIL;
+ }
+ err = tadstack_currenthunit(&stack, &units);
+ if (err >= 0) {
+ printf("tadstack_currenthunit: %d\n", err);
+ ok = UNITTEST_RESULT_FAIL;
+ }
+ err = tadstack_currentvunit(&stack, &units);
+ if (err >= 0) {
+ printf("tadstack_currentvunit: %d\n", err);
+ ok = UNITTEST_RESULT_FAIL;
+ }
+
+ tadstack_finalize(&stack);
+
+ return ok;
+}
+
+typedef struct {
+ W nestlevel;
+ TADSTACK_DATATYPE type;
+ TC *langcode;
+ W langlen;
+ RECT view;
+ RECT draw;
+ UNITS hunit;
+ UNITS vunit;
+} test_tadstack_validate_status_t;
+
+LOCAL Bool test_tadstack_validate_status(tadstack_t *stack, test_tadstack_validate_status_t *expected)
+{
+ tadlangcode langcode;
+ TADSTACK_DATATYPE type;
+ RECT r;
+ UNITS units;
+ W err;
+ Bool ok = True, cmp;
+
+ err = tadstack_nestlevel(stack);
+ if (err < 0) {
+ printf("tadstack_nestlevel error: %d\n", err);
+ ok = False;
+ }
+ if (expected->nestlevel != err) {
+ printf("tadstack_nestlevel: %d\n", err);
+ ok = False;
+ }
+ err = tadstack_currentdata(stack, &type);
+ if (err < 0) {
+ printf("tadstack_currentdata error: %d\n", err);
+ ok = False;
+ }
+ if (expected->type != type) {
+ printf("tadstack_currentdata: expected = %d, result = %d\n", expected->type, type);
+ ok = False;
+ }
+ if (expected->type == TADSTACK_DATATYPE_TEXT) {
+ err = tadstack_currentlangcode(stack, &langcode);
+ if (err < 0) {
+ printf("tadstack_currentlangcode error: %d\n", err);
+ ok = False;
+ }
+ cmp = tadlangcodecmpTC(expected->langcode, expected->langlen, &langcode);
+ if (cmp == False) {
+ printf("tadstack_currentlangcode: Fail\n");
+ ok = False;
+ }
+ }
+ err = tadstack_currentview(stack, &r);
+ if (err < 0) {
+ printf("tadstack_currentview error: %d\n", err);
+ ok = False;
+ }
+ if (memcmp(&expected->view, &r, sizeof(RECT)) != 0) {
+ printf("tadstack_currentview: Fail\n");
+ ok = False;
+ }
+ err = tadstack_currentdraw(stack, &r);
+ if (err < 0) {
+ printf("tadstack_currentdraw error: %d\n", err);
+ ok = False;
+ }
+ if (memcmp(&expected->draw, &r, sizeof(RECT)) != 0) {
+ printf("tadstack_currentdraw: Fail\n");
+ ok = False;
+ }
+ err = tadstack_currenthunit(stack, &units);
+ if (err < 0) {
+ printf("tadstack_currenthunit error: %d\n", err);
+ ok = False;
+ }
+ if (expected->hunit != units) {
+ printf("tadstack_currenthunit Fail: expected = %04x, result = %04x\n", expected->hunit, units);
+ ok = False;
+ }
+ err = tadstack_currentvunit(stack, &units);
+ if (err < 0) {
+ printf("tadstack_currentvunit error: %d\n", err);
+ ok = False;
+ }
+ if (expected->vunit != units) {
+ printf("tadstack_currentvunit Fail: expected = %04x, result = %04x\n", expected->vunit, units);
+ ok = False;
+ }
+
+ return ok;
+}
+
+LOCAL UNITTEST_RESULT test_tadstack_4()
+{
+ tadstack_t stack;
+ tadsegment segment;
+ TADSTACK_RESULT stk_result;
+ test_tadstack_validate_status_t expected;
+ UB textsegraw[] = {
+ 0xe1, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x88, 0xff, 0x88, 0xff,
+ 0x21, 0x00, 0x00, 0x00
+ };
+ Bool cmp;
+ UNITTEST_RESULT ok = UNITTEST_RESULT_PASS;
+
+ tadstack_initialize(&stack);
+
+ segment.type = TADSEGMENT_TYPE_VARIABLE;
+ segment.value.variable.raw = textsegraw;
+ segment.value.variable.rawlen = sizeof(textsegraw);
+
+ stk_result = tadstack_inputsegment(&stack, &segment);
+ if (stk_result != TADSTACK_RESULT_PUSH_STACK) {
+ ok = UNITTEST_RESULT_FAIL;
+ }
+
+ expected.nestlevel = 0;
+ expected.type = TADSTACK_DATATYPE_TEXT;
+ expected.langcode = (TC[]){0xFE21};
+ expected.langlen = 1;
+ expected.view = (RECT){{0,0,0,0}};
+ expected.draw = (RECT){{0,0,0,0}};
+ expected.hunit = 0xff88;
+ expected.vunit = 0xff88;
+ cmp = test_tadstack_validate_status(&stack, &expected);
+ if (cmp == False) {
+ ok = UNITTEST_RESULT_FAIL;
+ }
+
+ tadstack_finalize(&stack);
+
+ return ok;
+}
+
+LOCAL UNITTEST_RESULT test_tadstack_5()
+{
+ tadstack_t stack;
+ tadsegment segment;
+ TADSTACK_RESULT stk_result;
+ test_tadstack_validate_status_t expected;
+ UB figsegraw[] = {
+ 0xe3, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x88, 0xff, 0x88, 0xff,
+ 0x00, 0x00, 0x00, 0x00
+ };
+ Bool cmp;
+ UNITTEST_RESULT ok = UNITTEST_RESULT_PASS;
+
+ tadstack_initialize(&stack);
+
+ segment.type = TADSEGMENT_TYPE_VARIABLE;
+ segment.value.variable.raw = figsegraw;
+ segment.value.variable.rawlen = sizeof(figsegraw);
+
+ stk_result = tadstack_inputsegment(&stack, &segment);
+ if (stk_result != TADSTACK_RESULT_PUSH_STACK) {
+ ok = UNITTEST_RESULT_FAIL;
+ }
+
+ expected.nestlevel = 0;
+ expected.type = TADSTACK_DATATYPE_FIG;
+ expected.langcode = NULL;
+ expected.langlen = 0;
+ expected.view = (RECT){{0,0,0,0}};
+ expected.draw = (RECT){{0,0,0,0}};
+ expected.hunit = 0xff88;
+ expected.vunit = 0xff88;
+ cmp = test_tadstack_validate_status(&stack, &expected);
+ if (cmp == False) {
+ ok = UNITTEST_RESULT_FAIL;
+ }
+
+ tadstack_finalize(&stack);
+
+ return ok;
+}
+
+LOCAL UNITTEST_RESULT test_tadstack_6()
+{
+ tadstack_t stack;
+ tadsegment segment;
+ TADSTACK_RESULT stk_result;
+ test_tadstack_validate_status_t expected;
+ Bool cmp;
+ UNITTEST_RESULT ok = UNITTEST_RESULT_PASS;
+
+ tadstack_initialize(&stack);
+
+ segment.type = TADSEGMENT_TYPE_CHARACTOR;
+ segment.value.ch = 0x2422;
+
+ stk_result = tadstack_inputsegment(&stack, &segment);
+ if (stk_result != TADSTACK_RESULT_PUSH_STACK) {
+ ok = UNITTEST_RESULT_FAIL;
+ }
+
+ expected.nestlevel = 0;
+ expected.type = TADSTACK_DATATYPE_TEXT;
+ expected.langcode = (TC[]){0xFE21};
+ expected.langlen = 1;
+ expected.view = (RECT){{0,0,0,0}};
+ expected.draw = (RECT){{0,0,0,0}};
+ expected.hunit = 0;
+ expected.vunit = 0;
+ cmp = test_tadstack_validate_status(&stack, &expected);
+ if (cmp == False) {
+ ok = UNITTEST_RESULT_FAIL;
+ }
+
+ tadstack_finalize(&stack);
+
+ return ok;
+}
+
+LOCAL UNITTEST_RESULT test_tadstack_7()
+{
+ tadstack_t stack;
+ tadsegment segment;
+ TADSTACK_RESULT stk_result;
+ test_tadstack_validate_status_t expected;
+ UB textsegraw[] = {
+ 0xa2, 0xff, 0x06, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01
+ };
+ Bool cmp;
+ UNITTEST_RESULT ok = UNITTEST_RESULT_PASS;
+
+ tadstack_initialize(&stack);
+
+ segment.type = TADSEGMENT_TYPE_VARIABLE;
+ segment.value.variable.raw = textsegraw;
+ segment.value.variable.rawlen = sizeof(textsegraw);
+
+ stk_result = tadstack_inputsegment(&stack, &segment);
+ if (stk_result != TADSTACK_RESULT_PUSH_STACK) {
+ ok = UNITTEST_RESULT_FAIL;
+ }
+
+ expected.nestlevel = 0;
+ expected.type = TADSTACK_DATATYPE_TEXT;
+ expected.langcode = (TC[]){0xFE21};
+ expected.langlen = 1;
+ expected.view = (RECT){{0,0,0,0}};
+ expected.draw = (RECT){{0,0,0,0}};
+ expected.hunit = 0;
+ expected.vunit = 0;
+ cmp = test_tadstack_validate_status(&stack, &expected);
+ if (cmp == False) {
+ ok = UNITTEST_RESULT_FAIL;
+ }
+
+ tadstack_finalize(&stack);
+
+ return ok;
+}
+
EXPORT VOID test_tadstack_main(unittest_driver_t *driver)
{
UNITTEST_DRIVER_REGIST(driver, test_tadstack_1);
UNITTEST_DRIVER_REGIST(driver, test_tadstack_2);
+ UNITTEST_DRIVER_REGIST(driver, test_tadstack_3);
+ UNITTEST_DRIVER_REGIST(driver, test_tadstack_4);
+ UNITTEST_DRIVER_REGIST(driver, test_tadstack_5);
+ UNITTEST_DRIVER_REGIST(driver, test_tadstack_6);
+ UNITTEST_DRIVER_REGIST(driver, test_tadstack_7);
}