using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
namespace FastReport.RichTextParser
{
class RTF_TextUtils
{
#if false
public override int PageRTF_Find(string FindWhat)
{
#if false
int line, column;
RTF_View.CommonViewObject paragraph;
int absolute_position = rtf_text.FindString(FindWhat, out paragraph, out line, out column);
return line;
#else
throw new NotImplementedException("Find string disabled at this time");
#endif
}
public override int PageRTF_ReplaceAll(string ReplaceWhat, string ReplaceWith)
{
int replace_count = rtf_text.ReplaceAll(ReplaceWhat, ReplaceWith);
if (replace_count != 0)
{
int height = rtf_text.InvalidateView(ClientRectangle);
// RefreshScrollBar(height);
Refresh();
}
return replace_count;
}
internal int PageRTF_FindString(string findWhat, out CommonViewObject paragraph, out int line, out int position)
{
int abs_position = -1;
int prev_size = 0;
paragraph = null;
line = 0;
position = 0;
foreach (CommonViewObject par in view_objects)
{
abs_position = par.FindString(findWhat, out line, out position);
if (abs_position >= 0)
{
paragraph = par;
break;
}
prev_size += par.Length;
}
return prev_size + abs_position;
}
internal int ReplaceAll(string replaceWhat, string replaceWith)
{
throw new NotImplementedException();
}
internal override void Row_ReplaceText(int start, int len, string value)
{
int cells_length = 0;
int prev_length = 0;
foreach (RTF_CommonRichElement item in cells)
{
prev_length = cells_length;
cells_length += item.Lenght;
if (cells_length < start)
continue;
item.ReplaceText(start - prev_length, len, value);
break;
}
}
internal int Run_ReplaceAll(string findWhat, string replaceWith)
{
if (run.text.Contains(findWhat))
{
run.text = run.text.Replace(findWhat, replaceWith);
return 1;
}
return 0;
}
internal override void Paragraph_ReplaceText(int start, int len, string value)
{
foreach (RTF_Run run in runs)
{
if (run.text.Length <= start)
{
start -= run.text.Length == 0 ? 1 : run.text.Length;
continue;
}
Lenght -= run.text.Length;
string s = run.text.Remove(start, len);
run.text = s.Insert(start, value);
Lenght += run.text.Length;
break;
}
}
/// BODY
int FSelectionStart;
int FSelectionLength;
///
///
///
public int SelectionStart { get { return FSelectionStart; } internal set { FSelectionStart = value; } }
///
///
///
public int SelectionLength { get { return FSelectionLength; } internal set { FSelectionLength = value; } }
///
///
///
public string SelectedText
{
get
{
return Text.Substring(FSelectionStart, FSelectionLength);
}
internal set
{
document.ReplaceText(FSelectionStart, FSelectionLength, value);
}
}
//internal void Body_ReplaceText(int fSelectionStart, int fSelectionLength, string value)
//{
// int par_len, start, len;
// foreach (RTF_Page item in pages)
// {
// par_len = item.Lenght;
// if (par_len <= fSelectionStart)
// {
// // TDOD: check EndOfLine sequence - seems to be platfom dependent LF of CR/LF
// fSelectionStart -= par_len + 2;
// continue;
// }
// start = fSelectionStart;
// len = (par_len - start < fSelectionLength) ? par_len - start : fSelectionLength;
// item.ReplaceText(start, len, value);
// break;
// }
//}
internal string Body_Text2HTML
{
get
{
StringBuilder str = new StringBuilder();
foreach (RTF_Page item in body.pages)
str.AppendLine(item.Text2HTML);
return str.ToString();
}
}
internal string Body_Text
{
get
{
StringBuilder str = new StringBuilder();
foreach (RTF_Page item in body.pages)
str.AppendLine(item.Text);
return str.ToString();
}
}
public int Document_ReplaceAll(string findWhat, string replaceWith)
{
int replacement_counter = 0;
if (this.document.Pages != null)
foreach (RTF_Page page in this.document.Pages)
{
replacement_counter += page.ReplaceAll(findWhat, replaceWith);
}
return replacement_counter;
}
internal void Page_ReplaceText(int fSelectionStart, int fSelectionLength, string value)
{
int par_len, start, len;
foreach (RTF_CommonRichElement item in paragraphs)
{
par_len = item.Lenght;
if (par_len <= fSelectionStart)
{
// TDOD: check EndOfLine sequence - seems to be platfom dependent LF of CR/LF
fSelectionStart -= par_len + 2;
continue;
}
start = fSelectionStart;
len = (par_len - start < fSelectionLength) ? par_len - start : fSelectionLength;
item.ReplaceText(start, len, value);
break;
}
}
internal int Page_ReplaceAll(string findWhat, string replaceWith)
{
int replacement_counter = 0;
//foreach (RTF_CommonRichElement par in this.ParagraphsAndTables)
//{
// replacement_counter += par.RepaceAll(findWhat, replaceWith);
//}
return replacement_counter;
}
internal string Page_Text2HTML
{
get
{
StringBuilder str = new StringBuilder();
foreach (RTF_CommonRichElement item in page.paragraphs)
{
str.AppendLine(item.GetHTMLText(document));
}
return str.ToString();
}
}
internal string Page_Text
{
get
{
StringBuilder str = new StringBuilder();
foreach (RichObject item in page.objects)
{
//str.AppendLine(item.GetText());
}
return str.ToString();
}
}
internal override string Table_GetText()
{
StringBuilder sb = new StringBuilder("TODO: Text of raw cells");
//foreach (RTF_CommonRichElement item in some_row.cells)
//{
// sb.AppendFormat("{0}\t", item.GetText());
//}
return sb.ToString();
}
internal override string Paragraph_GetText()
{
StringBuilder sb = new StringBuilder();
foreach (Run run in Runs)
{
if (run.text.Length == 0)
sb.Append('\t');
else
sb.Append(run.text);
}
return sb.ToString();
}
internal override string Picture_GetText()
{
return string.Empty;
}
internal override string TableGetHTMLText(RTF_DocumentParser doc)
{
throw new NotImplementedException("RTF Table to HTML");
}
internal override string Paragraph_GetHTMLText(RTF_DocumentParser doc)
{
StringBuilder sb = new StringBuilder();
RunFormat prev_format = new RunFormat();
foreach (Run run in Runs)
{
if (run.text.Length == 0)
{
// sb.Append('\t');
sb.Append(" ");
}
else
{
if (run.format.IsSameAs(prev_format))
sb.Append(run.text);
else
{
if (run.format.bold != prev_format.bold)
{
sb.Append(run.format.bold ? "" : "");
prev_format.bold = run.format.bold;
}
if (run.format.italic != prev_format.italic)
{
sb.Append(run.format.italic ? "" : "");
prev_format.italic = run.format.italic;
}
if (run.format.underline != prev_format.underline)
{
sb.Append(run.format.underline ? "" : "");
prev_format.underline = run.format.underline;
}
if(run.format.script_type != prev_format.script_type)
{
if (run.format.script_type == RunFormat.ScriptType.Subscript)
sb.Append("");
else if (run.format.script_type == RunFormat.ScriptType.Superscript)
sb.Append("");
else if(prev_format.script_type == RunFormat.ScriptType.Subscript)
sb.Append("");
else if (prev_format.script_type == RunFormat.ScriptType.Superscript)
sb.Append("");
prev_format.script_type = run.format.script_type;
}
if (run.format.color_idx != prev_format.color_idx)
{
RColor col = doc.ColorList[(int)run.format.color_idx];
string colorname = string.Format("\"#{0:X2}{1:X2}{2:X2}\"", col.red, col.green, col.blue);
sb.Append(run.format.color_idx == 0 ? "" : "");
prev_format.color_idx = run.format.color_idx;
}
//if(run.format.font_size != prev_format.font_size)
//{
// int fs = run.format.font_size / 2;
// sb.Append("");
// prev_format.font_size = run.format.font_size;
//}
sb.Append(run.text);
}
}
}
// Clean collected tags
if (prev_format.bold)
sb.Append("");
if (prev_format.italic)
sb.Append("");
if (prev_format.underline)
sb.Append("");
return sb.ToString();
}
internal override int Paragraph_RepaceAll(string findWhat, string replaceWith)
{
int replacement_counter = 0;
foreach (Run run in Runs)
{
replacement_counter += run.ReplaceAll(findWhat, replaceWith);
}
return replacement_counter;
}
internal override int Table_RepaceAll(string findWhat, string replaceWith)
{
throw new NotImplementedException();
}
#endif
}
}