2018-05-10 22:22:37 -07:00
|
|
|
#include "tree_sitter/runtime.h"
|
2014-08-01 12:43:14 -07:00
|
|
|
#include "runtime/string_input.h"
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
2017-12-20 16:26:38 -08:00
|
|
|
static const char *ts_string_input__read(void *payload, uint32_t *bytes_read) {
|
2015-09-08 23:24:33 -07:00
|
|
|
TSStringInput *input = (TSStringInput *)payload;
|
|
|
|
|
if (input->position >= input->length) {
|
2014-08-01 12:43:14 -07:00
|
|
|
*bytes_read = 0;
|
|
|
|
|
return "";
|
|
|
|
|
}
|
2016-11-14 12:15:24 -08:00
|
|
|
uint32_t previous_position = input->position;
|
2015-09-08 23:24:33 -07:00
|
|
|
input->position = input->length;
|
|
|
|
|
*bytes_read = input->position - previous_position;
|
|
|
|
|
return input->string + previous_position;
|
2014-08-01 12:43:14 -07:00
|
|
|
}
|
|
|
|
|
|
2018-02-14 07:31:49 -08:00
|
|
|
static int ts_string_input__seek(void *payload, uint32_t byte, TSPoint _) {
|
2015-09-08 23:24:33 -07:00
|
|
|
TSStringInput *input = (TSStringInput *)payload;
|
2015-12-03 23:06:01 -08:00
|
|
|
input->position = byte;
|
|
|
|
|
return (byte < input->length);
|
2014-08-01 12:43:14 -07:00
|
|
|
}
|
|
|
|
|
|
2018-05-10 22:22:37 -07:00
|
|
|
void ts_string_input_init(TSStringInput *self, const char *string, uint32_t length) {
|
|
|
|
|
self->string = string;
|
|
|
|
|
self->position = 0;
|
|
|
|
|
self->length = length;
|
|
|
|
|
self->input = (TSInput) {
|
|
|
|
|
.payload = self,
|
2017-12-20 16:26:38 -08:00
|
|
|
.read = ts_string_input__read,
|
|
|
|
|
.seek = ts_string_input__seek,
|
2016-02-12 14:07:30 -08:00
|
|
|
.encoding = TSInputEncodingUTF8,
|
2015-09-08 23:24:33 -07:00
|
|
|
};
|
2014-08-01 12:43:14 -07:00
|
|
|
}
|