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;
- 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);
{
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);
- selected(name, (string)grm_name);
+ model.get_value(iter, 2, out grm_type);
+ selected(name, (string)grm_name, (string)grm_type);
}
}
public Gtk.ScrolledWindow scroll;
protected Gtk.TextBuffer text_buffer;
protected Gtk.TextView text;
+ protected Regex unhtml;
- 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()
{
- _grammar = "";
+ grm_name = "";
+ grm_type = "";
+ unhtml = new Regex("[ ]*<[^>]+>[ ]*", 0, 0);
text_buffer = new Gtk.TextBuffer(null);
text = new Gtk.TextView.with_buffer(text_buffer);
text.wrap_mode = Gtk.WrapMode.WORD;
public void update()
{
- string[] args = new string[3];
+ if (grm_name == "") return;
+ string[] args = new string[5];
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;
- ch.read_to_end(out result, null);
+ size_t res_len;
+ ch.read_to_end(out result, out res_len);
ch.shutdown(false);
+ if (grm_type == "line/html" || grm_type == "block/html")
+ {
+ result = unhtml.replace(result, (long)res_len, 0, " ", 0);
+ }
+
text_buffer.text = result;
Gtk.TextIter iter;
text_buffer.get_iter_at_offset(out iter, 0);
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)
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);
}
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;
- add(np[0], np[1], vals[1].strip());
+ add_grammar(np[0], np[1], vals[1], vals[2].strip());
}
notebook = new Gtk.Notebook();