Lines Matching defs:sfp
188 static int parser_eof(sf_parser *sfp) { return sfp->pos == sfp->end; }
190 static void parser_discard_ows(sf_parser *sfp) {
191 for (; !parser_eof(sfp) && is_ws(*sfp->pos); ++sfp->pos)
195 static void parser_discard_sp(sf_parser *sfp) {
196 for (; !parser_eof(sfp) && *sfp->pos == ' '; ++sfp->pos)
200 static void parser_set_op_state(sf_parser *sfp, uint32_t op) {
201 sfp->state &= ~SF_STATE_OP_MASK;
202 sfp->state |= op;
205 static void parser_unset_inner_list_state(sf_parser *sfp) {
206 sfp->state &= ~SF_STATE_INNER_LIST;
209 static int parser_key(sf_parser *sfp, sf_vec *dest) {
212 switch (*sfp->pos) {
220 base = sfp->pos++;
222 for (; !parser_eof(sfp); ++sfp->pos) {
223 switch (*sfp->pos) {
238 dest->len = (size_t)(sfp->pos - dest->base);
244 static int parser_number(sf_parser *sfp, sf_value *dest) {
250 if (*sfp->pos == '-') {
251 ++sfp->pos;
252 if (parser_eof(sfp)) {
259 assert(!parser_eof(sfp));
261 for (; !parser_eof(sfp); ++sfp->pos) {
262 switch (*sfp->pos) {
269 value += *sfp->pos - '0';
281 if (parser_eof(sfp) || *sfp->pos != '.') {
299 ++sfp->pos;
301 for (; !parser_eof(sfp); ++sfp->pos) {
302 switch (*sfp->pos) {
309 value += *sfp->pos - '0';
345 static int parser_date(sf_parser *sfp, sf_value *dest) {
350 assert('@' == *sfp->pos);
352 ++sfp->pos;
354 if (parser_eof(sfp)) {
358 rv = parser_number(sfp, &val);
375 static int parser_string(sf_parser *sfp, sf_value *dest) {
380 assert('"' == *sfp->pos);
382 base = ++sfp->pos;
384 for (; !parser_eof(sfp); ++sfp->pos) {
385 switch (*sfp->pos) {
391 ++sfp->pos;
392 if (parser_eof(sfp)) {
396 switch (*sfp->pos) {
411 dest->vec.len = (size_t)(sfp->pos - base);
415 ++sfp->pos;
426 static int parser_token(sf_parser *sfp, sf_value *dest) {
430 base = sfp->pos++;
432 for (; !parser_eof(sfp); ++sfp->pos) {
433 switch (*sfp->pos) {
463 dest->vec.len = (size_t)(sfp->pos - base);
469 static int parser_byteseq(sf_parser *sfp, sf_value *dest) {
473 assert(':' == *sfp->pos);
475 base = ++sfp->pos;
477 for (; !parser_eof(sfp); ++sfp->pos) {
478 switch (*sfp->pos) {
485 switch ((sfp->pos - base) & 0x3) {
490 switch (*(sfp->pos - 1)) {
500 ++sfp->pos;
502 if (parser_eof(sfp) || *sfp->pos != '=') {
508 switch (*(sfp->pos - 1)) {
533 ++sfp->pos;
535 if (parser_eof(sfp) || *sfp->pos != ':') {
541 if ((sfp->pos - base) & 0x3) {
557 dest->vec.len = (size_t)(sfp->pos - base);
561 ++sfp->pos;
566 static int parser_boolean(sf_parser *sfp, sf_value *dest) {
570 assert('?' == *sfp->pos);
572 ++sfp->pos;
574 if (parser_eof(sfp)) {
578 switch (*sfp->pos) {
591 ++sfp->pos;
602 static int parser_bare_item(sf_parser *sfp, sf_value *dest) {
603 switch (*sfp->pos) {
605 return parser_string(sfp, dest);
608 return parser_number(sfp, dest);
610 return parser_date(sfp, dest);
612 return parser_byteseq(sfp, dest);
614 return parser_boolean(sfp, dest);
617 return parser_token(sfp, dest);
623 static int parser_skip_inner_list(sf_parser *sfp);
625 int sf_parser_param(sf_parser *sfp, sf_vec *dest_key, sf_value *dest_value) {
628 switch (sfp->state & SF_STATE_OP_MASK) {
630 rv = parser_skip_inner_list(sfp);
637 parser_set_op_state(sfp, SF_STATE_PARAMS);
647 if (parser_eof(sfp) || *sfp->pos != ';') {
648 parser_set_op_state(sfp, SF_STATE_AFTER);
653 ++sfp->pos;
655 parser_discard_sp(sfp);
656 if (parser_eof(sfp)) {
660 rv = parser_key(sfp, dest_key);
665 if (parser_eof(sfp) || *sfp->pos != '=') {
675 ++sfp->pos;
677 if (parser_eof(sfp)) {
681 return parser_bare_item(sfp, dest_value);
684 static int parser_skip_params(sf_parser *sfp) {
688 rv = sf_parser_param(sfp, NULL, NULL);
703 int sf_parser_inner_list(sf_parser *sfp, sf_value *dest) {
706 switch (sfp->state & SF_STATE_OP_MASK) {
708 parser_discard_sp(sfp);
709 if (parser_eof(sfp)) {
715 rv = parser_skip_params(sfp);
722 /* parser_set_op_state(sfp, SF_STATE_AFTER); */
726 if (parser_eof(sfp)) {
730 switch (*sfp->pos) {
732 parser_discard_sp(sfp);
733 if (parser_eof(sfp)) {
750 if (*sfp->pos == ')') {
751 ++sfp->pos;
753 parser_unset_inner_list_state(sfp);
754 parser_set_op_state(sfp, SF_STATE_BEFORE_PARAMS);
759 rv = parser_bare_item(sfp, dest);
764 parser_set_op_state(sfp, SF_STATE_BEFORE_PARAMS);
769 static int parser_skip_inner_list(sf_parser *sfp) {
773 rv = sf_parser_inner_list(sfp, NULL);
788 static int parser_next_key_or_item(sf_parser *sfp) {
789 parser_discard_ows(sfp);
791 if (parser_eof(sfp)) {
795 if (*sfp->pos != ',') {
799 ++sfp->pos;
801 parser_discard_ows(sfp);
802 if (parser_eof(sfp)) {
809 static int parser_dict_value(sf_parser *sfp, sf_value *dest) {
812 if (parser_eof(sfp) || *(sfp->pos) != '=') {
820 sfp->state = SF_STATE_DICT_BEFORE_PARAMS;
825 ++sfp->pos;
827 if (parser_eof(sfp)) {
831 if (*sfp->pos == '(') {
837 ++sfp->pos;
839 sfp->state = SF_STATE_DICT_INNER_LIST_BEFORE;
844 rv = parser_bare_item(sfp, dest);
849 sfp->state = SF_STATE_DICT_BEFORE_PARAMS;
854 int sf_parser_dict(sf_parser *sfp, sf_vec *dest_key, sf_value *dest_value) {
857 switch (sfp->state) {
859 rv = parser_skip_inner_list(sfp);
866 rv = parser_skip_params(sfp);
873 rv = parser_next_key_or_item(sfp);
880 parser_discard_sp(sfp);
882 if (parser_eof(sfp)) {
892 rv = parser_key(sfp, dest_key);
897 return parser_dict_value(sfp, dest_value);
900 int sf_parser_list(sf_parser *sfp, sf_value *dest) {
903 switch (sfp->state) {
905 rv = parser_skip_inner_list(sfp);
912 rv = parser_skip_params(sfp);
919 rv = parser_next_key_or_item(sfp);
926 parser_discard_sp(sfp);
928 if (parser_eof(sfp)) {
938 if (*sfp->pos == '(') {
944 ++sfp->pos;
946 sfp->state = SF_STATE_LIST_INNER_LIST_BEFORE;
951 rv = parser_bare_item(sfp, dest);
956 sfp->state = SF_STATE_LIST_BEFORE_PARAMS;
961 int sf_parser_item(sf_parser *sfp, sf_value *dest) {
964 switch (sfp->state) {
966 parser_discard_sp(sfp);
968 if (parser_eof(sfp)) {
974 rv = parser_skip_inner_list(sfp);
981 rv = parser_skip_params(sfp);
988 parser_discard_sp(sfp);
990 if (!parser_eof(sfp)) {
1000 if (*sfp->pos == '(') {
1006 ++sfp->pos;
1008 sfp->state = SF_STATE_ITEM_INNER_LIST_BEFORE;
1013 rv = parser_bare_item(sfp, dest);
1018 sfp->state = SF_STATE_ITEM_BEFORE_PARAMS;
1023 void sf_parser_init(sf_parser *sfp, const uint8_t *data, size_t datalen) {
1025 sfp->pos = sfp->end = NULL;
1027 sfp->pos = data;
1028 sfp->end = data + datalen;
1031 sfp->state = SF_STATE_INITIAL;