cleanup and small change of list spacing in #38 + shortened sample
[smdp.git] / src / parser.c
index 9ce43eb..c04facc 100644 (file)
@@ -222,22 +222,20 @@ deck_t *markdown_load(FILE *input) {
                 // delete line
                 (tmp->text->delete)(tmp->text);
                 free(tmp);
-            } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)) {
+            } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_3)) {
                 tmp = line->next;
-                line_t *list_last_level_1 = line;
+                line_t *list_last_level_3 = line;
 
                 while(tmp &&
-                      (CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_1) ||
-                       CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_2) ||
-                       CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_3))) {
-                    if(CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_1)) {
-                        list_last_level_1 = tmp;
+                      CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_3)) {
+                    if(CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_3)) {
+                        list_last_level_3 = tmp;
                     }
                     tmp = tmp->next;
                 }
 
-                for(tmp = line; tmp != list_last_level_1; tmp = tmp->next) {
-                    SET_BIT(tmp->bits, IS_UNORDERED_LIST_1);
+                for(tmp = line; tmp != list_last_level_3; tmp = tmp->next) {
+                    SET_BIT(tmp->bits, IS_UNORDERED_LIST_3);
                 }
             } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_2)) {
                 tmp = line->next;
@@ -255,20 +253,22 @@ deck_t *markdown_load(FILE *input) {
                 for(tmp = line; tmp != list_last_level_2; tmp = tmp->next) {
                     SET_BIT(tmp->bits, IS_UNORDERED_LIST_2);
                 }
-            } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_3)) {
+            } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)) {
                 tmp = line->next;
-                line_t *list_last_level_3 = line;
+                line_t *list_last_level_1 = line;
 
                 while(tmp &&
-                      CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_3)) {
-                    if(CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_3)) {
-                        list_last_level_3 = tmp;
+                      (CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_1) ||
+                       CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_2) ||
+                       CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_3))) {
+                    if(CHECK_BIT(tmp->bits, IS_UNORDERED_LIST_1)) {
+                        list_last_level_1 = tmp;
                     }
                     tmp = tmp->next;
                 }
                 
-                for(tmp = line; tmp != list_last_level_3; tmp = tmp->next) {
-                    SET_BIT(tmp->bits, IS_UNORDERED_LIST_3);
+                for(tmp = line; tmp != list_last_level_1; tmp = tmp->next) {
+                    SET_BIT(tmp->bits, IS_UNORDERED_LIST_1);
                 }
             }
 
@@ -302,41 +302,57 @@ int markdown_analyse(cstring_t *text) {
     // 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;
-        }
+                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;
+                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;
+            }
         }
-    } else {
+    }
+    
+    if(!CHECK_BIT(bits, IS_UNORDERED_LIST_1) &&
+       !CHECK_BIT(bits, IS_UNORDERED_LIST_2) &&
+       !CHECK_BIT(bits, IS_UNORDERED_LIST_3)) {
+
         unordered_list_level = 0;
 
+        // IS_CODE
         if(offset >= CODE_INDENT) {
-            // IS_CODE
             SET_BIT(bits, IS_CODE);
+
         } else {
 
             for(i = offset; i < eol; i++) {