Quantcast
Channel: GameDev.net
Viewing all articles
Browse latest Browse all 17825

Writing subjects in present and past is hard

$
0
0
I wanted a class which produces a string which is like: Aquiring, Aquired, Initializing, Initialized, Building, Built, Copy, Copied etc. Just to write "less" code... i thought... why did i do that, i have no idea... maybe because i can??? AddLog(SubjectBuilder.Build("C", false, "file A to B")); AddLog(SubjectBuilder.Build("C", true, "file A to B successfully")); Anyway this is the result: /// <summary> /// Simple class for genering a message using a subject as prefix /// </summary> public static class SubjectBuilder { private static readonly Dictionary<char, string> _subjectLetterMap = new Dictionary<char, string>() { { 'A', "Aquire" }, { 'B', "Build" }, { 'I', "Initialize" }, { 'G', "Generate" }, { 'D', "Destroy" }, { 'M', "Make" }, { 'C', "Copy" }, { 'P', "Publish" } }; class SubjectRule { public bool CurCut { get; set; } = true; public string Cur { get; set; } = "ing"; public bool PastCut { get; set; } = false; public string Past { get; set; } = "d"; } private static readonly Dictionary<char, SubjectRule> _rules = new Dictionary<char, SubjectRule>() { { 'e', new SubjectRule() }, { 'd', new SubjectRule() { CurCut = false, PastCut = true, Past = "t" } }, { 'y', new SubjectRule() { CurCut = false, PastCut = true, Past = "ied" } }, { 'h', new SubjectRule() { CurCut = false, PastCut = false, Past = "ed" } } }; /// <summary> /// Returns a simple string starting with a subject - like create, generate, copy. /// The subject is modified to satisfy the past or current time (creat-ing, creat-ed, etc.) /// </summary> /// <param name="firstLetterOrSubject">Subject or just the first letter of the subject</param> /// <param name="past">Is it now or in the past</param> /// <param name="text">The actual text</param> /// <returns>Builded message startin with the subject</returns> public static string Build(string firstLetterOrSubject, bool past, string text) { StringBuilder s = new StringBuilder(); string subject = null; if (!string.IsNullOrEmpty(firstLetterOrSubject)) { if (firstLetterOrSubject.Length == 1) { // Single letter - lookup into the subject table char upperCh = firstLetterOrSubject.ToUpper()[0]; if (_subjectLetterMap.ContainsKey(upperCh)) subject = _subjectLetterMap[upperCh]; } else subject = firstLetterOrSubject; } if (!string.IsNullOrEmpty(subject)) { char lastChar = subject.Substring(subject.Length - 1)[0]; SubjectRule rule = _rules.ContainsKey(lastChar) ? _rules[lastChar] : new SubjectRule(); if (past) { if (rule.PastCut) s.Append(subject.Substring(0, subject.Length - 1)); else s.Append(subject); s.Append(rule.Past); } else { if (rule.CurCut) s.Append(subject.Substring(0, subject.Length - 1)); else s.Append(subject); s.Append(rule.Cur); } s.Append(" "); } s.Append(text); return s.ToString(); } } And yes this is used in a productive every day used application...

Viewing all articles
Browse latest Browse all 17825

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>