recutils
Data Structures | Macros | Functions
rec-types.c File Reference
#include <config.h>
#include <stdlib.h>
#include <stdio.h>
#include <regex.h>
#include <string.h>
#include <limits.h>
#include <parse-datetime.h>
#include <gettext.h>
#include <rec-utils.h>
#include <rec.h>

Data Structures

struct  rec_type_s
 
struct  rec_type_reg_entry_s
 
struct  rec_type_reg_s
 

Macros

#define _(str)   dgettext (PACKAGE, str)
 
#define REC_TYPE_INT_NAME   "int"
 
#define REC_TYPE_BOOL_NAME   "bool"
 
#define REC_TYPE_RANGE_NAME   "range"
 
#define REC_TYPE_REAL_NAME   "real"
 
#define REC_TYPE_SIZE_NAME   "size"
 
#define REC_TYPE_LINE_NAME   "line"
 
#define REC_TYPE_REGEXP_NAME   "regexp"
 
#define REC_TYPE_DATE_NAME   "date"
 
#define REC_TYPE_ENUM_NAME   "enum"
 
#define REC_TYPE_EMAIL_NAME   "email"
 
#define REC_TYPE_FIELD_NAME   "field"
 
#define REC_TYPE_REC_NAME   "rec"
 
#define REC_TYPE_BLANK_RE   "[ \t\n]"
 
#define REC_TYPE_NO_BLANK_RE   "[^ \t\n]"
 
#define REC_TYPE_BLANKS_RE   REC_TYPE_BLANK_RE "+"
 
#define REC_TYPE_NO_BLANKS_RE   REC_TYPE_NO_BLANK_RE "+"
 
#define REC_TYPE_ZBLANKS_RE   REC_TYPE_BLANK_RE "*"
 
#define REC_TYPE_INT_VALUE_RE    "^" REC_TYPE_ZBLANKS_RE REC_INT_RE REC_TYPE_ZBLANKS_RE "$"
 
#define REC_TYPE_BOOL_TRUE_VALUES_RE   "1|yes|true"
 
#define REC_TYPE_BOOL_FALSE_VALUES_RE   "0|no|false"
 
#define REC_TYPE_BOOL_VALUE_RE
 
#define REC_TYPE_REAL_VALUE_RE    "^" REC_TYPE_ZBLANKS_RE "-?([0-9]+)?(\\.[0-9]+)?" REC_TYPE_ZBLANKS_RE "$"
 
#define REC_TYPE_LINE_VALUE_RE    "^[^\n]*$"
 
#define REC_TYPE_EMAIL_VALUE_RE
 
#define REC_TYPE_ENUM_NAME_RE    "[a-zA-Z0-9][a-zA-Z0-9_-]*"
 
#define REC_TYPE_ENUM_VALUE_RE
 
#define REC_TYPE_FIELD_VALUE_RE
 
#define REC_TYPE_REC_VALUE_RE
 
#define REC_TYPE_CLASS_UUID_RE
 
#define REC_TYPE_CLASS_RE
 
#define REC_TYPE_INT_DESCR_RE    REC_TYPE_INT_NAME
 
#define REC_TYPE_BOOL_DESCR_RE    REC_TYPE_BOOL_NAME
 
#define REC_TYPE_RANGE_MINMAX_RE   "MIN | MAX"
 
#define REC_TYPE_RANGE_DESCR_RE
 
#define REC_TYPE_REAL_DESCR_RE    REC_TYPE_REAL_NAME
 
#define REC_TYPE_SIZE_DESCR_RE
 
#define REC_TYPE_LINE_DESCR_RE    REC_TYPE_LINE_NAME
 
#define REC_TYPE_REGEXP_DESCR_RE
 
#define REC_TYPE_DATE_DESCR_RE    REC_TYPE_DATE_NAME
 
#define REC_TYPE_ENUM_DESCR_RE
 
#define REC_TYPE_FIELD_DESCR_RE    REC_TYPE_FIELD_NAME
 
#define REC_TYPE_REC_DESCR_RE    REC_TYPE_REC_NAME REC_TYPE_BLANKS_RE REC_RECORD_TYPE_RE
 
#define REC_TYPE_EMAIL_DESCR_RE    REC_TYPE_EMAIL_NAME
 
#define REC_TYPE_DESCR_RE
 
#define REC_ENUM_ALLOC_NAMES   50
 
#define REC_TYPE_REG_ALLOC_TYPES   100
 

Functions

bool rec_type_descr_p (const char *str)
 
char * rec_type_descr_type (char *str)
 
rec_type_t rec_type_new (const char *str)
 
enum rec_type_kind_e rec_type_kind (rec_type_t type)
 
