Esempio n. 1
0
 public ParaProps(FastTextBlock tb)
 {
     this.tb = tb;
     props   = new TextProps(tb);
 }
Esempio n. 2
0
 public void UpdateParent(FastTextBlock ftb)
 {
     text = ftb.Text;
     props = new TextProps(ftb);
 }
Esempio n. 3
0
 public void UpdateParent(FastTextBlock ftb)
 {
     text  = ftb.Text;
     props = new TextProps(ftb);
 }
Esempio n. 4
0
            public override TextRun GetTextRun(int textSourceCharacterIndex)
            {
                var index = textSourceCharacterIndex;

                if (runs.ContainsKey(index)) {
                    var run = runs[index];
                    runs.Remove(index);
                    return run;
                }

                if (index >= text.Length || text[index] == '\r' || text[index] == '\n') {
                    if (index < text.Length && text[index] != '\r')
                        return new TextCharacters(" ", null);
                    else
                        return new TextEndOfParagraph(1);
                }

                int defaultTextLength, tokenLength;
                TextTokenKind tokenKind;
                if (!tokens.Find(index, out defaultTextLength, out tokenKind, out tokenLength)) {
                    Debug.Fail("Could not find token info");
                    return new TextCharacters(" ", null);
                }

                TextCharacters defaultRun = null, tokenRun = null;
                if (defaultTextLength != 0) {
                    var defaultText = text.Substring(index, defaultTextLength);

                    defaultRun = new TextCharacters(defaultText, new TextProps {
                        background = (Brush)parent.GetValue(TextElement.BackgroundProperty),
                        foreground = TextElement.GetForeground(parent),
                        typeface = new Typeface(
                            TextElement.GetFontFamily(parent),
                            TextElement.GetFontStyle(parent),
                            TextElement.GetFontWeight(parent),
                            TextElement.GetFontStretch(parent)
                        ),
                        fontSize = TextElement.GetFontSize(parent),
                    });
                }
                index += defaultTextLength;

                if (tokenLength != 0) {
                    var tc = GetColor(tokenKind);
                    var tokenText = text.Substring(index, tokenLength);

                    var textProps = new TextProps();
                    textProps.fontSize = TextElement.GetFontSize(parent);

                    textProps.foreground = tc.Foreground ?? TextElement.GetForeground(parent);
                    textProps.background = tc.Background ?? (Brush)parent.GetValue(TextElement.BackgroundProperty);

                    textProps.typeface = new Typeface(
                        TextElement.GetFontFamily(parent),
                        tc.FontStyle ?? TextElement.GetFontStyle(parent),
                        tc.FontWeight ?? TextElement.GetFontWeight(parent),
                        TextElement.GetFontStretch(parent)
                    );

                    tokenRun = new TextCharacters(tokenText, textProps);
                }

                Debug.Assert(defaultRun != null || tokenRun != null);
                if ((defaultRun != null) ^ (tokenRun != null))
                    return defaultRun ?? tokenRun;
                else {
                    runs[index] = tokenRun;
                    return defaultRun;
                }
            }
Esempio n. 5
0
 public ParaProps(FastTextBlock tb)
 {
     this.tb = tb;
     props = new TextProps(tb);
 }
