65.9K
CodeProject 正在变化。 阅读更多。
Home

转换剪贴板内容以在复制和粘贴之间进行

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (54投票s)

2016年8月26日

CPOL

24分钟阅读

viewsIcon

79135

downloadIcon

3925

在粘贴前修改剪贴板内容以自动化任务

注意:您需要“更新包”才能在编译前获取 NuGet 依赖项.

引言

这个 Windows 桌面应用程序在运行时会监视您的剪贴板,并允许您在粘贴之前更改内容。这可能非常强大,例如,复制 Excel 中的一系列数据(未格式化),然后将其转换为漂亮的表格以粘贴到电子邮件中。或者,分割一串数字并在粘贴时获取独特的、排序的子集进行分析。我最喜欢的一个是从 MS SQL Server Management Studio 复制 SQL 结果集的第一行,并将其转换为列列表,以便更容易地选择和重新排列列。最强大的是将 Excel 表格转换为 SQL 临时表脚本。所有这些都只需点击一个按钮即可完成。

背景

重复性任务让我抓狂。在不得不一遍又一遍地修改文本以满足某些需求之后,我终于意识到我需要做的是能够以编程方式修改剪贴板中的文本,而无需使用任何中间工具。

例如,如果没有这个工具,要将 SQL Server Management Studio 的结果发送给我的同事,我需要复制带有标题的结果,启动 MS Excel,粘贴到 Excel 中,在 Excel 中格式化,从 Excel 中复制,然后粘贴到要发送的电子邮件中。这仅仅是为了显示一个数据表就需要进行大量的繁琐工作。鉴于我每天要做很多次这样的操作,我需要一个解决方案,而这就是那个解决方案。

相反,我经常收到用户发送的 Excel 工作簿,他们要求我导入/导出/解释一些数据。将这些数据导入到防火墙另一侧的生产数据库是一件痛苦的事情。Excel 到 SQL 的转换将 Excel 输入简化为可以粘贴到 SQL #Temp 表中,然后我可以使用该表导入或分析问题。

真正的强大之处在于您能够以 XML 或 JSON 格式编写自己的转换。事实上,下载中附带的大部分转换都是 XML 或 JSON 格式的!

在使用这个工具几年并与同事分享后,现在似乎是与世界分享的合适时机。尽情享受吧!

Using the Code

这篇帖子更多的是关于提供这个工具供他人享用。要使用,启动可执行文件,将内容复制到剪贴板,选择转换,应用并粘贴。就是这样!对于您每天使用的常见转换,您可以在桌面上(或快速启动栏)创建一个快捷方式宏,一键应用转换。有关更多详细信息,请参阅应用程序的帮助部分。有关创建自己的转换的更多详细信息,请参阅 Transmogrifiers 目录中的 Sample.json 和/或 Sample.xml

