コード例 #1
0
        public static void Dump(string Script, string Output)
        {
            Console.WriteLine("Dumping: {0}", Path.GetFileName(Script));
            ParserWrapper Parser = new ParserWrapper(Script);

            File.WriteAllLines(Output, Parser.Import());
        }
コード例 #2
0
ファイル: Main.cs プロジェクト: MikhailoMMX/AspectMarkup
        private static void TakeSubsetFromFile(string inputFile, int size, bool filter = false)
        {
            AspectManager AM = new AspectManager();
            ParserWrapper pw = _parser._pool.GetParserWrapper();

            AM.WorkingAspect = AM.DeserializeAspect(inputFile, pw);
            System.Console.WriteLine("Reading finished");

            List <PointOfInterest> points = AM.WorkingAspect.Items;

            if (filter)
            {
                int AmbigRemoved = 0;
                int AmbigRemains = 0;
                int GoodRemoved  = 0;
                int GoodRemains  = 0;
                for (int i = 0; i < points.Count; ++i)
                {
                    if (points[i]?.Title?.StartsWith("+ ") ?? false)
                    {
                        if (points[i].Title.StartsWith("+ using"))
                        {
                            points.RemoveAt(i);
                            i           -= 1;
                            GoodRemoved += 1;
                        }
                        else
                        {
                            GoodRemains += 1;
                        }
                    }
                    else
                    {
                        if (points[i]?.Title?.StartsWith("using") ?? true)
                        {
                            points.RemoveAt(i);
                            i            -= 1;
                            AmbigRemoved += 1;
                        }
                        else
                        {
                            AmbigRemains += 1;
                        }
                    }
                }
                Console.WriteLine("Removed: " + GoodRemoved + " good, " + AmbigRemoved + " ambiguous results");
                Console.WriteLine("Remains: " + GoodRemains + " good, " + AmbigRemains + " ambiguous results");
            }

            if (points.Count > size)
            {
                Shuffle(points);
                points.RemoveRange(size, points.Count - size);
            }

            AM.SerializeAspect(inputFile, true);
            System.Console.WriteLine("Writing finished");
            _parser._pool.ReleaseParserWrapper(pw);
        }
コード例 #3
0
ファイル: Main.cs プロジェクト: MikhailoMMX/AspectMarkup
        public Parser()
        {
            _pool = new ParserWrapperPool();
            ParserWrapper pw = _pool.GetParserWrapper();

            supportedExtensions = pw.GetParserIDs();
            _pool.ReleaseParserWrapper(pw);
        }
コード例 #4
0
ファイル: Main.cs プロジェクト: MikhailoMMX/AspectMarkup
        internal PointOfInterest Parse(string FileName)
        {
            ParserWrapper   pw       = _pool.GetParserWrapper();
            PointOfInterest TreeRoot = null;

            try
            {
                TreeRoot = pw.ParseFile(FileName);
            }
            catch (Exception e)
            {
                Console.WriteLine(FileName + " " + e.Message);
            }
            _pool.ReleaseParserWrapper(pw);
            return(TreeRoot);
        }
コード例 #5
0
        public static void Insert(string Script, string Dump)
        {
            Console.WriteLine("Importing: {0}", Path.GetFileName(Script));
            var Lines = File.ReadAllLines(Dump);

            ParserWrapper Parser   = new ParserWrapper(Script);
            var           Original = Parser.Import();

            if (Math.Abs(Lines.Length - Original.Length) > 1)
            {
                throw new Exception("Dump Length Missmatch");
            }

            var tmp = new string[Original.Length];

            for (int i = 0; i < tmp.Length; i++)
            {
                tmp[i] = i >= Lines.Length ? Original[i] : Lines[i];
            }

            Parser.Export(tmp);
        }
コード例 #6
0
ファイル: Main.cs プロジェクト: MikhailoMMX/AspectMarkup
        private static void ProcessInputFile(string BaseDir, string inputFile)
        {
            AspectManager AM = new AspectManager();
            ParserWrapper pw = _parser._pool.GetParserWrapper();

            AM.WorkingAspect = AM.DeserializeAspect(inputFile, pw);
            _parser._pool.ReleaseParserWrapper(pw);
            int             TotalNodes = AM.WorkingAspect.Items.Count;
            int             NotFound   = 0;
            int             Errors     = 0;
            int             Found      = 0;
            int             NotChanged = 0;
            TreeManager     TM         = new TreeManager();
            PointOfInterest NewAspect  = new PointOfInterest();
            Semaphore       S          = new Semaphore(1, 1);
            int             counter    = 0;

            Parallel.For(0, AM.WorkingAspect.Items.Count, (i) =>
                         //for (int i = 0; i < AM.WorkingAspect.Items.Count; ++i)
            {
                Interlocked.Increment(ref counter);
                if (counter % 10 == 0)
                {
                    S.WaitOne();
                    Console.Write("\rNodes left: " + (AM.WorkingAspect.Items.Count - counter) + "        ");
                    S.Release();
                }
                try
                {
                    PointOfInterest Pt      = AM.WorkingAspect.Items[i];
                    PointOfInterest Root    = TM.GetTree(BaseDir + Pt.FileName);
                    string text             = TM.GetText(BaseDir + Pt.FileName);
                    TreeSearchResult Search = TreeSearchEngine.FindPointInTree2(Root, Pt, text);
                    if (Search.Count == 0)
                    {
                        Interlocked.Increment(ref NotFound);
                    }
                    else if (Search.Singular)
                    {
                        if (Search.GetNodeSimilarity(0) == 1)
                        {
                            Interlocked.Increment(ref NotChanged);
                            return;
                            //continue;
                        }
                        else
                        {
                            Interlocked.Increment(ref Found);
                            AM.WorkingAspect.Items[i].Title = "+ " + AM.WorkingAspect.Items[i].Title;
                        }
                    }
                    else
                    {
                        if (Search.Count >= 2)
                        {
                            float d1 = 1 - Search.GetNodeSimilarity(0);
                            float d2 = 1 - Search.GetNodeSimilarity(1);
                            //float near = Math.Max(Pt.NearG, Pt.NearL);
                            //float threshold = ((near + 4) / 5 + 1) /2 ; //hardcoded
                            //if (Search.GetNodeSimilarity(0) >= threshold && Search.GetNodeSimilarity(1) < threshold)
                            if (d2 != 0 && d2 >= d1 * 2)
                            {
                                Interlocked.Increment(ref Found);
                                AM.WorkingAspect.Items[i].Title = "+ " + AM.WorkingAspect.Items[i].Title;
                                //return;
                                //continue;
                            }
                        }
                    }
                    S.WaitOne();
                    NewAspect.Items.Add(AM.WorkingAspect.Items[i]);
                    S.Release();
                }
                catch (Exception e)
                {
                    S.WaitOne();
                    Console.WriteLine(e.Message);
                    Errors += 1;
                    S.Release();
                }
            }
                         );
            AM.WorkingAspect = NewAspect;
            int Ambiguous = AM.WorkingAspect.Items.Count - Found;

            AM.SerializeAspect(inputFile, true);
            File.WriteAllText(inputFile + ".report.txt", "Total: " + TotalNodes + ", Not changed: " + NotChanged + ", found: " + Found + ", Not found: " + NotFound + ", errors: " + Errors + ", ambiguous: " + Ambiguous);
            Console.Write("\rNodes left: 0        ");
            Console.WriteLine();
        }