1/* -*- c-basic-offset: 2 -*- */
2/*
3 Copyright(C) 2015-2016 Brazil
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License version 2.1 as published by the Free Software Foundation.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17*/
18
19#pragma once
20
21#include "../grn.h"
22
23#include "ts_types.h"
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29/*-------------------------------------------------------------
30 * Byte.
31 */
32
33/* grn_ts_byte_is_decimal() returns whether or not a byte is decimal. */
34grn_ts_bool grn_ts_byte_is_decimal(uint8_t byte);
35
36/*
37 * grn_ts_byte_is_name_char() returns whether or not a byte is allowed as a
38 * part of a name.
39 */
40grn_ts_bool grn_ts_byte_is_name_char(uint8_t byte);
41
42/*-------------------------------------------------------------
43 * String.
44 */
45
46typedef struct {
47 const char *ptr; /* The starting address. */
48 size_t size; /* The size in bytes. */
49} grn_ts_str;
50
51/* grn_ts_str_has_prefix() returns whether or not str starts with prefix. */
52grn_ts_bool grn_ts_str_starts_with(grn_ts_str str, grn_ts_str prefix);
53
54/* grn_ts_str_trim_left() returns a string without leading white-spaces. */
55grn_ts_str grn_ts_str_trim_left(grn_ts_str str);
56
57/*
58 * grn_ts_str_trim_score_assignment() returns a string without leading
59 * white-spaces and an assignment to _score. If `str` does not start with
60 * an assignment, this function returns `grn_ts_str_trim_left(str)`.
61 */
62grn_ts_str grn_ts_str_trim_score_assignment(grn_ts_str str);
63
64/*
65 * grn_ts_str_has_number_prefix() returns whether or not a string starts with a
66 * number or not.
67 */
68grn_ts_bool grn_ts_str_has_number_prefix(grn_ts_str str);
69
70/*
71 * grn_ts_str_is_name_prefix() returns whether or not a string is valid as a
72 * name prefix. Note that an empty string is a name prefix.
73 */
74grn_ts_bool grn_ts_str_is_name_prefix(grn_ts_str str);
75
76/*
77 * grn_ts_str_is_name() returns whether or not a string is valid as a name.
78 * Note that an empty string is invalid as a name.
79 */
80grn_ts_bool grn_ts_str_is_name(grn_ts_str str);
81
82/* grn_ts_str_is_true() returns str == "true". */
83grn_ts_bool grn_ts_str_is_true(grn_ts_str str);
84
85/* grn_ts_str_is_false() returns str == "false". */
86grn_ts_bool grn_ts_str_is_false(grn_ts_str str);
87
88/* grn_ts_str_is_bool() returns (str == "true") || (str == "false"). */
89grn_ts_bool grn_ts_str_is_bool(grn_ts_str str);
90
91/* grn_ts_str_is_id_name() returns str == "_id". */
92grn_ts_bool grn_ts_str_is_id_name(grn_ts_str str);
93
94/* grn_ts_str_is_score_name() returns str == "_score". */
95grn_ts_bool grn_ts_str_is_score_name(grn_ts_str str);
96
97/* grn_ts_str_is_key_name() returns str == "_key". */
98grn_ts_bool grn_ts_str_is_key_name(grn_ts_str str);
99
100/* grn_ts_str_is_value_name() returns str == "_value". */
101grn_ts_bool grn_ts_str_is_value_name(grn_ts_str str);
102
103#ifdef __cplusplus
104}
105#endif
106
107