主要特点

  • 转换剪贴板中的文本!开箱即用,提供了多种转换,例如:修剪、转换为大写、转换为小写、转换为标题大小写、列表选项的来回转换、列表排序/去重选项、字符替换、删除 HTML 标签、转义 XML 等等。
  • 轻松创建自定义转换,以您喜欢的方式转换您的文本数据,在大多数情况下无需编写新的应用程序代码。使用 XML 或 JSON 格式的简单文本配置文件创建您的转换。文件必须使用 .xml.json 扩展名,并位于 /Transformers/ 目录或其子目录中。请参阅 Sample.xml 和/或 Sample.json 获取基于文件的转换器(又名变形器)示例。您可以使用 TransmogrifierConverter(在 UnitTest 项目中)根据需要进行 XML 和 JSON 之间的转换。
  • 批量转换:从版本 9.0 开始,您现在可以将文本文件拖放到预览窗口(应用程序的上半部分)中,对每个拖放的文件进行批量转换。所有选定的转换器都将应用于每个拖放的文件,就像您打开每个文件并将其内容复制到剪贴板一样。

  • 导入/导出转换器:您可以将基于文本的转换器(.json/.xml 文件)拖到转换器列表以导入。右键单击转换器以导出。
  • 在桌面上创建快速转换宏,只需简单点击即可重新应用常用转换。

  • 收藏夹和用户特定设置

    您最常用的转换会浮动到顶部,使应用程序更易于使用。要保存的收藏夹数量可在 app.config 中调整。收藏夹文件是用户特定的,位于用户的 %APPDATA% 文件夹中,这为保存其他用户特定详细信息提供了机会。有关详细信息,请参阅 Favorites(类)。

  • Shell 钩子 从 v8.0 开始,您可以安装 Windows shell 集成钩子,以便更轻松地访问收藏夹。

  • 内联单元测试:既然可以通过将文本文件放入文件夹来添加新的转换器,那么我们也应该能够直接将单元测试放入其中。编码的转换器和变形器都可以内联编写其单元测试。有关示例,请参阅任何变形器 XML 文件,或参阅 Sample.xml 获取更多详细信息。要运行测试,请使用 /DEBUG/TEST 启动标志运行应用程序,或运行单元测试 InLineUnitTestRunAll

  • 可配置组:组名称和排序顺序在配置文件 Groups.xml 中定义。您可以根据需要添加/删除/重新排列组。仍然存在映射到 config 文件中值的常量(GroupSortOrder.CannedGroups.*),以供在编码转换器中使用(如果需要),但它们不是必需的。组的排序顺序由其在 Groups.xml 文件中出现的顺序决定。未知组的项目根据 app.config 设置 UNKNOWN_GROUPS_TO_TOP 添加到列表的顶部或底部。
  • 一对一转换矩阵:许多转换是简单的字符替换(逗号替换为制表符,制表符替换为空格等)。有一个常见替换字符列表(CharReplacers.json),它将解析为所有可能替换的网格。这是一个漫长的旅程,我尝试了各种选项,尤其是网格(如下示例),但我发现它比提供的仅包含所有排列的解决方案更复杂。有关大部分相关代码,请参阅 CharReplacerLib

  • 筛选/搜索:开始输入以筛选转换器。退格键/删除键以清除。当前筛选器和匹配项数量显示在转换器列表的右上角。筛选器将匹配任何单词(例如,“aaa BBB”将匹配“Aaa Bbb”)。

  • 颜色编码的组名:组可以定义标题的颜色(用于使收藏夹和 1:1 矩阵转换的颜色编码更容易)。
  • Compound Transmogrifiers:一个变形器可以在当前执行之前/之后调用另一个变形器。您需要注意递归调用(A 调用 B 调用 A),以防止意外转换。有关此功能的示例,请参阅 CommasToVerticalQuotedTrimmedList.xml。希望这能让更复杂的转换更容易构建?!请注意,添加了 TransformClipboard.PostLoadedInit,以便转换器可以相互感知,并添加了 TransformReferenceTransformations 来执行转换。
  • 调试窗口:通过使用 /DEBUG 命令行参数启动来访问调试窗口。这对于诊断失败的转换问题很有用。双击可在文本编辑器中查看结果。

探索代码

此应用程序是一个标准的 WPF 桌面应用程序,大部分情况下平平无奇。但是,如果您有兴趣扩展代码以满足自己的需求,了解一些活动部件将很有帮助。

概述

总体设计是一个与 ViewModel 绑定的 WPF 应用程序。启动时,TextTransformerBase.AllTransformers 使用多种方法来搜寻代码和文件系统,以查找要添加到应用程序可用转换器列表中的转换器。如果在 DEBUGTEST 模式下,我们将尝试对任何加载的转换器运行单元测试。在转换(Apply)时,我们捕获用户的剪贴板,并应用转换(按照选择的顺序对每个选定的转换器调用 Transform(ref text)),然后将结果写回剪贴板,最后关闭应用程序。预览功能基本上执行“Apply”而不将结果写回剪贴板,如果剪贴板中的文本数据过大,它将被禁用,因为它会大大减慢应用程序的速度。

