Moved polygen into misc/ menu
[gregoa/zavai.git] / src / app_polygen.vala
index 7ee4ea86cae8691e5a999eaa998995240ef86d31..0fe16f8d5766b89713a8ac2529b7780f0186336f 100644 (file)
@@ -30,12 +30,12 @@ protected class PolygenPage : Object
     public Gtk.ListStore model;
     public Gtk.TreeView list;
     public Gtk.ScrolledWindow scroll;
     public Gtk.ListStore model;
     public Gtk.TreeView list;
     public Gtk.ScrolledWindow scroll;
-    public signal void selected(string page, string name);
+    public signal void selected(string page, string name, string type);
 
     public PolygenPage(string name)
     {
         this.name = name;
 
     public PolygenPage(string name)
     {
         this.name = name;
-        model = new Gtk.ListStore(2, typeof(string), typeof(string));
+        model = new Gtk.ListStore(3, typeof(string), typeof(string), typeof(string));
         list = new Gtk.TreeView.with_model(model);
         list.insert_column_with_attributes (-1, "Name", new Gtk.CellRendererText(), "text", 0);
         list.insert_column_with_attributes (-1, "Title", new Gtk.CellRendererText(), "text", 1);
         list = new Gtk.TreeView.with_model(model);
         list.insert_column_with_attributes (-1, "Name", new Gtk.CellRendererText(), "text", 0);
         list.insert_column_with_attributes (-1, "Title", new Gtk.CellRendererText(), "text", 1);
@@ -50,9 +50,10 @@ protected class PolygenPage : Object
     {
         Gtk.TreeIter iter;
         if (!model.get_iter(out iter, path)) return;
     {
         Gtk.TreeIter iter;
         if (!model.get_iter(out iter, path)) return;
-        Value grm_name;
+        Value grm_name, grm_type;
         model.get_value(iter, 0, out grm_name);
         model.get_value(iter, 0, out grm_name);
-        selected(name, (string)grm_name);
+        model.get_value(iter, 2, out grm_type);
+        selected(name, (string)grm_name, (string)grm_type);
     }
 }
 
     }
 }
 
@@ -61,19 +62,18 @@ protected class PolygenRun : Gtk.VBox
     public Gtk.ScrolledWindow scroll;
     protected Gtk.TextBuffer text_buffer;
     protected Gtk.TextView text;
     public Gtk.ScrolledWindow scroll;
     protected Gtk.TextBuffer text_buffer;
     protected Gtk.TextView text;
