# encoding: ascii
# api: csharp
# title: Coloring text in RichTex
# description: It’s just for fun because it does not correctly work (if you want stable code then use New-Object “Collections.Generic.Dictionary[String, [Drawing.Color]])
# version: 0.1
# type: class
# author: greg zakharov
# license: CC0
# function: Invoke-TextColoring
# x-poshcode-id: 4082
# x-archived: 2014-11-24T07:51:53
# x-published: 2014-04-07T07:49:00
#
#
#code showing in RichTextBox
$code = @'
using System;
using System.Linq;
using System.Reflection;
using System.Diagnostics;
[assembly: AssemblyVersion("3.5.0.0")]
namespace ProcessesSortedWithStartTime {
internal sealed class Program {
static DateTime Started(Process p) {
try {
return p.StartTime;
}
catch {
return DateTime.MinValue;
}
}
static void Main() {
Process[] procs = Process.GetProcesses();
try {
var sorted = from p in procs orderby Started(p), p.Id select p;
foreach (Process p in sorted)
Console.WriteLine("{0, 5} {1}", p.Id, p.ProcessName);
}
finally {
foreach (Process p in procs)
p.Dispose();
}
}
}
}
'@
#reserved words
$res = @(
"using", "namespace", "internal", "sealed", "class", "static", "try", "return", "catch",
"void", "finally", "var", "from", "in", "orderby", "select", "foreach"
)
#invoke coloring
$frmMain_Load= {
$res | % { Invoke-TextColoring $_ -col "Cyan" }
#operation
@("=") | % { Invoke-TextColoring $_ -col "Red" }
#brackets
"{", "}" | % { Invoke-TextColoring $_ -col "Orange" }
}
#coloring
function Invoke-TextColoring {
param(
[string]$Match,
[int32]$Position = 0,
[Windows.Forms.RichTextBoxFinds]$Options = "WholeWord",
[Drawing.Color]$Color = "Blue"
)
$chk = $txtEdit.Find($match, $position, $options)
while ($chk -ge 0) {
$txtEdit.SelectionStart = $chk
$txtEdit.SelectionLength = $match.Length
$txtEdit.SelectionColor = $color
$cur = $chk + $match.Length
if ($cur -lt $txtEdit.TextLength) {
$chk = $txtEdit.Find($match, $cur, $options)
}
else { break } #go out from cycle if there are not matches any more
}
$txtEdit.DeselectAll()
}
function frmMain_Show {
Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.Application]::EnableVisualStyles()
$frmMain = New-Object Windows.Forms.Form
$txtEdit = New-Object Windows.Forms.RichTextBox
#
#txtEdit
#
$txtEdit.BackColor = [Drawing.Color]::FromArgb(1, 36, 86)
$txtEdit.Dock = "Fill"
$txtEdit.Font = New-Object Drawing.Font("Courier New", 10, [Drawing.FontStyle]::Bold)
$txtEdit.ForeColor = [Drawing.Color]::Linen
$txtEdit.Text = $code
#
#frmMain
#
$frmMain.ClientSize = New-Object Drawing.Size(590, 570)
$frmMain.Controls.Add($txtEdit)
$frmMain.FormBorderStyle = "FixedSingle"
$frmMain.StartPosition = "CenterScreen"
$frmMain.Text = "Form1"
$frmMain.Add_Load($frmMain_Load)
[void]$frmMain.ShowDialog()
}
frmMain_Show