1 /* -*- Mode: c; c-basic-offset: 2 -*-
2  *
3  * sv.h - Header for libsv
4  *
5  * Copyright (C) 2009-2013, David Beckett http://www.dajobe.org/
6  *
7  * This package is Free Software
8  *
9  * It is licensed under the following three licenses as alternatives:
10  *   1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
11  *   2. GNU General Public License (GPL) V2 or any newer version
12  *   3. Apache License, V2.0 or any newer version
13  *
14  * You may not use this file except in compliance with at least one of
15  * the above three licenses.
16  *
17  * See LICENSE.txt at the top of this package for the
18  * complete terms and further detail along with the license texts for
19  * the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
20  *
21  */
22 
23 
24 /**
25  * sv_status_t:
26  * @SV_STATUS_OK: OK
27  * @SV_STATUS_FAILED: Failure
28  * @SV_STATUS_NO_MEMORY: Out of memory
29  * @SV_STATUS_LINE_FIELDS: Line had wrong number of fields
30  *
31  * Status / errors
32 */
33 typedef enum {
34   SV_STATUS_OK = 0,
35   SV_STATUS_FAILED,
36   SV_STATUS_NO_MEMORY,
37   SV_STATUS_LINE_FIELDS
38 } sv_status_t;
39 
40 typedef struct sv_s sv;
41 
42 /**
43  * @sv_fields_callback:
44  * @t: sv object
45  * @user_data: user data
46  * @fields: array of fields
47  * @widths: array of field widths
48  * @count: size of @fields and @widths
49  *
50  * Callback function for sv_new() header_callback and data_callback
51  *
52  * Return value: #SV_STATUS_OK or error code
53  */
54 typedef sv_status_t (*sv_fields_callback)(sv *t, void *user_data, char** fields, size_t *widths, size_t count);
55 
56 /**
57  * @sv_line_callback:
58  * @t: sv object
59  * @user_data: user data
60  * @line: line buffer
61  * @length: size of @line
62  *
63  * Callback function for lines set via sv_set_option() with #SV_OPTION_LINE_CALLBACK
64  *
65  * Return value: #SV_STATUS_OK or error code
66  */
67 typedef sv_status_t (*sv_line_callback)(sv *t, void *user_data, const char* line, size_t length);
68 
69 
70 /**
71  * sv_option_t:
72  *
73  * @SV_OPTION_NONE: internal
74  * @SV_OPTION_SAVE_HEADER: save header boolean; type long
75  * @SV_OPTION_BAD_DATA_ERROR: bad dad is error boolean; type long
76  * @SV_OPTION_QUOTED_FIELDS: fields are quoted boolean; type long
77  * @SV_OPTION_STRIP_WHITESPACE: strip whitespace around fields boolean; type long
78  * @SV_OPTION_QUOTE_CHAR: set field quote char; type int (char)
79  * @SV_OPTION_LINE_CALLBACK: Set line callback of type #sv_line_callback
80  *
81  * Option type
82  */
83 typedef enum {
84   SV_OPTION_NONE = 0,
85   SV_OPTION_SAVE_HEADER,
86   SV_OPTION_BAD_DATA_ERROR,
87   SV_OPTION_QUOTED_FIELDS,
88   SV_OPTION_STRIP_WHITESPACE,
89   SV_OPTION_QUOTE_CHAR,
90   SV_OPTION_LINE_CALLBACK
91 } sv_option_t;
92 
93 sv* sv_new(void *user_data, sv_fields_callback header_callback, sv_fields_callback data_callback, char field_sep);
94 void sv_free(sv *t);
95 
96 sv_status_t sv_set_option(sv *t, sv_option_t option, ...);
97 
98 int sv_get_line(sv *t);
99 const char* sv_get_header(sv *t, unsigned int i, size_t *width_p);
100 
101 sv_status_t sv_parse_chunk(sv *t, char *buffer, size_t len);
102 
103