From 7d88746e8df6fd5d5cc0a00f0473a939c643a439 Mon Sep 17 00:00:00 2001 From: Waldi Ravens Date: Thu, 14 Apr 2016 00:46:56 +0200 Subject: [PATCH] Fixed #1676: use language index from IDX file (VobSub/Idx) --- libse/VobSub/Idx.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/libse/VobSub/Idx.cs b/libse/VobSub/Idx.cs index 37e5afaa2..a61d9f756 100644 --- a/libse/VobSub/Idx.cs +++ b/libse/VobSub/Idx.cs @@ -22,6 +22,7 @@ namespace Nikse.SubtitleEdit.Core.VobSub public Idx(string[] lines) { + int languageIndex = 0; foreach (string line in lines) { if (_timeCodeLinePattern.IsMatch(line)) @@ -43,11 +44,10 @@ namespace Nikse.SubtitleEdit.Core.VobSub { //id: en, index: 1 //id: es, index: 2 - string s = line.Substring("id:".Length + 1); - string[] parts = s.Split(new[] { ':', ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); - if (parts.Length > 0) + var parts = line.Split(new[] { ':', ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); + if (parts.Length > 1) { - string twoLetterLanguageId = parts[0]; + string twoLetterLanguageId = parts[1]; string nativeName; if (IfoParser.LanguageCodes.Contains(twoLetterLanguageId)) { @@ -64,8 +64,15 @@ namespace Nikse.SubtitleEdit.Core.VobSub nativeName = "Unknown (" + twoLetterLanguageId + ")"; } } + if (parts.Length > 3 && parts[2].Equals("index", StringComparison.OrdinalIgnoreCase)) + { + int index; + if (int.TryParse(parts[3], out index)) + languageIndex = index; + } // Use U+200E (LEFT-TO-RIGHT MARK) to support right-to-left scripts - Languages.Add(string.Format("{0} \x200E(0x{1:x})", nativeName, Languages.Count + 32)); + Languages.Add(string.Format("{0} \x200E(0x{1:x})", nativeName, languageIndex + 32)); + languageIndex++; } } }