public void Compile()
{
m_featSys = new FeatureSystem
{
new SymbolicFeature("type",
new FeatureSymbol("bdry", "Boundary"),
new FeatureSymbol("word", "Word"),
new FeatureSymbol("morph", "Morph"),
new FeatureSymbol("ttag", "Text Tag"))
{
Description = "Type"
},
new SymbolicFeature("anchorType",
new FeatureSymbol("paraBdry", "Paragraph"),
new FeatureSymbol("segBdry", "Segment"),
new FeatureSymbol("wordBdry", "Word"))
};
foreach (CoreWritingSystemDefinition ws in m_cache.ServiceLocator.WritingSystems.CurrentVernacularWritingSystems)
{
m_featSys.Add(new StringFeature(string.Format("entry-{0}", ws.Handle))
{
Description = string.Format("Entry-{0}", ws.Abbreviation)
});
m_featSys.Add(new StringFeature(string.Format("form-{0}", ws.Handle))
{
Description = string.Format("Form-{0}", ws.Abbreviation)
});
}
foreach (CoreWritingSystemDefinition ws in m_cache.ServiceLocator.WritingSystems.CurrentAnalysisWritingSystems)
{
m_featSys.Add(new StringFeature(string.Format("gloss-{0}", ws.Handle))
{
Description = string.Format("Gloss-{0}", ws.Abbreviation)
});
}
m_featSys.Add(new SymbolicFeature("cat", m_cache.ServiceLocator.GetInstance <IPartOfSpeechRepository>().AllInstances()
.Select(pos => new FeatureSymbol(pos.Hvo.ToString(CultureInfo.InvariantCulture), pos.Abbreviation.BestAnalysisAlternative.Text)))
{
Description = "Category"
});
m_featSys.Add(new SymbolicFeature("tag", m_cache.LangProject.TextMarkupTagsOA.PossibilitiesOS
.SelectMany(poss => poss.SubPossibilitiesOS, (category, tag) => new FeatureSymbol(tag.Hvo.ToString(CultureInfo.InvariantCulture), tag.Abbreviation.BestAnalysisAlternative.Text)))
{
Description = "Tag"
});
m_featSys.Add(new ComplexFeature("infl")
{
Description = "Infl", DefaultValue = FeatureStruct.New().Value
});
foreach (IFsFeatDefn feature in m_cache.LangProject.MsFeatureSystemOA.FeaturesOC)
{
var complexFeat = feature as IFsComplexFeature;
if (complexFeat != null)
{
m_featSys.Add(new ComplexFeature(complexFeat.Hvo.ToString(CultureInfo.InvariantCulture))
{
Description = complexFeat.Abbreviation.BestAnalysisAlternative.Text, DefaultValue = FeatureStruct.New().Value
});
}
else
{
var closedFeat = (IFsClosedFeature)feature;
m_featSys.Add(new SymbolicFeature(closedFeat.Hvo.ToString(CultureInfo.InvariantCulture), closedFeat.ValuesOC.Select(sym =>
new FeatureSymbol(sym.Hvo.ToString(CultureInfo.InvariantCulture), sym.Abbreviation.BestAnalysisAlternative.Text))
.Concat(new FeatureSymbol(closedFeat.Hvo.ToString(CultureInfo.InvariantCulture) + "_us", "unspecified")))
{
Description = closedFeat.Abbreviation.BestAnalysisAlternative.Text,
DefaultSymbolID = closedFeat.Hvo.ToString(CultureInfo.InvariantCulture) + "_us"
});
}
}
var pattern = new Pattern <ComplexConcParagraphData, ShapeNode>();
pattern.Children.Add(m_root.GeneratePattern(m_featSys));
m_matcher = new Matcher <ComplexConcParagraphData, ShapeNode>(m_spanFactory, pattern, new MatcherSettings <ShapeNode> {
UseDefaults = true
});
}