Esempio n. 6
0
            public override TextRun GetTextRun(int textSourceCharacterIndex)
            {
                var index = textSourceCharacterIndex;

                if (index >= text.Length)
                {
                    return(new TextEndOfParagraph(1));
                }

                char c = text[index];

                if (c == '\r' || c == '\n' || c == '\u0085' || c == '\u2028' || c == '\u2029')
                {
                    int nlLen = c == '\r' && index + 1 < text.Length && text[index + 1] == '\n' ? 2 : 1;
                    return(new TextEndOfParagraph(nlLen));
                }

                int collIndex = GetStartIndex(index);

                Debug.Assert(collIndex >= 0);
                if (collIndex < 0)
                {
                    return(new TextCharacters(text.Substring(index), GetDefaultTextRunProperties()));
                }

                var info = tagsList[collIndex];

                if (info.Span.End == index)
                {
                    Debug.Assert(collIndex + 1 < tagsList.Length);
                    if (collIndex + 1 >= tagsList.Length)
                    {
                        return(new TextCharacters(text.Substring(index), GetDefaultTextRunProperties()));
                    }
                    info = tagsList[collIndex + 1];
                }

                int startIndex = info.Span.Start;
                int endIndex   = info.Span.End;

                int nlIndex = text.IndexOfAny(LineConstants.newLineChars, index, endIndex - startIndex);

                if (nlIndex > 0)
                {
                    endIndex = nlIndex;
                }

                var props = classificationFormatMap.GetTextProperties(info.ClassificationType);

                var tokenText = text.Substring(index, endIndex - startIndex);

                var textProps = new TextProps();

                textProps.fontSize = TextElement.GetFontSize(parent);

                textProps.foreground = (props.ForegroundBrushEmpty ? null : props.ForegroundBrush) ?? TextElement.GetForeground(parent);
                textProps.background = (props.BackgroundBrushEmpty ? null : props.BackgroundBrush) ?? (Brush)parent.GetValue(TextElement.BackgroundProperty);

                textProps.textEffects     = props.TextEffectsEmpty ? null : props.TextEffects;
                textProps.textDecorations = props.TextDecorationsEmpty ? null : props.TextDecorations;

                textProps.typeface = new Typeface(
                    TextElement.GetFontFamily(parent),
                    (props.ItalicEmpty ? (FontStyle?)null : FontStyles.Italic) ?? TextElement.GetFontStyle(parent),
                    (props.BoldEmpty ? (FontWeight?)null : FontWeights.Bold) ?? TextElement.GetFontWeight(parent),
                    TextElement.GetFontStretch(parent)
                    );

                return(new TextCharacters(tokenText.Length == 0 ? " " : tokenText, textProps));
            }
