*/
#include <ctype.h>
+#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "parser.h"
int l = 0; // line length
int hc = 0; // header count
int lc = 0; // line count
- int sc = 0; // slide count
+ int sc = 1; // slide count
int bits = 0; // markdown bits
deck_t *deck = new_deck();
- slide_t *slide = new_slide();
+ slide_t *slide = deck->slide;
line_t *line = NULL;
line_t *tmp = NULL;
cstring_t *text = cstring_init();
- // assign first slide to deck
- deck->slide = slide;
- sc++;
-
while ((c = fgetc(input)) != EOF) {
+ if (ferror(input)) {
+ fprintf(stderr, "markdown_load() failed to read input: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
if(c == '\n') {
// markdown analyse
}
// split linked list
- line->prev->next = (void*)0;
- line->prev = (void*)0;
+ line->prev->next = NULL;
+ line->prev = NULL;
// remove header lines from slide
deck->slide->line = line;
}
tmp = tmp->next;
}
-
+
for(tmp = line; tmp != list_last_level_1; tmp = tmp->next) {
SET_BIT(tmp->bits, IS_UNORDERED_LIST_1);
}
// strip trailing spaces
for(eol = text->size; eol > offset && isspace((unsigned char) text->text[eol - 1]); eol--);
+ // IS_UNORDERED_LIST_#
if(text->size >= offset + 2 &&
(text->text[offset] == '*' || text->text[offset] == '-') &&
text->text[offset + 1] == ' ') {
- if(offset > unordered_list_offset + CODE_INDENT) {
- SET_BIT(bits, IS_CODE);
- } else if(offset != unordered_list_offset) {
- for(i = unordered_list_level; i >= 0; i--) {
- if(unordered_list_level_offset[i] == offset) {
- unordered_list_level = i;
- break;
+
+ for(i = offset; i<eol; i++) {
+ if(text->text[i] != '*' &&
+ text->text[i] != '-' &&
+ text->text[i] != ' ') {
+ if(offset > unordered_list_offset + CODE_INDENT) {
+ SET_BIT(bits, IS_CODE);
+ } else if(offset != unordered_list_offset) {
+ for(i = unordered_list_level; i >= 0; i--) {
+ if(unordered_list_level_offset[i] == offset) {
+ unordered_list_level = i;
+ break;
+ }
+ }
+ if(i != unordered_list_level) {
+ unordered_list_level = MIN(unordered_list_level + 1, UNORDERED_LIST_MAX_LEVEL);
+ unordered_list_level_offset[unordered_list_level] = offset;
+ }
}
- }
- if(i != unordered_list_level) {
- unordered_list_level = MIN(unordered_list_level + 1, UNORDERED_LIST_MAX_LEVEL);
- unordered_list_level_offset[unordered_list_level] = offset;
+
+ if(unordered_list_level == 0) {
+ unordered_list_level = 1;
+ unordered_list_level_offset[1] = offset;
+ }
+
+ switch(unordered_list_level) {
+ case 1: SET_BIT(bits, IS_UNORDERED_LIST_1); break;
+ case 2: SET_BIT(bits, IS_UNORDERED_LIST_2); break;
+ case 3: SET_BIT(bits, IS_UNORDERED_LIST_3); break;
+ default: break;
+ }
+
+ break;
}
}
+ }
- if(unordered_list_level == 0) {
- unordered_list_level = 1;
- unordered_list_level_offset[1] = offset;
- }
+ if(!CHECK_BIT(bits, IS_UNORDERED_LIST_1) &&
+ !CHECK_BIT(bits, IS_UNORDERED_LIST_2) &&
+ !CHECK_BIT(bits, IS_UNORDERED_LIST_3)) {
- switch(unordered_list_level) {
- case 1: SET_BIT(bits, IS_UNORDERED_LIST_1); break;
- case 2: SET_BIT(bits, IS_UNORDERED_LIST_2); break;
- case 3: SET_BIT(bits, IS_UNORDERED_LIST_3); break;
- default: break;
- }
- } else {
unordered_list_level = 0;
+ // IS_CODE
if(offset >= CODE_INDENT) {
- // IS_CODE
SET_BIT(bits, IS_CODE);
+
} else {
for(i = offset; i < eol; i++) {
if(text->text[i] == ' ') {
spaces++;
- } else if(CHECK_BIT(bits, IS_CODE)) {
- other++;
-
} else {
switch(text->text[i]) {
case '=': equals++; break;
}
}
-int is_utf8(char ch) {
- return (ch & 0x80);
+bool is_utf8(char ch) {
+ return (ch & 0x80) != 0x00;
}
int length_utf8(char ch) {
return i;
}
+int prev_blank(cstring_t *text, int i) {
+ while ((i > 0) && !isspace((unsigned char) (text->text)[i]))
+ i--;
+
+ return i;
+}
+
int next_blank(cstring_t *text, int i) {
while ((i < text->size) && !isspace((unsigned char) (text->text)[i]))
i++;
int next_word(cstring_t *text, int i) {
return next_nonblank(text, next_blank(text, i));
}
-