86 lines
1.7 KiB
Markdown
86 lines
1.7 KiB
Markdown
# core.c
|
|
Core funtion of the transpiler.
|
|
Handles reading lines and processing them according to the current state.
|
|
|
|
---
|
|
|
|
## Includes
|
|
```c
|
|
#include <stdlib.h>
|
|
|
|
#include "transpile.h"
|
|
#include "internal/transpile_internal.h"
|
|
#include "utils.h"
|
|
```
|
|
|
|
---
|
|
|
|
## Forward Declarations
|
|
|
|
```c
|
|
static int8_t process_line(t_state *s, char *line);
|
|
```
|
|
|
|
## Function Descriptions
|
|
|
|
### `transpile`
|
|
Transpiles input from a file to an output file based on the specified extension
|
|
and mapping.
|
|
|
|
#### Parameters
|
|
- `in`: Pointer to the input file.
|
|
- `out`: Pointer to the output file.
|
|
- `ext`: Pointer to the file extension string.
|
|
- `map`: Pointer to the mapping structure.
|
|
|
|
#### Return Value
|
|
Return 0 on success, or a non-zero error code on failure.
|
|
|
|
#### Implementation
|
|
```c
|
|
int8_t
|
|
transpile(FILE *in, FILE *out, const char *ext, t_map *map)
|
|
{
|
|
t_state s;
|
|
char *line;
|
|
int8_t ret;
|
|
|
|
state_init(&s, in, out, ext, map);
|
|
ret = 0;
|
|
line = read_line(in);
|
|
while (NULL != line && 0 == ret)
|
|
{
|
|
ret = process_line(&s, line);
|
|
free(line);
|
|
line = read_line(in);
|
|
}
|
|
free(line);
|
|
return (ret);
|
|
}
|
|
```
|
|
|
|
### `process_line`
|
|
Processes a single line of input based on the current state.
|
|
|
|
#### Parameters
|
|
- `s`: Pointer to the current state structure.
|
|
- `line`: Pointer to the line of text to process.
|
|
|
|
#### Return Value
|
|
Return 0 on success, or a non-zero error code on failure.
|
|
|
|
#### Implementation
|
|
```c
|
|
static int8_t
|
|
process_line(t_state *s, char *line)
|
|
{
|
|
s->src_line++;
|
|
if (0 == s->in_block && starts_with(line, "```"))
|
|
return (handle_fence_open(s, line));
|
|
if (1 == s->in_block && starts_with(line, "```"))
|
|
return (handle_fence_close(s));
|
|
if (1 == s->in_block)
|
|
return (handle_code_line(s, line));
|
|
return (0);
|
|
}
|
|
|