Esempio n. 7
0
            public override TextRun GetTextRun(int textSourceCharacterIndex)
            {
                var index = textSourceCharacterIndex;

                if (runs.ContainsKey(index))
                {
                    var run = runs[index];
                    runs.Remove(index);
                    return(run);
                }

                if (index >= text.Length || text[index] == '\r' || text[index] == '\n')
                {
                    if (index < text.Length && text[index] != '\r')
                    {
                        return(new TextCharacters(" ", null));
                    }
                    else
                    {
                        return(new TextEndOfParagraph(1));
                    }
                }

                int           defaultTextLength, tokenLength;
                TextTokenType tokenType;

                if (!tokens.Find(index, out defaultTextLength, out tokenType, out tokenLength))
                {
                    Debug.Fail("Could not find token info");
                    return(new TextCharacters(" ", null));
                }

                TextCharacters defaultRun = null, tokenRun = null;

                if (defaultTextLength != 0)
                {
                    var defaultText = text.Substring(index, defaultTextLength);

                    defaultRun = new TextCharacters(defaultText, new TextProps {
                        background = (Brush)parent.GetValue(TextElement.BackgroundProperty),
                        foreground = TextElement.GetForeground(parent),
                        typeface   = new Typeface(
                            TextElement.GetFontFamily(parent),
                            TextElement.GetFontStyle(parent),
                            TextElement.GetFontWeight(parent),
                            TextElement.GetFontStretch(parent)
                            ),
                        fontSize = TextElement.GetFontSize(parent),
                    });
                }
                index += defaultTextLength;

                if (tokenLength != 0)
                {
                    var hlColor   = GetColor(tokenType);
                    var tokenText = text.Substring(index, tokenLength);

                    var textProps = new TextProps();
                    textProps.fontSize = TextElement.GetFontSize(parent);

                    if (hlColor.Foreground != null)
                    {
                        textProps.foreground = hlColor.Foreground.GetBrush(null);
                    }
                    else
                    {
                        textProps.foreground = TextElement.GetForeground(parent);
                    }

                    if (hlColor.Background != null)
                    {
                        textProps.background = hlColor.Background.GetBrush(null);
                    }
                    else
                    {
                        textProps.background = (Brush)parent.GetValue(TextElement.BackgroundProperty);
                    }

                    textProps.typeface = new Typeface(
                        TextElement.GetFontFamily(parent),
                        hlColor.FontStyle ?? TextElement.GetFontStyle(parent),
                        hlColor.FontWeight ?? TextElement.GetFontWeight(parent),
                        TextElement.GetFontStretch(parent)
                        );

                    tokenRun = new TextCharacters(tokenText, textProps);
                }

                Debug.Assert(defaultRun != null || tokenRun != null);
                if ((defaultRun != null) ^ (tokenRun != null))
                {
                    return(defaultRun ?? tokenRun);
                }
                else
                {
                    runs[index] = tokenRun;
                    return(defaultRun);
                }
            }
            public override TextRun GetTextRun(int textSourceCharacterIndex)
            {
                var index = textSourceCharacterIndex;

                if (runs.ContainsKey(index))
                {
                    var run = runs[index];
                    runs.Remove(index);
                    return(run);
                }

                if (index >= text.Length)
                {
                    return(new TextEndOfParagraph(1));
                }
                char c = text[index];

                if (c == '\r' || c == '\n' || c == '\u0085' || c == '\u2028' || c == '\u2029')
                {
                    int nlLen = c == '\r' && index + 1 < text.Length && text[index + 1] == '\n' ? 2 : 1;
                    return(new TextEndOfParagraph(nlLen));
                }

                int    defaultTextLength, tokenLength;
                object color;

                if (!cachedTextColorsCollection.Find(index, out defaultTextLength, out color, out tokenLength))
                {
                    Debug.Fail("Could not find token info");
                    return(new TextCharacters(" ", GetDefaultTextRunProperties()));
                }

                TextCharacters defaultRun = null, tokenRun = null;

                if (defaultTextLength != 0)
                {
                    var defaultText = text.Substring(index, defaultTextLength);

                    defaultRun = new TextCharacters(defaultText, GetDefaultTextRunProperties());
                }
                index += defaultTextLength;

                if (tokenLength != 0)
                {
                    var tc        = GetTextColor(themeManager.Theme, color);
                    var tokenText = text.Substring(index, tokenLength);

                    var textProps = new TextProps();
                    textProps.fontSize = TextElement.GetFontSize(parent);

                    textProps.foreground = tc.Foreground ?? TextElement.GetForeground(parent);
                    textProps.background = tc.Background ?? (Brush)parent.GetValue(TextElement.BackgroundProperty);

                    textProps.typeface = new Typeface(
                        TextElement.GetFontFamily(parent),
                        tc.FontStyle ?? TextElement.GetFontStyle(parent),
                        tc.FontWeight ?? TextElement.GetFontWeight(parent),
                        TextElement.GetFontStretch(parent)
                        );

                    tokenRun = new TextCharacters(tokenText.Length == 0 ? " " : tokenText, textProps);
                }

                Debug.Assert(defaultRun != null || tokenRun != null);
                if ((defaultRun != null) ^ (tokenRun != null))
                {
                    return(defaultRun ?? tokenRun);
                }
                else
                {
                    runs[index] = tokenRun;
                    return(defaultRun);
                }
            }
