コード例 #1
0
        public static string GenerateRtf(TextArea textArea)
        {
            RtfWriter.colors      = new Dictionary <string, int>();
            RtfWriter.colorNum    = 0;
            RtfWriter.colorString = new StringBuilder();
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1031");
            RtfWriter.BuildFontTable(textArea.Document, stringBuilder);
            stringBuilder.Append('\n');
            string str = RtfWriter.BuildFileContent(textArea);

            RtfWriter.BuildColorTable(textArea.Document, stringBuilder);
            stringBuilder.Append('\n');
            stringBuilder.Append("\\viewkind4\\uc1\\pard");
            stringBuilder.Append(str);
            stringBuilder.Append("}");
            return(stringBuilder.ToString());
        }
コード例 #2
0
        private static string BuildFileContent(TextArea textArea)
        {
            string        str;
            StringBuilder stringBuilder = new StringBuilder();
            bool          flag          = true;
            Color         black         = Color.Black;
            bool          italic        = false;
            bool          bold          = false;
            bool          flag1         = false;

            foreach (ISelection selectionCollection in textArea.SelectionManager.SelectionCollection)
            {
                int offset = textArea.Document.PositionToOffset(selectionCollection.StartPosition);
                int num    = textArea.Document.PositionToOffset(selectionCollection.EndPosition);
                for (int i = selectionCollection.StartPosition.Y; i <= selectionCollection.EndPosition.Y; i++)
                {
                    LineSegment lineSegment = textArea.Document.GetLineSegment(i);
                    int         length      = lineSegment.Offset;
                    if (lineSegment.Words != null)
                    {
                        foreach (TextWord word in lineSegment.Words)
                        {
                            switch (word.Type)
                            {
                            case TextWordType.Word:
                            {
                                Color color = word.Color;
                                if (length + word.Word.Length > offset && length < num)
                                {
                                    object[] r    = new object[] { color.R, ", ", color.G, ", ", color.B };
                                    string   str1 = string.Concat(r);
                                    if (!RtfWriter.colors.ContainsKey(str1))
                                    {
                                        int num1 = RtfWriter.colorNum + 1;
                                        RtfWriter.colorNum     = num1;
                                        RtfWriter.colors[str1] = num1;
                                        StringBuilder stringBuilder1 = RtfWriter.colorString;
                                        object[]      objArray       = new object[] { "\\red", color.R, "\\green", color.G, "\\blue", color.B, ";" };
                                        stringBuilder1.Append(string.Concat(objArray));
                                    }
                                    if (color != black || flag)
                                    {
                                        int item = RtfWriter.colors[str1];
                                        stringBuilder.Append(string.Concat("\\cf", item.ToString()));
                                        black = color;
                                        flag1 = true;
                                    }
                                    if (italic != word.Italic)
                                    {
                                        if (!word.Italic)
                                        {
                                            stringBuilder.Append("\\i0");
                                        }
                                        else
                                        {
                                            stringBuilder.Append("\\i");
                                        }
                                        italic = word.Italic;
                                        flag1  = true;
                                    }
                                    if (bold != word.Bold)
                                    {
                                        if (!word.Bold)
                                        {
                                            stringBuilder.Append("\\b0");
                                        }
                                        else
                                        {
                                            stringBuilder.Append("\\b");
                                        }
                                        bold  = word.Bold;
                                        flag1 = true;
                                    }
                                    if (flag)
                                    {
                                        stringBuilder.Append(string.Concat("\\f0\\fs", textArea.TextEditorProperties.Font.Size * 2f));
                                        flag = false;
                                    }
                                    if (flag1)
                                    {
                                        stringBuilder.Append(' ');
                                        flag1 = false;
                                    }
                                    if (length >= offset)
                                    {
                                        str = (length + word.Word.Length <= num ? word.Word : word.Word.Substring(0, length + word.Word.Length - num));
                                    }
                                    else
                                    {
                                        str = word.Word.Substring(offset - length);
                                    }
                                    RtfWriter.AppendText(stringBuilder, str);
                                }
                                length += word.Length;
                                continue;
                            }

                            case TextWordType.Space:
                            {
                                if (selectionCollection.ContainsOffset(length))
                                {
                                    stringBuilder.Append(' ');
                                }
                                length++;
                                continue;
                            }

                            case TextWordType.Tab:
                            {
                                if (selectionCollection.ContainsOffset(length))
                                {
                                    stringBuilder.Append("\\tab");
                                }
                                length++;
                                flag1 = true;
                                continue;
                            }

                            default:
                            {
                                continue;
                            }
                            }
                        }
                        if (length < num)
                        {
                            stringBuilder.Append("\\par");
                        }
                        stringBuilder.Append('\n');
                    }
                }
            }
            return(stringBuilder.ToString());
        }