- enahcedstringevaluate.zip
- EnahcedStringEvaluate
- EhancedStringEvalute.sln
- EhancedStringEvalute.suo
- EnhancedStringEvaluate
- EvaluateTest
- bin
- Debug
- EnhancedStringEvaluate.dll
- EnhancedStringEvaluate.pdb
- EvaluateSampleTest.dll
- EvaluateSampleTest.pdb
- EvaluateTest.dll
- EvaluateTest.pdb
- TestEvaluation.exe
- TestEvaluation.pdb
- EnhancedStringEvaluateTest.cs
- EvaluateSampleTest.csproj
- EvaluateSampleTest.csproj.vs10x
- EvaluateTest.csproj.vs10x
- Properties
- TestEvaluate
- Enhanced String Handling.pdf
- ehancedstringevalute.zip
- EhancedStringEvalute.sln
- EhancedStringEvalute.suo
- EnhancedStringEvaluate
- EvaluateTest
- bin
- Debug
- EnhancedStringEvaluate.dll
- EnhancedStringEvaluate.pdb
- EvaluateSampleTest.dll
- EvaluateSampleTest.pdb
- EvaluateTest.dll
- EvaluateTest.pdb
- TestEvaluation.exe
- TestEvaluation.pdb
- EnhancedStringEvaluateTest.cs
- EvaluateSampleTest.csproj
- EvaluateSampleTest.csproj.vs10x
- EvaluateTest.csproj.vs10x
- obj
- Debug
- Properties
- TestEvaluate
- TestResults
- Avi Farah_TEST-PC 2010-08-21 00_24_34.trx
- Avi Farah_TEST-PC 2010-08-21 00_27_42.trx
- Avi Farah_TEST-PC 2010-09-13 14_37_39.trx
- Avi Farah_TEST-PC 2010-09-13 14_38_10.trx
- Avi Farah_TEST-PC 2010-09-13 14_39_19.trx
- Avi Farah_TEST-PC 2010-09-13 14_39_49.trx
- Avi Farah_TEST-PC 2010-09-13 14_42_18.trx
- Avi Farah_TEST-PC 2010-09-13 14_49_58.trx
- Avi Farah_TEST-PC 2010-09-24 01_46_50.trx
- Avi Farah_TEST-PC 2010-09-24 01_48_16.trx
- Avi Farah_TEST-PC 2010-10-23 20_55_40.trx
- Avi Farah_TEST-PC 2010-11-19 19_40_15.trx
- Avi Farah_TEST-PC 2010-11-19 19_40_15
- In
- Out
|
using System;
using System.Text.RegularExpressions;
using System.IO;
using EnhancedStringEvaluate;
namespace TestEvaluation.ProcessEvaluate
{
/// <summary>
/// Processes a directory config-varialbe -- CurrentDir, {CurrentDir::} or {CurrentDir::-n} construct.
/// </summary>
public sealed class ProcessCurrentDir : IProcessEvaluate
{
private readonly Regex _reCurrDir;
public ProcessCurrentDir() : this(DelimitersAndSeparator.DefaultDelimitedString) { }
public ProcessCurrentDir(IDelimitersAndSeparator delim)
{
//string pattern = @"({)\s*CurrentDir\s*::\s*(-\s*[0-9]+)?(})";
string pattern = string.Format(@"({0})\s*CurrentDir\s*::\s*(?<prevCount>-\s*[0-9]+)?({1})", delim.OpenDelimEquivalent, delim.CloseDelimEquivalent);
RegexOptions reo = RegexOptions.Singleline | RegexOptions.IgnoreCase;
_reCurrDir = new Regex(pattern, reo);
CurrentDir = null;
}
/// <summary>
/// Tracks the directory path we are "currently" in.
/// </summary>
public string CurrentDir { get; set; }
#region IProcessEvaluate Members
public void Evaluate(object src, EnhancedStringEventArgs ea)
{
// Initialize return code
ea.IsHandled = false;
string text = ea.EhancedPairElem.Value;
if (string.IsNullOrWhiteSpace(text)) return;
bool rc = _reCurrDir.IsMatch(text);
if (!rc) return;
// Get the replacement current directory
string replacement = _reCurrDir.Replace(text, CurrentDirReplace);
if (replacement == text) return;
// Announce that we succeeded to find {CurrentDir} and replaced it
ea.IsHandled = true;
// Keep new value
ea.EhancedPairElem.Value = replacement;
return;
}
#endregion
private string CurrentDirReplace(Match m)
{
string prevCount = m.Groups["prevCount"].Value;
if (string.IsNullOrEmpty(prevCount))
return CurrentDir;
int cnt;
bool rc = int.TryParse(prevCount, out cnt);
if (!rc) return string.Format(@"--\\no path at the given count: {0}\\--", prevCount);
if (cnt == 0) return CurrentDir;
string prevDir = CurrentDir;
for (int i = 0; i > cnt; --i)
{
prevDir = Path.GetDirectoryName(prevDir);
if (prevDir == null) return string.Format(@"--\\no path at given count: {0}\\--", prevCount);
}
return prevDir;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.