case COLUMN_MAIL:
return datparser_convert_str(parser, str, len, TF_ATTR_CONT, &(res->mail), &(res->mail_len));
case COLUMN_DATE:
- return datparser_convert_str(parser, str, len, TF_ATTR_CONT|TF_ATTR_SUPPRESS_FUSEN, &(res->date), &(res->date_len));
+ return datparser_convert_str(parser, str, len, TF_ATTR_CONT, &(res->date), &(res->date_len));
case COLUMN_BODY:
return datparser_convert_str(parser, str, len, TF_ATTR_CONT, &(res->body), &(res->body_len));
case COLUMN_TITLE:
};
typedef enum TADITERATOR_RESULT_T_ TADITERATOR_RESULT_T;
-EXPORT W taditerator_next(taditerator_t *iterator, TC *segment, LTADSEG **seg, W *segsize, UB **data)
+EXPORT W taditerator_next(taditerator_t *iterator, TC **pos, TC *segment, LTADSEG **seg, W *segsize, UB **data)
{
- TC *ch;
+ TC *ch, *dummy_pos;
LTADSEG *seg0;
ch = iterator->bin + iterator->index;
+ if (pos == NULL) {
+ pos = &dummy_pos;
+ }
if (iterator->index >= iterator->len) {
+ *pos = ch;
return TADITERATOR_RESULT_END;
}
if ((*ch & 0xFF80) == 0xFF80) {
+ *pos = ch;
*segment = *ch & 0xFF;
seg0 = (LTADSEG*)ch;
if (seg0->len == 0xffff) {
}
return TADITERATOR_RESULT_SEGMENT;
} else {
+ *pos = ch;
*segment = *ch;
*seg = NULL;
*segsize = 2;
allsize = 0;
for (;;) {
- ret = taditerator_next(&iter, &ch, &seg, &size, &data);
+ ret = taditerator_next(&iter, NULL, &ch, &seg, &size, &data);
if (ret == TADITERATOR_RESULT_CHARCTOR) {
allsize += size;
} else if (ret == TADITERATOR_RESULT_SEGMENT) {
i = 0;
dest = (UB*)data;
for (;;) {
- ret = taditerator_next(&iter, &ch, &seg, &size, &data0);
+ ret = taditerator_next(&iter, NULL, &ch, &seg, &size, &data0);
if (ret == TADITERATOR_RESULT_CHARCTOR) {
memcpy(dest + i, &ch, size);
i += size;
return i;
}
+
+EXPORT VOID tadlib_separete_datepart(TC *str, W len, TC **date, W *date_len, TC **id, W *id_len, TC **beid, W *beid_len)
+{
+ taditerator_t iter;
+ TC ch, *pos;
+ LTADSEG *seg;
+ W size;
+ UB *data0;
+ TADITERATOR_RESULT_T ret;
+ Bool checktype = False;
+ enum {
+ PARSEDATE_DATE,
+ PARSEDATE_ID,
+ PARSEDATE_BEID
+ } target = PARSEDATE_DATE;
+
+ *date = str;
+ *date_len = 0;
+ *id = NULL;
+ *id_len = 0;
+ *beid = NULL;
+ *beid_len = 0;
+
+ taditrerator_initialize(&iter, str, len);
+
+ for (;;) {
+ ret = taditerator_next(&iter, &pos, &ch, &seg, &size, &data0);
+ if (ret == TADITERATOR_RESULT_CHARCTOR) {
+ if (checktype == True) {
+ if (ch == TK_I) {
+ switch (target) {
+ case PARSEDATE_DATE:
+ *date_len = pos - *date - 1;
+ break;
+ case PARSEDATE_ID:
+ *id_len = pos - *id - 1;
+ break;
+ case PARSEDATE_BEID:
+ *beid_len = pos - *beid - 1;
+ break;
+ }
+ *id = pos;
+ target = PARSEDATE_ID;
+ } else if (ch == TK_B) {
+ switch (target) {
+ case PARSEDATE_DATE:
+ *date_len = pos - *date - 1;
+ break;
+ case PARSEDATE_ID:
+ *id_len = pos - *id - 1;
+ break;
+ case PARSEDATE_BEID:
+ *beid_len = pos - *beid - 1;
+ break;
+ }
+ *beid = pos;
+ target = PARSEDATE_BEID;
+ }
+ checktype = False;
+ } else {
+ if (ch == TK_KSP) {
+ checktype = True;
+ }
+ }
+ } else if (ret == TADITERATOR_RESULT_SEGMENT) {
+ } else if (ret == TADITERATOR_RESULT_END) {
+ switch (target) {
+ case PARSEDATE_DATE:
+ *date_len = pos - *date;
+ break;
+ case PARSEDATE_ID:
+ *id_len = pos - *id;
+ break;
+ case PARSEDATE_BEID:
+ *beid_len = pos - *beid;
+ break;
+ }
+ break;
+ }
+ }
+
+ taditerator_finalize(&iter);
+}
IMPORT W tadlib_drawtext(TC *str, W len, GID gid, W dh, W dv);
IMPORT W tadlib_remove_TA_APPL_calcsize(TC *str, W len);
IMPORT W tadlib_remove_TA_APPL(TC *str, W len, TC *dest, W dest_len);
+IMPORT VOID tadlib_separete_datepart(TC *str, W len, TC **date, W *date_len, TC **id, W *id_len, TC **beid, W *beid_len);
typedef struct {
#if BIGENDIAN
/*
* test_layout.c
*
- * Copyright (c) 2009 project bchan
+ * Copyright (c) 2009-2010 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
return result;
}
+/* tmp */
+#include "tadlib.h"
+
+LOCAL UB test_layout_datepart_01[] = {
+"name<>sage<>2008/12/12(X) 17:28:35<> body <>title
+name<><>2008/12/19(X) 18:03:53 ID:XXXXXXX<> body <>
+name<>sage<>2008/12/12(X) 20:28:38 ID:???<> body <>
+name<>sage<>2008/12/13(X) 02:11:04 ID:XXXXXXX BE:999999999-DIA(20000)<> body <>
+name<>sage<>2008/12/16(X) 22:08:27 ID:??? BE:999999999-DIA(20000)<> body <>
+name<>sage<>2008/12/13(X) 02:11:04 BE:999999999-DIA(20000)<> body <>
+name<>sage<>2008/12/16(X) 22:08:27 BE:999999999-DIA(20000)<> body <>
+"
+};
+
+LOCAL TEST_RESULT test_layout_datepart_1()
+{
+ LINK test_lnk;
+ TC *date, *id, *beid;
+ W date_len, id_len, beid_len;
+ W i, fd, err;
+ VID vid;
+ datcache_t *cache;
+ datparser_t *parser;
+ datparser_res_t *res = NULL;
+ TEST_RESULT result = TEST_RESULT_PASS;
+
+ fd = test_parser_util_gen_file(&test_lnk, &vid);
+ if (fd < 0) {
+ return TEST_RESULT_FAIL;
+ }
+ cls_fil(fd);
+
+ cache = datcache_new(vid);
+ datcache_appenddata(cache, test_layout_datepart_01, strlen(test_layout_datepart_01));
+
+ parser = datparser_new(cache);
+
+ for (i = 0;; i++) {
+ err = datparser_getnextres(parser, &res);
+ if (err != 1) {
+ break;
+ }
+ if (res != NULL) {
+ tadlib_separete_datepart(res->date, res->date_len, &date, &date_len, &id, &id_len, &beid, &beid_len);
+ //printf("date len = %d, id len = %d, beid len = %d\n", date_len, id_len, beid_len);
+ switch (i) { /* TODO: should compair result TAD. */
+ case 0:
+ if (date_len != 27) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (id_len != 0) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (beid_len != 0) {
+ result = TEST_RESULT_FAIL;
+ }
+ break;
+ case 1:
+ if (date_len != 27) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (id_len != 10) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (beid_len != 0) {
+ result = TEST_RESULT_FAIL;
+ }
+ break;
+ case 2:
+ if (date_len != 27) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (id_len != 6) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (beid_len != 0) {
+ result = TEST_RESULT_FAIL;
+ }
+ break;
+ case 3:
+ if (date_len != 27) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (id_len != 10) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (beid_len != 23) {
+ result = TEST_RESULT_FAIL;
+ }
+ break;
+ case 4:
+ if (date_len != 27) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (id_len != 6) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (beid_len != 23) {
+ result = TEST_RESULT_FAIL;
+ }
+ break;
+ case 5:
+ if (date_len != 27) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (id_len != 0) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (beid_len != 23) {
+ result = TEST_RESULT_FAIL;
+ }
+ break;
+ case 6:
+ if (date_len != 27) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (id_len != 0) {
+ result = TEST_RESULT_FAIL;
+ }
+ if (beid_len != 23) {
+ result = TEST_RESULT_FAIL;
+ }
+ break;
+ default:
+ result = TEST_RESULT_FAIL;
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+
+ datparser_delete(parser);
+
+ datcache_delete(cache);
+
+ err = odel_vob(vid, 0);
+ if (err < 0) {
+ printf("error odel_vob:%d\n", err >> 16);
+ result = TEST_RESULT_FAIL;
+ }
+ err = del_fil(NULL, &test_lnk, 0);
+ if (err < 0) {
+ printf("error del_fil:%d\n", err >> 16);
+ result = TEST_RESULT_FAIL;
+ }
+
+ return result;
+}
+
LOCAL VOID test_layout_printresult(TEST_RESULT (*proc)(), B *test_name)
{
TEST_RESULT result;
EXPORT VOID test_layout_main()
{
test_layout_printresult(test_layout_1, "test_layout_1");
+ test_layout_printresult(test_layout_datepart_1, "test_layout_datepart_1");
}