예제 #1
0
        public static MDSourceFile WriteSourceFileDefault(
            this LitOptions LO,
            LitNovel novel,
            LitSceneMetadata metadata,
            LitAuthor author
            )
        {
            //Write all of the lines of the file
            var lines = LO.WriteMetadata(metadata, author);
            var query = novel.Scenes
                        .Where(s => s.Metadata == metadata)
                        .Select(s => LO.WriteElmSourceLines(s, author));

            foreach (var scenelines in query)
            {
                lines.AddRange(scenelines);
            }
            //Create the file
            var SourceFile = new MDSourceFile()
            {
                Metadata = metadata,
                Author   = author,
                Lines    = lines
            };

            return(SourceFile);
        }
        public static List <String> WriteMetadataDefault(this LitOptions LO, LitSceneMetadata metadata, LitAuthor sourceinfo)
        {
            var retVal = new List <String>();

            retVal.Add(String.Format("# {0}", metadata.Header));
            retVal.Add(MakeLinkLine("Metadata", metadata.Descriptor));
            retVal.Add(MakeLinkLine("Descriptor", metadata.Descriptor));
            retVal.Add(sourceinfo.ToSourceLine());
            retVal.AddRange(metadata.Text);
            return(retVal);
        }
예제 #3
0
 /// <summary>
 /// Will add a new SceneMetadata to the novel, or if this metadata already exists, will return the one that already does
 /// </summary>
 /// <param name="novel"></param>
 /// <param name="metadata"></param>
 /// <returns></returns>
 public static LitSceneMetadata AddMetadataDistinct(this LitNovel novel, LitSceneMetadata metadata)
 {
     foreach (var currentSceneMetadata in novel.SceneMetadata)
     {
         if (currentSceneMetadata.Descriptor.Equals(metadata.Descriptor))
         {
             return(currentSceneMetadata);
         }
     }
     novel.SceneMetadata.Add(metadata);
     return(metadata);
 }
        public static LitSceneMetadata ParseMetadataDefault(this LitOptions LO, LitNovel novel, IEnumerable <String> sourceLines)
        {
            var retVal = new LitSceneMetadata();
            var links  = sourceLines.Select(l => LO.ParseLink(l)).Where(link => link != null);

            retVal.Descriptor = links.Where(link => link.Link.Equals("Descriptor")).Select(link => link.Tag).FirstOrDefault();

            var pattern = @"^# (.*)$";
            var match   = System.Text.RegularExpressions.Regex.Match(sourceLines.First(), pattern);

            retVal.Header = match.Groups[1].Value;

            return(novel.AddMetadataDistinct(retVal));
        }
예제 #5
0
 public static String ToShortFilenameDefault(
     this LitOptions LO,
     MDAnnSourceInfo info,
     LitSceneMetadata metadata,
     LitAuthor author
     )
 {
     return(ToShortFilenameDefault(
                LO,
                info.Prefix,
                metadata.Descriptor,
                author.Author
                ));
 }
예제 #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="lines"></param>
        /// <returns></returns>
        public static LitElm ParseToElmDefault(
            this LitOptions LO,
            LitNovel novel,
            LitSceneMetadata metadata,
            LitAuthor author,
            IEnumerable <String> lines
            )
        {
            var retVal = new LitElm();

            //Some checks
            if (!novel.Authors.Contains(author))
            {
                throw new Exception(String.Format("Novel does not contain source info. {0}", author.Author));
            }
            if (!novel.SceneMetadata.Contains(metadata))
            {
                throw new Exception(String.Format("Novel does not contain metadata. {0}", metadata.Descriptor));
            }

            //Parse the header
            LO.ParseElmHeader(novel, retVal, lines);

            var PartitionedLines = LO.ExtractSubElms(lines);

            LO.ParseElmLinks(
                novel,
                retVal,
                LO.ExtractElmLinkLines(PartitionedLines.First())
                );

            LO.ParseElmText(novel, retVal, author, PartitionedLines.First());

            foreach (var eventLines in PartitionedLines.Skip(1))
            {
                var litEvent = LO.ParseToElm(novel, metadata, author, eventLines);
                retVal.AddElm(litEvent);
            }

            retVal.Metadata = metadata;
            return(retVal);
        }