コード例 #1
0
ファイル: TaskController.cs プロジェクト: simonkpark/tasklist
        //ILinkValidator linkValidator = null
        public Task(string task, DateTime today, ILinkValidator linkValidator = null)
        {
            Description = task;
            var dueDatePattern = new Regex(@"(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s(\d+)");
            var hasDueDate = dueDatePattern.IsMatch(task);

            if (hasDueDate)
            {
                var dueDate = dueDatePattern.Match(task);
                var monthInput = dueDate.Groups[1].Value;

                var year = today.Year;
                var month = DateTime.ParseExact(monthInput, "MMM", CultureInfo.CurrentCulture).Month;
                var day = Convert.ToInt32(dueDate.Groups[2].Value);

                var shouldWrapYear = month < today.Month || (month == today.Month && day < today.Day);
                if (shouldWrapYear)
                    year++;

                if (day <= DateTime.DaysInMonth(year, month))
                {
                    DueDate = new DateTime(year, month, day);
                }
            }

            var linkPattern = new Regex(@"(http://[^\s]+)");
            var hasLink = linkPattern.IsMatch(task);

            if (hasLink)
            {
                var link = linkPattern.Match(task).Groups[1].Value;
                linkValidator.Validate(link);
                Link = link;
            }
        }
コード例 #2
0
        public Task(string task, DateTime today, ILinkValidator linkValidator = null)
        {
            Description = task;
            var pattern = new Regex(@"(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s(\d{1,2})");

            if (pattern.IsMatch(task))
            {
                var match  = pattern.Match(task);
                var month  = match.Groups[1].Value;
                var mValue = DateTime.ParseExact(month, "MMM", CultureInfo.CurrentCulture).Month;
                var day    = Convert.ToInt32(match.Groups[2].Value);
                var year   = today.Year;
                if (mValue < today.Month ||
                    (mValue == today.Month && day < today.Day))
                {
                    year++;
                }
                if (day <= DateTime.DaysInMonth(year, mValue))
                {
                    DueDate = new DateTime(year, mValue, day);
                }
            }

            var linkpattern = new Regex(@"(http://[^\s]+)");

            if (linkpattern.IsMatch(task))
            {
                var link = linkpattern.Match(task).Groups[1].Value;
                linkValidator.Validate(link);
                Link = link;
            }
        }
コード例 #3
0
ファイル: LInkService.cs プロジェクト: NBakulin/DBShell
 public LInkService(
     IRepository <Link> linkRepository,
     IRepository <Attribute> attributeRepository,
     IRepository <Table> tableRepository,
     ILinkValidator linkValidator,
     IAttributeService attributeService)
 {
     _linkRepository      = linkRepository;
     _attributeRepository = attributeRepository;
     _tableRepository     = tableRepository;
     _linkValidator       = linkValidator;
     _attributeService    = attributeService;
 }
コード例 #4
0
        public Task(string task, DateTime today, ILinkValidator linkValidator = null)
        {
            Description = task;
            var dueDatePattern = new Regex(@"(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s(\d+)");
            var hasDueDate     = dueDatePattern.IsMatch(task);

            if (hasDueDate)
            {
                var dueDate        = dueDatePattern.Match(task);
                var monthInput     = dueDate.Groups[1].Value;
                var month          = DateTime.ParseExact(monthInput, "MMM", CultureInfo.CurrentCulture).Month;
                var day            = Convert.ToInt32(dueDate.Groups[2].Value);
                var year           = today.Year;
                var shouldWrapYear = month < today.Month || (month == today.Month && day < today.Day);
                if (shouldWrapYear)
                {
                    year++;
                }
                if (day <= DateTime.DaysInMonth(year, month))
                {
                    DueDate = new DateTime(year, month, day);
                }
            }

            var priorityPattern = new Regex(@"!(\d)");
            var hasPriority     = priorityPattern.IsMatch(task);

            if (hasPriority)
            {
                var priority = priorityPattern.Match(task);
                Priority = priority.Groups[1].Value;
            }
            else
            {
                Priority = "Not Set";
            }

            var linkPattern = new Regex(@"(http://[^\s]+)");
            var hasLink     = linkPattern.IsMatch(task);

            if (hasLink)
            {
                var link = linkPattern.Match(task).Groups[1].Value;
                linkValidator.Validate(link);
                Link = link;
            }
        }
コード例 #5
0
        public static async Task <int> WriteResultsAsync(TextWriter writer, MarkdownLinksVerifierConfiguration config, string?rootDirectory = null)
        {
            if (writer is null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (config is null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            var returnCode = 0;

            rootDirectory ??= Directory.GetCurrentDirectory();
            await writer.WriteLineAsync($"Starting Markdown Links Verifier in '{rootDirectory}'.");

            foreach (string file in Directory.EnumerateFiles(rootDirectory, "*.md", SearchOption.AllDirectories))
            {
                string?directory = Path.GetDirectoryName(file);
                if (directory is null)
                {
                    throw new InvalidOperationException($"Cannot get directory for '{file}'.");
                }

                MarkdownDocument document = Markdown.Parse(await File.ReadAllTextAsync(file));
                foreach (LinkInline link in document.Descendants <LinkInline>())
                {
                    LinkClassification classification = Classifier.Classify(link.Url);
                    ILinkValidator     validator      = LinkValidatorCreator.Create(classification, directory);
                    if (!config.IsLinkExcluded(link.Url) && !validator.IsValid(link.Url, file))
                    {
                        await writer.WriteLineAsync($"::error::In file '{file}': Invalid link: '{link.Url}' relative to '{directory}'.");

                        returnCode = 1;
                    }
                }
            }

            return(returnCode);
        }