char * rec_type_kind_str (rec_type_t type)
 
bool rec_type_check (rec_type_t type, const char *str, char **error_str)
 
void rec_type_destroy (rec_type_t type)
 
rec_type_reg_t rec_type_reg_new (void)
 
void rec_type_reg_destroy (rec_type_reg_t reg)
 
void rec_type_reg_add (rec_type_reg_t reg, rec_type_t type)
 
void rec_type_reg_add_synonym (rec_type_reg_t reg, const char *type_name, const char *to_type)
 
rec_type_t rec_type_reg_get (rec_type_reg_t reg, const char *type_name)
 
const char * rec_type_name (rec_type_t type)
 
void rec_type_set_name (rec_type_t type, const char *name)
 
bool rec_type_equal_p (rec_type_t type1, rec_type_t type2)
 
int rec_type_min (rec_type_t type)
 
int rec_type_max (rec_type_t type)
 
const char * rec_type_rec (rec_type_t type)
 
int rec_type_values_cmp (rec_type_t type, const char *val1, const char *val2)
 

Macro Definition Documentation

◆ _

#define _ (   str)    dgettext (PACKAGE, str)

◆ REC_ENUM_ALLOC_NAMES

#define REC_ENUM_ALLOC_NAMES   50

◆ REC_TYPE_BLANK_RE

#define REC_TYPE_BLANK_RE   "[ \t\n]"

◆ REC_TYPE_BLANKS_RE

#define REC_TYPE_BLANKS_RE   REC_TYPE_BLANK_RE "+"

◆ REC_TYPE_BOOL_DESCR_RE

#define REC_TYPE_BOOL_DESCR_RE    REC_TYPE_BOOL_NAME

◆ REC_TYPE_BOOL_FALSE_VALUES_RE

#define REC_TYPE_BOOL_FALSE_VALUES_RE   "0|no|false"

◆ REC_TYPE_BOOL_NAME

#define REC_TYPE_BOOL_NAME   "bool"

◆ REC_TYPE_BOOL_TRUE_VALUES_RE

#define REC_TYPE_BOOL_TRUE_VALUES_RE   "1|yes|true"

◆ REC_TYPE_BOOL_VALUE_RE

#define REC_TYPE_BOOL_VALUE_RE
Value:
REC_TYPE_BOOL_FALSE_VALUES_RE \
#define REC_TYPE_BOOL_TRUE_VALUES_RE
Definition: rec-types.c:81
#define REC_TYPE_ZBLANKS_RE
Definition: rec-types.c:75

◆ REC_TYPE_CLASS_RE

#define REC_TYPE_CLASS_RE
Value:
REC_TYPE_REAL_NAME "|" REC_TYPE_SIZE_NAME "|" \
REC_TYPE_LINE_NAME "|" REC_TYPE_REGEXP_NAME "|" \
REC_TYPE_DATE_NAME "|" REC_TYPE_ENUM_NAME "|" \
REC_TYPE_EMAIL_NAME "|" REC_TYPE_BOOL_NAME "|" \
REC_TYPE_FIELD_NAME "|" REC_TYPE_REC_NAME \
REC_TYPE_CLASS_UUID_RE \
")"
#define REC_TYPE_BOOL_NAME
Definition: rec-types.c:53
#define REC_TYPE_RANGE_NAME
Definition: rec-types.c:54
#define REC_TYPE_SIZE_NAME
Definition: rec-types.c:56
#define REC_TYPE_INT_NAME
Definition: rec-types.c:52
#define REC_TYPE_ENUM_NAME
Definition: rec-types.c:60
#define REC_TYPE_REGEXP_NAME
Definition: rec-types.c:58

◆ REC_TYPE_CLASS_UUID_RE

#define REC_TYPE_CLASS_UUID_RE

◆ REC_TYPE_DATE_DESCR_RE

#define REC_TYPE_DATE_DESCR_RE    REC_TYPE_DATE_NAME

◆ REC_TYPE_DATE_NAME

#define REC_TYPE_DATE_NAME   "date"

◆ REC_TYPE_DESCR_RE

