Beispiel #1
0
        public static ClassifiedRange[] PrepareRanges(
            ClassifiedRange[] syntacticRanges,
            ClassifiedRange[] semanticRanges,
            string text)
        {
            foreach (var range in semanticRanges)
            {
                range.IsSemantic = true;
            }

            var rangesSortedByStart = syntacticRanges
                                      .Concat(semanticRanges)
                                      .Where(r => r.length > 0)
                                      .OrderBy(r => r.start)
                                      .ToArray();

            var midpoints = rangesSortedByStart
                            .Select(r => r.start)
                            .Concat(
                rangesSortedByStart
                .Select(r => r.end))
                            .Distinct()
                            .OrderBy(n => n)
                            .ToArray();

            var ranges = RemoveIntersectingRanges(
                text,
                rangesSortedByStart,
                midpoints);

            ranges = RemoveOverlappingRanges(
                text,
                ranges);

            ranges = RangeUtilities.FillGaps(
                text,
                ranges,
                r => r.start,
                r => r.length,
                (s, l, t) => new ClassifiedRange(t, s, l));

            foreach (var range in ranges)
            {
                if (range.text == null)
                {
                    range.text = text.Substring(range.start, range.length);
                }
            }

            return(ranges);
        }
        public Task TestSetTimeRangeInStartTextBoxRuRu07Async()
        {
            var start            = 123456.789;
            var initialStartText = RangeUtilities.ToString("1.2,3.4,5.6,7.8,9.0", start.ToString("n3", CultureInfo.CurrentCulture));
            var endStartText     = "0";

            return(TestSetTimeRangeInStartTextBoxImplAsync(
                       initialStartText,
                       null,
                       endStartText,
                       null,
                       "Invalid number " + initialStartText,
                       CultureInfo.CurrentCulture));
        }
        public Task TestSetTimeRangeInStartTextBoxRuRu04Async()
        {
            var start            = 123456.789;
            var initialStartText = RangeUtilities.ToString(start.ToString("n3", CultureInfo.CurrentCulture), "not_a_number");
            var endStartText     = "0";

            return(TestSetTimeRangeInStartTextBoxImplAsync(
                       initialStartText,
                       null,
                       endStartText,
                       null,
                       null,
                       CultureInfo.CurrentCulture));
        }
        public Task TestSetTimeRangeInStartTextBoxRuRu03Async()
        {
            var start            = 123456.789;
            var end              = 234567.890;
            var finalStartText   = start.ToString("n3", CultureInfo.CurrentCulture);
            var finalEndtText    = end.ToString("n3", CultureInfo.CurrentCulture);
            var initialStartText = RangeUtilities.ToString(finalStartText, finalEndtText);

            return(TestSetTimeRangeInStartTextBoxImplAsync(
                       initialStartText,
                       null,
                       finalStartText, // BUG!
                       finalEndtText,  // BUG
                       null,
                       CultureInfo.CurrentCulture));
        }
        public void Generate(string sourceXmlFilePath, string destinationHtmlFilePath, string solutionDestinationFolder)
        {
            Log.Write(destinationHtmlFilePath);

            this.sourceXmlFilePath       = Path.GetFullPath(sourceXmlFilePath);
            this.destinationHtmlFilePath = destinationHtmlFilePath;

            sourceText = File.ReadAllText(sourceXmlFilePath);
            var lines = File.ReadAllLines(sourceXmlFilePath);

            lineLengths = TextUtilities.GetLineLengths(sourceText);
            var lineCount = lines.Length;
            var root      = Parser.ParseText(sourceText);

            var sb = new StringBuilder();

            var relativePathToRoot = Paths.CalculateRelativePathToRoot(destinationHtmlFilePath, solutionDestinationFolder);

            var prefix = Markup.GetDocumentPrefix(Path.GetFileName(sourceXmlFilePath), relativePathToRoot, lineCount, "ix");

            sb.Append(prefix);

            var displayName  = GetDisplayName();
            var assemblyName = GetAssemblyName();

            var url = "/#" + assemblyName + "/" + displayName.Replace('\\', '/');

            var file = string.Format("File: <a id=\"filePath\" class=\"blueLink\" href=\"{0}\" target=\"_top\">{1}</a><br/>", url, displayName);
            var row  = string.Format("<tr><td>{0}</td></tr>", file);

            Markup.WriteLinkPanel(s => sb.AppendLine(s), row);

            // pass a value larger than 0 to generate line numbers statically at HTML generation time
            var table = Markup.GetTablePrefix();

            sb.AppendLine(table);

            var ranges = new List <ClassifiedRange>();

            ClassifierVisitor.Visit(
                root,
                0,
                sourceText.Length,
                (start, length, node, classification) =>
            {
                var line     = TextUtilities.GetLineFromPosition(start, sourceText);
                var lineText = sourceText.Substring(line.Item1, line.Item2);

                ranges.Add(
                    new ClassifiedRange
                {
                    Classification = classification,
                    Node           = node,
                    Text           = sourceText.Substring(start, length),
                    LineText       = lineText,
                    LineStart      = line.Item1,
                    LineNumber     = TextUtilities.GetLineNumber(start, lineLengths),
                    Start          = start,
                    Length         = length
                });
            });

            ranges = RangeUtilities.FillGaps(
                sourceText,
                ranges,
                r => r.Start,
                r => r.Length,
                (s, l, t) => new ClassifiedRange
            {
                Start  = s,
                Length = l,
                Text   = t.Substring(s, l)
            }).ToList();
            foreach (var range in ranges)
            {
                GenerateRange(range, sb);
            }

            var suffix = Markup.GetDocumentSuffix();

            sb.AppendLine(suffix);

            var folder = Path.GetDirectoryName(destinationHtmlFilePath);

            Directory.CreateDirectory(folder);
            File.WriteAllText(destinationHtmlFilePath, sb.ToString());
        }
        /// <summary>
        /// Get values for sphere distance
        /// </summary>
        /// <param name="coordinate"></param>
        /// <returns></returns>
        protected override float getNoiseValueAt(Coordinate coordinate)
        {
            float distance = Math.Abs(sphereCenter.distance(coordinate));

            return(RangeUtilities.ClampToFloat(distance, 0, (int)((sphereRadius) * 1.5f)));
        }
        private string GetHtml(string sourceXmlFilePath, string destinationHtmlFilePath, string displayName)
        {
            var lines = File.ReadAllLines(sourceXmlFilePath);

            lineLengths = sourceText.GetLineLengths();
            var lineCount = lines.Length;

            var sb = new StringBuilder();

            var relativePathToRoot = Paths.CalculateRelativePathToRoot(destinationHtmlFilePath, ProjectGenerator.SolutionGenerator.SolutionDestinationFolder);

            var prefix = Markup.GetDocumentPrefix(Path.GetFileName(sourceXmlFilePath), relativePathToRoot, lineCount, "ix");

            sb.Append(prefix);

            var assemblyName = GetAssemblyName();

            var url = "/#" + assemblyName + "/" + displayName.Replace('\\', '/');

            Markup.WriteLinkPanel(
                s => sb.AppendLine(s),
                fileLink: (displayName, url),
                webAccessUrl: ProjectGenerator.GetWebAccessUrl(sourceXmlFilePath),
                projectLink: (ProjectGenerator.ProjectSourcePath, Url: "/#" + assemblyName, assemblyName));

            // pass a value larger than 0 to generate line numbers statically at HTML generation time
            var table = Markup.GetTablePrefix();

            sb.AppendLine(table);

            if (sourceText.Length > 1000000)
            {
                sb.AppendLine(Markup.HtmlEscape(sourceText));
            }
            else
            {
                var ranges = new List <ClassifiedRange>();

                var root = Parser.ParseText(sourceText);
                ClassifierVisitor.Visit(
                    root,
                    0,
                    sourceText.Length,
                    (start, length, node, classification) =>
                {
                    var line     = TextUtilities.GetLineFromPosition(start, sourceText);
                    var lineText = sourceText.Substring(line.Item1, line.Item2);

                    ranges.Add(
                        new ClassifiedRange
                    {
                        Classification = classification,
                        Node           = node,
                        Text           = sourceText.Substring(start, length),
                        LineText       = lineText,
                        LineStart      = line.Item1,
                        LineNumber     = TextUtilities.GetLineNumber(start, lineLengths),
                        Start          = start,
                        Length         = length
                    });
                });

                ranges = RangeUtilities.FillGaps(
                    sourceText,
                    ranges,
                    r => r.Start,
                    r => r.Length,
                    (s, l, t) => new ClassifiedRange
                {
                    Start  = s,
                    Length = l,
                    Text   = t.Substring(s, l)
                }).ToList();
                foreach (var range in ranges)
                {
                    GenerateRange(range, sb);
                }
            }

            var suffix = Markup.GetDocumentSuffix();

            sb.AppendLine(suffix);
            return(sb.ToString());
        }
 public bool TryParse(string text, out double start, out double end)
 {
     CultureInfo.CurrentCulture = CultureInfo.DefaultThreadCurrentCulture;
     return(RangeUtilities.TryParse(text, out start, out end));
 }
 public string ToString(double start, double end)
 {
     CultureInfo.CurrentCulture = CultureInfo.DefaultThreadCurrentCulture;
     return(RangeUtilities.ToString(start, end));
 }