private static void WriteRedirectSource(string file, XNode element) { string redirectSourcePath = null; var pathLocation = element.Ancestors("location").FirstOrDefault(); if (pathLocation != null) { redirectSourcePath = pathLocation.Attribute("path").Value; } using ( var streamWriter = new StreamWriter(Path.Combine(Environment.CurrentDirectory, "Redirect_Source.txt"), true)) { streamWriter.WriteLine(!String.IsNullOrEmpty(redirectSourcePath) ? redirectSourcePath : Path.GetDirectoryName(file)); } }
/// <summary> /// Get the file path relative to <see cref="ProjectDirectory"/> for the unit containing the given node. /// </summary> /// <param name="node">The node.</param> /// <returns>The relative file path to that node.</returns> public string RelativePath(XNode node) { if (null == node) throw new ArgumentNullException("node"); var unit = node.Ancestors(SRC.Unit).First(); var path = GetPathForUnit(unit); int start = this.ProjectDirectory.Length; if (this.ProjectDirectory[start - 1] != Path.DirectorySeparatorChar) start++; path = path.Substring(start); return path; }
private static string ComputeOneLevelOfIndentation(XNode node) { var depth = node.Ancestors().Count(); var textBeforeOrNull = node.PreviousNode as XText; if (depth == 0 || textBeforeOrNull == null || !IsWhiteSpace(textBeforeOrNull)) { return " "; } var indentString = textBeforeOrNull.Value.Trim(Environment.NewLine.ToCharArray()); var lastChar = indentString.LastOrDefault(); var indentChar = (lastChar == '\t' ? '\t' : ' '); var indentLevel = Math.Max(1, indentString.Length / depth); return new string(indentChar, indentLevel); }