#define REC_TYPE_DESCR_RE
Value:
"^" \
REC_TYPE_ZBLANKS_RE \
REC_FNAME_RE "(," REC_FNAME_RE ")*" \
REC_TYPE_ZBLANKS_RE \
"(" \
"|" "(" REC_TYPE_BOOL_DESCR_RE ")" \
"|" "(" REC_TYPE_REAL_DESCR_RE ")" \
"|" "(" REC_TYPE_SIZE_DESCR_RE ")" \
"|" "(" REC_TYPE_LINE_DESCR_RE ")" \
"|" "(" REC_TYPE_DATE_DESCR_RE ")" \
"|" "(" REC_TYPE_ENUM_DESCR_RE ")" \
"|" "(" REC_TYPE_REC_DESCR_RE ")" \
")" \
REC_TYPE_ZBLANKS_RE \
"$"
#define REC_TYPE_REGEXP_DESCR_RE
Definition: rec-types.c:173
#define REC_TYPE_LINE_DESCR_RE
Definition: rec-types.c:169
#define REC_TYPE_DATE_DESCR_RE
Definition: rec-types.c:178
#define REC_TYPE_SIZE_DESCR_RE
Definition: rec-types.c:163
#define REC_TYPE_REC_DESCR_RE
Definition: rec-types.c:193
#define REC_TYPE_INT_DESCR_RE
Definition: rec-types.c:140
#define REC_TYPE_RANGE_DESCR_RE
Definition: rec-types.c:149
#define REC_TYPE_BOOL_DESCR_RE
Definition: rec-types.c:144
#define REC_TYPE_EMAIL_DESCR_RE
Definition: rec-types.c:197
#define REC_TYPE_REAL_DESCR_RE
Definition: rec-types.c:159
#define REC_TYPE_FIELD_DESCR_RE
Definition: rec-types.c:189
#define REC_TYPE_ENUM_DESCR_RE
Definition: rec-types.c:182
#define REC_FNAME_RE
Definition: rec.h:377

◆ REC_TYPE_EMAIL_DESCR_RE

#define REC_TYPE_EMAIL_DESCR_RE    REC_TYPE_EMAIL_NAME

◆ REC_TYPE_EMAIL_NAME

#define REC_TYPE_EMAIL_NAME   "email"

◆ REC_TYPE_EMAIL_VALUE_RE

#define REC_TYPE_EMAIL_VALUE_RE
Value:
"^[ \n\t]*" \
"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}" \
"[ \n\t]*$"

◆ REC_TYPE_ENUM_DESCR_RE

#define REC_TYPE_ENUM_DESCR_RE
Value:
REC_TYPE_ENUM_NAME \
REC_TYPE_BLANKS_RE \
REC_TYPE_ENUM_NAME_RE \
#define REC_TYPE_ENUM_NAME_RE
Definition: rec-types.c:100
#define REC_TYPE_BLANKS_RE
Definition: rec-types.c:73

◆ REC_TYPE_ENUM_NAME

#define REC_TYPE_ENUM_NAME   "enum"

◆ REC_TYPE_ENUM_NAME_RE

#define REC_TYPE_ENUM_NAME_RE    "[a-zA-Z0-9][a-zA-Z0-9_-]*"

◆ REC_TYPE_ENUM_VALUE_RE

#define REC_TYPE_ENUM_VALUE_RE
Value:
"^" \
REC_TYPE_ZBLANKS_RE \
REC_TYPE_ENUM_NAME_RE \
REC_TYPE_ZBLANKS_RE \
"$"

◆ REC_TYPE_FIELD_DESCR_RE

#define REC_TYPE_FIELD_DESCR_RE    REC_TYPE_FIELD_NAME

◆ REC_TYPE_FIELD_NAME

#define REC_TYPE_FIELD_NAME   "field"

◆ REC_TYPE_FIELD_VALUE_RE

#define REC_TYPE_FIELD_VALUE_RE
Value:
"^" \
REC_TYPE_ZBLANKS_RE \
REC_FNAME_RE \
REC_TYPE_ZBLANKS_RE \
"$"

◆ REC_TYPE_INT_DESCR_RE

#define REC_TYPE_INT_DESCR_RE    REC_TYPE_INT_NAME

◆ REC_TYPE_INT_NAME

#define REC_TYPE_INT_NAME   "int"

◆ REC_TYPE_INT_VALUE_RE

#define REC_TYPE_INT_VALUE_RE    "^" REC_TYPE_ZBLANKS_RE REC_INT_RE REC_TYPE_ZBLANKS_RE "$"

◆ REC_TYPE_LINE_DESCR_RE

#define REC_TYPE_LINE_DESCR_RE    REC_TYPE_LINE_NAME

◆ REC_TYPE_LINE_NAME

#define REC_TYPE_LINE_NAME   "line"

◆ REC_TYPE_LINE_VALUE_RE

#define REC_TYPE_LINE_VALUE_RE    "^[^\n]*$"

◆ REC_TYPE_NO_BLANK_RE

#define REC_TYPE_NO_BLANK_RE   "[^ \t\n]"

◆ REC_TYPE_NO_BLANKS_RE

