示例#1
0
        public static SenseSequence GetSenseSequence(this IEnumerable <IEnumerable <JArray> > source)
        {
            var result = new SenseSequence();

            source.SelectMany(inner => inner.ApplyConversions(conversions).Senses).ToList().ForEach(sense => result.Add(sense.Value));
            return(result);
        }
示例#2
0
        private static void AddParenthesizedSenseSequence(SenseSequence sequence, JArray array)
        {
            var result = array.ParseNextAs <IEnumerable <JArray> >().GetParenthesizedSenseSequence();

            //var result = JsonConvert.DeserializeObject<IEnumerable<JArray>>(array[1].ToString()).GetParenthesizedSenseSequence();
            result.ToSenses().ToList().ForEach(sequence.Add);
        }
示例#3
0
        /// <summary>
        /// Parses the input definition into a collection of <see cref="Dto.Sense"/>s.
        /// </summary>
        public void Parse(Definition definition)
        {
            if (definition == null)
            {
                return;
            }

            foreach (var sourceSseqs in _def.SenseSequences)
            {
                var senseSequence = new SenseSequence();

                foreach (var sourceSseq in sourceSseqs)
                {
                    // sourceSseq comes in pairs: a string that defines the object ("sense", "sen", "pseq", etc.) , followed by the actual object
                    if (sourceSseq.Length == 2)
                    {
                        if (sourceSseq[0].Name == Response.SseqEnum.Bs)
                        {
                            var sourceSense = sourceSseq[1].Sense;

                            // a binding substitute (bs) should always contain a nested sense object
                            if (sourceSense?.SubSense != null)
                            {
                                var sense = ParseGeneralSenseProperties <Sense>(sourceSense.SubSense);
                                sense.SenseNumber = sourceSense.SubSense.SenseNumber;
                                ParseSpecificSenseProperties(sourceSense.SubSense, sense);
                                sense.IsBindingSubstitute = true;

                                senseSequence.Senses.Add(sense);
                            }
                        }

                        if (sourceSseq[0].Name == Response.SseqEnum.Sense)
                        {
                            var sourceSense = sourceSseq[1].Sense;
                            if (sourceSense != null)
                            {
                                var sense = ParseGeneralSenseProperties <Sense>(sourceSense);
                                sense.SenseNumber = sourceSense.SenseNumber;
                                ParseSpecificSenseProperties(sourceSense, sense);

                                if (sourceSense.CrossReferences.Any())
                                {
                                    sense.CrossReferences = CrossReferenceHelper.Parse(sourceSense.CrossReferences).ToList();
                                }

                                senseSequence.Senses.Add(sense);
                            }
                        }
                        else if (sourceSseq[0].Name == Response.SseqEnum.Sen)
                        {
                            var sourceSense = sourceSseq[1].Sense;
                            if (sourceSense != null)
                            {
                                var sense = ParseGeneralSenseProperties <Sense>(sourceSense);
                                sense.SenseNumber      = sourceSense.SenseNumber;
                                sense.IsTruncatedSense = true;

                                if (sourceSense.CrossReferences.Any())
                                {
                                    sense.CrossReferences = CrossReferenceHelper.Parse(sourceSense.CrossReferences).ToList();
                                }

                                senseSequence.Senses.Add(sense);
                            }
                        }
                        else if (sourceSseq[0].Name == Response.SseqEnum.Pseq && sourceSseq[1].SenseSequences != null)
                        {
                            var pseq = new SenseSequenceSense()
                            {
                                IsParenthesizedSenseSequence = true,
                                Senses = new List <SenseSequenceSense>()
                            };

                            foreach (var sourceSequence in sourceSseq[1].SenseSequences)
                            {
                                if (sourceSequence[0].Name == Response.SseqEnum.Bs)
                                {
                                    var sourceSense = sourceSequence[1].Sense;

                                    // a binding substitute (bs) should always contain a nested sense object
                                    if (sourceSense?.SubSense != null)
                                    {
                                        var sense = ParseGeneralSenseProperties <Sense>(sourceSense.SubSense);
                                        sense.SenseNumber = sourceSense.SubSense.SenseNumber;
                                        ParseSpecificSenseProperties(sourceSense.SubSense, sense);
                                        sense.IsBindingSubstitute = true;

                                        pseq.Senses.Add(sense);
                                    }
                                }

                                if (sourceSequence[0].Name == Response.SseqEnum.Sense)
                                {
                                    var sourceSense = sourceSequence[1].Sense;
                                    if (sourceSense != null)
                                    {
                                        var sense = ParseGeneralSenseProperties <Sense>(sourceSense);
                                        sense.SenseNumber = sourceSense.SenseNumber;
                                        ParseSpecificSenseProperties(sourceSense, sense);

                                        pseq.Senses.Add(sense);
                                    }
                                }
                            }

                            senseSequence.Senses.Add(pseq);
                        }
                    }
                    // else?
                    //sourceSseq.Length != 2, should not occur
                }

                definition.SenseSequence.Add(senseSequence);
            }
        }
示例#4
0
 private static void AddSense(SenseSequence sequence, JArray array)
 {
     sequence.Add(array.ParseNextAs <Sense>());
 }
示例#5
0
 private static void AddBindingSubstitute(SenseSequence sequence, JArray array)
 {
     sequence.Add(array.ParseNextAs <BindingSubstitute>().Sense);
 }