public IParseResult Parse(string text)
        {
            var lines = text.Split(
                new[] { Environment.NewLine, "\n" },
                StringSplitOptions.RemoveEmptyEntries);
            var root    = new model.Folder("root");
            var folders = new model.Folder[10];

            folders[0] = root;
            int indent = 0;

            foreach (var line in lines)
            {
                int spaces     = 0;
                int lineIndent = 0;
                int position   = 0;
                for (int i = 0; i < line.Length; i++)
                {
                    var c = line[i];
                    if (c == ' ')
                    {
                        spaces   += 1;
                        position += 1;
                        if (spaces % 4 == 0)
                        {
                            lineIndent += 1;
                        }
                    }
                    else if (c == '\t')
                    {
                        position   += 1;
                        lineIndent += 1;
                    }
                    else if (c == '-')
                    {
                        if (line[i + 2] == '[')
                        {
                            var start  = position + 3;
                            var length = line.Length - position - 4;
                            var name   = line.Substring(start, length);
                            var folder = new model.Folder(name);
                            folders[lineIndent].Folders.Add(folder);
                            folders[lineIndent + 1] = folder;
                            indent = lineIndent;
                            goto endLineLoop;
                        }
                        else
                        {
                            var name = line.Substring(position + 2, line.Length - position - 2);
                            var file = new model.File(name);
                            folders[lineIndent].Files.Add(file);
                            goto endLineLoop;
                        }
                    }
                }
                endLineLoop :;
            }
            return(new ParseSuccess(root));
        }
Beispiel #2
0
 private void Output(FM.Folder folder, int indent, Action <string> write)
 {
     write(@"<ul class='folder-content'>");
     write($@"<li class='folder'>{folder.Name}</li>");
     foreach (FM.Folder subFolder in folder.Folders)
     {
         Output(subFolder, indent + 1, write);
     }
     foreach (FM.File file in folder.Files)
     {
         write($@"<li class='file'>{file.Name}</li>");
     }
     write("</ul>");
 }
        public IParseResult Parse(string text)
        {
            var path = text;

            if (System.IO.Directory.Exists(path))
            {
                FM.Folder f = EnumerateFolder(path);
                return(new ParseSuccess(f));
            }
            var folder = new Folder(_renderSettings.SourceFolder.Absolute, new RelativeFolder(text));

            if (folder.Exists())
            {
                FM.Folder f = EnumerateFolder(folder.Absolute.FullPath);
                return(new ParseSuccess(f));
            }
            else
            {
                return(new ParseFailure(new ParseError(new Range(new Position(1, 1), new Position(1, 10)), "folder does not exist")));
            }
            throw new Exception();
        }
Beispiel #4
0
        public override void Render(ExtensionHtmlRenderer renderer, FM.Folder model, IFormatState formatState)
        {
            void write(string value) => renderer.Write(value);

            Output(model, 1, write);
        }