#define REC_TYPE_NO_BLANKS_RE   REC_TYPE_NO_BLANK_RE "+"

◆ REC_TYPE_RANGE_DESCR_RE

#define REC_TYPE_RANGE_DESCR_RE
Value:
REC_TYPE_RANGE_NAME \
REC_TYPE_BLANKS_RE \
"(" \
REC_TYPE_ZBLANKS_RE \
")?"
#define REC_TYPE_RANGE_MINMAX_RE
Definition: rec-types.c:148
#define REC_INT_RE
Definition: rec-utils.h:46

◆ REC_TYPE_RANGE_MINMAX_RE

#define REC_TYPE_RANGE_MINMAX_RE   "MIN | MAX"

◆ REC_TYPE_RANGE_NAME

#define REC_TYPE_RANGE_NAME   "range"

◆ REC_TYPE_REAL_DESCR_RE

#define REC_TYPE_REAL_DESCR_RE    REC_TYPE_REAL_NAME

◆ REC_TYPE_REAL_NAME

#define REC_TYPE_REAL_NAME   "real"

◆ REC_TYPE_REAL_VALUE_RE

#define REC_TYPE_REAL_VALUE_RE    "^" REC_TYPE_ZBLANKS_RE "-?([0-9]+)?(\\.[0-9]+)?" REC_TYPE_ZBLANKS_RE "$"

◆ REC_TYPE_REC_DESCR_RE

#define REC_TYPE_REC_DESCR_RE    REC_TYPE_REC_NAME REC_TYPE_BLANKS_RE REC_RECORD_TYPE_RE

◆ REC_TYPE_REC_NAME

#define REC_TYPE_REC_NAME   "rec"

◆ REC_TYPE_REC_VALUE_RE

#define REC_TYPE_REC_VALUE_RE

◆ REC_TYPE_REG_ALLOC_TYPES

#define REC_TYPE_REG_ALLOC_TYPES   100

◆ REC_TYPE_REGEXP_DESCR_RE

#define REC_TYPE_REGEXP_DESCR_RE
Value:

◆ REC_TYPE_REGEXP_NAME

#define REC_TYPE_REGEXP_NAME   "regexp"

◆ REC_TYPE_SIZE_DESCR_RE

#define REC_TYPE_SIZE_DESCR_RE
Value:
REC_TYPE_SIZE_NAME \
REC_TYPE_BLANKS_RE \
REC_INT_RE

◆ REC_TYPE_SIZE_NAME

#define REC_TYPE_SIZE_NAME   "size"

◆ REC_TYPE_ZBLANKS_RE

#define REC_TYPE_ZBLANKS_RE   REC_TYPE_BLANK_RE "*"

Function Documentation

◆ rec_type_check()

bool rec_type_check ( rec_type_t  type,
const char *  str,
char **  error_str 
)

◆ rec_type_descr_p()

bool rec_type_descr_p ( const char *  str)

◆ rec_type_descr_type()

char* rec_type_descr_type ( char *  str)

◆ rec_type_destroy()

void rec_type_destroy ( rec_type_t  type)

◆ rec_type_equal_p()

bool rec_type_equal_p ( rec_type_t  type1,
rec_type_t  type2 
)

◆ rec_type_kind()

enum rec_type_kind_e rec_type_kind ( rec_type_t  type)

◆ rec_type_kind_str()

char* rec_type_kind_str ( rec_type_t  type)

◆ rec_type_max()

int rec_type_max ( rec_type_t  type)

◆ rec_type_min()

int rec_type_min ( rec_type_t  type)

◆ rec_type_name()

const char* rec_type_name ( rec_type_t  type)

◆ rec_type_new()

rec_type_t rec_type_new ( const char *  str)

◆ rec_type_rec()

const char* rec_type_rec ( rec_type_t  type)

◆ rec_type_reg_add()

void rec_type_reg_add ( rec_type_reg_t  reg,
rec_type_t  type 
)

◆ rec_type_reg_add_synonym()

void rec_type_reg_add_synonym ( rec_type_reg_t  reg,
const char *  type_name,
const char *  to_type 
)

◆ rec_type_reg_destroy()

void rec_type_reg_destroy ( rec_type_reg_t  reg)

◆ rec_type_reg_get()

rec_type_t rec_type_reg_get ( rec_type_reg_t  reg,
const char *  type_name 
)

◆ rec_type_reg_new()

rec_type_reg_t rec_type_reg_new ( void  )

◆ rec_type_set_name()

void rec_type_set_name ( rec_type_t  type,
const char *  name 
)

◆ rec_type_values_cmp()

int rec_type_values_cmp ( rec_type_t  type,
const char *  val1,
const char *  val2 
)