From cc2b6833b673196fe2b07613a23833de15434391 Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Mon, 13 Jun 2016 20:28:40 +0800 Subject: [PATCH] Add charset support --- .../Logic/Cleaning/CodeCleanupManager.cs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/EditorConfig.VisualStudio/Logic/Cleaning/CodeCleanupManager.cs b/src/EditorConfig.VisualStudio/Logic/Cleaning/CodeCleanupManager.cs index d1da16a..56d3957 100644 --- a/src/EditorConfig.VisualStudio/Logic/Cleaning/CodeCleanupManager.cs +++ b/src/EditorConfig.VisualStudio/Logic/Cleaning/CodeCleanupManager.cs @@ -1,5 +1,6 @@ using EnvDTE; using System; +using System.Text; using System.Linq; using Microsoft.VisualStudio.Text; using EditorConfig.Core; @@ -102,7 +103,11 @@ internal void Cleanup(Document document, ITextBuffer textBuffer) /// The text buffer for the document. private void RunCodeCleanupGeneric(Document document, ITextBuffer textBuffer) { + ITextDocument textDocument; + var doc = (TextDocument)document.Object("TextDocument"); + textBuffer.Properties.TryGetProperty(typeof(ITextDocument), out textDocument); + var path = doc.Parent.FullName; FileConfiguration settings; @@ -113,6 +118,9 @@ private void RunCodeCleanupGeneric(Document document, ITextBuffer textBuffer) { ITextSnapshot snapshot = edit.Snapshot; + if (settings.Charset != null && textDocument != null) + FixDocumentCharset(textDocument, settings.Charset.Value); + if (settings.TryKeyAsBool("trim_trailing_whitespace")) TrimTrailingWhitespace(snapshot, edit); @@ -126,6 +134,20 @@ private void RunCodeCleanupGeneric(Document document, ITextBuffer textBuffer) } } + private void FixDocumentCharset(ITextDocument document, Charset charset) + { + if (charset == Charset.Latin1) + document.Encoding = Encoding.GetEncoding("ISO-8859-1"); + else if (charset == Charset.UTF8) + document.Encoding = new UTF8Encoding(false); + else if (charset == Charset.UTF8BOM) + document.Encoding = new UTF8Encoding(true); + else if (charset == Charset.UTF16LE) + document.Encoding = Encoding.Unicode; + else if (charset == Charset.UTF16BE) + document.Encoding = Encoding.BigEndianUnicode; + } + internal void TrimTrailingWhitespace(ITextSnapshot snapshot, ITextEdit edit) { foreach (ITextSnapshotLine line in snapshot.Lines)