Processing Ajax...

Title

Message

Confirm

Confirm

Confirm

Confirm

Are you sure you want to delete this item?

Confirm

Are you sure you want to delete this item?

Confirm

Are you sure?

Remove Outer Whitespaces and Replace Inner Ones With a Space

Description
This script will trim whitespace from the start and end of the copied text, and replace any whitespace within the text with a single space, and will auto-paste the results.
Language
C#.net
Minimum Version
Created By
Danail Branekov34799
Contributors
-
Date Created
May 7, 2020
Date Last Modified
May 7, 2020

Macro Code

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(" ");
			}
		}
		
		//paste the StringBuilder
		BFS.Clipboard.PasteText(builder.ToString());
		
		//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;
	}
}