IT:AD:Dokuwiki:HowTo:HouseCleaning
Summary
Of no use to anybody else than me…
Process
Cleanup :Home
//Search ' #' //Replace ' #'
Search / Replace
:projects -> :Projects :orgs -> :Orgs :sctp -> :SCTP :sct -> :SCT :discovery -> :Discovery :define -> :Define :design -> :Design
PrettyPrint All Headers
//Search: //Replace:
Search for:
\*Related:\*\s*(\r\n)+((\s*\*.+\r\n)+)
\*Related:\*\s+((\s*\*.+)+)
Replace with:
<div nav>
* [[../|(UP)]]
{{indexmenu>.#2|nsort tsort}}
Capitalize certain words
IT AD PM MOE ADFS ASP ASP.NET NET
void Main()
{
//WARNING: MAKE SURE THESE ARE SET SAFELY BEFORE RUNNING
bool debugReplaceFileLinks = false;
//directory to scan for names:
string directoryFullName = @"Z:\Dropbox\Synced\Sites\com.skysigal\data\pages\it\about";
//string[] subjectNames = GetListOfNames(directoryFullName);
// foreach(string subject in subjectNames){
// var t = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(subject);
// string.Format("* [[IT/AD/Tech/{0}/]]",t).Dump();
// }
// //return;
// var pattern = "\\[\\[IT:About:\\b(" + string.Join("|", subjectNames.ToArray()).Replace("-","\\-").Replace("+","\\+") + ")\\b([_|/|\\|])?([^\\]]*)" ;
// pattern.Dump("Pattern");
// string replacePattern = "[[IT/AD/Tech/$1$2$3";
string check =
@"foo bar [[IT/About/Apple/AppStore/HowTos]] pinky on...
sadf more [[IT/About/appcMd/AppStore/HowTos]]
and more [[..|(UP)]]
and blah [[..|(UP)]]
and more";
// string replace = Regex.Replace(check, pattern, replacePattern, RegexOptions.IgnoreCase);
// check.Dump("Original");
// replace.Dump("Replaced");
//return;
//Directory to change:
string directoryFullName2 = "x:\\dropbox\\synced\\sites\\com.skysigal\\data\\pages";
//BreakDownDirectories(directoryFullName2, subjectNames, true);
//Actually to some work;
//UpdateLinksInFiles(directoryFullName2, pattern,replacePattern,debugReplaceFileLinks);
var x = new Dictionary<string,string>();
x.Add("IT:AD:Tech:AD:Discover", "IT:AD:ALM:6D:Discover");
x.Add("IT:AD:Tech:AD:Define", "IT:AD:ALM:6D:Define");
x.Add("IT:AD:Tech:AD:Design", "IT:AD:ALM:6D:Design");
x.Add("IT:AD:Tech:AD:Develop", "IT:AD:ALM:6D:Develop");
x.Add("IT:AD:Tech:AD:Defects", "IT:AD:ALM:6D:Defects");
x.Add("IT:AD:Tech:AD:Deliver", "IT:AD:ALM:6D:Deliver");
x.Add("IT:AD:Discover", "IT:AD:ALM:6D:Discover");
x.Add("IT:AD:Define", "IT:AD:ALM:6D:Define");
x.Add("IT:AD:Design", "IT:AD:ALM:6D:Design");
x.Add("IT:AD:Develop", "IT:AD:ALM:6D:Develop");
x.Add("IT:AD:Defects", "IT:AD:ALM:6D:Defects");
x.Add("IT:AD:Deliver", "IT:AD:ALM:6D:Deliver");
x.Add("IT:AD:Tech:AD:", "IT:AD:");
check =
@"Somethign [[IT/AD/Tech/AD/Discover/Something/]]";
string replace = Regex.Replace(check, "IT:AD:Tech:AD:Discover", "IT:AD:6D:Discover", RegexOptions.IgnoreCase);
check.Dump("Original");
replace.Dump("Replaced");
Replace(directoryFullName2,x);
}
public void Replace(string directory, Dictionary<string,string> terms){
var fileNames = System.IO.Directory.GetFiles(directory,"*.txt", SearchOption.AllDirectories);
foreach(string fileName in fileNames){
string fileText = System.IO.File.ReadAllText(fileName);
foreach(KeyValuePair<string,string> kvp in terms){
if (Regex.Match(fileText, kvp.Key ,RegexOptions.IgnoreCase).Success){
fileText = Regex.Replace(fileText, kvp.Key, kvp.Value,RegexOptions.IgnoreCase);
System.IO.File.WriteAllText(fileName,fileText);
fileText.Dump();
}
}
}
}
// Define other methods and classes here
public String[] GetListOfNames(string directoryFullName){
var fileNames = System.IO.Directory.GetFiles(directoryFullName,"*.txt", SearchOption.TopDirectoryOnly);
string lastPrefix=null;
List<string> results = new List<string>();
foreach(string tmp in fileNames){
string fileName = System.IO.Path.GetFileName(tmp);
int pos = fileName.IndexOfAny(new []{'_','.', ' '});
string prefix = fileName.Substring(0,pos);
// if (prefix.Contains("_howto")){
// prefix = prefix.Substring(0,prefix.IndexOf("_howto"));
// }
if (prefix==lastPrefix){continue;}
results.Add(prefix);
lastPrefix = prefix;
}
results.Remove("About");
results.Remove("howto");
results.Remove("tips");
results.Remove("that");
results.Remove("notepad");
results.Add("notepad++");
AdjustList(results, new []{
"acad 2000",
"active directory",
"alert services",
"app feature usage monitoring",
"asp.mvc",
"asp.net",
"business requirements",
"waterfall methodology",
"angular.js",
"backbone.js",
"blogengine.net",
"breeze.js",
"browserify.js",
"codepen.io",
"continuous integration",
"credit card processing",
"cruisecontrol.net",
"d3.js",
"datatables.js",
"db projects",
"draw.io",
"durandal.js",
"editpad pro",
"ema personal wiki",
"environment variables",
"epoch.js",
"feature usage tracking",
"fourier transforms",
"functional requirements",
"google apps",
"internet explorer",
"jurassic.net",
"jsplumb.js",
"kendo UI",
"knockout.js",
"knockout-validation.js",
"knockout.punches.js",
"log parser",
"lusrmgr.msc",
"m42 graphs",
"machine learning",
"matter.js",
"modernizr.js",
"nightwatch.js",
"non-functional requirements",
"node.js",
"paint.net",
"performance counters",
"phantom.js",
"phaser.io",
"protocol buffers",
"require.js",
"reveal.js",
"rhino mocks",
"quartz.net",
"secpol.msc",
"semantic versioning",
"sencha touch",
"team foundation service",
"that's nice",
"service accounts",
"slimer.js",
"threat assessment",
"windsor ioc",
"unit testing",
"visual studio",
"web security",
});
//certificates_client
for(int i=0;i<results.Count;i++){
results[i] = results[i].Replace(".js",".JS");
results[i] = results[i].Replace(".io",".IO");
results[i] = results[i].Replace(".net",".NET");
results[i] = results[i].Replace(" ui"," UI");
results[i] = results[i].Replace(" ioc"," IoC");
}
results.Sort();
return results.ToArray();
}
//Fix up list due to some confusion when parsing filenames,
//such as IT:Team_Foundation_Services_HowTo
//where the break has to be before HowTo...but that isn't so easy to spot
//where there is also a file called IT:Team_Foudnation_Services_Concepts
void AdjustList(List<string> list, string[] phrases){
foreach(string phrase in phrases){
string[] parts = phrase.Split('.', ' ');
foreach(string part in parts){
list.Remove(part);
}
list.Add(phrase);
}
}
void BreakDownDirectories(string directoryFullName, string[] subjectNames,bool debug){
directoryFullName.Dump("....");
foreach(string tmp in System.IO.Directory.GetFiles(directoryFullName)){
string fileName = System.IO.Path.GetFileName(tmp);
string newDirectory;
string newFile;
int pos = fileName.IndexOfAny(new []{'_'});
if (pos < 0){
string d = System.IO.Path.GetFileNameWithoutExtension(fileName);
newDirectory = System.IO.Path.Combine(directoryFullName,d);
newFile = System.IO.Path.Combine(newDirectory,"home.txt");
}else{
string prefix = fileName.Substring(0,pos);
string rest = fileName.Substring(pos+1);
newDirectory = System.IO.Path.Combine(directoryFullName,prefix);
newFile = System.IO.Path.Combine(newDirectory,rest);
}
newFile.Dump();
if (!debug){
System.IO.Directory.CreateDirectory(newDirectory);
System.IO.File.Move(tmp, newFile);
}
}
}
//Update Links in Files
void UpdateLinksInFiles(string directoryFullName, string pattern, string replacement, bool debug =true){
var fileNames = System.IO.Directory.GetFiles(directoryFullName,"*.txt", SearchOption.AllDirectories);
fileNames.Length.Dump("To Regex Through:");
DateTime now = DateTime.Now;
int scanned =0;
int matched=0;
if (debug){
"*** ATTENTION: SKIPPING REPLACEMENT (IN DEBUG MODE)".Dump();
}
foreach(string fileName in fileNames){
string fileText = System.IO.File.ReadAllText(fileName);
scanned++;
if (!Regex.Match(fileText, pattern,RegexOptions.IgnoreCase).Success){continue;}
matched++;
fileText = Regex.Replace(fileText,pattern, replacement,RegexOptions.IgnoreCase);
if (!debug){
System.IO.File.WriteAllText(fileName,fileText);
}
}
string.Format("{0}/{1} in {2}",matched,scanned,DateTime.Now.Subtract(now).TotalSeconds).Dump("Results");
}