与大多数 WPF 应用程序一样,我们从 App.xaml.csApplication_Startup 开始,解析命令行以查看我们是在 UI 模式(显示可能的转换列表)还是命令行模式(传入了预设的转换器列表,因此只需转换并退出——无 UI)下运行。无论哪种情况,在我们加载 AllTransformers 后,我们都将其包装在 ListBoxTransformerItem 中,该项用于跟踪选择排序顺序、可见性和其他 UI 功能,最终添加到绑定并渲染到 UI 列表的 ObservableCollection 中。

选择任何项目后,我们执行 DoPreview() 以显示转换的输出会是什么样子。最终,如果用户点击“Apply”,我们基本上只需执行 VM.ClipboardText = VM.Transform(); 并关闭应用程序。

挑战

问题 1集成 Win32 组件。这部分代码完全从互联网(clipboard-event-c-sharp)移植而来,感谢 dbkk!

问题 2如何在转换完成后,应用程序关闭并移除气泡和系统托盘图标之前,显示气泡适当的时间。大部分逻辑都在 MainWindowVM.DisplayTransformComplete 中。如果传入委托函数(onDoneHandler),我们将其连接到一个 3 秒计时器,以便在完成后调用。在大多数情况下,这基本上会调用 VM.Quit() 来关闭应用程序。无论我们处于哪种应用模式,一旦“应用”开始,我们就会隐藏主窗口,使其看起来应用程序已关闭,同时我们显示弹出气泡。

问题 3桌面快捷方式创建。这段代码几乎完全取自(此处)——谢谢!这两个 CreateShortcut 函数包含大量应用程序特定逻辑,旨在使快捷方式具有意义(想出一个不太离谱但仍具描述性的名称)。这很可能是我会再次使用的代码。

问题 4:序列化。由于 JSON/XML 变形器可能会变得有些复杂,它们的反序列化变得混乱。我希望能够优雅地支持多种序列化格式,平衡硬编码与动态代码,并平衡用户希望做的事情与足够的安全网以防止他们搞砸。SerializationToolsFactory 似乎实现了大部分这些目标。另请注意 Tools.UnescapePseudoEscapeSequences 中的代码,它确实有助于使编写变形器更容易,尤其是在统一处理换行符(\n == \r == \r\n)方面。

问题 5:内联单元测试。由于用户只需将文本文件(.json.xml)放入文件夹即可添加新代码,因此无法轻松测试其转换是否有效。借助 InLineUnitTest 功能,他们可以将自己的测试添加到拖放的文件中,并在启动时运行这些测试,以确保转换达到预期效果。这对于调试许多转换器非常有帮助。

问题 6:支持用户定义的转换器。查看 Transmogrifier.Transform() 以了解其复杂性的入口点。困难之处在于需要新功能(例如,以大写形式返回结果,或修剪输入等)。我们如何确定这应该在过程的哪个阶段发生?为了使这更易于管理,我尝试将步骤分解为清晰命名的函数(Step_*)。我确实考虑过将每个步骤分解为单独的类,但这只会使关联更改变得更加困难——即使它是一个更好的设计。

问题 7:管理员安装。由于用户访问控制 (UAC) 的原因,为 Shell Hooks 功能 (v8.0) 添加安装程序被证明极具挑战性。当在 Visual Studio 中以管理员身份运行时,一切正常,但当我以实际用户帐户运行安装时,它无法将文件复制到程序文件文件夹。我无法找到一个优雅的解决方案来执行具有提升权限的单个函数,因此解决方案是使用管理员权限和 /INSTALL(或 /UNINSTALL)开关启动应用程序的静默实例。它有效,但不是很美观。非常欢迎更好的解决方案。

问题 8:简洁。在 8.0 版本中,有很多新代码对于基本功能来说并非必需,这让我很恼火。因此,有一个预处理器指令 #FRILLS 将启用许多新代码。反之,如果没有它进行编译,将生成一个更小的可执行文件,功能也会减少。

问题 9:帮助图片。嵌入式帮助使用 WebBrowser 控件渲染 HTML 字符串以显示帮助。但是,我从未能够(轻松地)在帮助中放入图片,因为无论我使用何种图片引用,在网页加载时都会遇到安全故障。解决方案:将图片作为 Base64 编码数据嵌入到 HTML 中。有关详细信息,请查看 HelpHelper.EmbeddedImage 类。