+    protected Regex unhtml;
+    protected Regex seplines;
 
 
-    private string _grammar;
-    public string grammar {
-        get { return _grammar; }
-        set {
-            _grammar = value;
-            update();
-        }
-    }
+    public string grm_name { get; set; }
+    public string grm_type { get; set; }
 
     public PolygenRun()
     {
 
     public PolygenRun()
     {
-        _grammar = "";
+        grm_name = "";
+        grm_type = "";
+        unhtml = new Regex("[ ]*<[^>]+>[ ]*", 0, 0);
+        seplines = new Regex("\n");
         text_buffer = new Gtk.TextBuffer(null);
         text = new Gtk.TextView.with_buffer(text_buffer);
         text.wrap_mode = Gtk.WrapMode.WORD;
         text_buffer = new Gtk.TextBuffer(null);
         text = new Gtk.TextView.with_buffer(text_buffer);
         text.wrap_mode = Gtk.WrapMode.WORD;
@@ -95,17 +95,34 @@ protected class PolygenRun : Gtk.VBox
 
     public void update()
     {
 
     public void update()
     {
-        string[] args = new string[3];
+        if (grm_name == "") return;
+        string[] args = new string[5];
         args[0] = "/usr/bin/polygen";
         args[0] = "/usr/bin/polygen";
-        args[1] = "/usr/share/polygen/" + _grammar + ".grm";
-        args[2] = null;
+        args[1] = "/usr/share/polygen/" + grm_name + ".grm";
+        if (grm_type == "line/text" || grm_type == "line/html")
+        {
+            args[2] = "-X";
+            args[3] = "10";
+            args[4] = null;
+        }
+        else
+            args[2] = null;
         int pipe_out;
         Process.spawn_async_with_pipes(config.homedir, args, null, 0, null, null, null, out pipe_out, null);
         IOChannel ch = new IOChannel.unix_new(pipe_out);
         string result;
         int pipe_out;
         Process.spawn_async_with_pipes(config.homedir, args, null, 0, null, null, null, out pipe_out, null);
         IOChannel ch = new IOChannel.unix_new(pipe_out);
         string result;
-        ch.read_to_end(out result, null);
+        size_t res_len;
+        ch.read_to_end(out result, out res_len);
         ch.shutdown(false);
 
         ch.shutdown(false);
 
+        if (grm_type == "line/html" || grm_type == "block/html")
+        {
+            result = unhtml.replace(result, (long)res_len, 0, " ", 0);
+        } else if (grm_type == "line/text") {
+            result = seplines.replace(result, (long)res_len, 0, "\n\n", 0);
+        }
+        
+
         text_buffer.text = result;
         Gtk.TextIter iter;
         text_buffer.get_iter_at_offset(out iter, 0);
         text_buffer.text = result;
         Gtk.TextIter iter;
         text_buffer.get_iter_at_offset(out iter, 0);
@@ -120,7 +137,7 @@ public class Polygen : Applet
     protected Gtk.Notebook notebook;
     protected PolygenRun result;
 
     protected Gtk.Notebook notebook;
     protected PolygenRun result;
 
-    private void add(string page, string name, string title)
+    private void add_grammar(string page, string name, string type, string title)
     {
         PolygenPage pg = null;
         foreach (PolygenPage p in pages)
     {
         PolygenPage pg = null;
         foreach (PolygenPage p in pages)
@@ -142,11 +159,14 @@ public class Polygen : Applet
         pg.model.append (out iter);
         pg.model.set(iter, 0, name);
         pg.model.set(iter, 1, title);
         pg.model.append (out iter);
         pg.model.set(iter, 0, name);
         pg.model.set(iter, 1, title);
+        pg.model.set(iter, 2, type);
     }
 
     }
 
-    protected void on_selected(string page, string name)
+    protected void on_selected(string page, string name, string type)
     {
     {
-        result.grammar = page + "/" + name;
+        result.grm_name = page + "/" + name;
+        result.grm_type = type;
+        result.update();
         notebook.set_current_page(notebook.get_n_pages()-1);
     }
 
         notebook.set_current_page(notebook.get_n_pages()-1);
     }
 
@@ -160,11 +180,11 @@ public class Polygen : Applet
             string line;
             var res = data.read_line(out line, null, null);
             if (res != IOStatus.NORMAL) break;
             string line;
             var res = data.read_line(out line, null, null);
             if (res != IOStatus.NORMAL) break;
-            string[] vals = line.split(" ", 2);
+            string[] vals = line.split(" ", 3);
             if (vals == null) break;
             string[] np = vals[0].split("/", 2);
             if (np == null) break;
             if (vals == null) break;
             string[] np = vals[0].split("/", 2);
             if (np == null) break;
-            add(np[0], np[1], vals[1].strip());
+            add_grammar(np[0], np[1], vals[1], vals[2].strip());
         }
 
         notebook = new Gtk.Notebook();
         }
 
         notebook = new Gtk.Notebook();
@@ -183,36 +203,21 @@ Polygen polygen;
 
 public void init()
 {
 
 public void init()
 {
+    var menu_misc = new zavai.Menu("Misc");
+    zavai.registry.register_menu("menu.misc", menu_misc);
+    zavai.registry.getmenu("menu.main").add_applet("menu.misc");
+
     try {
         var data = new IOChannel.file(zavai.config.homedir + "/polygen-info", "r");
         polygen = new Polygen("Polygen", data);
         data.shutdown(false);
 
         zavai.registry.register_applet("ui.polygen", polygen);
     try {
         var data = new IOChannel.file(zavai.config.homedir + "/polygen-info", "r");
         polygen = new Polygen("Polygen", data);
         data.shutdown(false);
 
         zavai.registry.register_applet("ui.polygen", polygen);
-        zavai.registry.getmenu("menu.main").add_applet("ui.polygen");
+        zavai.registry.getmenu("menu.misc").add_applet("ui.polygen");
     } catch (FileError e) {
         polygen = null;
         zavai.log.error("Skipping polygen plugin: " + e.message);
     }
     } catch (FileError e) {
         polygen = null;
         zavai.log.error("Skipping polygen plugin: " + e.message);
     }
-
-    /*
-       window_list = new WindowList("Current apps");
-       zavai.registry.register_applet("wm.list", window_list);
-       zavai.registry.getmenu("menu.main").add_applet("wm.list");
-
-       try {
-               launcher = new Launcher("Run program");
-       } catch (Error e) {
-               zavai.log.error("Not running launcher: " + e.message);
-               launcher = null;
-       }
-
-       if (launcher != null)
-       {
-               zavai.registry.register_applet("wm.launcher", launcher);
-               zavai.registry.getmenu("menu.main").add_applet("wm.launcher");
-       }
-    */
 }
 
 }
 }
 
 }