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:
2017-09-01 22:09:00 -05:00
parent 407a183da4
commit 03308e68b2
2 changed files with 56 additions and 87 deletions
-6
View File
@@ -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
View File
@@ -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;
}
} }
} }