Updated the Xml Serializing engine to ignore the "Segment, size" tag as well as stripping braces from tag names. Forced the engine to terminate a tag if its the last line processed.
This commit is contained in:
@@ -1,12 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace MKVTest
|
namespace MKVTest
|
||||||
|
|||||||
+56
-81
@@ -1,20 +1,17 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace MKVTest
|
namespace MKVTest
|
||||||
{
|
{
|
||||||
internal class SerializeMkvInfo
|
internal class SerializeMkvInfo
|
||||||
{
|
{
|
||||||
|
public List<string> SerializeFile(string filePath)
|
||||||
public List<String> SerializeFile(string filePath)
|
|
||||||
{
|
{
|
||||||
var file = File.ReadAllLines(filePath);
|
var file = File.ReadAllLines(filePath);
|
||||||
if (file.Length == 0) return new List<string>();
|
if (file.Length == 0) return new List<string>();
|
||||||
var lastDepthLevel = 0;
|
var lastDepthLevel = 0;
|
||||||
|
var paddingOffSet = GetDepth(file[0]);
|
||||||
var xml = new StringBuilder();
|
var xml = new StringBuilder();
|
||||||
var stack = new Stack<XmlTag>();
|
var stack = new Stack<XmlTag>();
|
||||||
var test = new List<string>();
|
var test = new List<string>();
|
||||||
@@ -23,13 +20,17 @@ namespace MKVTest
|
|||||||
var depth = GetDepth(file[i]);
|
var depth = GetDepth(file[i]);
|
||||||
var tag = CreateTagFromString(file[i]);
|
var tag = CreateTagFromString(file[i]);
|
||||||
var padding = new StringBuilder();
|
var padding = new StringBuilder();
|
||||||
for (var j = depth; j != 0; j--)
|
for (var j = depth - paddingOffSet; j > 0; j--)
|
||||||
{
|
{
|
||||||
padding.Append(" ");
|
padding.Append(" ");
|
||||||
}
|
}
|
||||||
|
if (i == file.Length - 1)
|
||||||
|
{
|
||||||
|
test[test.Count - 1] = padding + "<" + tag.Name + ">" + tag.Value + "</" + tag.Name + ">";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
//xml.Append(padding + "<" + tag.Name + ">" + tag.Value == string.Empty ? Environment.NewLine : string.Empty);
|
//xml.Append(padding + "<" + tag.Name + ">" + tag.Value == string.Empty ? Environment.NewLine : string.Empty);
|
||||||
test.Add(padding + "<" + tag.Name + ">");
|
//test.Add(padding + "<" + tag.Name + ">");
|
||||||
//if (stack.Count != 0)
|
//if (stack.Count != 0)
|
||||||
//{
|
//{
|
||||||
// var t = stack.Pop();
|
// var t = stack.Pop();
|
||||||
@@ -40,22 +41,9 @@ namespace MKVTest
|
|||||||
{
|
{
|
||||||
if (stack.Count != 0)
|
if (stack.Count != 0)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(stack.Peek().Value))
|
var t = stack.Pop();
|
||||||
{
|
test[test.Count - 1] = padding + test[test.Count - 1] + t.Value + "</" + t.Name + ">";
|
||||||
var t = stack.Pop();
|
|
||||||
//xml.Append(t.Value + "</" + t.Name + ">");
|
|
||||||
test[test.Count - 1] = test[test.Count - 1] + (tag.Value + "</") + tag.Name + ">";
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var t = stack.Pop();
|
|
||||||
test.Insert(i, padding + "</" + t.Name + ">");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//xml.Append("<" + tag.Name + ">");
|
|
||||||
//test.Add("<" + tag.Name + ">");
|
|
||||||
}
|
}
|
||||||
else if (depth < lastDepthLevel)
|
else if (depth < lastDepthLevel)
|
||||||
{
|
{
|
||||||
@@ -63,39 +51,41 @@ namespace MKVTest
|
|||||||
if (stack.Count != 0)
|
if (stack.Count != 0)
|
||||||
{
|
{
|
||||||
var t = stack.Pop();
|
var t = stack.Pop();
|
||||||
//xml.Append(t.Value + "</" + t.Name + ">");
|
test[test.Count - 1] = padding + "<" + t.Name + ">" + t.Value + "</" + t.Name + ">";
|
||||||
test[test.Count - 1] = test[test.Count - 1] + (tag.Value + "</") + tag.Name + ">";
|
var diff = lastDepthLevel - depth;
|
||||||
continue;
|
var subPadding = new StringBuilder();
|
||||||
}
|
for (var j = 0; j < diff; j++)
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (stack.Count != 0 && i != 0)
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrEmpty(stack.Peek().Value))
|
|
||||||
{
|
{
|
||||||
var t = stack.Pop();
|
subPadding.Clear();
|
||||||
//xml.Append(t.Value + "</" + t.Name + ">");
|
for (var k = padding.Length - j; k != 0; k--)
|
||||||
test.Add(t.Value + "</" + t.Name + ">");
|
{
|
||||||
|
subPadding.Append(" ");
|
||||||
|
}
|
||||||
|
if (stack.Count != 0)
|
||||||
|
{
|
||||||
|
test.Add(subPadding + "</" + stack.Pop().Name + ">");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
test[test.Count - 1] = test[test.Count - 1] + (tag.Value + "</") + tag.Name + ">";
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(tag.Name != string.Empty) test.Add(padding + "<" + tag.Name + ">");
|
||||||
stack.Push(tag);
|
stack.Push(tag);
|
||||||
lastDepthLevel = depth;
|
lastDepthLevel = depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return test;
|
return test;
|
||||||
}
|
}
|
||||||
|
|
||||||
private XmlTag CreateTagFromString(string text, XmlTag parent = null)
|
private static XmlTag CreateTagFromString(string text, XmlTag parent = null)
|
||||||
{
|
{
|
||||||
var tag = new XmlTag();
|
var tag = new XmlTag();
|
||||||
var clearingPadding = true;
|
var clearingPadding = true;
|
||||||
var foundDelimiter = false;
|
var foundDelimiter = false;
|
||||||
|
var insideBraces = false;
|
||||||
var name = new StringBuilder();
|
var name = new StringBuilder();
|
||||||
var value = new StringBuilder();
|
var value = new StringBuilder();
|
||||||
|
|
||||||
@@ -115,14 +105,32 @@ namespace MKVTest
|
|||||||
clearingPadding = false;
|
clearingPadding = false;
|
||||||
if (foundDelimiter)
|
if (foundDelimiter)
|
||||||
{
|
{
|
||||||
|
if (insideBraces && text[i] == ')')
|
||||||
|
{
|
||||||
|
insideBraces = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
value.Append(text[i]);
|
value.Append(text[i]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
name.Append(text[i]);
|
if (text[i] == '(')
|
||||||
|
{
|
||||||
|
insideBraces = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(text[i] == ')')
|
||||||
|
{
|
||||||
|
insideBraces = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(!insideBraces) name.Append(text[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (text.Contains("Segment, "))
|
||||||
|
{
|
||||||
|
name.Clear();
|
||||||
|
}
|
||||||
tag.Name = FormatTagName(name.ToString());
|
tag.Name = FormatTagName(name.ToString());
|
||||||
tag.Value = value.ToString().Trim();
|
tag.Value = value.ToString().Trim();
|
||||||
tag.Parent = parent;
|
tag.Parent = parent;
|
||||||
@@ -130,8 +138,9 @@ namespace MKVTest
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string FormatTagName(string text)
|
private static string FormatTagName(string text)
|
||||||
{
|
{
|
||||||
|
if (text.Length == 0) return string.Empty;
|
||||||
var name = new StringBuilder();
|
var name = new StringBuilder();
|
||||||
var previousCharWasWhiteSpace = false;
|
var previousCharWasWhiteSpace = false;
|
||||||
|
|
||||||
@@ -152,8 +161,9 @@ namespace MKVTest
|
|||||||
return name.ToString();
|
return name.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private int GetDepth(string line)
|
private static int GetDepth(string line)
|
||||||
{
|
{
|
||||||
|
if (line.Length == 0) return -1;
|
||||||
var depth = 0;
|
var depth = 0;
|
||||||
|
|
||||||
for (var i = 0; i < line.Length; i++)
|
for (var i = 0; i < line.Length; i++)
|
||||||
@@ -170,40 +180,5 @@ namespace MKVTest
|
|||||||
|
|
||||||
return depth;
|
return depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsClusterHead(string data)
|
|
||||||
{
|
|
||||||
var isClusterHeader = false;
|
|
||||||
|
|
||||||
switch (data)
|
|
||||||
{
|
|
||||||
case "EBML head":
|
|
||||||
|
|
||||||
break;
|
|
||||||
case "Chapters":
|
|
||||||
|
|
||||||
break;
|
|
||||||
case "Segment":
|
|
||||||
|
|
||||||
break;
|
|
||||||
case "Segment information":
|
|
||||||
|
|
||||||
break;
|
|
||||||
case "Segment tracks":
|
|
||||||
|
|
||||||
break;
|
|
||||||
case "A track":
|
|
||||||
|
|
||||||
break;
|
|
||||||
case "Video track":
|
|
||||||
|
|
||||||
break;
|
|
||||||
case "Audio track":
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return isClusterHeader;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user