其余值得注意的代码实际上是视图模型(MainWindowVM)和转换器代码。

关注点

BlankInVisibiltyConverter:当文本值为空白时,用于隐藏内容的便捷转换器。

ClipboardFormat:有些转换器返回 HTML。剪贴板中的 HTML 变得棘手。您必须提供粘贴的 HTML 所在位置的索引位置,这计算起来有点麻烦。如果您需要返回 HTML 结果,我建议您使用 HTMLClipboardHelper.HTMLToClipboardFormattedText 来提供结果。

ClipboardAssist & MainWindowVM.ClipboardText: 剪贴板辅助功能大部分借鉴自(此处),但释放仍然具有挑战性。我试图用 invoke 调用来纠正它,但这只是一个相当糟糕的解决方案。同样,当处理非常大的剪贴板文本时,存在一个奇怪的竞态条件,因此 ClipboardText 的 getter 中有一个重试循环,似乎可以解决这个问题,但同样是相当糟糕的代码。

桌面快捷方式:我已经使用这个应用程序多年,并且我总是手动创建宏快捷方式,但这太逊了。所以在互联网的帮助下(在桌面创建快捷方式 c sharp),感谢 Simon Mourier,我能够连接一个简单的按钮来做到这一点。有关有趣的代码,请参阅 ShortcutHelper.CreateShortcut

禁用预览:在撰写此文章时,我需要转换一个非常大的 SQL 结果集(> 100 MB)。它非常慢!经过一些调试,我意识到问题完全在于 UI 渲染。因此,我添加了一个“禁用预览”选项,如果它认为剪贴板中的数据量过大,则会触发该选项。该设置可以通过 app.config 中的 PREVIEW_CUTOFF_KB 设置进行调整。设置为 0 可禁用此功能。如果预览被禁用且剪贴板中的文本过大,则会显示警告。

事件日志:有意义但不会导致崩溃的错误会记录到 Windows 事件日志中。这在未附加调试器时调试转换器问题时非常有用。

Favorites:一个通用的排名 cookie 类,用于将收藏夹浮动到顶部。我经常需要这种功能,而且我很可能会再次使用它。

GroupSortOrder:这似乎是用户可配置的任意可重新排序列表的实用解决方案。这很可能是我将来会以某种方式再次使用的代码。

帮助:我努力使帮助以无缝方式内联包含,这就是 TextTransformerBase 具有 HelpText 属性的原因。样式和其他详细信息在 Help.html 中定义,这是最终渲染到帮助窗口的内容。有一些标签可以替换 HTML 帮助文件中的数据,包括嵌入式文件引用,以使概念更容易显示。我肯定会再次使用这段代码。

InLineUnitTest:鉴于我们实际上只是测试文本转换,其单元测试是相当简单的字符串前后对测试。我认为这个解决方案非常适合这个用例,并为自定义转换器提供了相当大的耐用性。

PropertyStateChangeEventArgs:当传递属性更改的事件参数时,我很惊讶我找不到一个简单的类来显示旧/新值(它可能存在,我只是找不到)。这是一个很好的小类,可以帮助解决这个问题。

SerializationTools*:有一些有趣的代码可以自动检测要使用哪种序列化器,并将其与编码的默认值进行平衡。SerializationTools 文件夹中的整个代码堆栈是我可能会再次使用并随着时间推移进行完善的东西。

SysTrayBalloonTip:用于显示气球提示系统托盘消息的包装类。很方便。棘手的部分是关闭和何时关闭,而这个解决方案似乎运行得相当好。

HelpHelper:这使用伪标签在帮助网页中替换复杂对象(文件和图像)。它似乎工作得很好,我可能会再次使用它。

