Forráskód Böngészése

Add prototype list implementation

Billy Barrow 2 éve
szülő
commit
82eca402c5

+ 0 - 0
src/lib/NodeActions/Item.vala


+ 21 - 0
src/lib/NodeActions/List.vala

@@ -0,0 +1,21 @@
+
+
+namespace GtkCommonMark.NodeActions {
+
+    public class List : BlockNodeAction {
+
+        public List(CMark.Node node, Gtk.TextMark start_mark) {
+            base(node, start_mark);
+        }
+
+        public override Gtk.TextTag get_tag(TagManager tags) {
+            return tags.none;
+        }
+
+        public override void at_before_child(Gtk.TextBuffer buffer, ref Gtk.TextIter iter, CMark.Node child) {
+            buffer.insert(ref iter, "• ", -1);
+        }
+
+    }
+
+}

+ 11 - 11
src/lib/NodeActions/NodeAction.vala

@@ -11,12 +11,12 @@ namespace GtkCommonMark.NodeActions {
             this.start_mark = start_mark;
         }
 
-        public abstract void at_start(Gtk.TextBuffer buffer, Gtk.TextIter iter);
-        public abstract void at_end(Gtk.TextBuffer buffer, Gtk.TextIter iter);
-        public abstract void at_after_end(Gtk.TextBuffer buffer, Gtk.TextIter iter);
+        public abstract void at_start(Gtk.TextBuffer buffer, ref Gtk.TextIter iter);
+        public abstract void at_end(Gtk.TextBuffer buffer, ref Gtk.TextIter iter);
+        public abstract void at_after_end(Gtk.TextBuffer buffer, ref Gtk.TextIter iter);
 
-        public abstract void at_before_child(Gtk.TextBuffer buffer, Gtk.TextIter iter, CMark.Node child);
-        public abstract void at_after_child(Gtk.TextBuffer buffer, Gtk.TextIter iter, CMark.Node child);
+        public abstract void at_before_child(Gtk.TextBuffer buffer, ref Gtk.TextIter iter, CMark.Node child);
+        public abstract void at_after_child(Gtk.TextBuffer buffer, ref Gtk.TextIter iter, CMark.Node child);
 
         public abstract Gtk.TextTag get_tag(TagManager tags);
     }
@@ -27,22 +27,22 @@ namespace GtkCommonMark.NodeActions {
             base(node, start_mark);
         }
 
-        public override void at_start(Gtk.TextBuffer buffer, Gtk.TextIter iter) {
+        public override void at_start(Gtk.TextBuffer buffer, ref Gtk.TextIter iter) {
             var literal = node.get_literal();
             if(literal != null) {
                 buffer.insert(ref iter, literal, -1);
             }
         }
-        public override void at_end(Gtk.TextBuffer buffer, Gtk.TextIter iter) {
+        public override void at_end(Gtk.TextBuffer buffer, ref Gtk.TextIter iter) {
             // No-op
         }
-        public override void at_after_end(Gtk.TextBuffer buffer, Gtk.TextIter iter) {
+        public override void at_after_end(Gtk.TextBuffer buffer, ref Gtk.TextIter iter) {
             // No-op
         }
-        public override void at_before_child(Gtk.TextBuffer buffer, Gtk.TextIter iter, CMark.Node child) {
+        public override void at_before_child(Gtk.TextBuffer buffer, ref Gtk.TextIter iter, CMark.Node child) {
             // No-op
         }
-        public override void at_after_child(Gtk.TextBuffer buffer, Gtk.TextIter iter, CMark.Node child) {
+        public override void at_after_child(Gtk.TextBuffer buffer, ref Gtk.TextIter iter, CMark.Node child) {
             // No-op
         }
         public override Gtk.TextTag get_tag(TagManager tags) {
@@ -56,7 +56,7 @@ namespace GtkCommonMark.NodeActions {
         public BlockNodeAction(CMark.Node node, Gtk.TextMark start_mark) {
             base(node, start_mark);
         }
-        public override void at_end(Gtk.TextBuffer buffer, Gtk.TextIter iter) {
+        public override void at_end(Gtk.TextBuffer buffer, ref Gtk.TextIter iter) {
             buffer.insert(ref iter, "\n", -1);
         }
     }

+ 5 - 5
src/lib/Reader.vala

@@ -34,7 +34,7 @@ namespace GtkCommonMark {
                 node_actions.prepend(action);
 
                 prepare_for_child();
-                action.at_start(buffer, tb_iter);
+                action.at_start(buffer, ref tb_iter);
 
                 if(is_leaf(node.get_type())) {
                     pop_and_finalise_node_action();
@@ -49,7 +49,7 @@ namespace GtkCommonMark {
             buffer.get_iter_at_mark(out start_iter, action.start_mark);
             buffer.apply_tag(action.get_tag(tags), start_iter, tb_iter);
             buffer.delete_mark(action.start_mark);
-            action.at_end(buffer, tb_iter);
+            action.at_end(buffer, ref tb_iter);
             finalise_after_child();
             node_actions.remove(action);
         }
@@ -60,7 +60,7 @@ namespace GtkCommonMark {
             }
             var child_action = node_actions.nth_data(0);
             var parent_action = node_actions.nth_data(1);
-            parent_action.at_before_child(buffer, tb_iter, child_action.node);
+            parent_action.at_before_child(buffer, ref tb_iter, child_action.node);
         }
 
         private void finalise_after_child() {
@@ -69,7 +69,7 @@ namespace GtkCommonMark {
             }
             var child_action = node_actions.nth_data(0);
             var parent_action = node_actions.nth_data(1);
-            parent_action.at_after_child(buffer, tb_iter, child_action.node);
+            parent_action.at_after_child(buffer, ref tb_iter, child_action.node);
         }
 
 
@@ -186,7 +186,7 @@ namespace GtkCommonMark {
         }
 
         protected virtual NodeActions.NodeAction build_action_for_list(CMark.Node node, Gtk.TextMark start_mark) {
-            return build_default_action(node, start_mark);
+            return new NodeActions.List(node, start_mark);
         }
 
         protected virtual NodeActions.NodeAction build_action_for_item(CMark.Node node, Gtk.TextMark start_mark) {

+ 2 - 0
src/lib/meson.build

@@ -17,6 +17,8 @@ sources += files('NodeActions/NodeAction.vala')
 sources += files('NodeActions/Heading.vala')
 sources += files('NodeActions/Emphisis.vala')
 sources += files('NodeActions/Strong.vala')
+sources += files('NodeActions/List.vala')
+sources += files('NodeActions/Item.vala')
 
 libgtkcmark = shared_library('gtkcommonmark', sources,
     dependencies: dependencies,

+ 1 - 0
src/viewer/Main.vala

@@ -31,6 +31,7 @@ int main (string[] argv) {
 
         var reader = new GtkCommonMark.Reader(buffer, tags);
         var file = GLib.FileStream.open ("/home/bbarrow/Documents/Recipes/canned_spaghetti_toast/recipe.md", "r");
+        //  var file = GLib.FileStream.open ("test.md", "r");
         var root = CMark.Node.parse_file (file, CMark.OPT.DEFAULT);
         reader.append_node (root);
 

+ 3 - 0
test.md

@@ -0,0 +1,3 @@
+# Hello World
+
+This *is* a **test** mate.