Esempio n. 9
0
            public override TextRun GetTextRun(int textSourceCharacterIndex)
            {
                var index = textSourceCharacterIndex;

                if (index >= text.Length)
                {
                    return(new TextEndOfParagraph(1));
                }

                char c = text[index];

                if (c == '\r' || c == '\n' || c == '\u0085' || c == '\u2028' || c == '\u2029')
                {
                    int nlLen = c == '\r' && index + 1 < text.Length && text[index + 1] == '\n' ? 2 : 1;
                    return(new TextEndOfParagraph(nlLen));
                }

                int collIndex = cachedTextColorsCollection.GetStartIndex(index);

                Debug.Assert(collIndex >= 0);
                if (collIndex < 0)
                {
                    return(new TextCharacters(text.Substring(index), GetDefaultTextRunProperties()));
                }

                var info = cachedTextColorsCollection[collIndex];

                if (info.Span.End == index)
                {
                    Debug.Assert(collIndex + 1 < cachedTextColorsCollection.Count);
                    if (collIndex + 1 >= cachedTextColorsCollection.Count)
                    {
                        return(new TextCharacters(text.Substring(index), GetDefaultTextRunProperties()));
                    }
                    info = cachedTextColorsCollection[collIndex + 1];
                }

                int startIndex = info.Span.Start;
                int endIndex   = info.Span.End;

                int nlIndex = text.IndexOfAny(LineConstants.newLineChars, index, endIndex - startIndex);

                if (nlIndex > 0)
                {
                    endIndex = nlIndex;
                }

                var tc        = GetTextColor(themeService.Theme, info.Data);
                var tokenText = text.Substring(index, endIndex - startIndex);

                var textProps = new TextProps();

                textProps.fontSize = TextElement.GetFontSize(parent);

                textProps.foreground = tc.Foreground ?? TextElement.GetForeground(parent);
                textProps.background = tc.Background ?? (Brush)parent.GetValue(TextElement.BackgroundProperty);

                textProps.typeface = new Typeface(
                    TextElement.GetFontFamily(parent),
                    tc.FontStyle ?? TextElement.GetFontStyle(parent),
                    tc.FontWeight ?? TextElement.GetFontWeight(parent),
                    TextElement.GetFontStretch(parent)
                    );

                return(new TextCharacters(tokenText.Length == 0 ? " " : tokenText, textProps));
            }
Esempio n. 10
0
			public override TextRun GetTextRun(int textSourceCharacterIndex) {
				var index = textSourceCharacterIndex;

				if (index >= text.Length)
					return new TextEndOfParagraph(1);

				char c = text[index];
				if (c == '\r' || c == '\n' || c == '\u0085' || c == '\u2028' || c == '\u2029') {
					int nlLen = c == '\r' && index + 1 < text.Length && text[index + 1] == '\n' ? 2 : 1;
					return new TextEndOfParagraph(nlLen);
				}

				int collIndex = GetStartIndex(index);
				Debug.Assert(collIndex >= 0);
				if (collIndex < 0)
					return new TextCharacters(text.Substring(index), GetDefaultTextRunProperties());

				var info = tagsList[collIndex];
				if (info.Span.End == index) {
					Debug.Assert(collIndex + 1 < tagsList.Length);
					if (collIndex + 1 >= tagsList.Length)
						return new TextCharacters(text.Substring(index), GetDefaultTextRunProperties());
					info = tagsList[collIndex + 1];
				}

				int startIndex = info.Span.Start;
				int endIndex = info.Span.End;

				int nlIndex = text.IndexOfAny(LineConstants.newLineChars, index, endIndex - startIndex);
				if (nlIndex > 0)
					endIndex = nlIndex;

				var props = classificationFormatMap.GetTextProperties(info.ClassificationType);

				var tokenText = text.Substring(index, endIndex - startIndex);

				var textProps = new TextProps();
				textProps.fontSize = TextElement.GetFontSize(parent);

				textProps.foreground = (props.ForegroundBrushEmpty ? null : props.ForegroundBrush) ?? TextElement.GetForeground(parent);
				textProps.background = (props.BackgroundBrushEmpty ? null : props.BackgroundBrush) ?? (Brush)parent.GetValue(TextElement.BackgroundProperty);

				textProps.textEffects = props.TextEffectsEmpty ? null : props.TextEffects;
				textProps.textDecorations = props.TextDecorationsEmpty ? null : props.TextDecorations;

				textProps.typeface = new Typeface(
					TextElement.GetFontFamily(parent),
					(props.ItalicEmpty ? (FontStyle?)null : FontStyles.Italic) ?? TextElement.GetFontStyle(parent),
					(props.BoldEmpty ? (FontWeight?)null : FontWeights.Bold) ?? TextElement.GetFontWeight(parent),
					TextElement.GetFontStretch(parent)
				);

				return new TextCharacters(tokenText.Length == 0 ? " " : tokenText, textProps);
			}