1.4 KiB
1.4 KiB
fence.c
Handles opening and closing of fenced code blocks in the transpilation process.
Includes
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "internal/transpile_internal.h"
#include "utils.h"
Function Descriptions
handle_fence_open
Handles the opening of a fenced code block.
Parameters
s: Pointer to the current transpilation state.line: Pointer to the current line being processed.
Return Value
Returns 0 on success, 1 on error.
Implementation
int8_t
handle_fence_open(t_state *s, char *line)
{
char *block_ext;
block_ext = extract_fence_ext(line);
if (NULL == block_ext)
return (0);
if (0 != strcmp(block_ext, s->ext))
{
free(block_ext);
return (0);
}
free(block_ext);
if (0 == s->first_block)
{
if (0 > fprintf(s->out, "\n"))
return (1);
s->dst_line++;
}
s->first_block = 0;
s->in_block = 1;
s->block_src_start = s->src_line + 1;
s->block_dst_start = s->dst_line + 1;
return (0);
}
handle_fence_close
Handles the closing of a fenced code block.
Parameters
s: Pointer to the current transpilation state.
Implementation
int8_t
handle_fence_close(t_state *s)
{
uint32_t src_end;
uint32_t dst_end;
s->in_block = 0;
src_end = s->src_line - 1;
dst_end = s->dst_line;
if (s->block_src_start <= src_end)
{
map_add(s->map, s->block_src_start, src_end,
s->block_dst_start, dst_end);
}
return (0);
}