Esempio n. 1
0
        private async Task Validate(List <string> errors)
        {
            if (SourceFile != null && !MarkdownProjectRoot.FileExists(SourceFile))
            {
                errors.Add($"File not found: {SourceFile.Value}");
            }

            if (string.IsNullOrEmpty(Package) && Project == null)
            {
                errors.Add("No project file or package specified");
            }

            if (Package != null)
            {
                try
                {
                    var package = await PackageRegistry.Find <IPackage>(Package);
                }
                catch (PackageNotFoundException e)
                {
                    errors.Add(e.Message);
                    return;
                }
            }

            if (Project != null)
            {
                var packageName = GetPackageNameFromProjectFile(Project);

                if (packageName == null)
                {
                    errors.Add($"No project file could be found at path {MarkdownProjectRoot.GetFullyQualifiedPath(new RelativeDirectoryPath("."))}");
                }
            }
        }
Esempio n. 2
0
        private string GetDestinationFileAbsolutePath()
        {
            var file = DestinationFile ?? SourceFile;

            return(file == null
                       ? string.Empty
                       : MarkdownProjectRoot
                   .GetFullyQualifiedPath(file)
                   .FullName);
        }
Esempio n. 3
0
        public override async Task <CodeBlockContentFetchResult> TryGetExternalContent()
        {
            string content = null;

            var errors = new List <string>();

            await Validate(errors);

            if (!errors.Any())
            {
                if (SourceFile == null)
                {
                    return(CodeBlockContentFetchResult.None);
                }

                content = MarkdownProjectRoot.ReadAllText(SourceFile);

                if (string.IsNullOrWhiteSpace(Region))
                {
                    return(errors.Any()
                               ? CodeBlockContentFetchResult.Failed(errors)
                               : CodeBlockContentFetchResult.Succeeded(content));
                }

                var sourceText             = SourceText.From(content);
                var sourceFileAbsolutePath = GetSourceFileAbsolutePath();

                var buffers = sourceText.ExtractBuffers(sourceFileAbsolutePath)
                              .Where(b => b.Id.RegionName == Region)
                              .ToArray();

                if (buffers.Length == 0)
                {
                    errors.Add($"Region \"{Region}\" not found in file {sourceFileAbsolutePath}");
                }
                else if (buffers.Length > 1)
                {
                    errors.Add($"Multiple regions found: {Region}");
                }
                else
                {
                    content = buffers[0].Content;
                }
            }

            return(errors.Any()
                       ? CodeBlockContentFetchResult.Failed(errors)
                       : CodeBlockContentFetchResult.Succeeded(content));
        }
Esempio n. 4
0
 private string GetSourceFileAbsolutePath()
 {
     return(MarkdownProjectRoot.GetFullyQualifiedPath(SourceFile).FullName);
 }