Files
luban-lite/packages/third-party/awtk-ui/awtk/src/layouters/self_layouter_parser.c

89 lines
2.8 KiB
C
Raw Normal View History

2023-11-09 20:19:51 +08:00
/**
* File: self_layouter_parser.c
* Author: AWTK Develop Team
* Brief: self layouter parser
*
* Copyright (c) 2018 - 2023 Guangzhou ZHIYUAN Electronics Co.,Ltd.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* License file for more details.
*
*/
/**
* History:
* ================================================================
* 2018-12-16 Li XianJing <xianjimli@hotmail.com> created
*
*/
#include "tkc/func_call_parser.h"
#include "base/self_layouter_factory.h"
#include "layouters/self_layouter_default.h"
typedef struct _self_layouter_parser_t {
func_call_parser_t base;
self_layouter_t* layouter;
} self_layouter_parser_t;
static ret_t self_layouter_parser_on_name(func_call_parser_t* parser, const char* func_name) {
self_layouter_factory_t* f = self_layouter_factory();
self_layouter_parser_t* self_layouter_parser = (self_layouter_parser_t*)parser;
return_value_if_fail(func_name != NULL, RET_BAD_PARAMS);
self_layouter_parser->layouter = self_layouter_factory_create_layouter(f, func_name);
return_value_if_fail(self_layouter_parser->layouter != NULL, RET_NOT_IMPL);
return RET_OK;
}
static ret_t self_layouter_parser_on_param(func_call_parser_t* parser, const char* name,
const char* value) {
self_layouter_parser_t* self_layouter_parser = (self_layouter_parser_t*)parser;
self_layouter_set_param_str(self_layouter_parser->layouter, name, value);
return RET_OK;
}
ret_t self_layouter_reinit(self_layouter_t* layouter) {
char* params = NULL;
self_layouter_parser_t parser;
memset(&parser, 0x00, sizeof(parser));
return_value_if_fail(layouter != NULL && layouter->params.str != NULL, RET_BAD_PARAMS);
params = layouter->params.str;
if (func_call_parser_init(&(parser.base), params, strlen(params)) != NULL) {
parser.layouter = layouter;
parser.base.on_name = NULL;
parser.base.on_param = self_layouter_parser_on_param;
func_call_parser_parse(&(parser.base));
func_call_parser_deinit(&(parser.base));
return RET_OK;
}
return RET_FAIL;
}
self_layouter_t* self_layouter_create(const char* params) {
self_layouter_t* layouter = NULL;
self_layouter_parser_t parser;
return_value_if_fail(params != NULL && params[0], NULL);
memset(&parser, 0x00, sizeof(parser));
return_value_if_fail(func_call_parser_init(&(parser.base), params, strlen(params)) != NULL, NULL);
parser.layouter = NULL;
parser.base.on_name = self_layouter_parser_on_name;
parser.base.on_param = self_layouter_parser_on_param;
func_call_parser_parse(&(parser.base));
layouter = parser.layouter;
func_call_parser_deinit(&(parser.base));
return layouter;
}