GeneratePattern() public abstract method

public abstract GeneratePattern ( FeatureSystem featSys ) : ShapeNode>.PatternNode
featSys FeatureSystem
return ShapeNode>.PatternNode
Ejemplo n.º 1
0
        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
            });
        }