OcrTextTranform:一位用户联系我请求这个自定义转换器,制作起来很有趣,并且对他来说似乎运作良好。它根据一些附加条件查找/替换正则表达式值。有趣的部分是,如果它发现重复的匹配项,它会尝试替换两次,这会大大降低性能。解决方法:按唯一值分组以获取不同的匹配项列表!这是一个简洁实用的问题解决方案,我肯定会再次使用。

实现自定义转换器

为了获得最大的“投入产出比”,最简单的方法是编写自己的基于文件的转换器。我确实尝试编写代码,以便您只需在应用程序根目录下方包含另一个程序集(.dll),如果它包含转换器,您就可以使用它。这在安全性方面出现了一些问题,并且该代码目前已被注释掉(TextTransformerBase - #if false 部分)。

有几种选项可以创建您自己的转换器。

选项 1 - 变形器 (基于 XML 或 JSON 文件的转换器)

启动时,Transmogrifier.GetAllTransmogrifiers 解析应用程序的“Transmogrifiers”目录(及子目录),查找包含基于文件序列化转换(变形器)的 *.xml 和 *.json 文件。有关详细信息,请参阅 Sample.xmlSample.json。最大的优点是无需重新编译代码,只需创建文件,将其包含在目录中并重新启动应用程序。请注意,您也可以在文件中包含单元测试,同样避免了实际编译代码的需要。有关转换如何发生以及所有可用选项的详细信息,请参阅 Transmogrifier.Transform()。目前编码的一些功能包括

  • 指定输出大小写(小写、大写、标题大小写、无)
  • charstring 或正则表达式分割
  • string 或正则表达式查找和替换,包括找到的正则表达式模式(参见 TransmogifierReplaceTest 示例)
  • 正则表达式现在支持更多选项(例如切换大小写敏感性)
  • 输入始终假定为“网格”(行 x 列),其中单个 string 被视为网格中的单个单元格。这在转换复杂数据方面增加了极大的灵活性。您可以以不同的方式拆分行和列,对拆分的单元格进行操作,并以不同的方式重新组合它们。有关详细信息,请参阅 Sample.xml
  • 预设选项,使多个操作更简单,并在转换过程中为您提供更大的灵活性。包括
    • 何时以及如何修剪文本(按行?按单元格?等等)。有关更多详细信息,请参阅选项:TRIM_ON_SPLIT_ROWTRIM_ON_SPLIT_COLREMOVE_EMPTY_ROWSREMOVE_EMPTY_CELLSSKIP_MASK_LAST_CELL
    • 如何处理不同类型的换行符。(可以视 \r\n\r\n 完全相同!)有关更多详细信息,请参阅选项:NORMALIZE_NEW_LINES
    • 如何处理不同类型的空格。(可以将 Ascii(32) 视为与   相同!)有关更多详细信息,请参阅选项:NORMALIZE_SPACES
    • 基于行的操作,例如排序、顶部和去重。有关更多详细信息,请参阅选项:DISTINCT_ROWSSORT_ROWSGRIDIFY 和属性 TopRows
    • 我发现处理 XML 转义序列非常具有挑战性,尤其是对于换行符和制表符。我创建了一个 USE_COMMON_ESCAPE_CHARS 选项,它将预处理 XML 文件,将 \n\r\t\l(映射到 Environment.NewLine 的自定义标签)替换为它们的 XML 转义序列。这使得处理转换文件更加容易。
  • 支持原始 XLST 转换。假设输入是有效的 XML,您只需应用 XSLT 转换即可。一个包含的示例用于将 Microsoft Visual Studio 生成的 XML 帮助文本转换为 HTML。感谢 Emma Burrows 提供Visual Studio .NET XML 文档的简单 XSLT 样式表
  • 除非明确设置,否则组会根据目录结构推断。这样感觉更自然。
  • Transmogifier 过程被分解为几个步骤,以便更容易地处理代码。有关详细信息,请参阅 Transmogifier.Transform
  • 两阶段排序。列表项的主要排序是按组,按照它们在 Groups.xml 文件中出现的顺序排列。如果指定了 Rank,它将用于在组内定位项目,最后按名称排序。

选项 2 – 字符转换

对于简单的 1 对 1 字符转换(例如,“空格转换为引号”或“逗号转换为制表符”),您可以将字符添加到 CharReplacers.json 中已知字符的列表中。

选项 3 - 自定义 .NET 转换器

要创建您自己的自定义转换器,请创建一个实现 abstract 基类 TextTransformerBase 的类。语义非常简单(我希望如此),构造函数定义了基本信息(名称、组、描述等),然后用您的自定义代码覆盖 Transform (ref string str)

示例
public class ToUpper : TextTransformerBase
{
  public ToUpper() : base
  (
    GROUP_SORT_ORDER.STRING_CASE,      // Group in which to include this transformer
    "To Upper",                        // Name to display
    "Make all characters UPPER case."  // Tool tip and Help file text
  ) { }

  override public void Transform(ref string str)
  {
    str = str.ToUpper();
  }
}

注意:有检查确保 str 永远不为 null,因此您应该能够编写任何您想要的转换。

版本历史

  • 版本 9.1 (2021 年 2 月 22 日):次要更改
    • OCR 文本转换器改进
    • 简化了向编码转换器添加单元测试的过程
    • 标准化空格时,根据维基百科(链接)包含更多空格
    • 标准化换行符时,根据维基百科(链接)包含更多换行符
    • 使用 .NET 4.7.2 重新编译
  • 版本 9.0(2021 年 1 月 2 日):拖放新转换器、批量转换、更好的消息传递
    • 将文本变形文件(.xml.json)拖放到转换器列表以安装它
    • 将文本文件拖放到预览窗口以进行批量转换
    • 右键单击列表中以文本文件为后盾的转换器可将其导出到文件
    • HTML 帮助文件的图像嵌入器
    • 更清晰的警报和通知
    • 附加转换器
    • 带图片的帮助
  • 版本 8.2(2019 年 12 月 9 日):更多系统生成的字符转换
    • CharReplacers.json 现在支持破折号(包括连字符、减号、长破折号等)和下划线
    • 添加了新的 CharReplacer 默认操作 Remove,感谢我的妻子!
  • 版本 8.1 (2019 年 10 月 19 日):修剪字符
    • 既然 CharReplace.json 中有常用字符,我们不妨支持修剪它们以及替换它们。搞定。谢谢 Andy!
    • 应用程序设置用于切换系统生成的转换器。这比必须清除 CharReplacers.jsonDateFormats.json 文件更容易。
    • 更细粒度的系统组名称
    • 小的 bug 修复和代码重组
  • 版本 8.0(2019 年 10 月 9 日):Shell 集成、日期格式、#FRILLS
    • Shell 集成! 新的菜单栏提供了安装/卸载“Shell 钩子”的功能。安装后,右键单击应用程序快捷方式、应用程序本身或桌面背景,上下文菜单允许您从您喜爱的转换中进行选择。特别感谢 Mauricio Díaz Orlich 提供的 ShellIcon.cs 代码,以及 Dave Kerr 提供的 SharpShell 库,我已经将其用于多个项目——谢谢!安装后,应用程序会复制到 Program Files 目录中的固定位置,这使得将其连接到 shell 并仍然使用代码变得更容易。
    • 鉴于 shell 集成附带了大量新代码,我引入了一个预处理器标签 #FRILLS。当启用 friills 时,您将获得 shell 安装选项、调试、测试支持以及类似的“花哨功能”。如果您在没有 #FRILL 指令的情况下构建,则该代码不会编译到程序集中,并且功能将隐藏。有新的预设构建来支持这一点。
    • 成员 12949186 提出了一个关于日期格式化程序的好主意。这变得复杂,但我按照 CharReplaceLib 模式进行了初步尝试。潜在的输出格式在配置文件 (DateFormats.json) 中提供。棘手的部分将是解析 DateTimeReplaceTransformer.TryParseInputDate() 中的输入。目前,该函数只是默认 DateTime.TryParse() 的一个包装器,但希望我们能够扩展它以支持正则表达式或其他更严格的解析过程。
    • PreferredAssembly。通过 Shell 集成,检测正在执行的代码变得更加困难。应用程序中的大多数地方现在都依赖 Tool.PreferredAssembly 来“猜测”我们实际想要查看的代码库(TransformClipboard.exe),而不是实际正在运行的代码库。
  • 版本 7.2 (2019 年 9 月 26 日):小调整,新转换器
    • 取消转义 XML 转换器
    • 各种数据库转换器,将代码分解为更可重用的类
    • AdditionalIndicators,目前仅支持“Beta”
  • 版本 7.1 (2019 年 9 月 20 日):速度和 Bug 修复
    • 微小的速度修复(特别是缓存 TextTransformerBase GetHash
    • 修复了帮助文件中给出错误方向的错误
  • 版本 7.0 (2019 年 9 月 20 日):速度提升
    • 复选框点击监听的是一个通用属性更改事件处理程序。这对于我们的需求来说触发过于频繁。为了解决这个问题,现在有一个专门的选择更改事件处理程序来捕获更改事件,这似乎使事情进行得更快。
    • 快捷方式创建通知
    • 快捷方式通过代码而不是名称调用转换
    • 重新添加了预览禁用功能(不确定它何时消失了!)。这暴露了一个严重的竞态条件,我已经尝试编写修复程序,希望它能起作用。
    • 尝试修复剪贴板助手处置时的跨线程问题
    • 帮助文件中嵌入的示例变形器
    • 双击调试窗口可在文本编辑器中打开(我很惊讶我有多喜欢这个功能!)
    • 代码强化。Visual Studio 建议了一些很好的编辑来清理代码。我采纳了。
  • 版本 6.2 (2019 年 9 月 15 日):错别字修复,请求的转换器
    • 全面的错别字修复
    • "englebart" 请求了一个 SQL 参数替换转换器
  • 版本 6.1 (2019 年 9 月 2 日):新功能
    • 收藏夹!您最常用的项目会浮到顶部。单击收藏夹标题以清除。
    • 用户特定设置。收藏夹存储在用户特定文件夹中
    • 搜索过滤器改进。匹配任何单词(例如,“A B”将匹配“ (AB)。”)
    • 复合变形器!可以在当前变形器之前/之后调用其他变形器。
    • 1:1 转换矩阵。我意识到我的许多转换器都是简单的替换(逗号替换为制表符,制表符替换为空格等)。有一个常见替换字符列表,它将解析为所有可能替换的网格。
    • 转换器列表中的颜色代码
    • JSON 转换器。为什么?为什么不!
    • SKIP_MASK_LAST_CELL 选项。处理单元格时,可以选择跳过最后一个单元格,这对于组装逗号列表时省略最后一个逗号很有用。
    • 重大变更 - 重新组织了许多转换器以更好地与新功能配合
    • Bug 修复
  • 版本 5 (2019 年 3 月 6 日):Bug 修复
    • 修复了可序列化字典中的一个错误,该错误导致某些变形器无法正常工作
    • 为序列化过程和变形单元测试添加了调试辅助工具
    • 修复了“剥离 HTML 转换器”中的错误
    • 修复了“替换智能引号转换器”中的错误
    • 重大变更 - 默认情况下从可序列化字典中删除了“Root”元素。要修复您的自定义变形器,请删除 XML 变形器中的 和 标签。
    • 在帮助页面上添加了一些乐趣
  • 版本 4 (2019 年 2 月 5 日):重大更新
    • 新转换器
    • Config 文件中的分组
    • 内联单元测试
    • 筛选/查找转换器(只需开始输入)
    • 声明式项类型(使代码更容易使用)
    • SerializationTools 分离到自己的类(可重用!)
    • 调试窗口。在 DEBUG 模式下默认显示,或使用 /DEBUG 命令行开关显示。
    • 基于 XML 的转换器(重命名为 Transmogrifier)重大修订
  • 版本 3 (2016 年 8 月 26 日):首次公开发布
  • 版本 1-2 (2013 年 12 月 12 日):未跟踪——我只是自己用! :-)
© . All rights reserved.