From 323a4b293384985b7a695ca90d40e853aaaa9e51 Mon Sep 17 00:00:00 2001 From: niksedk Date: Thu, 8 Oct 2026 06:19:51 +0200 Subject: [PATCH] Add Persian Subtitle Fixes plugin for SE5 Port of msasanmh's Persian Subtitle Fixes (source/PersianErrors) to the SE5 plugin contract with an Avalonia UI: 12 rule groups with icons, Persian titles and live examples, per-line fix cards with highlighted differences, group filter chips, search, hidden-character display (ZWNJ, direction marks), selected-lines scope, apply and re-check, undo. The 1,526 rules are unchanged and run in the same order. Lines are returned as paragraphs, so every format is kept; line break style is preserved. Plain rules no longer get quotes escaped (the two quote + ZWNJ rules never matched before). Co-Authored-By: Claude Opus 5.5 --- .github/workflows/persian-errors.yml | 196 + se5/PersianErrors.Tests/MainViewModelTests.cs | 112 + .../PersianErrors.Tests.csproj | 27 + se5/PersianErrors.Tests/PersianFixerTests.cs | 91 + se5/PersianErrors.Tests/TextDiffTests.cs | 39 + se5/PersianErrors/App.axaml | 8 + se5/PersianErrors/App.axaml.cs | 12 + se5/PersianErrors/DiffTextBlock.cs | 122 + se5/PersianErrors/FixItem.cs | 33 + se5/PersianErrors/GroupInfo.cs | 54 + se5/PersianErrors/GroupOption.cs | 62 + se5/PersianErrors/MainViewModel.cs | 443 + se5/PersianErrors/MainWindow.axaml | 459 + se5/PersianErrors/MainWindow.axaml.cs | 84 + se5/PersianErrors/PersianErrors.csproj | 31 + se5/PersianErrors/PersianFixer.cs | 82 + se5/PersianErrors/Program.cs | 16 + se5/PersianErrors/README.md | 71 + se5/PersianErrors/RuleSet.cs | 161 + se5/PersianErrors/TextDiff.cs | 138 + se5/PersianErrors/app.manifest | 10 + se5/PersianErrors/multiple_replace.xml | 10868 ++++++++++++++++ se5/PersianErrors/plugin.json | 12 + 23 files changed, 13131 insertions(+) create mode 100644 .github/workflows/persian-errors.yml create mode 100644 se5/PersianErrors.Tests/MainViewModelTests.cs create mode 100644 se5/PersianErrors.Tests/PersianErrors.Tests.csproj create mode 100644 se5/PersianErrors.Tests/PersianFixerTests.cs create mode 100644 se5/PersianErrors.Tests/TextDiffTests.cs create mode 100644 se5/PersianErrors/App.axaml create mode 100644 se5/PersianErrors/App.axaml.cs create mode 100644 se5/PersianErrors/DiffTextBlock.cs create mode 100644 se5/PersianErrors/FixItem.cs create mode 100644 se5/PersianErrors/GroupInfo.cs create mode 100644 se5/PersianErrors/GroupOption.cs create mode 100644 se5/PersianErrors/MainViewModel.cs create mode 100644 se5/PersianErrors/MainWindow.axaml create mode 100644 se5/PersianErrors/MainWindow.axaml.cs create mode 100644 se5/PersianErrors/PersianErrors.csproj create mode 100644 se5/PersianErrors/PersianFixer.cs create mode 100644 se5/PersianErrors/Program.cs create mode 100644 se5/PersianErrors/README.md create mode 100644 se5/PersianErrors/RuleSet.cs create mode 100644 se5/PersianErrors/TextDiff.cs create mode 100644 se5/PersianErrors/app.manifest create mode 100644 se5/PersianErrors/multiple_replace.xml create mode 100644 se5/PersianErrors/plugin.json diff --git a/.github/workflows/persian-errors.yml b/.github/workflows/persian-errors.yml new file mode 100644 index 00000000..7fc1df00 --- /dev/null +++ b/.github/workflows/persian-errors.yml @@ -0,0 +1,196 @@ +name: Build PersianErrors (SE5) + +on: + push: + branches: [main] + paths: + - 'se5/PersianErrors/**' + - 'se5/PersianErrors.Tests/**' + - 'se5/Plugin-Shared/**' + - '.github/workflows/persian-errors.yml' + pull_request: + paths: + - 'se5/PersianErrors/**' + - 'se5/PersianErrors.Tests/**' + - 'se5/Plugin-Shared/**' + - '.github/workflows/persian-errors.yml' + workflow_dispatch: + inputs: + release: + description: 'Publish a GitHub release. Bumps the minor in plugin.json and commits it back.' + type: boolean + default: false + version: + description: 'Optional explicit version (e.g. 1.2.0). Overrides the auto-minor-bump.' + required: false + type: string + +permissions: + contents: write + +jobs: + prepare: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.set.outputs.version }} + tag: ${{ steps.set.outputs.tag }} + ref: ${{ steps.set.outputs.ref }} + release: ${{ steps.set.outputs.release }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Resolve version (and bump on release) + id: set + run: | + set -e + current=$(jq -r .version se5/PersianErrors/plugin.json) + release_flag="false" + ref="${{ github.sha }}" + version="$current" + tag="" + + if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ inputs.release }}" = "true" ]; then + release_flag="true" + if [ -n "${{ inputs.version }}" ]; then + version="${{ inputs.version }}" + else + IFS=. read -r major minor patch <<< "$current" + version="$major.$((minor + 1)).0" + fi + + tmp=$(mktemp) + jq --arg v "$version" '.version = $v' se5/PersianErrors/plugin.json > "$tmp" + mv "$tmp" se5/PersianErrors/plugin.json + + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add se5/PersianErrors/plugin.json + git commit -m "Bump PersianErrors to $version [skip ci]" + + # Retry-with-rebase: if a concurrent release dispatched for a different + # plugin won the push first, pull --rebase and try again. + attempts=0 + while ! git push 2>/tmp/push.err; do + attempts=$((attempts + 1)) + if [ "$attempts" -ge 5 ]; then + echo "Failed to push after $attempts attempts:" >&2 + cat /tmp/push.err >&2 + exit 1 + fi + echo "Push rejected (attempt $attempts), pulling --rebase and retrying..." + git pull --rebase --no-edit + done + ref=$(git rev-parse HEAD) + + IFS=. read -r major minor patch <<< "$version" + tag="se5-persian-errors-v$major.$minor" + fi + + echo "version=$version" >> "$GITHUB_OUTPUT" + echo "tag=$tag" >> "$GITHUB_OUTPUT" + echo "ref=$ref" >> "$GITHUB_OUTPUT" + echo "release=$release_flag" >> "$GITHUB_OUTPUT" + + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET 8 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Test + run: dotnet test se5/PersianErrors.Tests/PersianErrors.Tests.csproj -c Release + + build: + needs: [prepare, test] + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - rid: win-x64 + os: windows + exe: PersianErrors.exe + - rid: win-arm64 + os: windows + exe: PersianErrors.exe + - rid: linux-x64 + os: linux + exe: PersianErrors + - rid: linux-arm64 + os: linux + exe: PersianErrors + - rid: osx-x64 + os: macos + exe: PersianErrors + - rid: osx-arm64 + os: macos + exe: PersianErrors + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ needs.prepare.outputs.ref }} + + - name: Setup .NET 8 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + - name: Publish self-contained (${{ matrix.rid }}) + working-directory: se5/PersianErrors + run: | + dotnet publish PersianErrors.csproj \ + -c Release \ + -r ${{ matrix.rid }} \ + --self-contained true \ + -p:DebugType=None \ + -p:DebugSymbols=false \ + -o staging/PersianErrors + + - name: Rewrite plugin.json for ${{ matrix.os }} + working-directory: se5/PersianErrors + run: | + jq ' + del(.runtime, .entry) | + .executables = { "${{ matrix.os }}": "${{ matrix.exe }}" } + ' plugin.json > staging/PersianErrors/plugin.json + + - name: Package zip + working-directory: se5/PersianErrors/staging + run: zip -r "$GITHUB_WORKSPACE/PersianErrors-${{ matrix.rid }}.zip" PersianErrors + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: PersianErrors-${{ matrix.rid }} + path: PersianErrors-${{ matrix.rid }}.zip + + release: + name: Publish GitHub Release + needs: [prepare, build] + if: needs.prepare.outputs.release == 'true' + runs-on: ubuntu-latest + steps: + - name: Download all zips + uses: actions/download-artifact@v4 + with: + path: dist + pattern: PersianErrors-* + merge-multiple: true + + - name: Create release and upload zips + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release create "${{ needs.prepare.outputs.tag }}" dist/PersianErrors-*.zip \ + --repo "${{ github.repository }}" \ + --target "${{ needs.prepare.outputs.ref }}" \ + --title "PersianErrors v${{ needs.prepare.outputs.version }}" \ + --notes "Self-contained PersianErrors plugin builds for win/linux/osx (x64 + arm64)." diff --git a/se5/PersianErrors.Tests/MainViewModelTests.cs b/se5/PersianErrors.Tests/MainViewModelTests.cs new file mode 100644 index 00000000..3c0eabd3 --- /dev/null +++ b/se5/PersianErrors.Tests/MainViewModelTests.cs @@ -0,0 +1,112 @@ +using SubtitleEdit.Plugins.PersianErrors; +using SubtitleEdit.Plugins.Shared; + +namespace PersianErrors.Tests; + +public class MainViewModelTests +{ + private static async Task CreateAsync(PluginRequest request) + { + var vm = new MainViewModel(request); + await WaitAsync(vm); + return vm; + } + + private static async Task WaitAsync(MainViewModel vm) + { + for (var i = 0; i < 300 && vm.IsBusy; i++) + { + await Task.Delay(10); + } + + Assert.False(vm.IsBusy); + } + + private static PluginRequest Request(params string[] texts) => new() + { + Subtitle = new PluginSubtitle + { + Format = "Advanced Sub Station Alpha", + Paragraphs = texts.Select((t, i) => new PluginParagraph { StartMs = i * 1000, EndMs = i * 1000 + 900, Text = t, Style = "Persian", Actor = "A" }).ToList(), + }, + }; + + [Fact] + public async Task OkReturnsTheLinesInTheirOwnFormat() + { + var vm = await CreateAsync(Request("شدني", "درست")); + + var response = vm.BuildResponse(); + + Assert.Equal(PluginStatus.Ok, response.Status); + Assert.Equal("Advanced Sub Station Alpha", response.Subtitle!.Format); + Assert.Equal(new[] { "شدنی", "درست" }, response.Subtitle.Paragraphs!.Select(p => p.Text)); + Assert.All(response.Subtitle.Paragraphs!, p => Assert.Equal("Persian", p.Style)); + } + + [Fact] + public async Task UnselectedFixesAreLeftOut() + { + var vm = await CreateAsync(Request("شدني", "املاك")); + vm.VisibleFixes.Single(f => f.Index == 0).IsSelected = false; + + var response = vm.BuildResponse(); + + Assert.Equal(new[] { "شدني", "املاک" }, response.Subtitle!.Paragraphs!.Select(p => p.Text)); + } + + [Fact] + public async Task NoFixesIsCancelled() + { + var vm = await CreateAsync(Request("درست")); + + Assert.Equal(PluginStatus.Cancelled, vm.BuildResponse().Status); + } + + [Fact] + public async Task OlderSubtitleEditGetsSubRipBack() + { + var request = new PluginRequest { Subtitle = new PluginSubtitle { SubRip = "1\n00:00:01,000 --> 00:00:02,000\nشدني\n" } }; + var vm = await CreateAsync(request); + + var response = vm.BuildResponse(); + + Assert.Equal("SubRip", response.Subtitle!.Format); + Assert.Contains("شدنی", response.Subtitle.Native); + Assert.Null(response.Subtitle.Paragraphs); + } + + [Fact] + public async Task SettingsRoundTrip() + { + var first = await CreateAsync(Request("شدني")); + first.Groups.Single(g => g.Name == "OCR").IsEnabled = false; + first.ShowHidden = false; + var saved = first.BuildCancelResponse(); + + var request = Request("شدني"); + request.Settings = saved.Settings; + request.SettingsVersion = saved.SettingsVersion; + var second = await CreateAsync(request); + + Assert.False(second.Groups.Single(g => g.Name == "OCR").IsEnabled); + Assert.False(second.ShowHidden); + Assert.Equal(second.Groups.Count - 1, second.EnabledGroupCount); + } + + [Fact] + public async Task ApplyAndRecheckThenUndo() + { + var vm = await CreateAsync(Request("شدني")); + + vm.ApplyAndRecheckCommand.Execute(null); + await WaitAsync(vm); + Assert.Equal(1, vm.ChangedLineCount); + Assert.Equal(0, vm.FixCount); + + vm.UndoCommand.Execute(null); + await WaitAsync(vm); + Assert.Equal(0, vm.ChangedLineCount); + Assert.Equal(1, vm.FixCount); + } +} diff --git a/se5/PersianErrors.Tests/PersianErrors.Tests.csproj b/se5/PersianErrors.Tests/PersianErrors.Tests.csproj new file mode 100644 index 00000000..4ce4d758 --- /dev/null +++ b/se5/PersianErrors.Tests/PersianErrors.Tests.csproj @@ -0,0 +1,27 @@ + + + + net8.0 + enable + enable + false + + + + + + + + + + + + + + + + + + + + diff --git a/se5/PersianErrors.Tests/PersianFixerTests.cs b/se5/PersianErrors.Tests/PersianFixerTests.cs new file mode 100644 index 00000000..770302a4 --- /dev/null +++ b/se5/PersianErrors.Tests/PersianFixerTests.cs @@ -0,0 +1,91 @@ +using SubtitleEdit.Plugins.PersianErrors; + +namespace PersianErrors.Tests; + +public class PersianFixerTests +{ + private static RuleGroup Group(string name) => RuleSet.Default.Single(g => g.Name == name); + + [Fact] + public void LoadsAllGroupsInFileOrder() + { + var names = RuleSet.Default.Select(g => g.Name).ToList(); + + Assert.Equal(GroupInfo.All.Select(g => g.Name), names); + Assert.True(RuleSet.Default.Sum(g => g.Rules.Count) > 1000); + } + + [Fact] + public void EveryGroupExampleIsChangedByItsGroup() + { + foreach (var info in GroupInfo.All) + { + var after = PersianFixer.Fix(info.Example, new[] { Group(info.Name) }); + Assert.True(after != info.Example, $"{info.Name} does not change its example"); + } + } + + [Theory] + [InlineData("Change Arabic Chars to Persian", "املاك شدني", "املاک شدنی")] + [InlineData("Add Missing Spaces", "سلام،عزیزم", "سلام، عزیزم")] + [InlineData("Space to Invisible Space", "میشود", "می\u200Cشود")] + [InlineData("Fix Abbreviations", "اف بی آی", "اف.بی.آی")] + [InlineData("OCR", "سوسابقه", "سوءسابقه")] + [InlineData("Fix Unicode Control Char", "\u202B\u202B سلام", "\u202Bسلام")] + [InlineData("Remove Unneeded Spaces", "گفت : باشه", "گفت: باشه")] + [InlineData("Fix Wrong Chars", "سلام,, خوبی?", "سلام، خوبی؟")] + [InlineData("Space to Invisible Space", "میشود خانه ها", "می\u200Cشود خانه\u200Cها")] + [InlineData("Remove Leading Dots", "در ادامه...", "در ادامه")] + [InlineData("Remove Dot from the End of Line", ".می\u200Cشود", "می\u200Cشود")] + public void FixesWithOneGroup(string group, string input, string expected) + { + Assert.Equal(expected, PersianFixer.Fix(input, new[] { Group(group) })); + } + + [Fact] + public void PlainRuleWithQuoteMatches() + { + // The original plugin escaped quotes in plain rules too, so these never matched. + Assert.Equal("\"سلام\"", PersianFixer.Fix("\"\u200Cسلام\u200C\"", new[] { Group("Space to Invisible Space") })); + } + + [Fact] + public void ReportsTheGroupsThatChangedTheText() + { + var changed = new List(); + + PersianFixer.Fix("كتاب ي", RuleSet.Default, changed); + + Assert.Equal(new[] { "Change Arabic Chars to Persian", "Space to Invisible Space" }, changed); + } + + [Theory] + [InlineData("\n")] + [InlineData("\r\n")] + public void KeepsTheLineBreakStyle(string newLine) + { + var result = PersianFixer.Fix("سلام،عزیزم" + newLine + "شدني", RuleSet.Default); + + Assert.Equal("سلام، عزیزم" + newLine + "شدنی", result); + } + + [Fact] + public void UnchangedTextIsReturnedAsIs() + { + const string text = "این یک جمله درست است
خط دوم"; + + Assert.Same(text, PersianFixer.Fix(text, RuleSet.Default)); + } + + [Fact] + public void FindFixesOnlyChecksTheGivenLines() + { + var texts = new[] { "شدني", "شدني", "درست" }; + + var fixes = PersianFixer.FindFixes(texts, new[] { 1, 2 }, RuleSet.Default); + + var fix = Assert.Single(fixes); + Assert.Equal(1, fix.Index); + Assert.Equal("شدنی", fix.After); + } +} diff --git a/se5/PersianErrors.Tests/TextDiffTests.cs b/se5/PersianErrors.Tests/TextDiffTests.cs new file mode 100644 index 00000000..8266a40d --- /dev/null +++ b/se5/PersianErrors.Tests/TextDiffTests.cs @@ -0,0 +1,39 @@ +using SubtitleEdit.Plugins.PersianErrors; + +namespace PersianErrors.Tests; + +public class TextDiffTests +{ + [Theory] + [InlineData("سلام،عزیزم", "سلام، عزیزم")] + [InlineData("-سلام، خوبی؟\r\n-ممنون", "سلام، خوبی؟ -\r\nممنون -")] + [InlineData("abc", "xyz")] + [InlineData("", "new")] + [InlineData("one\ntwo", "one two")] + public void SegmentsRebuildBothTexts(string before, string after) + { + var (b, a) = TextDiff.Compute(before, after); + + Assert.Equal(before, string.Concat(b.Select(s => s.Text))); + Assert.Equal(after, string.Concat(a.Select(s => s.Text))); + Assert.DoesNotContain(b, s => s.Kind == DiffKind.Added); + Assert.DoesNotContain(a, s => s.Kind == DiffKind.Removed); + } + + [Fact] + public void MarksOnlyTheInsertedSpace() + { + var (_, after) = TextDiff.Compute("سلام،عزیزم", "سلام، عزیزم"); + + Assert.Equal(new[] { new DiffSegment("سلام،", DiffKind.Same), new DiffSegment(" ", DiffKind.Added), new DiffSegment("عزیزم", DiffKind.Same) }, after); + } + + [Fact] + public void LineBreaksStayUnchangedWhenTheLineCountMatches() + { + var (before, after) = TextDiff.Compute("-a\n-b", "a -\nb -"); + + Assert.Contains(before, s => s.Kind == DiffKind.Same && s.Text.Contains('\n')); + Assert.Contains(after, s => s.Kind == DiffKind.Same && s.Text.Contains('\n')); + } +} diff --git a/se5/PersianErrors/App.axaml b/se5/PersianErrors/App.axaml new file mode 100644 index 00000000..f2fb80e4 --- /dev/null +++ b/se5/PersianErrors/App.axaml @@ -0,0 +1,8 @@ + + + + + diff --git a/se5/PersianErrors/App.axaml.cs b/se5/PersianErrors/App.axaml.cs new file mode 100644 index 00000000..c69a9dd1 --- /dev/null +++ b/se5/PersianErrors/App.axaml.cs @@ -0,0 +1,12 @@ +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using SubtitleEdit.Plugins.Shared; + +namespace SubtitleEdit.Plugins.PersianErrors; + +public partial class App : PluginApp +{ + public override void Initialize() => AvaloniaXamlLoader.Load(this); + + protected override Window CreateMainWindow(PluginRequest request) => new MainWindow(request); +} diff --git a/se5/PersianErrors/DiffTextBlock.cs b/se5/PersianErrors/DiffTextBlock.cs new file mode 100644 index 00000000..656ccf5d --- /dev/null +++ b/se5/PersianErrors/DiffTextBlock.cs @@ -0,0 +1,122 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Documents; +using Avalonia.Media; + +namespace SubtitleEdit.Plugins.PersianErrors; + +/// +/// Shows one side of a : unchanged text plainly, removed or added text on a +/// tint. Hidden characters (ZWNJ, direction marks, ...) can be drawn as small visible symbols. +/// +public sealed class DiffTextBlock : TextBlock +{ + public static readonly StyledProperty?> SegmentsProperty = + AvaloniaProperty.Register?>(nameof(Segments)); + + public static readonly StyledProperty ShowHiddenProperty = + AvaloniaProperty.Register(nameof(ShowHidden), true); + + private static readonly IBrush RemovedBrush = new SolidColorBrush(Color.Parse("#55E5484D")); + private static readonly IBrush AddedBrush = new SolidColorBrush(Color.Parse("#552FA36B")); + private static readonly IBrush HiddenBrush = new SolidColorBrush(Color.Parse("#7C5CFF")); + + /// Visible stand-ins for characters that take no space. + public static readonly IReadOnlyDictionary HiddenSymbols = new Dictionary + { + ['\u200C'] = "·", + ['‍'] = "ZWJ", + ['‎'] = "LRM", + ['‏'] = "RLM", + ['‪'] = "LRE", + ['\u202B'] = "RLE", + ['‬'] = "PDF", + ['‭'] = "LRO", + ['‮'] = "RLO", + [' '] = "°", + [''] = "BOM", + }; + + static DiffTextBlock() + { + SegmentsProperty.Changed.AddClassHandler((block, _) => block.Rebuild()); + ShowHiddenProperty.Changed.AddClassHandler((block, _) => block.Rebuild()); + } + + public IReadOnlyList? Segments + { + get => GetValue(SegmentsProperty); + set => SetValue(SegmentsProperty, value); + } + + public bool ShowHidden + { + get => GetValue(ShowHiddenProperty); + set => SetValue(ShowHiddenProperty, value); + } + + protected override Type StyleKeyOverride => typeof(TextBlock); + + private void Rebuild() + { + var inlines = new InlineCollection(); + foreach (var segment in Segments ?? Array.Empty()) + { + var background = segment.Kind switch + { + DiffKind.Removed => RemovedBrush, + DiffKind.Added => AddedBrush, + _ => null, + }; + AddText(inlines, segment.Text, background); + } + + Inlines = inlines; + } + + private void AddText(InlineCollection inlines, string text, IBrush? background) + { + var start = 0; + for (var i = 0; i <= text.Length; i++) + { + var atEnd = i == text.Length; + var c = atEnd ? '\0' : text[i]; + var isBreak = c == '\n' || c == '\r'; + var isHidden = !atEnd && ShowHidden && HiddenSymbols.ContainsKey(c); + if (!atEnd && !isBreak && !isHidden) + { + continue; + } + + if (i > start) + { + inlines.Add(new Run(text[start..i]) { Background = background }); + } + + if (isHidden) + { + var symbol = HiddenSymbols[c]; + inlines.Add(new Run(symbol) + { + Foreground = HiddenBrush, + Background = background, + FontWeight = FontWeight.Bold, + FontSize = symbol.Length > 1 ? FontSize * 0.55 : FontSize, + BaselineAlignment = symbol.Length > 1 ? BaselineAlignment.Superscript : BaselineAlignment.Baseline, + }); + } + else if (c == '\n' || (c == '\r' && (i + 1 >= text.Length || text[i + 1] != '\n'))) + { + if (background != null) + { + // A changed line break would otherwise be invisible. + inlines.Add(new Run("↵") { Background = background, Foreground = HiddenBrush }); + } + + inlines.Add(new LineBreak()); + } + + start = i + 1; + } + } +} diff --git a/se5/PersianErrors/FixItem.cs b/se5/PersianErrors/FixItem.cs new file mode 100644 index 00000000..dcddbb43 --- /dev/null +++ b/se5/PersianErrors/FixItem.cs @@ -0,0 +1,33 @@ +using Avalonia.Media; +using CommunityToolkit.Mvvm.ComponentModel; + +namespace SubtitleEdit.Plugins.PersianErrors; + +/// One changed subtitle line in the fix list. +public sealed partial class FixItem : ObservableObject +{ + [ObservableProperty] private bool _isSelected = true; + + public FixItem(LineFix fix, string timeRange, IReadOnlyList groups) + { + Fix = fix; + TimeRange = timeRange; + Groups = groups; + (BeforeSegments, AfterSegments) = TextDiff.Compute(fix.Before, fix.After); + } + + public LineFix Fix { get; } + public int Index => Fix.Index; + public string Number => "#" + (Fix.Index + 1); + public string TimeRange { get; } + public IReadOnlyList Groups { get; } + public IBrush? AccentBrush => Groups.Count > 0 ? Groups[0].Brush : null; + public IReadOnlyList BeforeSegments { get; } + public IReadOnlyList AfterSegments { get; } + + public bool Matches(string search) => + Fix.Before.Contains(search, StringComparison.OrdinalIgnoreCase) || + Fix.After.Contains(search, StringComparison.OrdinalIgnoreCase) || + Number.Equals(search, StringComparison.Ordinal) || + (Fix.Index + 1).ToString() == search; +} diff --git a/se5/PersianErrors/GroupInfo.cs b/se5/PersianErrors/GroupInfo.cs new file mode 100644 index 00000000..a9899236 --- /dev/null +++ b/se5/PersianErrors/GroupInfo.cs @@ -0,0 +1,54 @@ +namespace SubtitleEdit.Plugins.PersianErrors; + +/// +/// UI metadata for a rule group: icon, color, the Persian title from the original plugin's help +/// images, a one-line description and an example input (its output is computed by the rules). +/// +public sealed record GroupInfo(string Name, string PersianName, string Description, string Icon, string Color, string Example) +{ + public static readonly IReadOnlyList All = new[] + { + new GroupInfo("Fix Unicode Control Char", "نویسه\u200Cهای کنترلی یونیکد", + "Tidies right-to-left embedding marks (U+202B) for subtitles that use them: removes doubled marks and stray spaces after them.", + "mdi-format-pilcrow-arrow-left", "#7C5CFF", "\u202B\u202B سلام"), + new GroupInfo("Change Arabic Chars to Persian", "تبدیل حروف عربی به فارسی", + "Replaces Arabic letters with their Persian forms, such as ي → ی and ك → ک.", + "mdi-abjad-arabic", "#0EA5A4", "املاك شدني"), + new GroupInfo("Remove Unneeded Spaces", "حذف خط فاصله نادرست", + "Removes double spaces and spaces before punctuation or at line edges.", + "mdi-arrow-collapse-horizontal", "#3B82F6", "گفت : باشه"), + new GroupInfo("Add Missing Spaces", "نبود خط فاصله", + "Adds the missing space after punctuation such as the Persian comma.", + "mdi-arrow-expand-horizontal", "#06B6D4", "سلام،عزیزم"), + new GroupInfo("Fix Dialog Hyphen", "دیالوگ\u200Cها", + "Puts dialog dashes where right-to-left players expect them.", + "mdi-forum-outline", "#F59E0B", "-سلام، خوبی؟\n-ممنون"), + new GroupInfo("Fix Wrong Chars", "کاراکترهای اشتباه", + "Fixes wrong punctuation: doubled commas, Latin commas and question marks.", + "mdi-spellcheck", "#EF4444", "سلام,, خوبی?"), + new GroupInfo("Fix Misplaced Chars", "مکان اشتباه", + "Moves end punctuation to the start of the text, for players that do not handle right-to-left text.", + "mdi-swap-horizontal", "#EC4899", "سلام."), + new GroupInfo("Fix Abbreviations", "کلمات اختصاری", + "Writes abbreviations with dots, such as اف بی آی → اف.بی.آی.", + "mdi-format-letter-matches", "#8B5CF6", "اف بی آی"), + new GroupInfo("Space to Invisible Space", "خط فاصله نامرئی", + "Uses the zero-width non-joiner (نیم\u200Cفاصله) in prefixes and suffixes, such as می\u200Cشود and خانه\u200Cها.", + "mdi-format-letter-spacing", "#10B981", "میشود خانه ها"), + new GroupInfo("OCR", "جاگذاری کلمات", + "Fixes common OCR misreads and misspelled words.", + "mdi-text-recognition", "#F97316", "سوسابقه"), + new GroupInfo("Remove Leading Dots", "حذف سه نقطه از ابتدای جمله", + "Removes the three dots (...) that mark a continued sentence.", + "mdi-format-letter-starts-with", "#64748B", "در ادامه..."), + new GroupInfo("Remove Dot from the End of Line", "حذف نقطه از انتهای جمله", + "Removes the period that ends a line.", + "mdi-format-letter-ends-with", "#A16207", ".می\u200Cشود"), + }; + + private static readonly string[] FallbackColors = { "#7C5CFF", "#0EA5A4", "#3B82F6", "#F59E0B", "#EC4899", "#10B981" }; + + public static GroupInfo For(string name, int index) => + All.FirstOrDefault(g => g.Name == name) + ?? new GroupInfo(name, string.Empty, string.Empty, "mdi-auto-fix", FallbackColors[index % FallbackColors.Length], string.Empty); +} diff --git a/se5/PersianErrors/GroupOption.cs b/se5/PersianErrors/GroupOption.cs new file mode 100644 index 00000000..48c632db --- /dev/null +++ b/se5/PersianErrors/GroupOption.cs @@ -0,0 +1,62 @@ +using Avalonia.Media; +using CommunityToolkit.Mvvm.ComponentModel; + +namespace SubtitleEdit.Plugins.PersianErrors; + +/// A rule group as shown in the sidebar: on/off, icon, color, example and current fix count. +public sealed partial class GroupOption : ObservableObject +{ + [ObservableProperty] private bool _isEnabled = true; + [ObservableProperty] private int _fixCount; + + public GroupOption(RuleGroup group, GroupInfo info) + { + Group = group; + Info = info; + var color = Color.Parse(info.Color); + Brush = new SolidColorBrush(color); + Tint = new SolidColorBrush(Color.FromArgb(0x26, color.R, color.G, color.B)); + + if (info.Example.Length > 0) + { + var after = PersianFixer.Fix(info.Example, new[] { group }); + (ExampleBefore, ExampleAfter) = TextDiff.Compute(info.Example, after); + } + } + + public RuleGroup Group { get; } + public GroupInfo Info { get; } + public string Name => Group.Name; + public string PersianName => Info.PersianName; + public bool HasPersianName => Info.PersianName.Length > 0; + public string Description => Info.Description; + public string Icon => Info.Icon; + public IBrush Brush { get; } + public IBrush Tint { get; } + public string RuleCountText => Group.Rules.Count == 1 ? "1 rule" : $"{Group.Rules.Count:N0} rules"; + public IReadOnlyList ExampleBefore { get; } = Array.Empty(); + public IReadOnlyList ExampleAfter { get; } = Array.Empty(); + public bool HasExample => ExampleAfter.Count > 0; + public bool HasFixes => FixCount > 0; + + partial void OnFixCountChanged(int value) => OnPropertyChanged(nameof(HasFixes)); +} + +/// A filter chip above the fix list: everything, or the fixes of one group. +public sealed partial class FilterChip : ObservableObject +{ + [ObservableProperty] private bool _isActive; + + public FilterChip(GroupOption? group, int count) + { + Group = group; + Count = count; + } + + public GroupOption? Group { get; } + public int Count { get; } + public string Label => Group?.Name ?? "All"; + public string Icon => Group?.Icon ?? "mdi-format-list-checks"; + public IBrush? Brush => Group?.Brush; + public bool IsGroup => Group != null; +} diff --git a/se5/PersianErrors/MainViewModel.cs b/se5/PersianErrors/MainViewModel.cs new file mode 100644 index 00000000..249bd0ba --- /dev/null +++ b/se5/PersianErrors/MainViewModel.cs @@ -0,0 +1,443 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using SubtitleEdit.Plugins.Shared; +using System.Collections.ObjectModel; +using System.Globalization; +using System.Text.Json; + +namespace SubtitleEdit.Plugins.PersianErrors; + +public sealed partial class MainViewModel : ObservableObject +{ + private const int SettingsVersion = 1; + + private readonly PluginRequest _request; + private readonly bool _legacyRequest; + private readonly List _paragraphs; + private readonly string[] _originalTexts; + private readonly string[] _texts; + private readonly long _videoOffsetMs; + private readonly Stack _undo = new(); + private List _fixes = new(); + private CancellationTokenSource? _analysisCancellation; + private bool _suspendAnalysis; + + [ObservableProperty] private bool _isBusy; + [ObservableProperty] private double _progress; + [ObservableProperty] private bool _showHidden = true; + [ObservableProperty] private bool _selectedLinesOnly; + [ObservableProperty] private string _searchText = string.Empty; + [ObservableProperty] private FilterChip? _activeFilter; + [ObservableProperty] private int _fixCount; + [ObservableProperty] private int _selectedCount; + [ObservableProperty] private int _changedLineCount; + [ObservableProperty] private bool _canUndo; + + public MainViewModel(PluginRequest request) + { + _request = request; + _videoOffsetMs = request.Rules?.VideoOffsetMs ?? 0; + _legacyRequest = request.Subtitle.Paragraphs == null; + _paragraphs = _legacyRequest + ? SubRipParser.Parse(request.Subtitle.SubRip) + .Select(b => new PluginParagraph { StartMs = b.StartMs, EndMs = b.EndMs, Text = b.Text }).ToList() + : request.Subtitle.Paragraphs!.Select(p => p.Clone()).ToList(); + _originalTexts = _paragraphs.Select(p => p.Text ?? string.Empty).ToArray(); + _texts = _originalTexts.ToArray(); + SelectedIndices = request.SelectedIndices.Where(i => i >= 0 && i < _paragraphs.Count).Distinct().Order().ToList(); + + var ruleGroups = RuleSet.Default; + Groups = new ObservableCollection(ruleGroups.Select((g, i) => new GroupOption(g, GroupInfo.For(g.Name, i)))); + foreach (var group in Groups) + { + group.PropertyChanged += (_, e) => + { + if (e.PropertyName == nameof(GroupOption.IsEnabled)) + { + OnPropertyChanged(nameof(EnabledGroupCount)); + Analyze(); + } + }; + } + + _suspendAnalysis = true; + LoadSettings(); + _suspendAnalysis = false; + Analyze(); + } + + public ObservableCollection Groups { get; } + public ObservableCollection VisibleFixes { get; } = new(); + public ObservableCollection Filters { get; } = new(); + public IReadOnlyList SelectedIndices { get; } + + public string Title => "Persian Subtitle Fixes"; + + public string SubtitleInfo + { + get + { + var name = string.IsNullOrEmpty(_request.Subtitle.FileName) ? "Untitled" : Path.GetFileName(_request.Subtitle.FileName); + var format = string.IsNullOrEmpty(_request.Subtitle.Format) ? string.Empty : $" · {_request.Subtitle.Format}"; + return $"{name}{format} · {_paragraphs.Count:N0} lines"; + } + } + + public int EnabledGroupCount => Groups.Count(g => g.IsEnabled); + public int TotalRuleCount => Groups.Sum(g => g.Group.Rules.Count); + public bool HasSelectedLines => SelectedIndices.Count > 0; + public string SelectedLinesText => SelectedIndices.Count == 1 ? "Selected line (1)" : $"Selected lines ({SelectedIndices.Count:N0})"; + public bool AllLines { get => !SelectedLinesOnly; set => SelectedLinesOnly = !value; } + public bool HasFixes => FixCount > 0; + public bool HasVisibleFixes => VisibleFixes.Count > 0; + public bool IsClean => !IsBusy && FixCount == 0; + public bool IsFilteredEmpty => !IsBusy && FixCount > 0 && VisibleFixes.Count == 0; + public bool HasChanges => ChangedLineCount > 0; + public bool CanApply => !IsBusy && SelectedCount > 0; + public string CleanTitle => EnabledGroupCount == 0 ? "No fix groups enabled" : "No errors found"; + public string CleanText => EnabledGroupCount == 0 + ? "Turn on one or more groups in the sidebar." + : ChangedLineCount > 0 ? "Every enabled rule passes. Click OK to keep the changes." : "Every enabled rule passes."; + + public string StatusText + { + get + { + if (IsBusy) + { + return $"Checking {LinesInScope:N0} lines against {Groups.Where(g => g.IsEnabled).Sum(g => g.Group.Rules.Count):N0} rules..."; + } + + return FixCount == 0 + ? $"{LinesInScope:N0} lines checked" + : $"{SelectedCount:N0} of {FixCount:N0} fixes selected"; + } + } + + private int LinesInScope => SelectedLinesOnly && HasSelectedLines ? SelectedIndices.Count : _paragraphs.Count; + + partial void OnIsBusyChanged(bool value) => RaiseState(); + partial void OnFixCountChanged(int value) => RaiseState(); + partial void OnSelectedCountChanged(int value) => RaiseState(); + partial void OnChangedLineCountChanged(int value) => RaiseState(); + partial void OnSearchTextChanged(string value) => RebuildVisible(); + + partial void OnSelectedLinesOnlyChanged(bool value) + { + OnPropertyChanged(nameof(AllLines)); + Analyze(); + } + + partial void OnActiveFilterChanged(FilterChip? value) + { + foreach (var chip in Filters) + { + chip.IsActive = chip == value; + } + + RebuildVisible(); + } + + private void RaiseState() + { + OnPropertyChanged(nameof(HasFixes)); + OnPropertyChanged(nameof(IsClean)); + OnPropertyChanged(nameof(IsFilteredEmpty)); + OnPropertyChanged(nameof(HasChanges)); + OnPropertyChanged(nameof(CanApply)); + OnPropertyChanged(nameof(CleanTitle)); + OnPropertyChanged(nameof(CleanText)); + OnPropertyChanged(nameof(StatusText)); + } + + private async void Analyze() + { + if (_suspendAnalysis) + { + return; + } + + _analysisCancellation?.Cancel(); + var cancellation = new CancellationTokenSource(); + _analysisCancellation = cancellation; + + var groups = Groups.Where(g => g.IsEnabled).Select(g => g.Group).ToList(); + var indices = SelectedLinesOnly && HasSelectedLines ? SelectedIndices.ToList() : Enumerable.Range(0, _texts.Length).ToList(); + var texts = _texts.ToArray(); + IsBusy = true; + Progress = 0; + var progress = new Progress(p => + { + if (_analysisCancellation == cancellation) + { + Progress = p * 100; + } + }); + + List fixes; + try + { + fixes = await Task.Run(() => PersianFixer.FindFixes(texts, indices, groups, progress, cancellation.Token), cancellation.Token); + } + catch (OperationCanceledException) + { + return; + } + + if (_analysisCancellation != cancellation) + { + return; + } + + var byName = Groups.ToDictionary(g => g.Name); + _fixes = fixes.Select(f => new FixItem(f, FormatTimeRange(_paragraphs[f.Index]), f.Groups.Select(n => byName[n]).ToList())).ToList(); + foreach (var fix in _fixes) + { + fix.PropertyChanged += (_, e) => + { + if (e.PropertyName == nameof(FixItem.IsSelected)) + { + SelectedCount = _fixes.Count(f => f.IsSelected); + } + }; + } + + foreach (var group in Groups) + { + group.FixCount = fixes.Count(f => f.Groups.Contains(group.Name)); + } + + FixCount = _fixes.Count; + SelectedCount = _fixes.Count; + RebuildFilters(); + IsBusy = false; + } + + private void RebuildFilters() + { + var activeGroup = ActiveFilter?.Group; + Filters.Clear(); + Filters.Add(new FilterChip(null, FixCount)); + foreach (var group in Groups.Where(g => g.IsEnabled && g.FixCount > 0)) + { + Filters.Add(new FilterChip(group, group.FixCount)); + } + + var active = Filters.FirstOrDefault(f => f.Group == activeGroup) ?? Filters[0]; + if (active == ActiveFilter) + { + active.IsActive = true; + RebuildVisible(); + } + else + { + ActiveFilter = active; + } + } + + private void RebuildVisible() + { + var group = ActiveFilter?.Group; + var search = SearchText.Trim(); + VisibleFixes.Clear(); + foreach (var fix in _fixes) + { + if ((group == null || fix.Groups.Contains(group)) && (search.Length == 0 || fix.Matches(search))) + { + VisibleFixes.Add(fix); + } + } + + OnPropertyChanged(nameof(HasVisibleFixes)); + OnPropertyChanged(nameof(IsFilteredEmpty)); + } + + [RelayCommand] + private void SetFilter(FilterChip? chip) => ActiveFilter = chip; + + [RelayCommand] + private void SelectAll() => SetSelection(_ => true); + + [RelayCommand] + private void SelectNone() => SetSelection(_ => false); + + [RelayCommand] + private void InvertSelection() => SetSelection(f => !f.IsSelected); + + private void SetSelection(Func selected) + { + foreach (var fix in VisibleFixes) + { + fix.IsSelected = selected(fix); + } + } + + [RelayCommand] + private void EnableAllGroups() => SetGroups(true); + + [RelayCommand] + private void DisableAllGroups() => SetGroups(false); + + private void SetGroups(bool enabled) + { + _suspendAnalysis = true; + foreach (var group in Groups) + { + group.IsEnabled = enabled; + } + + _suspendAnalysis = false; + Analyze(); + } + + [RelayCommand] + private void ApplyAndRecheck() + { + if (IsBusy || ApplySelected() == 0) + { + return; + } + + Analyze(); + } + + [RelayCommand] + private void Undo() + { + if (_undo.Count == 0) + { + return; + } + + var previous = _undo.Pop(); + Array.Copy(previous, _texts, _texts.Length); + CanUndo = _undo.Count > 0; + UpdateChangedLineCount(); + Analyze(); + } + + /// Writes the selected fixes into the working texts. Returns how many were applied. + private int ApplySelected() + { + var selected = _fixes.Where(f => f.IsSelected).ToList(); + if (selected.Count == 0) + { + return 0; + } + + _undo.Push(_texts.ToArray()); + CanUndo = true; + foreach (var fix in selected) + { + _texts[fix.Index] = fix.Fix.After; + } + + UpdateChangedLineCount(); + return selected.Count; + } + + private void UpdateChangedLineCount() => + ChangedLineCount = _texts.Where((t, i) => !string.Equals(t, _originalTexts[i], StringComparison.Ordinal)).Count(); + + /// The response for OK: applies what is still selected, then hands the lines back. + public PluginResponse BuildResponse() + { + if (!IsBusy) + { + ApplySelected(); + } + + if (ChangedLineCount == 0) + { + return BuildCancelResponse(); + } + + PluginSubtitle subtitle; + if (_legacyRequest) + { + subtitle = new PluginSubtitle + { + Format = "SubRip", + Native = SubRipParser.Serialize(_paragraphs.Select((p, i) => new SrtBlock + { + StartMs = (long)Math.Round(p.StartMs), + EndMs = (long)Math.Round(p.EndMs), + Text = _texts[i], + }).ToList()), + }; + } + else + { + subtitle = new PluginSubtitle + { + Format = _request.Subtitle.Format, + Paragraphs = _paragraphs.Select((p, i) => + { + var copy = p.Clone(); + copy.Text = _texts[i]; + return copy; + }).ToList(), + }; + } + + return new PluginResponse + { + Status = PluginStatus.Ok, + Message = ChangedLineCount == 1 ? "Persian Subtitle Fixes: 1 line fixed." : $"Persian Subtitle Fixes: {ChangedLineCount:N0} lines fixed.", + UndoDescription = "Persian Subtitle Fixes", + Subtitle = subtitle, + Settings = BuildSettings(), + SettingsVersion = SettingsVersion, + }; + } + + public PluginResponse BuildCancelResponse() => + new() { Status = PluginStatus.Cancelled, Settings = BuildSettings(), SettingsVersion = SettingsVersion }; + + private JsonElement BuildSettings() + { + var payload = new Dictionary + { + ["disabledGroups"] = Groups.Where(g => !g.IsEnabled).Select(g => g.Name).ToArray(), + ["showHidden"] = ShowHidden, + ["selectedLinesOnly"] = SelectedLinesOnly, + }; + return JsonSerializer.SerializeToElement(payload); + } + + private void LoadSettings() + { + if (_request.SettingsVersion != SettingsVersion || _request.Settings is not { ValueKind: JsonValueKind.Object } settings) + { + return; + } + + if (settings.TryGetProperty("disabledGroups", out var disabled) && disabled.ValueKind == JsonValueKind.Array) + { + var names = disabled.EnumerateArray().Select(e => e.GetString()).ToHashSet(); + foreach (var group in Groups) + { + group.IsEnabled = !names.Contains(group.Name); + } + } + + if (settings.TryGetProperty("showHidden", out var showHidden) && showHidden.ValueKind is JsonValueKind.True or JsonValueKind.False) + { + ShowHidden = showHidden.GetBoolean(); + } + + if (settings.TryGetProperty("selectedLinesOnly", out var selectedOnly) && selectedOnly.ValueKind is JsonValueKind.True or JsonValueKind.False) + { + SelectedLinesOnly = selectedOnly.GetBoolean() && HasSelectedLines; + } + } + + private string FormatTimeRange(PluginParagraph p) => + $"{FormatTime(p.StartMs + _videoOffsetMs)} → {FormatTime(p.EndMs + _videoOffsetMs)}"; + + private static string FormatTime(double ms) + { + var time = TimeSpan.FromMilliseconds(Math.Max(0, ms)); + return string.Format(CultureInfo.InvariantCulture, "{0:00}:{1:00}:{2:00},{3:000}", (int)time.TotalHours, time.Minutes, time.Seconds, time.Milliseconds); + } +} diff --git a/se5/PersianErrors/MainWindow.axaml b/se5/PersianErrors/MainWindow.axaml new file mode 100644 index 00000000..4fb40e00 --- /dev/null +++ b/se5/PersianErrors/MainWindow.axaml @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + + Vazirmatn, Segoe UI, Tahoma, Geeza Pro, Noto Naskh Arabic, Noto Sans Arabic, DejaVu Sans, Arial + Cascadia Mono, Consolas, Menlo, DejaVu Sans Mono, monospace + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/se5/PersianErrors/MainWindow.axaml.cs b/se5/PersianErrors/MainWindow.axaml.cs new file mode 100644 index 00000000..f854e306 --- /dev/null +++ b/se5/PersianErrors/MainWindow.axaml.cs @@ -0,0 +1,84 @@ +using Avalonia.Controls; +using Avalonia.Input; +using Avalonia.Interactivity; +using Avalonia.Markup.Xaml; +using Avalonia.VisualTree; +using SubtitleEdit.Plugins.Shared; +using System.Diagnostics; + +namespace SubtitleEdit.Plugins.PersianErrors; + +public partial class MainWindow : Window +{ + private const string HomepageUrl = "https://github.com/msasanmh/PersianSubtitleFixes"; + private readonly MainViewModel _vm; + + public MainWindow() : this(new PluginRequest()) { } + + public MainWindow(PluginRequest request) + { + AvaloniaXamlLoader.Load(this); + _vm = new MainViewModel(request); + DataContext = _vm; + App.Response = _vm.BuildCancelResponse(); + KeyDown += OnKeyDown; + } + + protected override void OnOpened(EventArgs e) + { + base.OnOpened(e); + this.BringToForeground(); + } + + private void OnKeyDown(object? sender, KeyEventArgs e) + { + if (e.Key == Key.Escape) + { + e.Handled = true; + OnCancel(sender, e); + } + } + + /// Clicking anywhere on a group row toggles it, not only the switch. + private void OnGroupPressed(object? sender, PointerPressedEventArgs e) + { + if (e.Source is Control { DataContext: GroupOption group } source && + source.FindAncestorOfType(includeSelf: true) == null) + { + group.IsEnabled = !group.IsEnabled; + e.Handled = true; + } + } + + private void OnOpenHomepage(object? sender, RoutedEventArgs e) + { + try + { + Process.Start(new ProcessStartInfo(HomepageUrl) { UseShellExecute = true }); + } + catch (Exception exception) + { + Debug.WriteLine("Could not open homepage: " + exception.Message); + } + } + + private void OnCancel(object? sender, RoutedEventArgs e) + { + App.Response = _vm.BuildCancelResponse(); + Close(); + } + + private void OnOk(object? sender, RoutedEventArgs e) + { + try + { + App.Response = _vm.BuildResponse(); + } + catch (Exception exception) + { + App.Response = new PluginResponse { Status = PluginStatus.Error, Message = "Persian Subtitle Fixes failed: " + exception.Message }; + } + + Close(); + } +} diff --git a/se5/PersianErrors/PersianErrors.csproj b/se5/PersianErrors/PersianErrors.csproj new file mode 100644 index 00000000..a2dd5319 --- /dev/null +++ b/se5/PersianErrors/PersianErrors.csproj @@ -0,0 +1,31 @@ + + + + WinExe + net8.0 + enable + enable + PersianErrors + SubtitleEdit.Plugins.PersianErrors + true + app.manifest + + + + + + + + + + + + + + + + + + + + diff --git a/se5/PersianErrors/PersianFixer.cs b/se5/PersianErrors/PersianFixer.cs new file mode 100644 index 00000000..d7f302b8 --- /dev/null +++ b/se5/PersianErrors/PersianFixer.cs @@ -0,0 +1,82 @@ +namespace SubtitleEdit.Plugins.PersianErrors; + +/// The result of running the enabled groups over one subtitle line. +public sealed record LineFix(int Index, string Before, string After, IReadOnlyList Groups); + +/// +/// Runs rule groups over subtitle text the way the original plugin did: <br /> becomes a +/// line break, every enabled group's rules run in file order, and the result is trimmed. +/// +public static class PersianFixer +{ + /// Fixes one text. gets the groups that changed it. + public static string Fix(string text, IEnumerable groups, ICollection? changedGroups = null) + { + var newLine = DetectNewLine(text); + var working = ToRuleText(text); + var before = working; + + foreach (var group in groups) + { + var result = group.Apply(working); + if (!string.Equals(result, working, StringComparison.Ordinal)) + { + changedGroups?.Add(group.Name); + working = result; + } + } + + working = working.Trim(); + return string.Equals(working, before, StringComparison.Ordinal) + ? text + : working.Replace(RuleSet.NewLine, newLine, StringComparison.Ordinal); + } + + /// Returns a fix for every line in that the groups change. + public static List FindFixes( + IReadOnlyList texts, + IEnumerable indices, + IReadOnlyList groups, + IProgress? progress = null, + CancellationToken cancellationToken = default) + { + var fixes = new List(); + var list = indices.ToList(); + for (var i = 0; i < list.Count; i++) + { + cancellationToken.ThrowIfCancellationRequested(); + var index = list[i]; + var changed = new List(); + var after = Fix(texts[index], groups, changed); + if (!string.Equals(after, texts[index], StringComparison.Ordinal)) + { + fixes.Add(new LineFix(index, texts[index], after, changed)); + } + + if (progress != null && (i % 25 == 0 || i == list.Count - 1)) + { + progress.Report((i + 1) / (double)list.Count); + } + } + + return fixes; + } + + /// The rules were written for Windows text: \r\n line breaks, <br /> as a break. + private static string ToRuleText(string text) => text + .Replace("
", "\n", StringComparison.Ordinal) + .Replace("", "\n", StringComparison.Ordinal) + .Replace("\r\n", "\n", StringComparison.Ordinal) + .Replace('\r', '\n') + .Replace("\n", RuleSet.NewLine, StringComparison.Ordinal); + + private static string DetectNewLine(string text) + { + if (text.Contains("\r\n", StringComparison.Ordinal)) + { + return "\r\n"; + } + + return text.Contains('\n') ? "\n" : Environment.NewLine; + } +} diff --git a/se5/PersianErrors/Program.cs b/se5/PersianErrors/Program.cs new file mode 100644 index 00000000..0d2e44b0 --- /dev/null +++ b/se5/PersianErrors/Program.cs @@ -0,0 +1,16 @@ +using Projektanker.Icons.Avalonia; +using Projektanker.Icons.Avalonia.MaterialDesign; +using SubtitleEdit.Plugins.Shared; +using System; + +namespace SubtitleEdit.Plugins.PersianErrors; + +public static class Program +{ + [STAThread] + public static int Main(string[] args) + { + IconProvider.Current.Register(); + return PluginBootstrap.Run(args); + } +} diff --git a/se5/PersianErrors/README.md b/se5/PersianErrors/README.md new file mode 100644 index 00000000..c5e01776 --- /dev/null +++ b/se5/PersianErrors/README.md @@ -0,0 +1,71 @@ +# Persian Subtitle Fixes (Subtitle Edit 5 plugin) + +Fixes common errors in Persian (Farsi) subtitles - اصلاح خطاهای رایج زیرنویس فارسی. + +This is the Subtitle Edit 5 version of the *Persian Subtitle Fixes* plugin by +[Mohammad Sasan (msasanmh)](https://github.com/msasanmh/PersianSubtitleFixes) +([`source/PersianErrors`](../../source/PersianErrors) for Subtitle Edit 3/4). The 1,500+ +find-and-replace rules in [`multiple_replace.xml`](multiple_replace.xml) are his, unchanged. +The plugin runs them the same way and wraps them in a new Avalonia UI built on the shared +[`Plugin-Shared`](../Plugin-Shared/) library. + +## Fix groups + +| Group | | Example | +|---|---|---| +| Fix Unicode Control Char | نویسه‌های کنترلی یونیکد | Removes doubled right-to-left embedding marks (U+202B) and the spaces after them | +| Change Arabic Chars to Persian | تبدیل حروف عربی به فارسی | `املاك شدني` → `املاک شدنی` | +| Remove Unneeded Spaces | حذف خط فاصله نادرست | `گفت : باشه` → `گفت: باشه` | +| Add Missing Spaces | نبود خط فاصله | `سلام،عزیزم` → `سلام، عزیزم` | +| Fix Dialog Hyphen | دیالوگ‌ها | Moves dialog dashes to where right-to-left players expect them | +| Fix Wrong Chars | کاراکترهای اشتباه | `سلام,, خوبی?` → `سلام، خوبی؟` | +| Fix Misplaced Chars | مکان اشتباه | Moves end punctuation to the start of the text | +| Fix Abbreviations | کلمات اختصاری | `اف بی آی` → `اف.بی.آی` | +| Space to Invisible Space | خط فاصله نامرئی | `میشود خانه ها` → `می‌شود خانه‌ها` (zero-width non-joiner) | +| OCR | جاگذاری کلمات | `سوسابقه` → `سوءسابقه` | +| Remove Leading Dots | حذف سه نقطه از ابتدای جمله | `در ادامه...` → `در ادامه` | +| Remove Dot from the End of Line | حذف نقطه از انتهای جمله | `.می‌شود` → `می‌شود` | + +The groups run in this order, so a later group sees the output of an earlier one. + +## UI + +- **Sidebar.** Turn each group on or off by clicking its row. Hover over a row to see a + description and a live example. The rules themselves produce the example's result. The + badge shows how many lines the group changes. *Check* limits the run to the lines selected + in Subtitle Edit. +- **Fixes.** Each changed line is a card: line number, time code, the groups that changed it, + and the text before and after, right to left, with the changed characters highlighted. + Filter by group with the chips, or search for text or a line number. Uncheck the fixes you + do not want. +- **Show hidden characters** draws the zero-width non-joiner as `·`, direction marks as small + `RLE`/`RLM`/... labels, and a changed line break as `↵`. Without it, a fix that only adds a + نیم‌فاصله would look like no change at all. +- **Apply and re-check** applies the selected fixes inside the plugin and checks again. + **Undo** steps back one pass. **OK** applies what is still selected and returns the + subtitle. + +The enabled groups, the display option and the scope are remembered between runs. + +## Differences from the Subtitle Edit 3/4 plugin + +- Every subtitle format is kept. The plugin changes only the text of each line (`subtitle.paragraphs`), + so styles, actors and positions survive. Before, the subtitle came back as SubRip. +- Line breaks keep their style. The rules expect Windows line breaks (`\r\n`), so text is + converted for the rules and converted back afterwards. The rules work the same on macOS and + Linux. +- Plain (non-regex) rules no longer get their quotes escaped. In the old plugin the two + `"` + ZWNJ rules in *Space to Invisible Space* could never match. +- Fixes are shown with highlighted differences and the groups that made them, instead of a + plain before/after list. + +## Building + +```bash +dotnet test se5/PersianErrors.Tests/PersianErrors.Tests.csproj +dotnet run --project se5/PersianErrors -- request.json +``` + +The workflow [`persian-errors.yml`](../../.github/workflows/persian-errors.yml) builds +self-contained zips for Windows, Linux and macOS (x64 and arm64). Run it manually with +*release* to publish `se5-persian-errors-vX.Y`. diff --git a/se5/PersianErrors/RuleSet.cs b/se5/PersianErrors/RuleSet.cs new file mode 100644 index 00000000..9488a105 --- /dev/null +++ b/se5/PersianErrors/RuleSet.cs @@ -0,0 +1,161 @@ +using System.Diagnostics; +using System.Reflection; +using System.Text.RegularExpressions; +using System.Xml.Linq; + +namespace SubtitleEdit.Plugins.PersianErrors; + +/// One find/replace rule from multiple_replace.xml. +public sealed class ReplaceRule +{ + public ReplaceRule(string findWhat, string replaceWith, Regex? regex, string description) + { + FindWhat = findWhat; + ReplaceWith = replaceWith; + Regex = regex; + Description = description; + } + + public string FindWhat { get; } + public string ReplaceWith { get; } + + /// Null for a plain (ordinal) replace. + public Regex? Regex { get; } + + public string Description { get; } + + public string Apply(string text) + { + if (Regex == null) + { + return text.Replace(FindWhat, ReplaceWith, StringComparison.Ordinal); + } + + try + { + return Regex.Replace(text, ReplaceWith); + } + catch (RegexMatchTimeoutException exception) + { + Debug.WriteLine($"Persian errors: regex timed out ({exception.Pattern})"); + return text; + } + } +} + +/// A named group of rules, shown as one option in the UI ("Fix Wrong Chars", "OCR", ...). +public sealed class RuleGroup +{ + public RuleGroup(string name, IReadOnlyList rules) + { + Name = name; + Rules = rules; + } + + public string Name { get; } + public IReadOnlyList Rules { get; } + + public string Apply(string text) + { + foreach (var rule in Rules) + { + text = rule.Apply(text); + } + + return text; + } +} + +/// +/// Loads the rules of the original Persian Subtitle Fixes plugin by Mohammad Sasan (msasanmh). +/// The rules were written against Windows text, so they expect \r\n line breaks; see +/// for how text is normalized around them. +/// +public static class RuleSet +{ + public const string NewLine = "\r\n"; + private static readonly TimeSpan MatchTimeout = TimeSpan.FromSeconds(2); + private static IReadOnlyList? _default; + + /// The embedded rule groups, in file order (the order they are applied in). + public static IReadOnlyList Default => _default ??= Load(ReadEmbeddedXml()); + + public static IReadOnlyList Load(string xml) + { + var groups = new List(); + var compiled = new Dictionary(StringComparer.Ordinal); + var root = XDocument.Parse(xml).Root; + if (root == null) + { + return groups; + } + + foreach (var group in root.Descendants("Group")) + { + var name = group.Element("Name")?.Value.Trim() ?? string.Empty; + var rules = new List(); + foreach (var item in group.Elements("MultipleSearchAndReplaceItem")) + { + if (!string.Equals(item.Element("Enabled")?.Value.Trim(), "True", StringComparison.OrdinalIgnoreCase)) + { + continue; + } + + var searchType = item.Element("SearchType")?.Value.Trim(); + var isRegex = searchType == "RegularExpression"; + if (!isRegex && searchType != "Normal") + { + continue; // "CaseSensitive" entries are disabled section separators + } + + var findWhat = FindWhatRule(item.Element("FindWhat")?.Value ?? string.Empty, isRegex); + var replaceWith = ReplaceWithRule(item.Element("ReplaceWith")?.Value ?? string.Empty); + if (findWhat.Length == 0) + { + continue; + } + + Regex? regex = null; + if (isRegex && !compiled.TryGetValue(findWhat, out regex)) + { + regex = new Regex(findWhat, RegexOptions.Multiline, MatchTimeout); + compiled.Add(findWhat, regex); + } + + rules.Add(new ReplaceRule(findWhat, replaceWith, regex, item.Element("Description")?.Value ?? string.Empty)); + } + + if (name.Length > 0) + { + groups.Add(new RuleGroup(name, rules)); + } + } + + return groups; + } + + // Same escaping as the original plugin's FindWhatRule/ReplaceWithRule, except that quotes are + // only escaped in regex patterns: escaping them in plain rules made '"' + ZWNJ never match. + private static string FindWhatRule(string findWhat, bool isRegex) + { + if (isRegex) + { + findWhat = findWhat.Replace("\"", "\\\"").Replace("\\\\\"", "\\\""); + } + + return findWhat.Replace("\\r\\n", NewLine).Replace("\\n", NewLine); + } + + private static string ReplaceWithRule(string replaceWith) => replaceWith + .Replace("\\r\\n", NewLine) + .Replace("\\n", NewLine); + + private static string ReadEmbeddedXml() + { + var assembly = Assembly.GetExecutingAssembly(); + var name = assembly.GetManifestResourceNames().Single(n => n.EndsWith("multiple_replace.xml", StringComparison.Ordinal)); + using var stream = assembly.GetManifestResourceStream(name)!; + using var reader = new StreamReader(stream); + return reader.ReadToEnd(); + } +} diff --git a/se5/PersianErrors/TextDiff.cs b/se5/PersianErrors/TextDiff.cs new file mode 100644 index 00000000..f5ee3893 --- /dev/null +++ b/se5/PersianErrors/TextDiff.cs @@ -0,0 +1,138 @@ +namespace SubtitleEdit.Plugins.PersianErrors; + +public enum DiffKind +{ + Same, + Removed, + Added, +} + +public sealed record DiffSegment(string Text, DiffKind Kind); + +/// Character diff (LCS) used to highlight what a fix changed. +public static class TextDiff +{ + private const int MaxCells = 1_000_000; + + /// Returns the segments of the old text (same/removed) and of the new text (same/added). + public static (List Before, List After) Compute(string before, string after) + { + // Same number of lines: diff line by line, so line breaks never pair up with the wrong line. + var beforeLines = before.Split('\n'); + var afterLines = after.Split('\n'); + if (beforeLines.Length > 1 && beforeLines.Length == afterLines.Length) + { + var beforeSegments = new List(); + var afterSegments = new List(); + for (var i = 0; i < beforeLines.Length; i++) + { + if (i > 0) + { + Add(beforeSegments, "\n", DiffKind.Same); + Add(afterSegments, "\n", DiffKind.Same); + } + + var (b, a) = ComputeLine(beforeLines[i], afterLines[i]); + b.ForEach(segment => Add(beforeSegments, segment.Text, segment.Kind)); + a.ForEach(segment => Add(afterSegments, segment.Text, segment.Kind)); + } + + return (beforeSegments, afterSegments); + } + + return ComputeLine(before, after); + } + + private static (List Before, List After) ComputeLine(string before, string after) + { + var prefix = 0; + while (prefix < before.Length && prefix < after.Length && before[prefix] == after[prefix]) + { + prefix++; + } + + var suffix = 0; + while (suffix < before.Length - prefix && suffix < after.Length - prefix && + before[before.Length - 1 - suffix] == after[after.Length - 1 - suffix]) + { + suffix++; + } + + var a = before.Substring(prefix, before.Length - prefix - suffix); + var b = after.Substring(prefix, after.Length - prefix - suffix); + var beforeSegments = new List(); + var afterSegments = new List(); + Add(beforeSegments, before[..prefix], DiffKind.Same); + Add(afterSegments, after[..prefix], DiffKind.Same); + + if ((long)a.Length * b.Length > MaxCells) + { + Add(beforeSegments, a, DiffKind.Removed); + Add(afterSegments, b, DiffKind.Added); + } + else + { + Lcs(a, b, beforeSegments, afterSegments); + } + + Add(beforeSegments, before[(before.Length - suffix)..], DiffKind.Same); + Add(afterSegments, after[(after.Length - suffix)..], DiffKind.Same); + return (beforeSegments, afterSegments); + } + + private static void Lcs(string a, string b, List beforeSegments, List afterSegments) + { + var lengths = new int[a.Length + 1, b.Length + 1]; + for (var i = a.Length - 1; i >= 0; i--) + { + for (var j = b.Length - 1; j >= 0; j--) + { + lengths[i, j] = a[i] == b[j] + ? lengths[i + 1, j + 1] + 1 + : Math.Max(lengths[i + 1, j], lengths[i, j + 1]); + } + } + + int x = 0, y = 0; + while (x < a.Length && y < b.Length) + { + if (a[x] == b[y]) + { + Add(beforeSegments, a[x].ToString(), DiffKind.Same); + Add(afterSegments, b[y].ToString(), DiffKind.Same); + x++; + y++; + } + else if (lengths[x + 1, y] >= lengths[x, y + 1]) + { + Add(beforeSegments, a[x].ToString(), DiffKind.Removed); + x++; + } + else + { + Add(afterSegments, b[y].ToString(), DiffKind.Added); + y++; + } + } + + Add(beforeSegments, a[x..], DiffKind.Removed); + Add(afterSegments, b[y..], DiffKind.Added); + } + + private static void Add(List segments, string text, DiffKind kind) + { + if (text.Length == 0) + { + return; + } + + if (segments.Count > 0 && segments[^1].Kind == kind) + { + segments[^1] = segments[^1] with { Text = segments[^1].Text + text }; + } + else + { + segments.Add(new DiffSegment(text, kind)); + } + } +} diff --git a/se5/PersianErrors/app.manifest b/se5/PersianErrors/app.manifest new file mode 100644 index 00000000..9d8ca2be --- /dev/null +++ b/se5/PersianErrors/app.manifest @@ -0,0 +1,10 @@ + + + + + + true/pm + PerMonitorV2 + + + diff --git a/se5/PersianErrors/multiple_replace.xml b/se5/PersianErrors/multiple_replace.xml new file mode 100644 index 00000000..dc403617 --- /dev/null +++ b/se5/PersianErrors/multiple_replace.xml @@ -0,0 +1,10868 @@ + + + + + Fix Unicode Control Char + True + + False + \\ Add UCC After Tag \\ + \\ Add UCC After Tag \\ + CaseSensitive + \\ Add UCC After Tag \\ + + + True + (\u202B)(\u202B)+ + $1 + RegularExpression + Trim UCC + + + True + \A( +) + + RegularExpression + Fix 1 + + + True + (\r\n)( +) + $1 + RegularExpression + Fix 2 + + + True + \A(^[\u202B])( +) + $1 + RegularExpression + Fix 3 + + + True + (\r\n)(^[\u202B])( +) + $1$2 + RegularExpression + Fix 4 + + + True + (\<[^<>]+\>)( +)([\u202B]) + $1 $3 + RegularExpression + Fix 5 + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([^\u202B\<\>])(.+)\z + $1$2$3$4$5$1$6$7 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at One Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([^\u202B\<\>])(.+)\z + $1$2$3$4$1$5$6 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at One Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([^\u202B\<\>])(.+)\z + $1$2$3$1$4$5 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at One Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([^\u202B\<\>])(.+)\z + $1$2$1$3$4 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at One Line (4) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([^\u202B\<\>])(.+)(\r\n) + $1$2$3$4$5$1$6$7$8 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at 1st Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([^\u202B\<\>])(.+)(\r\n) + $1$2$3$4$1$5$6$7 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at 1st Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([^\u202B\<\>])(.+)(\r\n) + $1$2$3$1$4$5$6 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at 1st Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([^\u202B\<\>])(.+)(\r\n) + $1$2$1$3$4$5 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at 1st Line (4) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([^\u202B\<\>])(.+)\z + $1$2$3$4$5$6$2$7$8 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at 2nd Line (1) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([^\u202B\<\>])(.+)\z + $1$2$3$4$5$2$6$7 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at 2nd Line (2) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([^\u202B\<\>])(.+)\z + $1$2$3$4$2$5$6 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at 2nd Line (3) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([^\u202B\<\>])(.+)\z + $1$2$3$2$4$5 + RegularExpression + Dialog Hyphen Fix: Add UCC After Tag at 2nd Line (4) + + + True + (\u202B)(\u202B)+ + $1 + RegularExpression + Trim UCC + + + + Change Arabic Chars to Persian + True + + False + \\\\ (Change Arabic Char to Persian) \\\\ + \\\\ (Change Arabic Char to Persian) \\\\ + CaseSensitive + Change Arabic Char to Persian + + + True + آّ + آ + Normal + Change Arabic Char to Persian + + + True + ّ + + Normal + Change Arabic Char to Persian + + + True + ك + ک + Normal + Change Arabic Char to Persian + + + True + و + و + Normal + Change Arabic Char to Persian + + + True + ي + ی + Normal + Change Arabic Char to Persian + + + True + ى + ی + Normal + Change Arabic Char to Persian + + + + Remove Unneeded Spaces + True + + False + \\\\ (Remove Unneeded Spaces) \\\\ + \\\\ (Remove Unneeded Spaces) \\\\ + CaseSensitive + Remove Unneeded Spaces + + + True + ، ، + ، + Normal + Comma Fixes + + + True + ، + ، + Normal + Comma Fixes + + + True + ، + ، + Normal + Comma Fixes + + + True + . . + . + Normal + Dot Fixes + + + True + . + . + Normal + Dot Fixes + + + True + . + . + Normal + Dot Fixes + + + True + \B\.\.\. \b + ... + RegularExpression + The Leading Dot Fixes... + + + True + \b \.\.\.\B + ... + RegularExpression + The Leading Dot Fixes... + + + True + \B \.\.\.\b + ... + RegularExpression + The Leading Dot Fixes... + + + True + ! ! + ! + Normal + ! Mark Fixes + + + True + ! + ! + Normal + ! Mark Fixes + + + True + ! + ! + Normal + ! Mark Fixes + + + True + ؟ ؟ + ؟ + Normal + Question Mark Fixes + + + True + ؟ + ؟ + Normal + Question Mark Fixes + + + True + ؟ + ؟ + Normal + Question Mark Fixes + + + True + ؟\.\.\. + ؟... + RegularExpression + Question Mark Fixes + + + True + \A(؟)( +)([a-zA-Z0-9])+(.+)\z + $1$3$4 + RegularExpression + Question Mark Fixes + + + True + (^[\u202B].*)(\d+)( +)(؟)\z + $1$2$4 + RegularExpression + UCC_Question Mark Fixes + + + True + (\d+)(,)( +)(\d+) + $1$2$4 + RegularExpression + Number Fixes + + + True + (\<[^<>]+\>)( +)(.+) + $1$3 + RegularExpression + Remove Unneeded Space + + + True + (.+)( +)(\<[^<>]+\>) + $1$3 + RegularExpression + Remove Unneeded Space + + + True + \A( +) + + RegularExpression + Remove Unneeded Space + + + True + \A(^[\u202B])( +) + $1 + RegularExpression + UCC_Remove Unneeded Space + + + True + ( +)\z + + RegularExpression + Remove Unneeded Space + + + True + (\r\n)( +) + $1 + RegularExpression + Remove Unneeded Space + + + True + (\r\n)(^[\u202B])( +) + $1$2 + RegularExpression + UCC_Remove Unneeded Space + + + True + ( +)(\r\n) + $2 + RegularExpression + Remove Unneeded Space + + + True + \A(^[\u202B])(.+)( +)([\:\.\!\?\u060C\u061F]+) + $1$2$4 + RegularExpression + UCC_Remove Unneeded Spaces + + + True + ([\b\w]+)( +)([\:\.\!\?\u060C\u061F]+)([\b\w]+) + $1$3 $4 + RegularExpression + Remove Unneeded Spaces + + + True + ([\b\w]+)( +)([\:\.\!\?\u060C\u061F]+)( +)([\b\w]+) + $1$3 $5 + RegularExpression + Remove Unneeded Spaces + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)\z + $1$2$3$4$5$7 + RegularExpression + Remove Unneeded Spaces: One Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)\z + $1$2$3$4$6 + RegularExpression + Remove Unneeded Spaces: One Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)\z + $1$2$3$5 + RegularExpression + Remove Unneeded Spaces: One Line (3) + + + True + \A(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)\z + $1$2$4 + RegularExpression + Remove Unneeded Spaces: One Line (4) + + + True + \A([\:\.\!\u060C]+)( +)(.+)\z + $1$3 + RegularExpression + Remove Unneeded Spaces: One Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$2$3$4$5$7$8 + RegularExpression + Remove Unneeded Spaces: At 1st Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$2$3$4$6$7 + RegularExpression + Remove Unneeded Spaces: At 1st Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$2$3$5$6 + RegularExpression + Remove Unneeded Spaces: At 1st Line (3) + + + True + \A(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$2$4$5 + RegularExpression + Remove Unneeded Spaces: At 1st Line (4) + + + True + \A([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$3$4 + RegularExpression + Remove Unneeded Spaces: At 1st Line (5) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)\z + $1$2$3$4$5$6$8 + RegularExpression + Remove Unneeded Spaces: At 2nd Line (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)\z + $1$2$3$4$5$7 + RegularExpression + Remove Unneeded Spaces: At 2nd Line (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)\z + $1$2$3$4$6 + RegularExpression + Remove Unneeded Spaces: At 2nd Line (3) + + + True + (\r\n)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)\z + $1$2$3$5 + RegularExpression + Remove Unneeded Spaces: At 2nd Line (4) + + + True + (\r\n)([\:\.\!\u060C]+)( +)(.+)\z + $1$2$4 + RegularExpression + Remove Unneeded Spaces: At 2nd Line (5) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$2$3$4$5$6$8$9 + RegularExpression + Remove Unneeded Spaces: At 3rd Line (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$2$3$4$5$7$8 + RegularExpression + Remove Unneeded Spaces: At 3rd Line (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$2$3$4$6$7 + RegularExpression + Remove Unneeded Spaces: At 3rd Line (3) + + + True + (\r\n)(\<[^<>]+\>)([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$2$3$5$6 + RegularExpression + Remove Unneeded Spaces: At 3rd Line (4) + + + True + (\r\n)([\:\.\!\u060C]+)( +)(.+)(\r\n) + $1$2$4$5 + RegularExpression + Remove Unneeded Spaces: At 3rd Line (5) + + + True + ( +)(\u061F) + $2 + RegularExpression + Remove Unneeded Spaces: Before ؟ + + + True + (\.\:\.)([^ ])(.+)( +)(\.\:\.) + $1 $2$3 $5 + RegularExpression + Fix Of Remove Unneeded Spaces + + + True + (\:\:\.)([^ ])(.+)( +)(\:\:\.) + $1 $2$3 $5 + RegularExpression + Fix Of Remove Unneeded Spaces + + + True + ( )( +) + $1 + RegularExpression + Trim Space + + + True + (\u200C)(\u200C)+ + $1 + RegularExpression + Trim Invisible Space + + + True + \A"\. + ". + RegularExpression + Dot Fixes + + + True + \A'\. + '. + RegularExpression + Dot Fixes + + + True + (\r\n)"\. + $1". + RegularExpression + Dot Fixes + + + True + (\r\n)'\. + $1'. + RegularExpression + Dot Fixes + + + True + ( + ( + Normal + Parentheses + + + True + ) + ) + Normal + Parentheses + + + True + [ + [ + Normal + Parentheses + + + True + ] + ] + Normal + Parentheses + + + True + (\<[^<>]+\>)( +)(\<[^<>]+\>) + $1$3 + RegularExpression + Tags + + + True + \A(\")( +) + $1 + RegularExpression + Double-Quotes Fixes + + + True + (\r\n)(\")( +) + $1$2 + RegularExpression + Double-Quotes Fixes + + + True + ( +)(\")(\r\n) + $2$3 + RegularExpression + Double-Quotes Fixes + + + True + ( +)(\")(\-)(\r\n) + $2 $3$4 + RegularExpression + Double-Quotes Fixes - + + + True + ( +)(\")( -)(\r\n) + $2$3$4 + RegularExpression + Double-Quotes Fixes - + + + True + ( +)(\")\z + $2 + RegularExpression + Double-Quotes Fixes + + + True + ( +)(\")(\-)\z + $2 $3 + RegularExpression + Double-Quotes Fixes - + + + True + ( +)(\")( -)\z + $2$3 + RegularExpression + Double-Quotes Fixes - + + + True + (\<[^<>]+\>)(\")( +) + $1$2 + RegularExpression + Double-Quotes Fixes Tags + + + True + (\<[^<>]+\>)([\:\.\!\u060C]+)( +)(\") + $1$2$4 + RegularExpression + Double-Quotes Fixes Tags + + + True + (\<[^<>]+\>)([\:\.\!\u060C]+)(\")( +) + $1$2$3 + RegularExpression + Double-Quotes Fixes Tags + + + True + (\<[^<>]+\>)([\:\.\!\u060C]+)([\b\w]+)( +)(\") + $1$2$3$5 + RegularExpression + Double-Quotes Fixes Tags + + + True + ( +)(\")(\<[^<>]+\>) + $2$3 + RegularExpression + Double-Quotes Fixes Tags + + + True + ( +)(\")(-)(\<[^<>]+\>) + $2 $3$4 + RegularExpression + Double-Quotes Fixes Tags + + + True + ( +)(\")( -)(\<[^<>]+\>) + $2$3$4 + RegularExpression + Double-Quotes Fixes Tags + + + True + (\b)( +)(\")([\:\.\!\u060C\u061F]+) + $1$3$4 + RegularExpression + Double-Quotes Fixes + + + True + (\b)(\")([\:\.\!\u060C\u061F\s]+)(\")( +)(\b) + $1$2$3$4$6 + RegularExpression + Double-Quotes Fixes + + + True + (\b)(\u060C)( )(\")( +)(\b) + $1$2$3$4$6 + RegularExpression + Double-Quotes Fixes + + + True + (\b)( +)(\")( )(\")(\b) + $1$3$4$5$6 + RegularExpression + Double-Quotes Fixes + + + True + (\b)(\")( )(\")( +)(\b) + $1$2$3$4$6 + RegularExpression + Double-Quotes Fixes + + + True + \A([\:\.\!\u060C]+)( )(\") + $1$3 + RegularExpression + Double-Quotes Fixes + + + True + (\r\n)([\:\.\!\u060C]+)( )(\") + $1$2$4 + RegularExpression + Double-Quotes Fixes + + + True + \A([\:\.\!\u060C]+)(\")( )(\b) + $1$2$4 + RegularExpression + Double-Quotes Fixes + + + True + (\r\n)([\:\.\!\u060C]+)(\")( )(\b) + $1$2$3$5 + RegularExpression + Double-Quotes Fixes + + + True + \A([\b\w]+)(\")( +)([\b\w]+)( +)(\")([\b\w]+)\z + $1$2$4$6$7 + RegularExpression + Double-Quotes Fixes + + + True + \A([\b\w]+)(\")( +)([\b\w]+)( +)(\")([\b\w]+)(\r\n) + $1$2$4$6$7$8 + RegularExpression + Double-Quotes Fixes + + + True + (\r\n)([\b\w]+)(\")( +)([\b\w]+)( +)(\")([\b\w]+)\z + $1$2$3$5$7$8 + RegularExpression + Double-Quotes Fixes + + + True + \A([\b\w]+)(\")( +)([\b\w]+)(\")([\b\w]+)\z + $1$2$4$5$6 + RegularExpression + Double-Quotes Fixes + + + True + \A([\b\w]+)(\")( +)([\b\w]+)(\")([\b\w]+)(\r\n) + $1$2$4$5$6$7 + RegularExpression + Double-Quotes Fixes + + + True + (\r\n)([\b\w]+)(\")( +)([\b\w]+)(\")([\b\w]+)\z + $1$2$3$5$6$7 + RegularExpression + Double-Quotes Fixes + + + True + \A([\b\w]+)(\")([\b\w]+)( +)(\")([\b\w]+)\z + $1$2$3$5$6 + RegularExpression + Double-Quotes Fixes + + + True + \A([\b\w]+)(\")([\b\w]+)( +)(\")([\b\w]+)(\r\n) + $1$2$3$5$6$7 + RegularExpression + Double-Quotes Fixes + + + True + (\r\n)([\b\w]+)(\")([\b\w]+)( +)(\")([\b\w]+)\z + $1$2$3$4$6$7 + RegularExpression + Double-Quotes Fixes + + + True + \A(")([\b\w]+)( +)(\")( +) + $1$2$3$4 + RegularExpression + Double-Quotes Fixes + + + True + (\r\n)(")([\b\w]+)( +)(\")( +) + $1$2$3$4$5 + RegularExpression + Double-Quotes Fixes + + + True + \b([\s]*)(([\"\-0-9]*)([A-Za-z]+)([\"\-0-9]*))(،\s)\b + $1$2 ، + RegularExpression + Double-Quotes Fixes + + + True + \b(،\s)(([\"\-0-9]*)([A-Za-z]+)([\"\-0-9]*))([\s]*)\b + ،$2$6 + RegularExpression + Double-Quotes Fixes + + + True + \b؟"\b + ؟ " + RegularExpression + Double-Quotes Fixes + + + True + (\b\.*\؟*\،*\!*[\b\w\d\.\؟\،\! ]+\b\.*\؟*\،*\!*)( *)(\")( *)([^\u0000-\u007F]{1,2})( *)(\")( *)\z + $1$3$5$7 + RegularExpression + Double-Quotes Fixes + + + True + \A([\!\.\،\(\)\[\]]+)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)([\!\.\،\(\)\[\]]+)*( *)(\-*)\z + $1$3$5 $7$9$10$11$12 + RegularExpression + Double-Quotes Fixes A1 2 " + + + True + \A([\!\.\،\(\)\[\]]+)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)([\!\.\،\(\)\[\]]+)*( *)(\-*)(\r\n) + $1$3$5 $7$9$10$11$12$13 + RegularExpression + Double-Quotes Fixes A2 2 " + + + True + (\r\n)([\!\.\،\(\)\[\]]+)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)([\!\.\،\(\)\[\]]+)*( *)(\-*)\z + $1$2$4$6 $8$10$11$12$13 + RegularExpression + Double-Quotes Fixes A3 2 " + + + True + \A([\!\.\،\(\)\[\]]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\!\.\،\(\)\[\]]+)*\z + $1$2$4$6 $8$10$12 + RegularExpression + Double-Quotes Fixes B1 2 " + + + True + \A([\!\.\،\(\)\[\]]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\!\.\،\(\)\[\]]+)*( -)*(\r\n) + $1$2$4$6 $8$10$12$13$14 + RegularExpression + Double-Quotes Fixes B2 2 " + + + True + (\r\n)([\!\.\،\(\)\[\]]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\!\.\،\(\)\[\]]+)*( -)*\z + $1$2$3$5$7 $9$11$13$14 + RegularExpression + Double-Quotes Fixes B3 2 " + + + True + \A(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\؟)( *)(\-*)\z + $1 $3$5$7$9$10$11 + RegularExpression + Double-Quotes Fixes B?1 2 " + + + True + \A(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\؟)( *)(\-*)(\r\n) + $1 $3$5$7$9$10$11$12 + RegularExpression + Double-Quotes Fixes B?2 2 " + + + True + (\r\n)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\؟)( *)(\-*)\z + $1$2 $4$6$8$10$11$12 + RegularExpression + Double-Quotes Fixes B?3 2 " + + + True + \A([\!\.\،\(\)\[\]]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)([\!\.\،\(\)\[\]]+)*\z + $1$2 $4$6$8$10 $12$13 + RegularExpression + Double-Quotes Fixes C1 2 " + + + True + \A([\!\.\،\(\)\[\]]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)([\!\.\،\(\)\[\]]+)*( -)*(\r\n) + $1$2 $4$6$8$10 $12$13$14$15 + RegularExpression + Double-Quotes Fixes C2 2 " + + + True + (\r\n)([\!\.\،\(\)\[\]]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)([\!\.\،\(\)\[\]]+)*( -)*\z + $1$2$3 $5$7$9$11 $13$14$15 + RegularExpression + Double-Quotes Fixes C3 2 " + + + True + \A([\!\.\،]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\-*)\z + $1$3$5 $7$9$10$11 + RegularExpression + Double-Quotes Fixes E1 2 " + + + True + \A([\!\.\،]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\-*)(\r\n) + $1$3$5 $7$9$10$11$12 + RegularExpression + Double-Quotes Fixes E2 2 " + + + True + (\r\n)([\!\.\،]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{2,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\-*)\z + $1$2$4$6 $8$10$11$12 + RegularExpression + Double-Quotes Fixes E3 2 " + + + True + \A([\!\.\،]+)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)\z + $1$3$5 $7$9$11$13 $15 $17$19 + RegularExpression + Double-Quotes Fixes A1 4 " + + + True + \A([\!\.\،]+)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( -)*(\r\n) + $1$3$5 $7$9$11$13 $15 $17$19$20$21 + RegularExpression + Double-Quotes Fixes A2 4 " + + + True + (\r\n)([\!\.\،]+)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( -)*\z + $1$2$4$6 $8$10$12$14 $16 $18$20$21 + RegularExpression + Double-Quotes Fixes A3 4 " + + + True + \A([\!\.\،]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)\z + $1$2$4$6 $8 $10$12$14$16 $18$20 + RegularExpression + Double-Quotes Fixes B1 4 " + + + True + \A([\!\.\،]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\-*)(\r\n) + $1$2$4$6 $8 $10$12$14$16 $18$20$22$23 + RegularExpression + Double-Quotes Fixes B2 4 " + + + True + (\r\n)([\!\.\،]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\-*)\z + $1$2$3$5$7 $9 $11$13$15$17 $19$21$23 + RegularExpression + Double-Quotes Fixes B3 4 " + + + True + \A([\!\.\،]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\؟)\z + $1$2 $4$6$8$10 $12 $14$16$18$20 + RegularExpression + Double-Quotes Fixes B?1 4 " + + + True + \A([\!\.\،]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\؟)( -)*(\r\n) + $1$2 $4$6$8$10 $12 $14$16$18$20$21$22 + RegularExpression + Double-Quotes Fixes B?2 4 " + + + True + (\r\n)([\!\.\،]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\؟)( -)*\z + $1$2$3 $5$7$9$11 $13 $15$17$19$21$22 + RegularExpression + Double-Quotes Fixes B?3 4 " + + + True + \A([\!\.\،]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(\")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(\")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)([\!\.\،\؟]+)*\z + $1$2 $4$6$8$10 $12 $14$16$18$20 $22$23 + RegularExpression + Double-Quotes Fixes C1 4 " + + + True + \A([\!\.\،]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(\")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(\")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)([\!\.\،\؟]+)*( -)*(\r\n) + $1$2 $4$6$8$10 $12 $14$16$18$20 $22$23$24$25 + RegularExpression + Double-Quotes Fixes C2 4 " + + + True + (\r\n)([\!\.\،]+)*(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(\")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)*( *)(\")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)([\.\!\،\؟]+)*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)([\!\.\،\؟]+)*( -)*\z + $1$2$3 $5$7$9$11 $13 $15$17$19$21 $23$24$25 + RegularExpression + Double-Quotes Fixes C3 4 " + + + True + \A( *)([\.\!\،])*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)\z + $2$4$6$8 $10 $12$14$16 + RegularExpression + Double-Quotes Fixes D1 4 " + + + True + \A( *)([\.\!\،])*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\-*)(\r\n) + $2$4$6$8 $10 $12$14$16$17$18$19 + RegularExpression + Double-Quotes Fixes D2 4 " + + + True + (\r\n)( *)([\.\!\،])*( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\-*)\z + $1$3$5$7$9 $11 $13$15$17$18$19 + RegularExpression + Double-Quotes Fixes D3 4 " + + + True + \A( *)([\.\!\،])*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\؟)( *)(")( *)\z + $2$4$6 $8 $10$12$14$16$18 + RegularExpression + Double-Quotes Fixes D?1 4 " + + + True + \A( *)([\.\!\،])*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\؟)( *)(")( *)(\-*)(\r\n) + $2$4$6 $8 $10$12$14$16$18$19$20$21 + RegularExpression + Double-Quotes Fixes D?2 4 " + + + True + (\r\n)( *)([\.\!\،])*( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\؟)( *)(")( *)(\-*)\z + $1$3$5$7 $9 $11$13$15$17$19$20$21 + RegularExpression + Double-Quotes Fixes D?3 4 " + + + True + \A( *)([\.،!])( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*) + $2$4$6 + RegularExpression + Double-Quotes Fixes Mixed with special char Line 1 + + + True + (\r\n)( *)([\.،!])( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*) + $1$3$5$7 + RegularExpression + Double-Quotes Fixes Mixed with special char Line 2 + + + True + \A( *)([\.،!])( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(") + $2$4$5$6 + RegularExpression + Double-Quotes Fixes Mixed with special char Line 1 + + + True + (\r\n)( *)([\.،!])( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(") + $1$3$5$6$7 + RegularExpression + Double-Quotes Fixes Mixed with special char Line 2 + + + True + \b( *)(")( *)(؟)( *)(")( *)(-)( *)(\r\n) + $2$4$6 $8$10 + RegularExpression + Double-Quotes Fixes Mixed with special char Line 1 + + + True + \b( *)(")( *)(؟)( *)(")( *)(-)( *)\z + $2$4$6 $8 + RegularExpression + Double-Quotes Fixes Mixed with special char Line 2 + + + True + \A(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[a-zA-Z\d\.\؟\?\،\,\! ]{3,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\-*)\z + $1 $3$5$7$8$9 + RegularExpression + Double-Quotes Fixes EN A1 + + + True + \A(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[a-zA-Z\d\.\؟\?\،\,\! ]{3,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\-*)(\r\n) + $1 $3$5$7$8$9$10 + RegularExpression + Double-Quotes Fixes EN A2 + + + True + (\r\n)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[a-zA-Z\d\.\؟\?\،\,\! ]{3,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\-*)\z + $1$2 $4$6$8$9$10 + RegularExpression + Double-Quotes Fixes EN A3 + + + True + \A( *)([\.\،\!\؟]+)*( *)(")( *)(\b\.*\؟*\،*\!*[a-zA-Z\d\.\؟\?\،\,\! ]{3,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(-*)( *)\z + $2$4$6$8 $10$11$12 + RegularExpression + Double-Quotes Fixes EN B1 + + + True + \A( *)([\.\،\!\؟]+)*( *)(")( *)(\b\.*\؟*\،*\!*[a-zA-Z\d\.\؟\?\،\,\! ]{3,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(-*)( *)(\r\n) + $2$4$6$8 $10$11$12$14 + RegularExpression + Double-Quotes Fixes EN B2 + + + True + (\r\n)( *)([\.\،\!\؟]+)*( *)(")( *)(\b\.*\؟*\،*\!*[a-zA-Z\d\.\؟\?\،\,\! ]{3,999999}\b\.*\؟*\،*\!*)( *)(")( *)(\b\.*\؟*\،*\!*[\u0600-\u06FF\d\p{C}\p{Cf}\.\؟\،\! ]{1,999999}\b\.*\؟*\،*\!*)( *)(-*)( *)\z + $1$3$5$7$9 $11$12$13 + RegularExpression + Double-Quotes Fixes EN B3 + + + True + (")( )(؟)\r\n + $1$3\n + RegularExpression + Double-Quotes Fixes + + + True + (")( )(؟)\z + $1$3 + RegularExpression + Double-Quotes Fixes + + + True + (")( )(ـه)\b + $1$3 + RegularExpression + Double-Quotes Fixes + + + True + (")( )(ئه)\b + $1$3 + RegularExpression + Double-Quotes Fixes + + + True + (")( )(ها)\b + $1$3 + RegularExpression + Double-Quotes Fixes + + + True + (")( )(ست)\b + $1$3 + RegularExpression + Double-Quotes Fixes + + + True + (")( )(ت)\b + $1$3 + RegularExpression + Double-Quotes Fixes + + + True + (")( )(ی)\b + $1$3 + RegularExpression + Double-Quotes Fixes + + + True + (")( )(ی ) + $1$3 + RegularExpression + Double-Quotes Fixes + + + True + (^[^\u202B].*)(!)( )(")\r\n + $1$4\n + RegularExpression + Double-Quotes Fixes + + + True + (^[^\u202B].*)(!)( )(")\z + $1$4 + RegularExpression + Double-Quotes Fixes + + + True + \b"؟"\b + "؟ " + RegularExpression + Double-Quotes Fixes + + + + Add Missing Spaces + True + + False + \\\\ (Add Missing Spaces) \\\\ + \\\\ (Add Missing Spaces) \\\\ + CaseSensitive + Add Missing Spaces + + + True + (^[^\u202B])(.*)( )(\u060C)( )([a-zA-Z]+) + $1$2 $3 + RegularExpression + Comma Fixes + + + True + ([\u0600-\u06FF]+)(\.)([\b\w\d]) + $1$2 $3 + RegularExpression + Dot Fixes + + + True + ([^\u0000-\u007F])(\.)( +)([^\u0000-\u007F]{3,20}) + $1$2 $4 + RegularExpression + Dot Fixes + + + True + ([^\u0000-\u007F])(\.)([^\u0000-\u007F]{3,20}) + $1$2 $3 + RegularExpression + Dot Fixes + + + True + ([^\u0000-\u007F])(\.)( +)([^-<>"\. ]{3,20}) + $1$2 $4 + RegularExpression + Dot Fixes + + + True + ([^\u0000-\u007F])(\.)([^-<>"\. ]{3,20}) + $1$2 $3 + RegularExpression + Dot Fixes + + + True + \b\.\.\.\b + ... + RegularExpression + The Leading Dot Fixes... + + + True + ([\b\w\d])(\!)([\b\w\d]) + $1$2 $3 + RegularExpression + ! Mark Fixes + + + True + (\b[\b\w\d\p{C}\p{Cf} ]+\b)(\!)( +)(\b[\b\w\d\p{C}\p{Cf} ]+\b) + $1$2 $4 + RegularExpression + ! Mark Fixes + + + True + (\b[\b\w\d\p{C}\p{Cf} ]+\b)(\!)(\b[\b\w\d\p{C}\p{Cf} ]+\b) + $1$2 $3 + RegularExpression + ! Mark Fixes + + + True + (\b[^\u0000-\u007F]+\b)(\!)( +)(\b[^\u0000-\u007F]+\b) + $1$2 $4 + RegularExpression + ! Mark Fixes + + + True + (\b[^\u0000-\u007F]+\b)(\!)(\b[^\u0000-\u007F]+\b) + $1$2 $3 + RegularExpression + ! Mark Fixes + + + True + ([\b\w\d])(\!)([\b\w\d]) + $1$2 $3 + RegularExpression + Question Mark Fixes + + + True + ([^\u0000-\u007F])(؟)( +)([^\u0000-\u007F]) + $1$2 $4 + RegularExpression + Question Mark Fixes + + + True + ([^\u0000-\u007F])(؟)([^\u0000-\u007F]) + $1$2 $3 + RegularExpression + Question Mark Fixes + + + True + ([^\u0000-\u007F])(؟)( +)([\b\w\d]) + $1$2 $4 + RegularExpression + Question Mark Fixes + + + True + ([^\u0000-\u007F])(؟)([\b\w\d]) + $1$2 $3 + RegularExpression + Question Mark Fixes + + + True + ([\b\w\d\u200C]+)( +)(\-)([\b\w\d\u200C]+) + $1 $3 $4 + RegularExpression + Dash Fixes + + + True + ([\b\w\d\u200C]+)(\-)( +)([\b\w\d\u200C]+) + $1 $2 $4 + RegularExpression + Dash Fixes + + + True + ([\u0600-\u06FF]+)([\:\.\!\?\u060C\u061F]+)([\u0600-\u06FF]+)([\:\.\!\?\u060C\u061F]+)([\b\w]+) + $1$2 $3$4 $5 + RegularExpression + Add Missing Spaces + + + True + ([\u0600-\u06FF]+)([\:\.\!\?\u060C\u061F]+)([\b\w]+) + $1$2 $3 + RegularExpression + Add Missing Spaces + + + True + ([\)\]]+)(\b) + $1 $2 + RegularExpression + Parentheses + + + True + (\b)([\(\[]+) + $1 $2 + RegularExpression + Parentheses + + + True + (\b)([\:\.\!\?\u060C\u061F]+)([\(\[]+) + $1$2 $3 + RegularExpression + Parentheses + + + True + (^[^\u202B])(.*)([\u0600-\u06FF]+)([\:\.\!\?\u060C\u061F]+)( )([a-zA-Z]+) + $1$2$3$5$4$6 + RegularExpression + Fixes of "Add Missing Spaces" + + + + Fix Dialog Hyphen + True + + False + \\\\ (Dialog Hyphen Fix) \\\\ + \\\\ (Dialog Hyphen Fix) \\\\ + CaseSensitive + Dialog Hyphen Fix + + + True + ( )( +) + $1 + RegularExpression + Trim Space + + + True + \p{Pd} + - + RegularExpression + Dialog Hyphen Fix 1 + + + True + (\-)( +)(\-) + $1 + RegularExpression + Dialog Hyphen Fix: 2 + + + True + ([\- ]{2,2})([\)\]]+)([\- ]{2,2}) + $2$3 + RegularExpression + Dialog Hyphen Fix: 3 + + + True + ([\- ]{2,2})([\(\[]+)([\- ]{2,2}) + $1$2 + RegularExpression + Dialog Hyphen Fix: 4 + + + True + ([\)\]]+)(\-) + $1 $2 + RegularExpression + Dialog Hyphen Fix: 5 + + + True + (\-)([\(\[]+) + $1 $2 + RegularExpression + Dialog Hyphen Fix: 6 + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\s])(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6 $7$8$9$10$11$12 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 1st Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\s])(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5 $6$7$8$9$10 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 1st Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\s])(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4 $5$6$7$8 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 1st Line (3) + + + True + \A(\<[^<>]+\>)(.+)([^\s])(\-)(\<[^<>]+\>)(\r\n) + $1$2$3 $4$5$6 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 1st Line (4) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\s])(\-)(\r\n) + $1$2$3$4$5$6 $7$8 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 1st Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\s])(\-)(\r\n) + $1$2$3$4$5 $6$7 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 1st Line (6) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\s])(\-)(\r\n) + $1$2$3$4 $5$6 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 1st Line (7) + + + True + \A(\<[^<>]+\>)(.+)([^\s])(\-)(\r\n) + $1$2$3 $4$5 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 1st Line (8) + + + True + \A(.+)([^\s])(\-)(\r\n) + $1$2 $3$4 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 1st Line (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\s])(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7 $8$9$10$11$12 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 2nd Line (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\s])(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6 $7$8$9$10 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 2nd Line (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\s])(\-)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5 $6$7$8 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 2nd Line (3) + + + True + (\r\n)(\<[^<>]+\>)(.+)([^\s])(\-)(\<[^<>]+\>)\z + $1$2$3$4 $5$6 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 2nd Line (4) + + + True + (\r\n)(^[^\u202B])(.+)([^\s])(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4 $5$6$7$8$9 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 2nd Line (5) + + + True + (\r\n)(^[^\u202B])(.+)([^\s])(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4 $5$6$7$8 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 2nd Line (6) + + + True + (\r\n)(^[^\u202B])(.+)([^\s])(\-)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4 $5$6$7 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 2nd Line (7) + + + True + (\r\n)(^[^\u202B])(.+)([^\s])(\-)(\<[^<>]+\>)\z + $1$2$3$4 $5$6 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 2nd Line (8) + + + True + (\r\n)(^[^\u202B])(.+)([^\s])(\-)\z + $1$2$3$4 $5 + RegularExpression + Dialog Hyphen Fix: Add Missing Space at 2nd Line (9) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\-)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6 $5$7$8$9$10$11 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (1) No Space + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{2,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6 $5$7$8$9$10$11 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\-)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$5 $4$6$7$8$9 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (2) No Space + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{2,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$5 $4$6$7$8$9 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\-)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$4 $3$5$6$7 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (3) No Space + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{2,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$4 $3$5$6$7 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (3) + + + True + \A(\<[^<>]+\>)(\-)(.+)(\<[^<>]+\>)(\r\n) + $1$3 $2$4$5 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (4) No Space + + + True + \A(\<[^<>]+\>)([\- ]{2,2})(.+)(\<[^<>]+\>)(\r\n) + $1$3 $2$4$5 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (4) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\-)(.+)(\r\n) + $1$2$3$4$6 $5$7 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (5) No Space + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{2,2})(.+)(\r\n) + $1$2$3$4$6 $5$7 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\-)(.+)(\r\n) + $1$2$3$5 $4$6 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (6) No Space + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{2,2})(.+)(\r\n) + $1$2$3$5 $4$6 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (6) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\-)(.+)(\r\n) + $1$2$4 $3$5 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (7) No Space + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{2,2})(.+)(\r\n) + $1$2$4 $3$5 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (7) + + + True + \A(\<[^<>]+\>)(\-)(.+)(\r\n) + $1$3 $2$4 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (8) No Space + + + True + \A(\<[^<>]+\>)([\- ]{2,2})(.+)(\r\n) + $1$3 $2$4 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (8) + + + True + \A(\-)(.+)(\r\n) + $2 $1$3 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (9) No Space + + + True + \A([\- ]{2,2})(.+)(\r\n) + $2 $1$3 + RegularExpression + Dialog Hyphen Fix: Incorrect 1st Line (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\-)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7 $6$8$9$10$11 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (1) No Space + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{2,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7 $6$8$9$10$11 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\-)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6 $5$7$8$9 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (2) No Space + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{2,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6 $5$7$8$9 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\-)(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5 $4$6$7 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (3) No Space + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{2,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5 $4$6$7 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (3) + + + True + (\r\n)(\<[^<>]+\>)(\-)(.+)(\<[^<>]+\>)\z + $1$2$4 $3$5 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (4) No Space + + + True + (\r\n)(\<[^<>]+\>)([\- ]{2,2})(.+)(\<[^<>]+\>)\z + $1$2$4 $3$5 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (4) + + + True + (\r\n)(\-)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3 $2$4$5$6$7 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (5) No Space + + + True + (\r\n)([\- ]{2,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3 $2$4$5$6$7 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (5) + + + True + (\r\n)(\-)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3 $2$4$5$6 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (6) No Space + + + True + (\r\n)([\- ]{2,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3 $2$4$5$6 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (6) + + + True + (\r\n)(\-)(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3 $2$4$5 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (7) No Space + + + True + (\r\n)([\- ]{2,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3 $2$4$5 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (7) + + + True + (\r\n)(\-)(.+)(\<[^<>]+\>)\z + $1$3 $2$4 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (8) No Space + + + True + (\r\n)([\- ]{2,2})(.+)(\<[^<>]+\>)\z + $1$3 $2$4 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (8) + + + True + (\r\n)(\-)(.+)\z + $1$3 $2 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (9) No Space + + + True + (\r\n)([\- ]{2,2})(.+)\z + $1$3 $2 + RegularExpression + Dialog Hyphen Fix: Incorrect 2nd Line (9) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\-<>])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n)(^[^\u202B])(.*)(\-)(.*)\z + $1$2$3$4$5$6 -$7$8$9$10$11$12$13$14$15 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 1st Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\-<>])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n)(^[^\u202B])(.*)(\-)(.*)\z + $1$2$3$4$5 -$6$7$8$9$10$11$12$13 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 1st Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\-<>])(\<[^<>]+\>)(\<[^<>]+\>)(\r\n)(^[^\u202B])(.*)(\-)(.*)\z + $1$2$3$4 -$5$6$7$8$9$10$11 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 1st Line (3) + + + True + \A(\<[^<>]+\>)(.+)([^\-<>])(\<[^<>]+\>)(\r\n)(^[^\u202B])(.*)(\-)(.*)\z + $1$2$3 -$4$5$6$7$8$9 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 1st Line (4) + + + True + \A(.+)([^\-<>])(\r\n)(^[^\u202B])(.*)(\-)(.*)\z + $1$2 -$3$4$5$6$7 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 1st Line (5) + + + True + \A(^[^\u202B])(.*)(\-)(.*)(\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\-<>])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$8$9$10$11 -$12$13$14$15 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 2nd Line (1) + + + True + \A(^[^\u202B])(.*)(\-)(.*)(\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\-<>])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$8$9$10 -$11$12$13 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 2nd Line (2) + + + True + \A(^[^\u202B])(.*)(\-)(.*)(\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\-<>])(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$8$9 -$10$11 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 2nd Line (3) + + + True + \A(^[^\u202B])(.*)(\-)(.*)(\r\n)(\<[^<>]+\>)(.+)([^\-<>])(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$8 -$9 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 2nd Line (4) + + + True + \A(^[^\u202B])(.*)(\-)(.*)(\r\n)(.+)([^\-<>])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7 -$8$9$10$11 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 2nd Line (5) + + + True + \A(^[^\u202B])(.*)(\-)(.*)(\r\n)(.+)([^\-<>])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7 -$8$9$10 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 2nd Line (6) + + + True + \A(^[^\u202B])(.*)(\-)(.*)(\r\n)(.+)([^\-<>])(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7 -$8$9 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 2nd Line (7) + + + True + \A(^[^\u202B])(.*)(\-)(.*)(\r\n)(.+)([^\-<>])(\<[^<>]+\>)\z + $1$2$3$4$5$6$7 -$8 + RegularExpression + Dialog Hyphen Fix: Add Missing - at 2nd Line (8) + + + True + \A(^[^\u202B])(.*)(\-)(.*)(\r\n)(.+)([^\-<>])\z + $1$2$3$4$5$6$7 - + RegularExpression + Dialog Hyphen Fix: Add Missing - at 2nd Line (9) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([\- ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7$8$9$10 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([\- ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$7$8 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(.+)([\- ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (3) + + + True + \A(\<[^<>]+\>)(.+)([\- ]{1,2})(\<[^<>]+\>)\z + $1$2$4 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (4) + + + True + \A(.+)([\- ]{1,2})\z + $1 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{1,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$7$8$9$10 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (6) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{1,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6$7$8 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (7) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\- ]{1,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4$5$6 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (8) + + + True + \A(\<[^<>]+\>)([\- ]{1,2})(.+)(\<[^<>]+\>)\z + $1$3$4 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (9) + + + True + \A([\- ]{1,2})(.+)\z + $2 + RegularExpression + Dialog Hyphen Fix: Remove - when there is only 1 Line (10) + + + False + \\ With Unicode Control Char \\ + \\ With Unicode Control Char \\ + CaseSensitive + \\ With Unicode Control Char \\ + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\-)([^\s]) + $1$2$3$4$5$6$7 $8 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 1st Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\-)([^\s]) + $1$2$3$4$5$6 $7 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 1st Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\-)([^\s]) + $1$2$3$4$5 $6 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 1st Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])(\-)([^\s]) + $1$2$3$4 $5 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 1st Line (4) + + + True + \A(^[\u202B])(\-)([^\s]) + $1$2 $3 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 1st Line (5) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\-)([^\s]) + $1$2$3$4$5$6$7$8 $9 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 2nd Line (1) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\-)([^\s]) + $1$2$3$4$5$6$7 $8 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 2nd Line (2) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\-)([^\s]) + $1$2$3$4$5$6 $7 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 2nd Line (3) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])(\-)([^\s]) + $1$2$3$4$5 $6 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 2nd Line (4) + + + True + (\r\n)(^[\u202B])(\-)([^\s]) + $1$2$3 $4 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing Space at 2nd Line (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$8 $7$9$10$11$12$13 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (1) No Space + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$8 $7$9$10$11$12$13 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$7 $6$8$9$10$11 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (2) No Space + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$7 $6$8$9$10$11 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6 $5$7$8$9 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (3) No Space + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6 $5$7$8$9 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])(.*)(\-)(\<[^<>]+\>)(\r\n) + $1$2$3$5 $4$6$7 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (4) No Space + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\r\n) + $1$2$3$5 $4$6$7 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (4) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)(\-)(\r\n) + $1$2$3$4$5$6$8 $7$9 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (5) No Space + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\r\n) + $1$2$3$4$5$6$8 $7$9 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)(\-)(\r\n) + $1$2$3$4$5$7 $6$8 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (6) No Space + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\r\n) + $1$2$3$4$5$7 $6$8 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (6) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)(\-)(\r\n) + $1$2$3$4$6 $5$7 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (7) No Space + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\r\n) + $1$2$3$4$6 $5$7 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (7) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])(.*)(\-)(\r\n) + $1$2$3$5 $4$6 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (8) No Space + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\r\n) + $1$2$3$5 $4$6 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (8) + + + True + \A(^[\u202B])(.*)(\-)(\r\n) + $1$3 $2$4 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (9) No Space + + + True + \A(^[\u202B])(.*)([\- ]{2,2})(\r\n) + $1$3 $2$4 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 1st Line (9) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$9 $8$10$11$12$13 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (1) No Space + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$9 $8$10$11$12$13 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (1) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$8 $7$9$10$11 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (2) No Space + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$8 $7$9$10$11 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (2) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)(\-)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7 $6$8$9 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (3) No Space + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7 $6$8$9 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (3) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])(.*)(\-)(\<[^<>]+\>)\z + $1$2$3$4$6 $5$7 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (4) No Space + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)\z + $1$2$3$4$6 $5$7 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (4) + + + True + (\r\n)(^[\u202B])(.*)(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4 $3$5$6$7$8 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (5) No Space + + + True + (\r\n)(^[\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4 $3$5$6$7$8 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (5) + + + True + (\r\n)(^[\u202B])(.*)(\-)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4 $3$5$6$7 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (6) No Space + + + True + (\r\n)(^[\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4 $3$5$6$7 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (6) + + + True + (\r\n)(^[\u202B])(.*)(\-)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4 $3$5$6 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (7) No Space + + + True + (\r\n)(^[\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4 $3$5$6 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (7) + + + True + (\r\n)(^[\u202B])(.*)(\-)(\<[^<>]+\>)\z + $1$2$4 $3$5 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (8) No Space + + + True + (\r\n)(^[\u202B])(.*)([\- ]{2,2})(\<[^<>]+\>)\z + $1$2$4 $3$5 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (8) + + + True + (\r\n)(^[\u202B])(.*)(\-)\z + $1$2$4 $3 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (9) No Space + + + True + (\r\n)(^[\u202B])(.*)([\- ]{2,2})\z + $1$2$4 $3 + RegularExpression + UCC_Dialog Hyphen Fix: Incorrect 2nd Line (9) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n)(^[\u202B])(.*)(\-)(.*)\z + $1$2$3$4$5$6- $7$8$9$10$11$12$13$14$15$16$17 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 1st Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n)(^[\u202B])(.*)(\-)(.*)\z + $1$2$3$4$5- $6$7$8$9$10$11$12$13$14$15 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 1st Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n)(^[\u202B])(.*)(\-)(.*)\z + $1$2$3$4- $5$6$7$8$9$10$11$12$13 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 1st Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\r\n)(^[\u202B])(.*)(\-)(.*)\z + $1$2$3- $4$5$6$7$8$9$10$11 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 1st Line (4) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\r\n)(^[\u202B])(.*)(\-)(.*)\z + $1$2$3$4$5$6- $7$8$9$10$11$12$13 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 1st Line (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\r\n)(^[\u202B])(.*)(\-)(.*)\z + $1$2$3$4$5- $6$7$8$9$10$11$12 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 1st Line (6) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\r\n)(^[\u202B])(.*)(\-)(.*)\z + $1$2$3$4- $5$6$7$8$9$10$11 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 1st Line (7) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\r\n)(^[\u202B])(.*)(\-)(.*)\z + $1$2$3- $4$5$6$7$8$9$10 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 1st Line (8) + + + True + \A(^[\u202B])([^\-<>])(.+)(\r\n)(^[\u202B])(.*)(\-)(.*)\z + $1- $2$3$4$5$6$7$8 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 1st Line (9) + + + True + \A(^[\u202B])(.*)(\-)(.*)(\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$8$9$10$11- $12$13$14$15$16$17 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 2nd Line (1) + + + True + \A(^[\u202B])(.*)(\-)(.*)(\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$8$9$10- $11$12$13$14$15 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 2nd Line (2) + + + True + \A(^[\u202B])(.*)(\-)(.*)(\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$8$9- $10$11$12$13 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 2nd Line (3) + + + True + \A(^[\u202B])(.*)(\-)(.*)(\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])([^\-<>])(.+)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$8- $9$10$11 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 2nd Line (4) + + + True + \A(^[\u202B])(.*)(\-)(.*)(\r\n)(^[\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6- $7$8$9$10$11$12 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 2nd Line (5) + + + True + \A(^[\u202B])(.*)(\-)(.*)(\r\n)(^[\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6- $7$8$9$10$11 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 2nd Line (6) + + + True + \A(^[\u202B])(.*)(\-)(.*)(\r\n)(^[\u202B])([^\-<>])(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6- $7$8$9$10 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 2nd Line (7) + + + True + \A(^[\u202B])(.*)(\-)(.*)(\r\n)(^[\u202B])([^\-<>])(.+)(\<[^<>]+\>)\z + $1$2$3$4$5$6- $7$8$9 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 2nd Line (8) + + + True + \A(^[\u202B])(.*)(\-)(.*)(\r\n)(^[\u202B])([^\-<>])(.+)\z + $1$2$3$4$5$6- $7$8 + RegularExpression + UCC_Dialog Hyphen Fix: Add Missing - at 2nd Line (9) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{1,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$8$9$10$11$12 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{1,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7$8$9$10 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{1,2})(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$7$8 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([\- ]{1,2})(.+)(\<[^<>]+\>)\z + $1$2$3$5$6 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (4) + + + True + \A(^[\u202B])([\- ]{1,2})(.+)\z + $1$3 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.+)([\- ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$9$10$11$12 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (6) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.+)([\- ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$8$9$10 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (7) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(.+)([\- ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7$8 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (8) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])(.+)([\- ]{1,2})(\<[^<>]+\>)\z + $1$2$3$4$6 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (9) + + + True + \A(^[\u202B])(.+)([\- ]{1,2})\z + $1$2 + RegularExpression + UCC_Dialog Hyphen Fix: Remove - when there is only 1 Line (10) + + + True + (\-)( +)(\-)( +)(\-) + $1 + RegularExpression + Dialog Hyphen Fix: End 1 + + + True + (\-)( +)(\-) + $1 + RegularExpression + Dialog Hyphen Fix: End 2 + + + True + ( )( +) + $1 + RegularExpression + Trim Space + + + + Fix Wrong Chars + True + + True + , + ، + Normal + Comma Fixes: EN to FA + + + True + (\u060C)+ + ، + RegularExpression + Comma Fixes: Trim + + + True + (\u060C)([\.\!\,\?\u061F]+) + $1 + RegularExpression + Comma Fixes + + + True + ([a-zA-Z]+)(\u060C)( +)([a-zA-Z]+) + $1, $4 + RegularExpression + Comma Fixes: FA to EN (1) + + + True + ([a-zA-Z]+)(\u060C)([a-zA-Z]+) + $1, $3 + RegularExpression + Comma Fixes: FA to EN (2) + + + True + ([a-zA-Z]+)(\u060C)( +)(\d+) + $1, $4 + RegularExpression + Comma Fixes: FA to EN (3) + + + True + ([a-zA-Z]+)(\u060C)(\d+) + $1, $3 + RegularExpression + Comma Fixes: FA to EN (4) + + + True + (\d+)(\u060C)( +)([a-zA-Z]+) + $1, $4 + RegularExpression + Comma Fixes: FA to EN (5) + + + True + (\d+)(\u060C)([a-zA-Z]+) + $1, $3 + RegularExpression + Comma Fixes: FA to EN (6) + + + True + (\d+)(\u060C)( +)(\d+) + $1, $4 + RegularExpression + Comma Fixes: FA to EN (7) + + + True + (\d+)(\u060C)(\d+) + $1,$4 + RegularExpression + Comma Fixes: FA to EN (8) + + + True + ([\u0600-\u06FF ]+)(\d+)( *)(,)( *)(\d+)( *)(,)( *)(\d+)([\u0600-\u06FF ]+) + $1$2$3،$5$6$7،$9$10$11 + RegularExpression + Comma Fixes: EN to FA (1) + + + True + ([\u0600-\u06FF ]+)(\d+)( *)(,)( *)(\d+)([\u0600-\u06FF ]+) + $1$2$3،$5$6$7 + RegularExpression + Comma Fixes: EN to FA (2) + + + True + ([^\.])(\.)([\!\,\?\u060C\u061F]+) + $1$2 + RegularExpression + Dot Fixes + + + False + \\\\ (The Leading Dot Fixes...) \\\\ + \\\\ (The Leading Dot Fixes...) \\\\ + CaseSensitive + The Leading Dot Fixes... + + + True + \.\.+ + ... + RegularExpression + The Leading Dot Fixes... + + + True + (--)+(-)* + ... + RegularExpression + The Leading Dot Fixes... + + + True + ([\u2669-\u266F\*])(\.\.\.)( +)([\u0600-\u06FF]) + $1 $2$4 + RegularExpression + Fixes of "The Leading Dot Fixes..." + + + True + ([\u2669-\u266F\*])(\.\.\.)([\u0600-\u06FF]) + $1 $2$3 + RegularExpression + Fixes of "The Leading Dot Fixes..." + + + True + (\!)+ + ! + Normal + ! Mark Fixes: Trim + + + True + (\!)([\.\,\u060C]+) + $1 + RegularExpression + ! Mark Fixes + + + True + ? + ؟ + Normal + Question Mark Fixes: En to FA + + + True + (\u061F)+ + ؟ + RegularExpression + Question Mark Fixes: Trim + + + True + (\u061F)([\.\!\,\?\u060C]+) + $1 + RegularExpression + Question Mark Fixes + + + True + ([\؟\?])([\.]{1,1})([^\.]+) + $1$3 + RegularExpression + Question Mark Fixes + + + True + ([a-zA-Z]+)(\u061F) + $1? + RegularExpression + Question Mark Fixes: FA to EN + + + True + (\(+) + ( + RegularExpression + Parentheses: Trim 1 + + + True + (\[+) + [ + RegularExpression + Parentheses: Trim 2 + + + True + (\)+) + ) + RegularExpression + Parentheses: Trim 3 + + + True + (\]+) + ] + RegularExpression + Parentheses: Trim 4 + + + True + \A(\)) + ( + RegularExpression + Parentheses: Invalid () + + + True + \A(^[\u202B])(\)) + $1( + RegularExpression + Parentheses: Invalid () UCC + + + True + \A(^[\u202B])(- )(\)) + $1$2( + RegularExpression + Parentheses: Invalid () UCC - + + + True + \A(^[\u202B])(-)(\)) + $1$2 ( + RegularExpression + Parentheses: Invalid () UCC - + + + True + (\r\n)(\)) + $1( + RegularExpression + Parentheses: Invalid () + + + True + (\r\n)(^[\u202B])(\)) + $1$2( + RegularExpression + Parentheses: Invalid () UCC + + + True + (\r\n)(^[\u202B])(- )(\)) + $1$2$3( + RegularExpression + Parentheses: Invalid () UCC - + + + True + (\r\n)(^[\u202B])(-)(\)) + $1$2$3 ( + RegularExpression + Parentheses: Invalid () UCC - + + + True + (\()(\r\n) + )$2 + RegularExpression + Parentheses: Invalid () + + + True + (\()( -)(\r\n) + )$2$3 + RegularExpression + Parentheses: Invalid () - + + + True + (\()(-)(\r\n) + ) $2$3 + RegularExpression + Parentheses: Invalid () - + + + True + (\()\z + ) + RegularExpression + Parentheses: Invalid () + + + True + (\()( -)\z + )$2 + RegularExpression + Parentheses: Invalid () - + + + True + (\()(-)\z + ) $2 + RegularExpression + Parentheses: Invalid () - + + + True + (\<[^<>]+\>)(\)) + $1( + RegularExpression + Parentheses: Invalid () + + + True + (\<[^<>]+\>)([\u202B])(\)) + $1$2( + RegularExpression + Parentheses: Invalid () UCC + + + True + (\<[^<>]+\>)([\u202B])(- )(\)) + $1$2$3( + RegularExpression + Parentheses: Invalid () UCC - + + + True + (\<[^<>]+\>)([\u202B])(-)(\)) + $1$2$3 ( + RegularExpression + Parentheses: Invalid () UCC - + + + True + (\()(\<[^<>]+\>) + )$2 + RegularExpression + Parentheses: Invalid () + + + True + (\()( -)(\<[^<>]+\>) + )$2$3 + RegularExpression + Parentheses: Invalid () - + + + True + (\()(-)(\<[^<>]+\>) + ) $2$3 + RegularExpression + Parentheses: Invalid () - + + + True + \A(\]) + ] + RegularExpression + Parentheses: Invalid [] + + + True + \A(^[\u202B])(\]) + $1] + RegularExpression + Parentheses: Invalid [] UCC + + + True + \A(^[\u202B])(- )(\]) + $1$2] + RegularExpression + Parentheses: Invalid [] UCC - + + + True + \A(^[\u202B])(-)(\]) + $1$2 ] + RegularExpression + Parentheses: Invalid [] UCC - + + + True + (\r\n)(\]) + $1[ + RegularExpression + Parentheses: Invalid [] + + + True + (\r\n)(^[\u202B])(\]) + $1$2[ + RegularExpression + Parentheses: Invalid [] UCC + + + True + (\r\n)(^[\u202B])(- )(\]) + $1$2$3[ + RegularExpression + Parentheses: Invalid [] UCC - + + + True + (\r\n)(^[\u202B])(-)(\]) + $1$2$3 [ + RegularExpression + Parentheses: Invalid [] UCC - + + + True + (\[)(\r\n) + ]$2 + RegularExpression + Parentheses: Invalid [] + + + True + (\[)( -)(\r\n) + ]$2$3 + RegularExpression + Parentheses: Invalid [] - + + + True + (\[)(-)(\r\n) + ] $2$3 + RegularExpression + Parentheses: Invalid [] - + + + True + (\[)\z + ] + RegularExpression + Parentheses: Invalid [] + + + True + (\[)( -)\z + ]$2 + RegularExpression + Parentheses: Invalid [] - + + + True + (\[)(-)\z + ] $2 + RegularExpression + Parentheses: Invalid [] - + + + True + (\<[^<>]+\>)(\]) + $1[ + RegularExpression + Parentheses: Invalid [] + + + True + (\<[^<>]+\>)([\u202B])(\]) + $1$2[ + RegularExpression + Parentheses: Invalid [] UCC + + + True + (\<[^<>]+\>)([\u202B])(- )(\]) + $1$2$3[ + RegularExpression + Parentheses: Invalid [] UCC - + + + True + (\<[^<>]+\>)([\u202B])(-)(\]) + $1$2$3 [ + RegularExpression + Parentheses: Invalid [] UCC - + + + True + (\[)(\<[^<>]+\>) + ]$2 + RegularExpression + Parentheses: Invalid [] + + + True + (\[)( -)(\<[^<>]+\>) + ]$2$3 + RegularExpression + Parentheses: Invalid [] - + + + True + (\[)(-)(\<[^<>]+\>) + ] $2$3 + RegularExpression + Parentheses: Invalid [] - + + + True + (\"+) + " + RegularExpression + Double-Quotes Fixes: Trim + + + False + (<font color)(\s)*(=)(\s)*([\"#a-zA-Z0-9]+)+([\s\/]*)*(>)(.*)(</font)([\s\/]*)*(>)(\s)*(:)(\s)* + $1$2$3$4$5$6$7$8$13$9$10$11 + RegularExpression + Fix HI Colorer + + + + Fix Misplaced Chars + True + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:\n]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$7$5$6$8$9$10$11 + RegularExpression + Misplaced: One Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:\n]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$6$4$5$7$8$9 + RegularExpression + Misplaced: One Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:\n]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$5$3$4$6$7 + RegularExpression + Misplaced: One Line (3) + + + True + \A(\<[^<>]+\>)(.+)([^\.\:\n]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)\z + $1$4$2$3$5 + RegularExpression + Misplaced: One Line (4) + + + True + \A(^[^\u202B\<\>])(.+)([^\.\:\n]+)([\:\.\!\u060C\s]{1,2})\z + $4$1$2$3 + RegularExpression + Misplaced: One Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$7$5$6$8$9$10$11$12$13 + RegularExpression + Misplaced: At 1st Line - (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$6$4$5$7$8$9$10$11 + RegularExpression + Misplaced: At 1st Line - (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$5$3$4$6$7$8$9 + RegularExpression + Misplaced: At 1st Line - (3) + + + True + \A(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\r\n) + $1$4$2$3$5$6$7 + RegularExpression + Misplaced: At 1st Line - (4) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\r\n) + $1$2$3$4$7$5$6$8$9 + RegularExpression + Misplaced: At 1st Line - (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\r\n) + $1$2$3$6$4$5$7$8 + RegularExpression + Misplaced: At 1st Line - (6) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\r\n) + $1$2$5$3$4$6$7 + RegularExpression + Misplaced: At 1st Line - (7) + + + True + \A(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\r\n) + $1$4$2$3$5$6 + RegularExpression + Misplaced: At 1st Line - (8) + + + True + \A(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\r\n) + $4$1$2$3$5$6 + RegularExpression + Misplaced: At 1st Line - (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$8$6$7$9$10$11$12$13 + RegularExpression + Misplaced: At 2nd Line - (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$7$5$6$8$9$10$11 + RegularExpression + Misplaced: At 2nd Line - (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$6$4$5$7$8$9 + RegularExpression + Misplaced: At 2nd Line - (3) + + + True + (\r\n)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)\z + $1$2$5$3$4$6$7 + RegularExpression + Misplaced: At 2nd Line - (4) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$5$2$3$4$6$7$8$9$10 + RegularExpression + Misplaced: At 2nd Line - (5) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$5$2$3$4$6$7$8$9 + RegularExpression + Misplaced: At 2nd Line - (6) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$5$2$3$4$6$7$8 + RegularExpression + Misplaced: At 2nd Line - (7) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)\z + $1$5$2$3$4$6$7 + RegularExpression + Misplaced: At 2nd Line - (8) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})\z + $1$5$2$3$4$6 + RegularExpression + Misplaced: At 2nd Line - (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$8$6$7$9$10$11$12$13$14 + RegularExpression + Misplaced: At 3rd Line - (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$7$5$6$8$9$10$11$12 + RegularExpression + Misplaced: At 3rd Line - (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$6$4$5$7$8$9$10 + RegularExpression + Misplaced: At 3rd Line - (3) + + + True + (\r\n)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\<[^<>]+\>)(\r\n) + $1$2$5$3$4$6$7$8 + RegularExpression + Misplaced: At 3rd Line - (4) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})([\- ]{2,2})(\r\n) + $1$5$2$3$4$6$7 + RegularExpression + Misplaced: At 3rd Line - (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$7$5$6$8$9$10$11$12 + RegularExpression + Misplaced: At 1st Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$6$4$5$7$8$9$10 + RegularExpression + Misplaced: At 1st Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$5$3$4$6$7$8 + RegularExpression + Misplaced: At 1st Line (3) + + + True + \A(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\r\n) + $1$4$2$3$5$6 + RegularExpression + Misplaced: At 1st Line (4) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\r\n) + $1$2$3$4$7$5$6$8 + RegularExpression + Misplaced: At 1st Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\r\n) + $1$2$3$6$4$5$7 + RegularExpression + Misplaced: At 1st Line (6) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\r\n) + $1$2$5$3$4$6 + RegularExpression + Misplaced: At 1st Line (7) + + + True + \A(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\r\n) + $1$4$2$3$5 + RegularExpression + Misplaced: At 1st Line (8) + + + True + \A(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\r\n) + $4$1$2$3$5 + RegularExpression + Misplaced: At 1st Line (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$8$6$7$9$10$11$12 + RegularExpression + Misplaced: At 2nd Line (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$7$5$6$8$9$10 + RegularExpression + Misplaced: At 2nd Line (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$6$4$5$7$8 + RegularExpression + Misplaced: At 2nd Line (3) + + + True + (\r\n)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)\z + $1$2$5$3$4$6 + RegularExpression + Misplaced: At 2nd Line (4) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$5$2$3$4$6$7$8$9 + RegularExpression + Misplaced: At 2nd Line (5) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$5$2$3$4$6$7$8 + RegularExpression + Misplaced: At 2nd Line (6) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$5$2$3$4$6$7 + RegularExpression + Misplaced: At 2nd Line (7) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)\z + $1$5$2$3$4$6 + RegularExpression + Misplaced: At 2nd Line (8) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})\z + $1$5$2$3$4 + RegularExpression + Misplaced: At 2nd Line (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$8$6$7$9$10$11$12$13 + RegularExpression + Misplaced: At 3rd Line (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$7$5$6$8$9$10$11 + RegularExpression + Misplaced: At 3rd Line (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$6$4$5$7$8$9 + RegularExpression + Misplaced: At 3rd Line (3) + + + True + (\r\n)(\<[^<>]+\>)(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\<[^<>]+\>)(\r\n) + $1$2$5$3$4$6$7 + RegularExpression + Misplaced: At 3rd Line (4) + + + True + (\r\n)(^[^\u202B\<\>])(.+)([^\.\:]+)([\:\.\!\u060C\s]{1,2})(\r\n) + $1$5$2$3$4$6 + RegularExpression + Misplaced: At 3rd Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$5$7$8$9$10 + RegularExpression + Misplaced: ؟ One Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$4$6$7$8 + RegularExpression + Misplaced: ؟ One Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4$3$5$6 + RegularExpression + Misplaced: ؟ One Line (3) + + + True + \A(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)\z + $1$3$2$4 + RegularExpression + Misplaced: ؟ One Line (4) + + + True + \A([\u061F\s]+)([^a-zA-Z\r\n]+)\z + $2$1 + RegularExpression + Misplaced: ؟ One Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6$5$7$8$9$10$11$12 + RegularExpression + Misplaced: ؟ At 1st Line - (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$5$4$6$7$8$9$10 + RegularExpression + Misplaced: ؟ At 1st Line - (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$4$3$5$6$7$8 + RegularExpression + Misplaced: ؟ At 1st Line - (3) + + + True + \A(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\r\n) + $1$3$2$4$5$6 + RegularExpression + Misplaced: ؟ At 1st Line - (4) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\r\n) + $1$2$3$4$6$5$7$8 + RegularExpression + Misplaced: ؟ At 1st Line - (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\r\n) + $1$2$3$5$4$6$7 + RegularExpression + Misplaced: ؟ At 1st Line - (6) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\r\n) + $1$2$4$3$5$6 + RegularExpression + Misplaced: ؟ At 1st Line - (7) + + + True + \A(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\r\n) + $1$3$2$4$5 + RegularExpression + Misplaced: ؟ At 1st Line - (8) + + + True + \A([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\r\n) + $2$1$3$4 + RegularExpression + Misplaced: ؟ At 1st Line - (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7$6$8$9$10$11$12 + RegularExpression + Misplaced: ؟ At 2nd Line - (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$5$7$8$9$10 + RegularExpression + Misplaced: ؟ At 2nd Line - (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$4$6$7$8 + RegularExpression + Misplaced: ؟ At 2nd Line - (3) + + + True + (\r\n)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)\z + $1$2$4$3$5$6 + RegularExpression + Misplaced: ؟ At 2nd Line - (4) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3$2$4$5$6$7$8 + RegularExpression + Misplaced: ؟ At 2nd Line - (5) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3$2$4$5$6$7 + RegularExpression + Misplaced: ؟ At 2nd Line - (6) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3$2$4$5$6 + RegularExpression + Misplaced: ؟ At 2nd Line - (7) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)\z + $1$3$2$4$5 + RegularExpression + Misplaced: ؟ At 2nd Line - (8) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})\z + $1$3$2$4 + RegularExpression + Misplaced: ؟ At 2nd Line - (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$7$6$8$9$10$11$12$13 + RegularExpression + Misplaced: ؟ At 3rd Line - (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6$5$7$8$9$10$11 + RegularExpression + Misplaced: ؟ At 3rd Line - (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$5$4$6$7$8$9 + RegularExpression + Misplaced: ؟ At 3rd Line - (3) + + + True + (\r\n)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\<[^<>]+\>)(\r\n) + $1$2$4$3$5$6$7 + RegularExpression + Misplaced: ؟ At 3rd Line - (4) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)([\- ]{2,2})(\r\n) + $1$3$2$4$5 + RegularExpression + Misplaced: ؟ At 3rd Line - (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6$5$7$8$9$10$11 + RegularExpression + Misplaced: ؟ At 1st Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$5$4$6$7$8$9 + RegularExpression + Misplaced: ؟ At 1st Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$4$3$5$6$7 + RegularExpression + Misplaced: ؟ At 1st Line (3) + + + True + \A(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\r\n) + $1$3$2$4$5 + RegularExpression + Misplaced: ؟ At 1st Line (4) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\r\n) + $1$2$3$4$6$5$7 + RegularExpression + Misplaced: ؟ At 1st Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\r\n) + $1$2$3$5$4$6 + RegularExpression + Misplaced: ؟ At 1st Line (6) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\r\n) + $1$2$4$3$5 + RegularExpression + Misplaced: ؟ At 1st Line (7) + + + True + \A(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\r\n) + $1$3$2$4 + RegularExpression + Misplaced: ؟ At 1st Line (8) + + + True + \A([\u061F\s]+)([^a-zA-Z\r\n]+)(\r\n) + $2$1$3 + RegularExpression + Misplaced: ؟ At 1st Line (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7$6$8$9$10$11 + RegularExpression + Misplaced: ؟ At 2nd Line (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$5$7$8$9 + RegularExpression + Misplaced: ؟ At 2nd Line (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$4$6$7 + RegularExpression + Misplaced: ؟ At 2nd Line (3) + + + True + (\r\n)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)\z + $1$2$4$3$5 + RegularExpression + Misplaced: ؟ At 2nd Line (4) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3$2$4$5$6$7 + RegularExpression + Misplaced: ؟ At 2nd Line (5) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3$2$4$5$6 + RegularExpression + Misplaced: ؟ At 2nd Line (6) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$3$2$4$5 + RegularExpression + Misplaced: ؟ At 2nd Line (7) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)\z + $1$3$2$4 + RegularExpression + Misplaced: ؟ At 2nd Line (8) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)\z + $1$3$2 + RegularExpression + Misplaced: ؟ At 2nd Line (9) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$7$6$8$9$10$11$12 + RegularExpression + Misplaced: ؟ At 3rd Line (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6$5$7$8$9$10 + RegularExpression + Misplaced: ؟ At 3rd Line (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$5$4$6$7$8 + RegularExpression + Misplaced: ؟ At 3rd Line (3) + + + True + (\r\n)(\<[^<>]+\>)([\u061F\s]+)([^a-zA-Z\r\n]+)(\<[^<>]+\>)(\r\n) + $1$2$4$3$5$6 + RegularExpression + Misplaced: ؟ At 3rd Line (4) + + + True + (\r\n)([\u061F\s]+)([^a-zA-Z\r\n]+)(\r\n) + $1$3$2$4 + RegularExpression + Misplaced: ؟ At 3rd Line (5) + + + True + - + - + Normal + Fix of Misplaced + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:\n]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$8$9$7$10$11$12$13 + RegularExpression + UCC_Misplaced: One Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:\n]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7$8$6$9$10$11 + RegularExpression + UCC_Misplaced: One Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:\n]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$7$5$8$9 + RegularExpression + UCC_Misplaced: One Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:\n]+)(.+)(\<[^<>]+\>)\z + $1$2$3$5$6$4$7 + RegularExpression + UCC_Misplaced: One Line (4) + + + True + \A(^[\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:\n]+)(.+)\z + $1$3$4$2 + RegularExpression + UCC_Misplaced: One Line (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$7$9$10$8$11$12$13$14$15 + RegularExpression + UCC_Misplaced: At 1st Line - (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$8$9$7$10$11$12$13 + RegularExpression + UCC_Misplaced: At 1st Line - (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$7$8$6$9$10$11 + RegularExpression + UCC_Misplaced: At 1st Line - (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6$7$5$8$9 + RegularExpression + UCC_Misplaced: At 1st Line - (4) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$3$4$5$6$7$9$10$8$11 + RegularExpression + UCC_Misplaced: At 1st Line - (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$3$4$5$6$8$9$7$10 + RegularExpression + UCC_Misplaced: At 1st Line - (6) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$3$4$5$7$8$6$9 + RegularExpression + UCC_Misplaced: At 1st Line - (7) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$3$4$6$7$5$8 + RegularExpression + UCC_Misplaced: At 1st Line - (8) + + + True + \A(^[\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$4$5$3$6 + RegularExpression + UCC_Misplaced: At 1st Line - (9) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$8$10$11$9$12$13$14$15 + RegularExpression + UCC_Misplaced: At 2nd Line - (1) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$9$10$8$11$12$13 + RegularExpression + UCC_Misplaced: At 2nd Line - (2) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$8$9$7$10$11 + RegularExpression + UCC_Misplaced: At 2nd Line - (3) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)\z + $1$2$3$4$5$7$8$6$9 + RegularExpression + UCC_Misplaced: At 2nd Line - (4) + + + True + (\r\n)(^[\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6$4$7$8$9$10 + RegularExpression + UCC_Misplaced: At 2nd Line - (5) + + + True + (\r\n)(^[\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6$4$7$8$9 + RegularExpression + UCC_Misplaced: At 2nd Line - (6) + + + True + (\r\n)(^[\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6$4$7$8 + RegularExpression + UCC_Misplaced: At 2nd Line - (7) + + + True + (\r\n)(^[\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\<[^<>]+\>)\z + $1$2$3$5$6$4$7 + RegularExpression + UCC_Misplaced: At 2nd Line - (8) + + + True + (\r\n)(^[\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)\z + $1$2$3$5$6$4 + RegularExpression + UCC_Misplaced: At 2nd Line - (9) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$7$8$10$11$9$12$13$14$15$16 + RegularExpression + UCC_Misplaced: At 3rd Line - (1) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$7$9$10$8$11$12$13$14 + RegularExpression + UCC_Misplaced: At 3rd Line - (2) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$8$9$7$10$11$12 + RegularExpression + UCC_Misplaced: At 3rd Line - (3) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$7$8$6$9$10 + RegularExpression + UCC_Misplaced: At 3rd Line - (4) + + + True + (\r\n)(^[\u202B])([\- ]{2,2})([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$3$5$6$4$7 + RegularExpression + UCC_Misplaced: At 3rd Line - (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$8$9$7$10$11$12$13$14 + RegularExpression + UCC_Misplaced: At 1st Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$7$8$6$9$10$11$12 + RegularExpression + UCC_Misplaced: At 1st Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6$7$5$8$9$10 + RegularExpression + UCC_Misplaced: At 1st Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\r\n) + $1$2$3$5$6$4$7$8 + RegularExpression + UCC_Misplaced: At 1st Line (4) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$3$4$5$6$8$9$7$10 + RegularExpression + UCC_Misplaced: At 1st Line (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$3$4$5$7$8$6$9 + RegularExpression + UCC_Misplaced: At 1st Line (6) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$3$4$6$7$5$8 + RegularExpression + UCC_Misplaced: At 1st Line (7) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$3$5$6$4$7 + RegularExpression + UCC_Misplaced: At 1st Line (8) + + + True + \A(^[\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$3$4$2$5 + RegularExpression + UCC_Misplaced: At 1st Line (9) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$7$9$10$8$11$12$13$14 + RegularExpression + UCC_Misplaced: At 2nd Line (1) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$6$8$9$7$10$11$12 + RegularExpression + UCC_Misplaced: At 2nd Line (2) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$5$7$8$6$9$10 + RegularExpression + UCC_Misplaced: At 2nd Line (3) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)\z + $1$2$3$4$6$7$5$8 + RegularExpression + UCC_Misplaced: At 2nd Line (4) + + + True + (\r\n)(^[\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4$5$3$6$7$8$9 + RegularExpression + UCC_Misplaced: At 2nd Line (5) + + + True + (\r\n)(^[\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4$5$3$6$7$8 + RegularExpression + UCC_Misplaced: At 2nd Line (6) + + + True + (\r\n)(^[\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4$5$3$6$7 + RegularExpression + UCC_Misplaced: At 2nd Line (7) + + + True + (\r\n)(^[\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\<[^<>]+\>)\z + $1$2$4$5$3$6 + RegularExpression + UCC_Misplaced: At 2nd Line (8) + + + True + (\r\n)(^[\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)\z + $1$2$4$5$3 + RegularExpression + UCC_Misplaced: At 2nd Line (9) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$7$9$10$8$11$12$13$14$15 + RegularExpression + UCC_Misplaced: At 3rd Line (1) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$6$8$9$7$10$11$12$13 + RegularExpression + UCC_Misplaced: At 3rd Line (2) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$4$5$7$8$6$9$10$11 + RegularExpression + UCC_Misplaced: At 3rd Line (3) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)(.+)(\<[^<>]+\>)(\r\n) + $1$2$3$4$6$7$5$8$9 + RegularExpression + UCC_Misplaced: At 3rd Line (4) + + + True + (\r\n)(^[\u202B])([\:\.\!\u060C\u061F\s]{1,2})([^\.\:]+)([^<>]+)(\r\n) + $1$2$4$5$3$6 + RegularExpression + UCC_Misplaced: At 3rd Line (5) + + + + Fix Abbreviations + True + + False + \\\\ (A1. B2. C3 -> A1.B2.C3) \\\\ + \\\\ (A1. B2. C3 -> A1.B2.C3) \\\\ + CaseSensitive + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})\b) + $2$3$5$6$8$9$11$12$14 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})\b) + $2$3$5$6$8$9$11 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})\b) + $2$3$5$6$8 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{1,1})\b) + $2$3$5$6$8$9$11 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{1,1})\b) + $2$3$5$6$8 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{2,2})\b) + $2$3$5$6$8 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{1,1})\b) + $2$3$5$6$8 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{2,2})\b) + $2$3$5$6$8 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{1,1})\b) + $2$3$5$6$8 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{2,2})\b) + $2$3$5$6$8 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{1,1})(\.)([\s]*)([0-9\w]{1,1})\b) + $2$3$5$6$8 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (\b([0-9\w]{3,3})(\.)([\s]*)([0-9\w]{2,2})(\.)([\s]*)([0-9\w]{1,1})\b) + $2$3$5$6$8 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (آی)([‌‌\. ]*)(ام)([‌\. ]*)(اف) + $1.$3.$5 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (ای)([‌\. ]*)(ام)([‌\. ]*)(اف) + آی.$3.$5 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (کا)([‌\. ]*)(اس)([‌\. ]*)(آ) + کِی.$3.$5 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (سی)([‌\. ]*)(آی)([‌\. ]*)(ای) + $1.$3.$5 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + True + (ال)([‌\. ]*)(ای)([‌\s‌\.]*)(پی)([‌\. ]*)(دی) + $1.$3.$5.$7 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 + + + False + ()([‌\. ]*)()([‌\s‌\.]*)()([‌\. ]*)() + $1.$3.$5.$7 + RegularExpression + Abbreviation A1. B2. C3 -> A1.B2.C3 Preset + + + True + (\d+)(\u060C)(\d+)(\u060C)(\d+)(\u060C)(\d+)(\u060C)(\d+) + $1,$3,$5,$7,$9 + RegularExpression + Abbreviation Digits + + + True + (\d+)(\u060C)(\d+)(\u060C)(\d+)(\u060C)(\d+) + $1,$3,$5,$7 + RegularExpression + Abbreviation Digits + + + True + (\d+)(\u060C)(\d+)(\u060C)(\d+) + $1,$3,$5 + RegularExpression + Abbreviation Digits + + + True + (\d+)(\u060C)(\d+) + $1,$3 + RegularExpression + Abbreviation Digits + + + True + ار.پی.جی + آر.پی.جی + Normal + Abbreviation + + + True + ار. پی. جی + آر.پی.جی + Normal + Abbreviation + + + True + ار پی جی + آر.پی.جی + Normal + Abbreviation + + + True + آر. پی. جی + آر.پی.جی + Normal + Abbreviation + + + True + آر پی جی + آر.پی.جی + Normal + Abbreviation + + + True + دی. ان. ای + دی.ان.ای + Normal + Abbreviation + + + True + دی. اِن. اِی + دی.اِن.اِی + Normal + Abbreviation + + + True + دی ان ای + دی.ان.ای + Normal + Abbreviation + + + True + دی ان‌ای + دی.ان.ای + Normal + Abbreviation + + + True + دی. اِن. ای + دی.ان.ای + Normal + Abbreviation + + + True + دی. ان. اِی + دی.ان.ای + Normal + Abbreviation + + + True + دی اِن ای + دی.ان.ای + Normal + Abbreviation + + + True + دی ان اِی + دی.ان.ای + Normal + Abbreviation + + + True + جی. پی. اس + جی.پی.اس + Normal + Abbreviation + + + True + جی پی اس + جی.پی.اس + Normal + Abbreviation + + + True + جی پی اِس + جی.پی.اس + Normal + Abbreviation + + + True + ک. گ. ب + کی.جی.بی + Normal + Abbreviation + + + True + ک گ ب + کی.جی.بی + Normal + Abbreviation + + + True + دی. جی. اس. ایی + دی.جی.اس.ایی + Normal + Abbreviation + + + True + دی جی اس ایی + دی.جی.اس.ایی + Normal + Abbreviation + + + True + دی. تی + دی.تی + Normal + Abbreviation + + + True + دی تی + دی.تی + Normal + Abbreviation + + + True + سی. ان. ان + سی.ان.ان + Normal + Abbreviation + + + True + سی ان ان + سی.ان.ان + Normal + Abbreviation + + + True + بی. بی. سی + بی.بی.سی + Normal + Abbreviation + + + True + بی بی سی + بی.بی.سی + Normal + Abbreviation + + + True + اف. بی. آی + اف.بی.آی + Normal + Abbreviation + + + True + اف بی آی + اف.بی.آی + Normal + Abbreviation + + + True + اف بی‌آی + اف.بی.آی + Normal + Abbreviation + + + True + اف بی‌ای + اف.بی.آی + Normal + Abbreviation + + + True + سی. آی. ای + سی.آی.ای + Normal + Abbreviation + + + True + سی آی ای + سی.آی.ای + Normal + Abbreviation + + + True + سی آی اِی + سی.آی.ای + Normal + Abbreviation + + + True + سی‌آی‌ای + سی.آی.ای + Normal + Abbreviation + + + True + ‌ام. ار. ای + اِم.آر.آی + Normal + Abbreviation + + + True + ام. ار. ای + اِم.آر.آی + Normal + Abbreviation + + + True + اِم. ار. ای + اِم.آر.آی + Normal + Abbreviation + + + True + ام. آر. ای + اِم.آر.آی + Normal + Abbreviation + + + True + ام. ار. آی + اِم.آر.آی + Normal + Abbreviation + + + True + اِم. آر. ای + اِم.آر.آی + Normal + Abbreviation + + + True + اِم. ار. آی + اِم.آر.آی + Normal + Abbreviation + + + True + ام. آر. آی + اِم.آر.آی + Normal + Abbreviation + + + True + اِم. ار. آی + اِم.آر.آی + Normal + Abbreviation + + + True + اِم. آر. آی + اِم.آر.آی + Normal + Abbreviation + + + True + ام ار ای + اِم.آر.آی + Normal + Abbreviation + + + True + ال. اس. دی + اِل.اِس.دی + Normal + Abbreviation + + + True + کا. گ. ب + کی.جی.بی + Normal + Abbreviation + + + True + دی وی دی + دی-وی-دی + Normal + Abbreviation + + + True + پی اس ام + پی.اس.ام + Normal + Abbreviation + + + True + پی اس‌ام + پی.اس.ام + Normal + Abbreviation + + + True + پی‌اس ام + پی.اس.ام + Normal + Abbreviation + + + True + پی‌اس‌ام + پی.اس.ام + Normal + Abbreviation + + + True + پی. اس. ام + پی.اس.ام + Normal + Abbreviation + + + True + دی. سی + دی.سی + Normal + Abbreviation + + + True + تی. رکس + تی.رکس + Normal + Abbreviation + + + True + اس‌ام اس + اس.ام.اس + Normal + Abbreviation + + + True + ان بی سی + ان.بی.سی + Normal + Abbreviation + + + True + مجله جی کیو + مجله جی.کیو + Normal + Abbreviation + + + True + مجله جی. کیو + مجله جی.کیو + Normal + Abbreviation + + + True + مجله‌ی جی کیو + مجله‌ی جی.کیو + Normal + Abbreviation + + + True + مجله‌ی جی. کیو + مجله‌ی جی.کیو + Normal + Abbreviation + + + True + موج ای. ام + موج ای.ام + Normal + Abbreviation + + + True + اس. دبلیو + اس.دبلیو + Normal + Abbreviation + + + True + اس. اس + اس.اس + Normal + Abbreviation + + + True + اِن اِس اِی + ان.اس.اِی + Normal + Abbreviation + + + True + اِن. اِس. اِی + ان.اس.اِی + Normal + Abbreviation + + + True + ان اس ای + ان.اس.اِی + Normal + Abbreviation + + + True + ان. اس. ای + ان.اس.اِی + Normal + Abbreviation + + + True + ان. اس. اِی + ان.اس.اِی + Normal + Abbreviation + + + True + آی اِم اِف + آی.اِم.اِف + Normal + Abbreviation + + + True + آی. اِم. اِف + آی.اِم.اِف + Normal + Abbreviation + + + True + اِم آی تی + اِم.آی.تی + Normal + Abbreviation + + + True + ام آی تی + اِم.آی.تی + Normal + Abbreviation + + + True + اِم. آی. تی + اِم.آی.تی + Normal + Abbreviation + + + True + اِف اِس بی + اِف.اِس.بی + Normal + Abbreviation + + + True + اِف. اِس. بی + اِف.اِس.بی + Normal + Abbreviation + + + True + جی تی او + جی.تی.او + Normal + Abbreviation + + + True + سی. بی + سی.بی + Normal + Abbreviation + + + True + ام. ای. تی + اِم.آی.تی + Normal + Abbreviation + + + True + ای. بِی + ای.بِی + Normal + Abbreviation + + + True + سی دی + سی.دی + Normal + Abbreviation + + + True + سی. دی + سی.دی + Normal + Abbreviation + + + True + سی دی‌ + سی.دی‌ + Normal + Abbreviation + + + True + سی. دی‌ + سی.دی‌ + Normal + Abbreviation + + + True + سی. تی‌ + سی.تی‌ + Normal + Abbreviation + + + True + جی. وی + جی.وی + Normal + Abbreviation + + + True + ام. آی. 6 + اِم.آی.6 + Normal + Abbreviation - M + + + True + ام. ای. 6 + اِم.آی.6 + Normal + Abbreviation - M + + + True + ‌اِم.آی.6 + اِم.آی.6 + Normal + Abbreviation - Fix of M + + + True + نه.نه.([0-9\w]{2}) + نه، نه، $1 + RegularExpression + Fixes of Abbreviation A1. B2. C3 -> A1.B2.C3 + + + + Space to Invisible Space + True + + False + \\\\ (Space to Invisible Space) \\\\ + \\\\ (Space to Invisible Space) \\\\ + CaseSensitive + Space to Invisible Space + + + True + (\b[\b\w]+\b)( +)\b(ها)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(های)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(هایِ)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(هایی)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(هاش)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(هاشون)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(هات)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(هاتون)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(ی)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(ات)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(ام)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 - 1 + + + True + (\w)(‌)(ام)(\.)( *)([0-9\w]{1,3})( *)(\.) + $1 $3$4$5$6$7$8 + RegularExpression + Space to Invisible Space 0 - 2 + + + True + (\w)(‌)(اِم)(\.)( *)([0-9\w]{1,3})( *)(\.) + $1 $3$4$5$6$7$8 + RegularExpression + Space to Invisible Space 0 - 3 + + + True + (\b[\b\w]+\b)( +)\b(اند)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(اش)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(ایم)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(ایه)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + (\b[\b\w]+\b)( +)\b(اید)\b + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + \b ای + ‌ای + RegularExpression + Space to Invisible Space 0 + + + True + \b ای، + ‌ای، + RegularExpression + Space to Invisible Space 0 + + + True + \b ای\. + ‌ای. + RegularExpression + Space to Invisible Space 0 + + + True + \b ای\r\n + ‌ای\n + RegularExpression + Space to Invisible Space 0 + + + True + \b ای\z + ‌ای + RegularExpression + Space to Invisible Space 0 + + + True + \b ای -\r\n + ‌ای -\n + RegularExpression + Space to Invisible Space 0 + + + True + \b ای -\z + ‌ای - + RegularExpression + Space to Invisible Space 0 + + + True + \b ای؟\r\n + ‌ای؟\n + RegularExpression + Space to Invisible Space 0 + + + True + \b ای؟\z + ‌ای؟ + RegularExpression + Space to Invisible Space 0 + + + True + \b ای؟ -\r\n + ‌ای؟ -\n + RegularExpression + Space to Invisible Space 0 + + + True + \b ای؟ -\z + ‌ای؟ - + RegularExpression + Space to Invisible Space 0 + + + True + (\w)( )(ای)( -)*([\r\n\-\،\؟\"\!\<\>]) + $1‌$3$4$5 + RegularExpression + Space to Invisible Space 0 + + + True + (\w)( )(ای)( -)*\z + $1‌$3$4 + RegularExpression + Space to Invisible Space 0 + + + True + (\w)( )(ای)(\.)([\"\.\(\)\[\]\{\} ]) + $1‌$3$4$5 + RegularExpression + Space to Invisible Space 0 - 1 + + + True + (\w)(‌)(ای)(\.)( *)([0-9\w]{1,3})( *)(\.) + $1 $3$4$5$6$7$8 + RegularExpression + Space to Invisible Space 0 - 2 + + + True + (ی)( )(ایه) + $1‌$3 + RegularExpression + Space to Invisible Space 0 + + + True + \b([^\u0000-\u007F]{3,20})( )(ش)( ) + $1‌$3$4 + RegularExpression + Space to Invisible Space 0 + + + True + (کار)( *)(ها) + $1‌$3 + RegularExpression + Space to Invisible Space 0 - z + + + True + (دیگه)(‌)(این) + $1 $3 + RegularExpression + Space to Invisible Space 0 - z + + + True + \b(..)(‌)(ای)\b + $1 $3 + RegularExpression + Space to Invisible Space 0 - z + + + True + \Aمی + می‌ + RegularExpression + Space or Missing Space to Invisible Space + + + True + \r\nمی + \nمی‌ + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(بر)( *)(ن*)(می)( *)(گرد) + $1$2$4$5‌$7 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(بر)( *)(ن*)(می)(\p{Cf})(گرد) + $1$2$4$5$6$7 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(بر)( *)(ن*)(می)( *)(گشت) + $1$2$4$5‌$7 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(بر)( *)(ن*)(می)( *)(داشت) + $1$2$4$5‌$7 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(بر)( *)(ن*)(می)( *)(دار) + $1$2$4$5‌$7 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(در)( *)(ن*)(می)( *)(اورد) + $1$2$4$5‌$7 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(ده) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(آد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(داد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شیم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کشم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بود) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(دارن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شه) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شویم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کشه) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گذاریم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(برد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گذارید) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شید) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گذارم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(با) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(فروخت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(خوا) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(دو) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(تون) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گیر) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(مون) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(پرس) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(دید) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گشت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(پوش) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(میر) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بر) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کر) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گفت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بوس) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(خارون) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گرد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(فهم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(داد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گرد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(ترسی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(ترس) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(ترسم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کشیم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(پذیرم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(افت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شناس) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(ذاشت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گذار) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کشت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شو) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(اومد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(آید) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(ارزن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(آیند) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بود) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(آور) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(پرن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(چشی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(رقصم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کشن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(فروش) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(خور) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گذر) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(گرفت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(جنگ) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شنید) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(رفت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(خون) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شناخ) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(دیم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + False + (\b)(ن*)(می)( *)(ذار) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(زن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(دین) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(زدم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(رفت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شین) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(رسن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(اُفتن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(چرخی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(ریز) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(چرخم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(درخشه) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(رسه) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(جوی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کشی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کشم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(رسون) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(رسی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کند) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کنی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(کنم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(فرست) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(داری) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بندم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بندی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بندن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بندند) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بندید) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(اورد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(سازم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(سازی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(سازن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(نگرم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(نگری) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(نگرن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(ساخت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(رقص) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(دارم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(خرم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(داشت) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(رسد) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(شنوی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بینی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(بینم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(داره) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(خری) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(خره) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(پیوندم) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(پیوندی) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + (\b)(ن*)(می)( *)(پیوندن) + $1$2$3‌$5 + RegularExpression + Space or Missing Space to Invisible Space + + + True + \b(بی)( *)(پدر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(مادر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(نظ) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(صبرانه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(رحم) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(سیم) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(ارزش) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(دردسر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(دقت) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(سابقه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(نهایت) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(شرف) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(سواد) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(عیب) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(فایده) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(توجه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(خطر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(ثبات) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(صلاحیت) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(تفاوت) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(ادب) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(عدالتی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(عقل) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(نتیجه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(نقص) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(حساب) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(ضرر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(عاطفه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(حرکت) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(شعور) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(اعتبار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(مصرف) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(جنبه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(خیال) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(موقع) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(مزه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(استفاده) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(گناه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(طرف) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(درنگ) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(اهمیت) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(احترامی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(غیرت)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b( )(تر)( )\b + ‌$2$3 + RegularExpression + Space to Invisible Space + + + True + \b تر + ‌تر + RegularExpression + Space to Invisible Space + + + True + \b ترین\b + ‌ترین + RegularExpression + Space to Invisible Space + + + True + \b تر\r\n + ‌تر\n + RegularExpression + Space to Invisible Space + + + True + \b تر\z + ‌تر + RegularExpression + Space to Invisible Space + + + True + \b(جدی)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(ضعیف)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(قوی)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(مهم)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(کامل)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پایین)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(عجیب)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(قدیمی)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(باهوش)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(راحت)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(سخت)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پیشرفته)( *)(تر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(نزدیک)( *)(ترین) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(زردچوبه)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هسته)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آماده)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(ناسازگاری)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(زیرکانه)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(توانایی)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(اسلحه)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(کشنده)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(جایزه)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(قوی)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(نقشه)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(سازگاری)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(کاره)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(عادلانه)( *)(ای) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + (\b)(آدم)( *)(ها)( ) + $1$2‌$4$5 + RegularExpression + Space to Invisible Space + + + True + (\b)(آدم)( *)(های)( ) + $1$2‌$4$5 + RegularExpression + Space to Invisible Space + + + True + (\b)(آدم)( *)(هایی)( ) + $1$2‌$4$5 + RegularExpression + Space to Invisible Space + + + True + (\b)(واکنش)( *)(ها)( ) + $1$2‌$4$5 + RegularExpression + Space to Invisible Space + + + True + (\b)(واکنش)( *)(های)( ) + $1$2‌$4$5 + RegularExpression + Space to Invisible Space + + + True + (\b)(واکنش)( *)(هایی)( ) + $1$2‌$4$5 + RegularExpression + Space to Invisible Space + + + True + \b(ماشین)( *)(ها) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(مهارت)( *)(ها) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(یادداشت)( *)(ها) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(مکان)( *)(ها) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + (فسیل)( *)(ها) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + (جنگل)( *)(ها) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شبیه)( *)(ساز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(غارت)( *)(گری) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(واقع)( *)(گرا) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(خون)( *)(ریزی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(برنامه)( *)(نویس) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پایه)( *)(ریزی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(لپ)( *)(تاپ) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پیشرفته)( *)(شون) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پیش)( *)(بینی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آتش)( *)(سوزی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آتیش)( *)(سوزی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(خارق)( *)(العاده) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(فوق)( *)(العاده) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هیچ)( *)(کدام) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هیچ)( *)(کدوم) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(فیزیک)( *)(دان) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(نظاره)( *)(گر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شعبده)( *)(باز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(راه)( *)(اندازی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(فیزیک)( *)(دان) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(لیاقت) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(قانون)( *)(شکن) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(وحشی)( *)(گری) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(گوجه)( *)(فرنگی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(فارغ)( *)(التحصیل) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آشغال)( *)(دونی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شیمی)( *)(دان) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(جمع)( *)(آوری) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(دانش)( *)(آموز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هیچ)( *)(گونه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(مرگ)( *)(آور) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بچه)( *)(گونه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(ساده)( *)(لو) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هیچ)( *)(چیز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(توافق)( *)(نامه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(غیب)( *)(گو) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(معدن)( *)(یاب) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(خجالت)( *)(زده) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بچه)( *)(گانه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(درجه)( *)(بندی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(فعال)( *)(ساز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(انتقام)( *)(جو) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هیچ)( *)(کس) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(رئیس)( *)(جمهور) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بن)( *)(بست) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آزادی)( *)(خواه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(مسئولیت)( *)(پذیر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(دنباله)( *)(دار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بهره)( *)(مند) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هلی)( *)(کوپتر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(قوی)( *)(سازی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(روزنامه)( *)(نگار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آینده)( *)(سازان) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(علاقه)( *)(مند) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(رییس)( *)(جمهور) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(قدرت)( *)(مند) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(سرمایه)( *)(گذار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(خوش)( *)(بین) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(غم)( *)(انگیز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(مامان)( *)(بزرگ) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(گران)( *)(بها) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آتش)( *)(نشان) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(قهوه)( *)(ساز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(ایده)( *)(آل) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شگفت)( *)(انگیز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(اندازه)( *)(گیری) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(جمع)( *)(بندی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(اختیار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(جواب) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(جنایت)( *)(کاران) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(توهم)( *)(زا) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شوخ)( *)(طبع) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پیشرفته)( *)(مون) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هدف)( *)(مند) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(جوش)( *)(کار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(چرخ)( *)(ها) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(سخت)( *)(افزار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(عکس)( *)(العمل) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شگفت)( *)(آور) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(خارق)( *)(العاد) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(خنده)( *)(دار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(لذت)( *)(بخش) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(توهین)( *)(آمیز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(فریم)( *)(ورک) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(طبقه)( *)(بندی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(جهش)( *)(یافته) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(ملال)( *)(آور) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(غوطه)( *)(ور) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پیش)( *)(گو) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هیچ)( *)(وقت) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بچه)( *)(دار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(حواس)( *)(پرت) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(انتها) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بین)( *)(الملل) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شوکه)( *)(کننده) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(نرم)( *)(افزار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(همین)( *)(طور) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(چهره)( *)(یاب) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(به هیچ)( *)(وجه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شرط)( *)(بندی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(برنامه)( *)(ریزی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(جاه)( *)(طلب) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(دعوت)( *)(نامه) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(حرفه)( *)(ای‌اند) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بی)( *)(پایان) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(برنامه)( *)(ریز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بذله)( *)(گویی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(چای)( *)(ساز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پورت)( *)(لند) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آی)( *)(پد) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آینده)( *)(نگری) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آی)( *)(پاد) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(بادی)( *)(گارد) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(اسلحه)( *)(ساز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(دروغ)( *)(گو) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(وطن)( *)(پرست) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(واقع)( *)(بین) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(راست)( *)(گو) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پشت)( *)(بام) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آسیب)( *)(پذیر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(قطب)( *)(نما) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(غیر)( *)(قانونی) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(جهت)( *)(یاب) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(آفتاب)( *)(پرست) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(عقب)( *)(مونده) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(دائم)( *)(الخمر) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هیجان)( *)(انگیز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(هدف)( *)(گیری) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(عقب)( *)(مانده) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(عقب)( *)(موندست) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(عقب)( *)(ماندست) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(سرعت)( *)(سنج) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(طیف)( *)(سنج) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(ارتفاع)( *)(سنج) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(حرارت)( *)(سنج) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شتاب)( *)(سنج) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(رقت)( *)(انگیز) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + (گیاه)( *)(خوار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + (گوشت)( *)(خوار) + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(حرفه)( *)(ای)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(حرفه)( *)(ایه)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(زنجیره)( *)(ای)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(زیاده)( *)(روی)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(خشک)( *)(شویی)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(شگفت)( *)(زده)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(سیب)( *)(زمینی)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(باغ)( *)(وحش)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(الهام)( *)(بخش)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پس)( *)(انداز)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(خفه)( *)(خون)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(پیاده)( *)(روی)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(مالتی)( *)(وِرس)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(خوشمزه)( *)(ایه)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(حسابی)( )(ای)( ) + $1‌$3$4 + RegularExpression + Space to Invisible Space + + + True + (آینده)( *)(نگر)\b + $1‌$3 + RegularExpression + Space to Invisible Space + + + True + \b(غیر)( *)(حرفه)( *)(ای) + $1‌$3‌$5 + RegularExpression + Space to Invisible Space + + + True + \b(جا)( *)(به)( *)(جا) + $1‌$3‌$5 + RegularExpression + Space to Invisible Space + + + True + \b(نیو)( )(جرسی) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(نمی)( )(آره) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(نمی)( )(دم) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(بر)( )(میام) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(بد)( *)(بینانه)\b + $1$3 + RegularExpression + No Invisible Space + + + True + \b(مادر)( *)(بزرگ) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(سوء)( *)(استفاده) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(بابا)( *)(بزرگ) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(نا)( *)(امید) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(زیر)( *)(زمین) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(پدر)( *)(بزرگ) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(گاو)( *)(صندوق) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(غیر)( *)(عملی) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(غیر)( *)(مجاز) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(غیر)( *)(ممکن) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(فنا)( *)(ناپذیر) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(فنا)( *)(پذیر) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(بالا)( *)(تر) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(دور)( *)(ترین) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(جدید)( *)(تر) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(طلا)( *)(یاب) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(فلز)( *)(یاب) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(دما)( *)(سنج) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(فشار)( *)(سنج) + $1$3 + RegularExpression + No Invisible Space + + + True + \b(خود)( *)(کفا) + $1$3 + RegularExpression + No Invisible Space + + + True + (بر)( *)(می‌گرد) + $1$3 + RegularExpression + No Invisible Space + + + True + (عذر)( *)(خواهی) + $1$3 + RegularExpression + No Invisible Space + + + False + \\ (Fixes of "Space to Invisible Space") \\ + \\ (Fixes of "Space to Invisible Space") \\ + CaseSensitive + Fixes of "Space to Invisible Space" + + + True + ‌‌‌ + ‌ + Normal + Fixes of "Space to Invisible Space" + + + True + ‌‌ + ‌ + Normal + Fixes of "Space to Invisible Space" + + + True + "‌ + " + Normal + Fixes of "Space to Invisible Space" + + + True + ‌" + " + Normal + Fixes of "Space to Invisible Space" + + + True + (\b)(ن*)(می)(‌)+(دید)(\b+) + $1$2$3$5$6 + RegularExpression + Fixes of "Space to Invisible Space" + + + True + ‌ای بابا + ای بابا + Normal + Fixes of "Space to Invisible Space" + + + True + ‌ای کاش + ای کاش + Normal + Fixes of "Space to Invisible Space" + + + True + ‌ای روزگار + ای روزگار + Normal + Fixes of "Space to Invisible Space" + + + True + ‌ای خدا + ای خدا + Normal + Fixes of "Space to Invisible Space" + + + True + ‌ای پروردگار + ای پروردگار + Normal + Fixes of "Space to Invisible Space" + + + True + خد ای + خدای + Normal + Fixes of "Space to Invisible Space" + + + True + خد‌ ای + خدای + Normal + Fixes of "Space to Invisible Space" + + + True + با‌ای + با ای + Normal + Fixes of "Space to Invisible Space" + + + True + امی‌دوار + امیدوار + Normal + Fixes of "Space to Invisible Space" + + + True + ‌ای میل + ایمیل + Normal + Fixes of "Space to Invisible Space" + + + True + آی‌ای + آی ای + Normal + Fixes of "Space to Invisible Space" + + + True + بسیار خبه + خیلی خوبه + Normal + Fixes of "Space to Invisible Space" + + + True + بسیار خب شد + خیلی خوب شد + Normal + Fixes of "Space to Invisible Space" + + + True + احترامی‌ک + احترامی ک + Normal + Fixes of "Space to Invisible Space" + + + True + ‌ها‌ها + ها ها + Normal + Fixes of "Space to Invisible Space" + + + True + بی‌است + بی است + Normal + Fixes of "Space to Invisible Space" + + + True + بی استعداد + بی‌استعداد + Normal + Fixes of "Space to Invisible Space" + + + True + می مون + میمون + Normal + Fixes of "Space to Invisible Space" + + + True + می‌مون\b + میمون + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌دون\b + میدون + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌دون + میدون + Normal + Fixes of "Space to Invisible Space" + + + True + میدونم + می‌دونم + Normal + Fixes of "Space to Invisible Space" + + + True + میدونیم + می‌دونیم + Normal + Fixes of "Space to Invisible Space" + + + True + میدونن + می‌دونن + Normal + Fixes of "Space to Invisible Space" + + + True + میدونند + می‌دونند + Normal + Fixes of "Space to Invisible Space" + + + True + میدونی + می‌دونی + Normal + Fixes of "Space to Invisible Space" + + + True + میدونست + می‌دونست + Normal + Fixes of "Space to Invisible Space" + + + True + نمیدونه + نمی‌دونه + Normal + Fixes of "Space to Invisible Space" + + + True + می‌کروب + میکروب + Normal + Fixes of "Space to Invisible Space" + + + True + می‌تو + می تو + Normal + Fixes of "Space to Invisible Space" + + + True + می‌کروفون + میکروفون + Normal + Fixes of "Space to Invisible Space" + + + True + می‌شیگان + میشیگان + Normal + Fixes of "Space to Invisible Space" + + + True + ‌فروشگاه + فروشگاه + Normal + Fixes of "Space to Invisible Space" + + + True + می‌گه + میگه + Normal + Fixes of "Space to Invisible Space" + + + True + می‌دی\r\n + میدی\n + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌دی\z + میدی + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌دوِ + میدوِ + Normal + Fixes of "Space to Invisible Space" + + + True + لبی‌تر + لبی تر + Normal + Fixes of "Space to Invisible Space" + + + True + کمی‌ + کمی + Normal + Fixes of "Space to Invisible Space" + + + True + زخمی‌کن + زخمی کن + Normal + Fixes of "Space to Invisible Space" + + + True + آکادمی‌گف + آکادمی گف + Normal + Fixes of "Space to Invisible Space" + + + True + رسمی‌ش + رسمی ش + Normal + Fixes of "Space to Invisible Space" + + + True + می‌مونه\b + میمونه + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌مون‌ها\b + میمون‌ها + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌مون‌های\b + میمون‌های + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌مونها\b + میمون‌ها + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌مونهای\b + میمون‌های + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌دون‌ها\b + میدون‌ها + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌دون‌های\b + میدون‌های + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌دونها\b + میدون‌ها + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌دونهای\b + میدون‌های + RegularExpression + Fixes of "Space to Invisible Space" + + + True + می‌کرو + میکرو + Normal + Fixes of "Space to Invisible Space" + + + True + می‌ده + میده + Normal + Fixes of "Space to Invisible Space" + + + True + می‌رن + میرن + Normal + Fixes of "Space to Invisible Space" + + + True + می‌گه + میگه + Normal + Fixes of "Space to Invisible Space" + + + True + می‌گن + میگن + Normal + Fixes of "Space to Invisible Space" + + + True + می‌گی + میگی + Normal + Fixes of "Space to Invisible Space" + + + True + می‌شد + میشد + Normal + Fixes of "Space to Invisible Space" + + + True + می‌شم + میشم + Normal + Fixes of "Space to Invisible Space" + + + True + سخت‌ترک + سخت ترک + Normal + Fixes of "Space to Invisible Space" + + + True + قدیمیمون + قدیمی‌مون + Normal + Fixes of "Space to Invisible Space" + + + True + ‌تر و تمیز + تر و تمیز + Normal + Fixes of "Space to Invisible Space" + + + True + فسیل‌هاست + فسیل هاست + Normal + Fixes of "Space to Invisible Space" + + + True + جنگل‌هاست + جنگل هاست + Normal + Fixes of "Space to Invisible Space" + + + True + نمی ری + نمیری + Normal + Fixes of "Space to Invisible Space" + + + True + نمی شه + نمیشه + Normal + Fixes of "Space to Invisible Space" + + + True + میامیام + میامی‌ام + Normal + Fixes of "Space to Invisible Space" + + + True + حسابی‌ + حسابی + Normal + Fixes of "Space to Invisible Space" + + + True + ‌تر و تازه + تر و تازه + Normal + Fixes of "Space to Invisible Space" + + + True + -‌ی + - ی + Normal + Fixes of "Space to Invisible Space" + + + True + \bرُمیها + رُمی‌ها + RegularExpression + Fixes of "Space to Invisible Space" + + + True + ‌هات داگ + هات داگ + Normal + Fixes of "Space to Invisible Space" + + + True + چستر‌ای + چستر اِی + Normal + Fixes of "Space to Invisible Space" + + + True + به‌ام + به ام + Normal + Fixes of "Space to Invisible Space" + + + True + ماه می‌ + ماه می + Normal + Fixes of "Space to Invisible Space" + + + True + راک‌اند رول + راک اند رول + Normal + Fixes of "Space to Invisible Space" + + + True + (‌+)(ها)([^\u0000-\u007F]{4}) + $2$3 + RegularExpression + Fixes of "Space to Invisible Space" + + + True + (‌)(هات)( *)(داگ) + $2$3$4 + RegularExpression + Fixes of "Space to Invisible Space" + + + True + \b([^\u0000-\u007F]{1,1})(‌)(اش) + $1 $3 + RegularExpression + Fixes of "Space to Invisible Space" + + + False + \\\\ (Remove Invisible Space) \\\\ + \\\\ (Remove Invisible Space) \\\\ + CaseSensitive + Remove Invisible Space + + + True + (\b)(ن)*(می)(‌)(..)(\b) + $1$2$3$5$6 + RegularExpression + Remove Invisible Space if There is Only Two Chars After It 1 + + + True + (\b)(ن)*(می)(‏)(..)(\b) + $1$2$3$5$6 + RegularExpression + Remove Invisible Space if There is Only Two Chars After It 2 + + + + OCR + True + + False + \\\\ (OCR - Replace Words) \\\\ + \\\\ (OCR - Replace Words) \\\\ + CaseSensitive + OCR - Replace Words + + + True + \Aخیله خوب + بسیارخب + RegularExpression + OCR - Replace Words + + + True + ،خیله خوب + ،بسیارخب + Normal + OCR - Replace Words + + + True + .خیله خوب + .بسیارخب + Normal + OCR - Replace Words + + + True + .خیله خب + .بسیارخب + Normal + OCR - Replace Words + + + True + \Aخیله خب + بسیارخب + RegularExpression + OCR - Replace Words + + + True + \r\nخیله خوب + \nبسیارخب + RegularExpression + OCR - Replace Words + + + True + \r\nخیله خب + \nبسیارخب + RegularExpression + OCR - Replace Words + + + True + خیله خب\z + بسیارخب + RegularExpression + OCR - Replace Words + + + True + خیله خوب\z + بسیارخب + RegularExpression + OCR - Replace Words + + + True + خیله‌خب + بسیارخب + Normal + OCR - Replace Words + + + True + ،خیله خب + ،بسیارخب + Normal + OCR - Replace Words + + + True + .خیلی خب + .بسیارخب + Normal + OCR - Replace Words + + + True + \Aخیلی خوب\. \b + بسیارخب. + RegularExpression + OCR - Replace Words + + + True + \Aخیلی خوب، + بسیارخب، + RegularExpression + OCR - Replace Words + + + True + \Aخیلی خوب! + بسیارخب! + RegularExpression + OCR - Replace Words + + + True + \Aخیلی خوب؟ + بسیارخب؟ + RegularExpression + OCR - Replace Words + + + True + \Aخیلی خب + بسیارخب + RegularExpression + OCR - Replace Words + + + True + ،خیلی خوب + ،بسیارخب + Normal + OCR - Replace Words + + + True + .خیلی خوب\r\n + .بسیارخب\n + Normal + OCR - Replace Words + + + True + \r\nخیلی خوب\. \b + \nبسیارخب. + RegularExpression + OCR - Replace Words + + + True + \r\nخیلی خوب، + بسیارخب، + RegularExpression + OCR - Replace Words + + + True + \r\nخیلی خوب! + بسیارخب! + RegularExpression + OCR - Replace Words + + + True + \r\nخیلی خوب؟ + بسیارخب؟ + RegularExpression + OCR - Replace Words + + + True + خیلی خوب\z + بسیارخب + RegularExpression + OCR - Replace Words + + + True + \.خیلی خوب\z + .بسیارخب + RegularExpression + OCR - Replace Words + + + True + ،خیلی خب + ،بسیارخب + Normal + OCR - Replace Words + + + True + \r\nخیلی خب + \nبسیارخب + RegularExpression + OCR - Replace Words + + + True + خیلی خب\z + بسیارخب + RegularExpression + OCR - Replace Words + + + True + \Aبسیار خوب، + بسیارخب، + RegularExpression + OCR - Replace Words + + + True + \A(\.\.\.)*بسیار خوب، + $1بسیارخب، + RegularExpression + OCR - Replace Words + + + True + \Aبسیار خوب\. + بسیارخب. + RegularExpression + OCR - Replace Words + + + True + \A\.بسیار خوب + .بسیارخب + RegularExpression + OCR - Replace Words + + + True + \Aبسیار خوب\z + بسیارخب + RegularExpression + OCR - Replace Words + + + True + بسیار خوب، + بسیارخب، + Normal + OCR - Replace Words + + + True + بسیار خوب\z + بسیارخب + RegularExpression + OCR - Replace Words + + + True + بسیار خوب. + بسیارخب. + Normal + OCR - Replace Words + + + True + بسیارخوب، + بسیارخب، + Normal + OCR - Replace Words + + + True + \r\nبسیار خب\z + \nبسیارخب + RegularExpression + OCR - Replace Words + + + True + \Aبسیار خب، + بسیارخب، + RegularExpression + OCR - Replace Words + + + True + بسیار خب، + بسیارخب، + Normal + OCR - Replace Words + + + True + \r\nبسیار خب؟\z + \nبسیارخب؟ + RegularExpression + OCR - Replace Words + + + True + بسیار خب \b + بسیارخب + RegularExpression + OCR - Replace Words + + + True + \Aبسیار خب\z + بسیارخب + RegularExpression + OCR - Replace Words + + + True + \A\.بسیار خب + .بسیارخب + RegularExpression + OCR - Replace Words + + + True + \r\n\.بسیار خب + \n.بسیارخب + RegularExpression + OCR - Replace Words + + + True + \A،بسیار خب + ،بسیارخب + RegularExpression + OCR - Replace Words + + + True + \r\n،بسیار خب + \n،بسیارخب + RegularExpression + OCR - Replace Words + + + True + \Aبسیار خب\. + بسیارخب. + RegularExpression + OCR - Replace Words + + + True + \Aبسیار خب\r\n + بسیارخب\n + RegularExpression + OCR - Replace Words + + + True + \r\nبسیار خب\. + \nبسیارخب. + RegularExpression + OCR - Replace Words + + + True + بسیار خب + بسیارخب + Normal + OCR - Replace Words + + + True + بی افته + بی‌اُفته + Normal + OCR - Replace Words + + + True + بیوفتن + بیاُفتن + Normal + OCR - Replace Words + + + True + بیافتن + بیاُفتن + Normal + OCR - Replace Words + + + True + میوفتاد + میاُفتاد + Normal + OCR - Replace Words + + + True + میافتاد + میاُفتاد + Normal + OCR - Replace Words + + + True + بیوفته + بیاُفته + Normal + OCR - Replace Words + + + True + بیافته + بیاُفته + Normal + OCR - Replace Words + + + True + میوفته + میاُفته + Normal + OCR - Replace Words + + + True + میافته + میاُفته + Normal + OCR - Replace Words + + + True + اونارو + اون‌ها رو + Normal + OCR - Replace Words + + + True + اینارو + این‌ها رو + Normal + OCR - Replace Words + + + True + شونو + شون رو + Normal + OCR - Replace Words + + + True + تونو + تون رو + Normal + OCR - Replace Words + + + True + چیزارو + چیزها رو + Normal + OCR - Replace Words + + + True + هرچیزی + هر چیزی + Normal + OCR - Replace Words + + + True + چیزیکه + چیزی که + Normal + OCR - Replace Words + + + True + زمانیکه + زمانی که + Normal + OCR - Replace Words + + + True + وقتیکه + وقتی که + Normal + OCR - Replace Words + + + True + خانوم + خانم + Normal + OCR - Replace Words + + + True + خانومها + خانم‌ها + Normal + OCR - Replace Words + + + True + خانمها + خانم‌ها + Normal + OCR - Replace Words + + + True + خانما، + خانم‌ها، + Normal + OCR - Replace Words + + + True + خانما. + خانم‌ها. + Normal + OCR - Replace Words + + + True + خانما\z + خانم‌ها + RegularExpression + OCR - Replace Words + + + True + (خانما)(\r\n) + خانم‌ها$2 + RegularExpression + OCR - Replace Words + + + True + سوسابقه + سوءسابقه + Normal + OCR - Replace Words + + + True + سئوال + سوال + Normal + OCR - Replace Words + + + True + همونو + همون رو + Normal + OCR - Replace Words + + + True + همینو + همین رو + Normal + OCR - Replace Words + + + True + همینجا + همین‌جا + Normal + OCR - Replace Words + + + True + روشنفکر + روشن‌فکر + Normal + OCR - Replace Words + + + True + جرئت + جرأت + Normal + OCR - Replace Words + + + True + جرات + جرأت + Normal + OCR - Replace Words + + + True + جائیکه + جایی که + Normal + OCR - Replace Words + + + True + خوب، خوب، خوب + خب، خب، خب + Normal + OCR - Replace Words + + + True + خیابونها + خیابون‌ها + Normal + OCR - Replace Words + + + True + تماسها + تماس‌ها + Normal + OCR - Replace Words + + + True + خلافها + خلاف‌ها + Normal + OCR - Replace Words + + + True + پلیسها + پلیس‌ها + Normal + OCR - Replace Words + + + True + آنها + آن‌ها + Normal + OCR - Replace Words + + + True + آنها + آن‌ها + Normal + OCR - Replace Words + + + True + هیچکدوم + هیچ‌کدوم + Normal + OCR - Replace Words + + + True + لوس آنجلس + لس‌آنجلس + Normal + OCR - Replace Words + + + True + لُس آنجلس + لُس‌آنجلس + Normal + OCR - Replace Words + + + True + لس آنجلس + لُس‌آنجلس + Normal + OCR - Replace Words + + + True + سن دیه گو + سن‌دیه‌گو + Normal + OCR - Replace Words + + + True + نه.نه.نه. + نه، نه، نه. + Normal + OCR - Replace Words + + + True + نه.نه.نه + نه، نه، نه + Normal + OCR - Replace Words + + + True + سو استفاده + سوءاستفاده + Normal + OCR - Replace Words + + + True + سواستفاده + سوءاستفاده + Normal + OCR - Replace Words + + + True + اینتر پل + اینترپل + Normal + OCR - Replace Words + + + True + سوء ظن + سوءظن + Normal + OCR - Replace Words + + + True + سوء تفاهم + سوءتفاهم + Normal + OCR - Replace Words + + + True + انسآن + انسان + Normal + OCR - Replace Words + + + True + شرابها + شراب‌ها + Normal + OCR - Replace Words + + + True + اقای + آقای + Normal + OCR - Replace Words + + + True + اوردی + آوردی + Normal + OCR - Replace Words + + + True + ازمایش + آزمایش + Normal + OCR - Replace Words + + + True + اماده + آماده + Normal + OCR - Replace Words + + + True + \bاینده + آینده + RegularExpression + OCR - Replace Words + + + True + درامد + درآمد + Normal + OCR - Replace Words + + + True + انها + آنها + Normal + OCR - Replace Words + + + True + اسیب + آسیب + Normal + OCR - Replace Words + + + True + ادمها + آدم‌ها + Normal + OCR - Replace Words + + + True + ادم‌ها + آدم‌ها + Normal + OCR - Replace Words + + + True + اسمون + آسمون + Normal + OCR - Replace Words + + + True + اسمان + آسمان + Normal + OCR - Replace Words + + + True + اهسته + آهسته + Normal + OCR - Replace Words + + + True + اره، + آره، + Normal + OCR - Replace Words + + + True + \Aاره، + آره، + RegularExpression + OCR - Replace Words + + + True + \r\nاره، + \nآره، + RegularExpression + OCR - Replace Words + + + True + اره. + آره. + Normal + OCR - Replace Words + + + True + \Aاره\. + آره. + RegularExpression + OCR - Replace Words + + + True + \r\nاره\. + \nآره. + RegularExpression + OCR - Replace Words + + + True + \Aاره + آره + RegularExpression + OCR - Replace Words + + + True + \r\nاره + \nآره + RegularExpression + OCR - Replace Words + + + True + اره\z + آره + RegularExpression + OCR - Replace Words + + + True + اره\r\n + آره\n + RegularExpression + OCR - Replace Words + + + True + \Aاره\z + آره + RegularExpression + OCR - Replace Words + + + True + جمع اوری + جمع‌آوری + Normal + OCR - Replace Words + + + True + افتاد + اُفتاد + Normal + OCR - Replace Words + + + True + اخرین + آخرین + Normal + OCR - Replace Words + + + True + اخر + آخر + Normal + OCR - Replace Words + + + True + اخرش + آخرش + Normal + OCR - Replace Words + + + True + اخری + آخری + Normal + OCR - Replace Words + + + True + افریقا + آفریقا + Normal + OCR - Replace Words + + + True + اشیانه + آشیانه + Normal + OCR - Replace Words + + + True + اب + آب + Normal + OCR - Replace Words + + + True + اتیش + آتیش + Normal + OCR - Replace Words + + + True + اتش + آتش + Normal + OCR - Replace Words + + + True + اتش، + آتش، + Normal + OCR - Replace Words + + + True + اتش. + آتش. + Normal + OCR - Replace Words + + + True + \Aاتش + آتش + RegularExpression + OCR - Replace Words + + + True + ادم + آدم + Normal + OCR - Replace Words + + + True + ادمی + آدمی + Normal + OCR - Replace Words + + + True + اروم + آروم + Normal + OCR - Replace Words + + + True + ارام + آرام + Normal + OCR - Replace Words + + + True + اخه + آخه + Normal + OCR - Replace Words + + + True + اخه. + آخه. + Normal + OCR - Replace Words + + + True + اخه، + آخه، + Normal + OCR - Replace Words + + + True + \Aاخه\. + آخه. + RegularExpression + OCR - Replace Words + + + True + \r\nاخه\. + \nآخه. + RegularExpression + OCR - Replace Words + + + True + \Aاخه، + آخه، + RegularExpression + OCR - Replace Words + + + True + \r\nاخه، + \nآخه، + RegularExpression + OCR - Replace Words + + + True + اخه\z + آخه + RegularExpression + OCR - Replace Words + + + True + اخه\r\n + آخه\n + RegularExpression + OCR - Replace Words + + + True + ادامس + آدامس + Normal + OCR - Replace Words + + + True + ازار + آزار + Normal + OCR - Replace Words + + + True + ازاد + آزاد + Normal + OCR - Replace Words + + + True + ارزو + آرزو + Normal + OCR - Replace Words + + + True + ارزوی + آرزوی + Normal + OCR - Replace Words + + + True + \Aارزوی + آرزوی + RegularExpression + OCR - Replace Words + + + True + \r\nارزوی + \nآرزوی + RegularExpression + OCR - Replace Words + + + True + اکواریوم + آکواریوم + Normal + OCR - Replace Words + + + True + اغاز + آغاز + Normal + OCR - Replace Words + + + True + وآسمون + واسمون + Normal + OCR - Replace Words + + + True + بیفتین + بیاُفتین + Normal + OCR - Replace Words + + + True + نیآورد + نیاورد + Normal + OCR - Replace Words + + + True + شمارو + شما رو + Normal + OCR - Replace Words + + + True + روبه رو + روبه‌رو + Normal + OCR - Replace Words + + + True + روبه‌رومون + روبه‌رو مون + Normal + OCR - Replace Words + + + True + بیفته + بیاُفته + Normal + OCR - Replace Words + + + True + میفتم + میاُفتم + Normal + OCR - Replace Words + + + True + نیفتاده + نیاُفتاده + Normal + OCR - Replace Words + + + True + بیُفت + بیاُفت + Normal + OCR - Replace Words + + + True + نیفتاد + نیاُفتاد + Normal + OCR - Replace Words + + + True + میُفتن + میاُفتن + Normal + OCR - Replace Words + + + True + میفتیم + میاُفتیم + Normal + OCR - Replace Words + + + True + لعنتیها + لعنتی‌ها + Normal + OCR - Replace Words + + + True + روسها + روس‌ها + Normal + OCR - Replace Words + + + True + چشمها + چشم‌ها + Normal + OCR - Replace Words + + + True + میفتاد + میاُفتاد + Normal + OCR - Replace Words + + + True + میآ + میا + Normal + OCR - Replace Words + + + True + بیفت، + بیاُفت، + Normal + OCR - Replace Words + + + True + میفته + میاُفته + Normal + OCR - Replace Words + + + True + میفتن + میاُفتن + Normal + OCR - Replace Words + + + True + بیفتی + بیاُفتی + Normal + OCR - Replace Words + + + True + ناشنآسمون + ناشناسمون + Normal + OCR - Replace Words + + + True + بیوفتم + بیاُفتم + Normal + OCR - Replace Words + + + True + خوشآینده + خوشاینده + Normal + OCR - Replace Words + + + True + نیفته + نیاُفته + Normal + OCR - Replace Words + + + True + بیفتن + بیاُفتن + Normal + OCR - Replace Words + + + True + مثه + مثل + Normal + OCR - Replace Words + + + True + دیوونم + دیونم + Normal + OCR - Replace Words + + + True + هارو + ها رو + Normal + OCR - Replace Words + + + True + بمن + به من + Normal + OCR - Replace Words + + + True + کار روان + کاروان + Normal + OCR - Replace Words + + + True + کاپینان + کاپیتان + Normal + OCR - Replace Words + + + True + بیوفت + بیاُفت + Normal + OCR - Replace Words + + + True + اوردم + آوردم + Normal + OCR - Replace Words + + + True + انسآنها + انسان‌ها + Normal + OCR - Replace Words + + + True + انسآنهای + انسان‌های + Normal + OCR - Replace Words + + + True + پآینده + پاینده + Normal + OCR - Replace Words + + + True + می‌آیی + میایی + Normal + OCR - Replace Words + + + True + اتفآق + اتفاق + Normal + OCR - Replace Words + + + True + می گن + میگن + Normal + OCR - Replace Words + + + True + می گم + میگم + Normal + OCR - Replace Words + + + True + می دم + میدم + Normal + OCR - Replace Words + + + True + تفنگها + تفنگ‌ها + Normal + OCR - Replace Words + + + True + می گم + میگم + Normal + OCR - Replace Words + + + True + فن آوری + فناوری + Normal + OCR - Replace Words + + + True + تحقیقآت + تحقیقات + Normal + OCR - Replace Words + + + True + تحقیقآتیش + تحقیقاتیش + Normal + OCR - Replace Words + + + True + تورو + تو رو + Normal + OCR - Replace Words + + + True + تورو + تو رو + Normal + OCR - Replace Words + + + True + آقآیان + آقایان + Normal + OCR - Replace Words + + + True + اقآیان + آقایان + Normal + OCR - Replace Words + + + True + نآشیانه + ناشیانه + Normal + OCR - Replace Words + + + True + شگفت انگیر + شگفت انگیز + Normal + OCR - Replace Words + + + + Remove Leading Dots + True + + False + \\\\ (Remove Leading Dots) \\\\ + \\\\ (Remove Leading Dots) \\\\ + CaseSensitive + Remove Leading Dots + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4$5$6$7$8 + RegularExpression + Remove Leading Dots: One Line (1) + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4$5$6$7 + RegularExpression + Remove Leading Dots: One Line (2) + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$4$5$6 + RegularExpression + Remove Leading Dots: One Line (3) + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)\z + $1$2$4$5 + RegularExpression + Remove Leading Dots: One Line (4) + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*\z + $1$2$4 + RegularExpression + Remove Leading Dots: One Line (5) + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$4$5$6$7$8$9 + RegularExpression + Remove Leading Dots: At 1st Line (1) + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$4$5$6$7$8 + RegularExpression + Remove Leading Dots: At 1st Line (2) + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$4$5$6$7 + RegularExpression + Remove Leading Dots: At 1st Line (3) + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\r\n) + $1$2$4$5$6 + RegularExpression + Remove Leading Dots: At 1st Line (4) + + + True + \A(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\r\n) + $1$2$4$5 + RegularExpression + Remove Leading Dots: At 1st Line (5) + + + True + (\r\n)(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6$7$8$9 + RegularExpression + Remove Leading Dots: At 2nd Line (1) + + + True + (\r\n)(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6$7$8 + RegularExpression + Remove Leading Dots: At 2nd Line (2) + + + True + (\r\n)(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6$7 + RegularExpression + Remove Leading Dots: At 2nd Line (3) + + + True + (\r\n)(^[^\u202B])(.+)(\.\.\.)([\- ]+)*(\<[^<>]+\>)\z + $1$2$3$5$6 + RegularExpression + Remove Leading Dots: At 2nd Line (4) + + + True + (\r\n)(^[^\u202B])(.+)(\.\.\.)([\- ]+)*\z + $1$2$3$5 + RegularExpression + Remove Leading Dots: At 2nd Line (5) + + + False + \\ With Unicode Control Char \\ + \\ With Unicode Control Char \\ + CaseSensitive + \\ With Unicode Control Char \\ + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)\z + $1$2$3$4$5$6$8 + RegularExpression + UCC_Remove Leading Dots: One Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)\z + $1$2$3$4$5$7 + RegularExpression + UCC_Remove Leading Dots: One Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)\z + $1$2$3$4$6 + RegularExpression + UCC_Remove Leading Dots: One Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)\z + $1$2$3$5 + RegularExpression + UCC_Remove Leading Dots: One Line (4) + + + True + \A(^[\u202B])(\.\.\.)(.+)\z + $1$3 + RegularExpression + UCC_Remove Leading Dots: One Line (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)(\r\n) + $1$2$3$4$5$6$8$9 + RegularExpression + UCC_Remove Leading Dots: At 1st Line (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)(\r\n) + $1$2$3$4$5$7$8 + RegularExpression + UCC_Remove Leading Dots: At 1st Line (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)(\r\n) + $1$2$3$4$6$7 + RegularExpression + UCC_Remove Leading Dots: At 1st Line (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)(\r\n) + $1$2$3$5$6 + RegularExpression + UCC_Remove Leading Dots: At 1st Line (4) + + + True + \A(^[\u202B])(\.\.\.)(.+)(\r\n) + $1$3$4 + RegularExpression + UCC_Remove Leading Dots: At 1st Line (5) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)\z + $1$2$3$4$5$6$7$9 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line (1) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)\z + $1$2$3$4$5$6$8 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line (2) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)\z + $1$2$3$4$5$7 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line (3) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])(\.\.\.)(.+)\z + $1$2$3$4$6 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line (4) + + + True + (\r\n)(^[\u202B])(\.\.\.)(.+)\z + $1$2$4 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1$2$3$4$5$6- $9 + RegularExpression + UCC_Remove Leading Dots: One Line - (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1$2$3$4$5- $8 + RegularExpression + UCC_Remove Leading Dots: One Line - (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1$2$3$4- $7 + RegularExpression + UCC_Remove Leading Dots: One Line - (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1$2$3- $6 + RegularExpression + UCC_Remove Leading Dots: One Line - (4) + + + True + \A(^[\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1- $4 + RegularExpression + UCC_Remove Leading Dots: One Line - (5) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)(\r\n) + $1$2$3$4$5$6- $9$10 + RegularExpression + UCC_Remove Leading Dots: At 1st Line - (1) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)(\r\n) + $1$2$3$4$5- $8$9 + RegularExpression + UCC_Remove Leading Dots: At 1st Line - (2) + + + True + \A(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)(\r\n) + $1$2$3$4- $7$8 + RegularExpression + UCC_Remove Leading Dots: At 1st Line - (3) + + + True + \A(^[\u202B])(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)(\r\n) + $1$2$3- $6$7 + RegularExpression + UCC_Remove Leading Dots: At 1st Line - (4) + + + True + \A(^[\u202B])([\- ]+)+(\.\.\.)(.+)(\r\n) + $1- $4$5 + RegularExpression + UCC_Remove Leading Dots: At 1st Line - (5) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1$2$3$4$5$6$7- $10 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line - (1) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1$2$3$4$5$6- $9 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line - (2) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1$2$3$4$5- $8 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line - (3) + + + True + (\r\n)(^[\u202B])(\<[^<>]+\>)([\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1$2$3$4- $7 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line - (4) + + + True + (\r\n)(^[\u202B])([\- ]+)+(\.\.\.)(.+)\z + $1$2- $5 + RegularExpression + UCC_Remove Leading Dots: At 2nd Line - (5) + + + + Remove Dot from the End of Line + True + + False + \\\\ (Delete Dot from the End of Line) \\\\ + \\\\ (Delete Dot from the End of Line) \\\\ + CaseSensitive + Delete Dot from the End of Line + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)\z + $1$2$3$4$6$7 + RegularExpression + Delete Dot from the End of Line: One Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)\z + $1$2$3$5$6 + RegularExpression + Delete Dot from the End of Line: One Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)\z + $1$2$4$5 + RegularExpression + Delete Dot from the End of Line: One Line (3) + + + True + \A(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)\z + $1$3$4 + RegularExpression + Delete Dot from the End of Line: One Line (4) + + + True + \A([\. ]{1,2})([^\.])(.+)\z + $2$3 + RegularExpression + Delete Dot from the End of Line: One Line (5) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)(\r\n) + $1$2$3$4$6$7$8 + RegularExpression + Delete Dot from the End of Line: At 1st Line (1) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)(\r\n) + $1$2$3$5$6$7 + RegularExpression + Delete Dot from the End of Line: At 1st Line (2) + + + True + \A(\<[^<>]+\>)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)(\r\n) + $1$2$4$5$6 + RegularExpression + Delete Dot from the End of Line: At 1st Line (3) + + + True + \A(\<[^<>]+\>)([\. ]{1,2})([^\.])([^\.])(.+)(\r\n) + $1$3$4$5$6 + RegularExpression + Delete Dot from the End of Line: At 1st Line (4) + + + True + \A([\. ]{1,2})([^\.])(.+)(\r\n) + $2$3$4 + RegularExpression + Delete Dot from the End of Line: At 1st Line (5) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)\z + $1$2$3$4$5$7$8 + RegularExpression + Delete Dot from the End of Line: At 2nd Line (1) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)\z + $1$2$3$4$6$7 + RegularExpression + Delete Dot from the End of Line: At 2nd Line (2) + + + True + (\r\n)(\<[^<>]+\>)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)\z + $1$2$3$5$6 + RegularExpression + Delete Dot from the End of Line: At 2nd Line (3) + + + True + (\r\n)(\<[^<>]+\>)([\. ]{1,2})([^\.])(.+)\z + $1$2$4$5 + RegularExpression + Delete Dot from the End of Line: At 2nd Line (4) + + + True + (\r\n)([\. ]{1,2})([^\.])(.+)\z + $1$3$4 + RegularExpression + Delete Dot from the End of Line: At 2nd Line (5) + + + False + \\ With Unicode Control Char \\ + \\ With Unicode Control Char \\ + CaseSensitive + \\ With Unicode Control Char \\ + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6$7$8 + RegularExpression + UCC_Delete Dot from the End of Line: One Line (1) + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6$7 + RegularExpression + UCC_Delete Dot from the End of Line: One Line (2) + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$5$6 + RegularExpression + UCC_Delete Dot from the End of Line: One Line (3) + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)\z + $1$2$3$5 + RegularExpression + UCC_Delete Dot from the End of Line: One Line (4) + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})\z + $1$2$3 + RegularExpression + UCC_Delete Dot from the End of Line: One Line (5) + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$5$6$7$8$9 + RegularExpression + UCC_Delete Dot from the End of Line: At 1st Line (1) + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$5$6$7$8 + RegularExpression + UCC_Delete Dot from the End of Line: At 1st Line (2) + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\r\n) + $1$2$3$5$6$7 + RegularExpression + UCC_Delete Dot from the End of Line: At 1st Line (3) + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\r\n) + $1$2$3$5$6 + RegularExpression + UCC_Delete Dot from the End of Line: At 1st Line (4) + + + True + \A(^[\u202B])(.+)([^\.])([\. ]{1,2})(\r\n) + $1$2$3$5 + RegularExpression + UCC_Delete Dot from the End of Line: At 1st Line (5) + + + True + (\r\n)(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$7$8$9 + RegularExpression + UCC_Delete Dot from the End of Line: At 2nd Line (1) + + + True + (\r\n)(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$7$8 + RegularExpression + UCC_Delete Dot from the End of Line: At 2nd Line (2) + + + True + (\r\n)(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)(\<[^<>]+\>)\z + $1$2$3$4$6$7 + RegularExpression + UCC_Delete Dot from the End of Line: At 2nd Line (3) + + + True + (\r\n)(^[\u202B])(.+)([^\.])([\. ]{1,2})(\<[^<>]+\>)\z + $1$2$3$4$6 + RegularExpression + UCC_Delete Dot from the End of Line: At 2nd Line (4) + + + True + (\r\n)(^[\u202B])(.+)([^\.])([\. ]{1,2})\z + $1$2$3$4 + RegularExpression + UCC_Delete Dot from the End of Line: At 2nd Line (5) + + + + \ No newline at end of file diff --git a/se5/PersianErrors/plugin.json b/se5/PersianErrors/plugin.json new file mode 100644 index 00000000..90641e68 --- /dev/null +++ b/se5/PersianErrors/plugin.json @@ -0,0 +1,12 @@ +{ + "apiVersion": 1, + "name": "Persian Subtitle Fixes", + "description": "Fixes common errors in Persian (Farsi) subtitles with 1,500+ rules in 12 groups: Arabic to Persian letters, spaces, zero-width non-joiners (نیم‌فاصله), punctuation, dialog dashes, abbreviations, OCR errors and more. Every change is previewed with highlighted differences and can be picked one by one. Rules by Mohammad Sasan (msasanmh).", + "version": "1.0.0", + "author": "Mohammad Sasan (msasanmh), SE5 port by Subtitle Edit", + "url": "https://github.com/SubtitleEdit/plugins/tree/main/se5/PersianErrors", + "menu": "Tools", + "minSeVersion": "5.0.0", + "runtime": "dotnet", + "entry": "PersianErrors.dll" +}