using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using miew.BitArray;
using miew.String;
using miew.Enumerable;
using miew.Debugging;
using miew.Tokenization;
using agree;
//using tldb;
#if false
var pf = new PetFormatter(g.loadtray);
//Console.WriteLine(pf.GetPetFormattedEdge(g.tm.type_dict["nom_relation"]));
//return;
//Console.WriteLine();
//Console.WriteLine(pf.GetPetFormattedEdge(g.tm.type_dict["handle"]));
using (StreamWriter sw1 = new StreamWriter(@"agree-fs-dump.txt"))
using (StreamWriter sw2 = new StreamWriter(@"pet-fs-dump.txt"))
{
foreach (agree.Type t in pf.OrderByPet(g.tm.AllTypes.Where(tz => !tz.Name.StartsWith("glbtype"))))
{
sw1.WriteLine(pf.GetPetFormattedEdge(t));
sw2.WriteLine(pf.pet_fs_dict[t.Name]);
}
}
return;
#endif
public class PetFormatter
{
static readonly String[] sc7 = { "\t\"", "\" ", "(", ")", "\t" };
Dictionary<String, int> pet_sym_map;
Tfs.MonospaceFormatter mf;
public Dictionary<String, String> pet_fs_dict;
public PetFormatter(Grammar g)
{
pet_sym_map = File.ReadAllLines("/programming/analytical-grammar/erg-funcs/pet-symbol-key.txt")
.Select(s => s.Split(sc7, StringSplitOptions.RemoveEmptyEntries))
.Where(rgs => rgs.Length == 3)
.Select(rgs => new { id = int.Parse(rgs[0]), sym = rgs[1].Trim() })
._GroupBy(r => r.sym, StringComparer.InvariantCultureIgnoreCase)
.Select(gz => gz.ArgMin(r => r.id))
.ToDictionary(r => r.sym, r => r.id, StringComparer.InvariantCultureIgnoreCase);
//int max_id = pet_sym_map.Values.Max();
mf = new Tfs.MonospaceFormatter(g.tm);
mf.FeatureDisplayOrder = File.ReadAllText("/programming/analytical-grammar/erg-funcs/pet-feat-order.txt")
.ToUpper()
.Split()
.Select(s => s.Trim())
.Where(s => s != String.Empty)
.Select(s => g.tm.feat_map[s].i_feat)
.ToArray();
String[] sc4 = { "\n(" };
pet_fs_dict = File.ReadAllText("/programming/analytical-grammar/erg-funcs/fs-dump.txt")
.Split(sc4, StringSplitOptions.RemoveEmptyEntries)
.ToDictionary(s =>
{
String title = s.Lines().First();
return title.Substring(title.IndexOf(')') + 2);
}, s => "(" + s);
}
public IEnumerable<agree.Type> OrderByPet(IEnumerable<agree.Type> seq)
{
return seq.OrderBy(t => pet_sym_map[t.Name]);
}
public String GetPetFormattedEdge(agree.Type t)
{
return String.Format("({0}) ", pet_sym_map[t.Name].ToString()) + mf.FormatEdge(t.Expanded);
}
};