Exemplo n.º 1
0
        public SegmentedDocument Deserialise(string input)
        {
            var    segments          = new List <DocumentSegment>();
            string outputString      = "";
            int    lastMatchPosition = 0;
            int    charactersAdded   = 0;

            var doc = new SegmentedDocument(new TextDocument());

            foreach (Match match in segmentRegex.Matches(input))
            {
                outputString += input.Substring(lastMatchPosition, match.Index - lastMatchPosition);
                string className = match.Groups["class"].Value.ToLower();

                if (!constructorDictionary.ContainsKey(className))
                {
                    outputString     += match.Value;
                    lastMatchPosition = match.Index + match.Length;
                    continue;
                }

                DocumentSegment segment = constructorDictionary[className](match.Index + charactersAdded, match.Groups["text"].Value);

                charactersAdded += segment.Text.Length - match.Length;

                segments.Add(segment);

                outputString     += segment.Text;
                lastMatchPosition = match.Index + match.Length;
            }

            outputString += input.Substring(lastMatchPosition);
            doc.Load(outputString, segments);
            return(doc);
        }
Exemplo n.º 2
0
        public void Replace(int offset, int replacementLength, SegmentedDocument text)
        {
            int offsetRef            = offset;
            int replacementLengthRef = replacementLength;

            Replace(ref offsetRef, ref replacementLengthRef, text);
        }
Exemplo n.º 3
0
 public SegmentedDocument(SegmentedDocument templateText)
 {
     textDocument                 = new TextDocument("");
     Segments                     = new TextSegmentCollection <DocumentSegment>(textDocument);
     textDocument.Changing       += onChanging;
     textDocument.UpdateFinished += OnUpdateEnd;
     Load(templateText);
 }
Exemplo n.º 4
0
        protected SegmentedDocument TransformTemplate(string prefix, Template template, string suffix)
        {
            var doc = new SegmentedDocument(new TextDocument(""));

            doc.Replace(0, 0, serialiser.Deserialise(prefix));
            doc.Replace(doc.TextLength, 0, template.TemplateDocument);
            doc.Replace(doc.TextLength, 0, serialiser.Deserialise(suffix));
            return(doc);
        }
Exemplo n.º 5
0
        public void InsertTemplate(int offset, Template template, out int insertionEndIndex)
        {
            var placeholder =
                Segments.FindSegmentsContaining(offset).Where(v => v is PlaceholderSegment).FirstOrDefault() as PlaceholderSegment;

            SegmentedDocument document = template.TemplateDocument;

            if (placeholder != null)
            {
                document = placeholder.TransformTemplate(template);
            }

            int replacmentLength = 0;

            Replace(ref offset, ref replacmentLength, document);
            insertionEndIndex = offset + document.TextLength;
        }
Exemplo n.º 6
0
        public void Replace(ref int offset, ref int replacementLength, SegmentedDocument text)
        {
            InAutomaticChange = true;

            var affectedSegments = new ReadOnlyCollection <DocumentSegment>(new List <DocumentSegment>());

            affectedSegments = Segments.FindOverlappingSegments(offset, replacementLength);

            string textString = text.Text;

            Replace(affectedSegments, ref offset, ref replacementLength, ref textString);

            foreach (DocumentSegment segment in text.Segments)
            {
                DocumentSegment newsegment = segment.Clone();
                newsegment.StartOffset = newsegment.StartOffset + offset;
                newsegment.EndOffset   = newsegment.StartOffset + newsegment.Length;
                Segments.Add(newsegment);
            }
            InAutomaticChange = false;
            lastChange        = null;
        }
Exemplo n.º 7
0
 protected SegmentedDocument TransformTemplate(string prefix, SegmentedDocument doc, string suffix)
 {
     doc.Replace(0, 0, serialiser.Deserialise(prefix));
     doc.Replace(doc.TextLength, 0, serialiser.Deserialise(suffix));
     return(doc);
 }
Exemplo n.º 8
0
 internal void Load(SegmentedDocument document)
 {
     Load(document.Text, document.Segments.Select(v => v.Clone()));
 }