using System;
using System.Text;
using System.Collections.Generic;
public static class ClipboardFusionHelper
{
public static string ProcessText(string text)
{
//copy whatever is selected to the clipboard
//this will allow this macro to be used more quickly
text = BFS.Clipboard.CopyText();
//make sure all of the line breaks are the same type
text = text.Replace(Environment.NewLine, "\n");
text = text.Replace("\r", "\n");
text = text.Replace("\0", "\n");
//this will let us quickly build the string to return
StringBuilder builder = new StringBuilder();
//split the text up into its separate lines
string[] allLines = text.Split(new char[]{'\n'}, StringSplitOptions.RemoveEmptyEntries);
// Filter out lines that only contain whitespaces
List<string> nonEmptyLines = new List<string>();
foreach (string line in allLines)
{
//this is probably redundant since we are removing empty entries
//if the line variable is null or empty, continue to the next line
if(string.IsNullOrEmpty(line))
continue;
//if the line is blank, ignore it
if(IsLineOnlyWhiteSpace(line))
continue;
nonEmptyLines.Add(line);
}
for(int i = 0; i < nonEmptyLines.Count; i++)
{
string line = nonEmptyLines[i];
//add the trimmed line to the StringBuilder
builder.Append(line.Trim());
// Append a space after each line, except after the last one
if(i != allLines.Length)
{
builder.Append(" ");
}
}
//tell ClipboardFusion to put the StringBuilder on the clipboard
return builder.ToString();
}
//this is a set of blank characters
private static readonly Dictionary<char, int> WhiteSpaceChars = new Dictionary<char, int>
{
{' ', 0},
{'\x0085', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{' ', 0},
{'\x200B', 0},
{' ', 0},
{'\xFEFF', 0},
{'\v', 0},
{'\f', 0},
{'\x2028', 0},
{'\x2029', 0},
};
//this function returns true if a line is composed of only whitespace or blank characters
private static bool IsLineOnlyWhiteSpace(string line)
{
foreach(char c in line)
{
if(!WhiteSpaceChars.ContainsKey(c))
return false;
}
return true;
}
}