private static string AddScopeToSelectors(string filePath, SourceText inputSourceText, string cssScope, out IEnumerable <RazorDiagnostic> diagnostics) { var cssParser = new DefaultParserFactory().CreateParser(); var inputText = inputSourceText.ToString(); var stylesheet = cssParser.Parse(inputText, insertComments: false); var resultBuilder = new StringBuilder(); var previousInsertionPosition = 0; var foundDiagnostics = new List <RazorDiagnostic>(); var ensureNoImportsVisitor = new EnsureNoImports(filePath, inputSourceText, stylesheet, foundDiagnostics); ensureNoImportsVisitor.Visit(); var scopeInsertionPositionsVisitor = new FindScopeInsertionEdits(stylesheet); scopeInsertionPositionsVisitor.Visit(); foreach (var edit in scopeInsertionPositionsVisitor.Edits) { resultBuilder.Append(inputText.Substring(previousInsertionPosition, edit.Position - previousInsertionPosition)); previousInsertionPosition = edit.Position; switch (edit) { case InsertSelectorScopeEdit _: resultBuilder.AppendFormat(CultureInfo.InvariantCulture, "[{0}]", cssScope); break; case InsertKeyframesNameScopeEdit _: resultBuilder.AppendFormat(CultureInfo.InvariantCulture, "-{0}", cssScope); break; case DeleteContentEdit deleteContentEdit: previousInsertionPosition += deleteContentEdit.DeleteLength; break; default: throw new NotImplementedException($"Unknown edit type: '{edit}'"); } } resultBuilder.Append(inputText.Substring(previousInsertionPosition)); diagnostics = foundDiagnostics; return(resultBuilder.ToString()); }
// Public for tests public static string AddScopeToSelectors(string inputText, string cssScope) { var cssParser = new DefaultParserFactory().CreateParser(); var stylesheet = cssParser.Parse(inputText, insertComments: false); var resultBuilder = new StringBuilder(); var previousInsertionPosition = 0; var scopeInsertionPositionsVisitor = new FindScopeInsertionEdits(stylesheet); scopeInsertionPositionsVisitor.Visit(); foreach (var edit in scopeInsertionPositionsVisitor.Edits) { resultBuilder.Append(inputText.Substring(previousInsertionPosition, edit.Position - previousInsertionPosition)); previousInsertionPosition = edit.Position; switch (edit) { case InsertSelectorScopeEdit _: resultBuilder.AppendFormat("[{0}]", cssScope); break; case InsertKeyframesNameScopeEdit _: resultBuilder.AppendFormat("-{0}", cssScope); break; case DeleteContentEdit deleteContentEdit: previousInsertionPosition += deleteContentEdit.DeleteLength; break; default: throw new NotImplementedException($"Unknown edit type: '{edit}'"); } } resultBuilder.Append(inputText.Substring(previousInsertionPosition)); return(resultBuilder.ToString()); }
// Public for tests public static string AddScopeToSelectors(string inputText, string cssScope) { var cssParser = new DefaultParserFactory().CreateParser(); var stylesheet = cssParser.Parse(inputText, insertComments: false); var resultBuilder = new StringBuilder(); var previousInsertionPosition = 0; var scopeInsertionPositionsVisitor = new FindScopeInsertionPositionsVisitor(stylesheet); scopeInsertionPositionsVisitor.Visit(); foreach (var(currentInsertionPosition, insertionType) in scopeInsertionPositionsVisitor.InsertionPositions) { resultBuilder.Append(inputText.Substring(previousInsertionPosition, currentInsertionPosition - previousInsertionPosition)); switch (insertionType) { case ScopeInsertionType.Selector: resultBuilder.AppendFormat("[{0}]", cssScope); break; case ScopeInsertionType.KeyframesName: resultBuilder.AppendFormat("-{0}", cssScope); break; default: throw new NotImplementedException($"Unknown insertion type: '{insertionType}'"); } previousInsertionPosition = currentInsertionPosition; } resultBuilder.Append(inputText.Substring(previousInsertionPosition)); return(resultBuilder.ToString()); }