/// <summary>
        /// Creates a new <see cref="InWindow"/> instance tied to the input image id.
        /// </summary>
        public InWindow(string id, CreateImageHandler createImage)
        {
            ArgumentGuard.NotNull(createImage, nameof(createImage));

            id_         = id;
            CreateImage = createImage;
        }
Exemple #2
0
        /// <summary>
        /// Create the final HTML from a frozen fragment. There is no scaling or file handling as the frozen fragments are ready to go.
        /// </summary>
        /// <param name="fragment"></param>
        /// <param name="withNumbers"></param>
        /// <returns></returns>
        public string CreateFragmentHtml(FrozenFragment fragment, CreateImageHandler createImage, ScaleImageHandler scaleImage, bool withNumbers = true)
        {
            var flatFragments = fragment.Children.FlattenHierarchy()
                                .Where(f => f.TypeOfFragment == FragmentType.Html)
                                .ToList();
            var sb = new StringBuilder();

            sb.AppendLine(Encoding.UTF8.GetString(fragment.Content));
            flatFragments.Select(f => sb.AppendLine(Encoding.UTF8.GetString(f.Content)));
            var fragmentContent = sb.ToString();

            // assume children provide resources
            if (fragment.HasChildren())
            {
                foreach (var resources in fragment.Children)
                {
                    var imgRegex = new Regex(String.Format(@"src=""{0}""", resources.ItemHref));
                    if (!imgRegex.Match(fragmentContent).Success)
                    {
                        continue;
                    }
                    var newPath = createImage(this, new CreateImageArguments {
                        FileName = resources.ItemHref
                    });
                    fragmentContent = imgRegex.Replace(fragmentContent, String.Format(@"src=""{0}""", newPath));
                }
            }
            return(fragmentContent);
        }
Exemple #3
0
        /// <summary>
        /// Creates a new <see cref="InRegionsBase"/> instance.
        /// </summary>
        public InRegionsBase(CreateImageHandler createImage, GetTextHandler getText)
        {
            ArgumentGuard.NotNull(createImage, nameof(createImage));
            ArgumentGuard.NotNull(getText, nameof(getText));

            createImage_ = createImage;
            getText_     = getText;
        }
Exemple #4
0
        /// <summary>
        /// Create deep level copy of an opus and export as plain HTML using the goven groups builder attributes.
        /// </summary>
        /// <param name="opus">Source</param>
        /// <param name="createImage">handler to store images</param>
        /// <param name="scaleImage">handler to scale/change images according to image properties</param>
        /// <param name="builderContent">Callback to get the content from caller</param>
        /// <param name="numbering">Instruction to create section numbers.</param>
        /// <param name="path">Path to savely store temporary files.</param>
        /// <param name="target">Build for HTML, RSS, PDF, and so  on.</param>
        /// <returns>HTML</returns>
        public string CreateDocumentHtml(Opus opus, CreateImageHandler createImage, ScaleImageHandler scaleImage, Func <string> builderContent, IDictionary <string, NumberingSchema> numbering, string path, GroupKind target)
        {
            opus.CreateImage += createImage;
            opus.ScaleImage  += scaleImage;
            opus.TempPath     = path;
            opus.Numbering    = numbering;
            var builder = opus.GetType().GetCustomAttributes(typeof(SnippetBuilderAttribute), true).OfType <SnippetBuilderAttribute>().Single(sb => sb.Target == target);

            opus.BuiltContent = builderContent();
            return(builder.BuildHtml(opus, numbering, null));
        }
Exemple #5
0
        /// <summary>
        /// Creates a new <see cref="InRegionBase"/> instance.
        /// </summary>
        /// <param name="id">Id of the region's image</param>
        /// <param name="bounds">The bounds of the region within the application's window</param>
        /// <param name="createImage">Creates a window image and returns its id.</param>
        /// <param name="getText">Returns the text located in an image region</param>
        public InRegionBase(
            string id,
            Rectangle bounds,
            CreateImageHandler createImage,
            GetTextHandler getText)
            : base(id, createImage)
        {
            ArgumentGuard.NotNull(createImage, nameof(createImage));
            ArgumentGuard.NotNull(getText, nameof(getText));

            Bounds   = bounds;
            getText_ = getText;
        }
Exemple #6
0
        /// <summary>
        /// Create deep level copy of one chapter of an opus and export as plain HTML using the goven groups builder attributes.
        /// </summary>
        /// <param name="opus">Reference to parent opus</param>
        /// <param name="chapter">Source Chapter</param>
        /// <param name="createImage">handler to store images</param>
        /// <param name="scaleImage">handler to scale/change images according to image properties</param>
        /// <param name="builderContent">Callback to get the content from caller</param>
        /// <param name="numbering">Instruction to create section numbers.</param>
        /// <param name="path">Path to savely store temporary files.</param>
        /// <param name="target">Build for HTML, RSS, PDF, and so  on.</param>
        /// <returns>HTML</returns>
        public string CreateChapterHtml(Opus document, Section chapter, CreateImageHandler createImage, ScaleImageHandler scaleImage, string path, GroupKind target, bool withNumbers = true)
        {
            if (chapter.Parent.Id != document.Id)
            {
                throw new ArgumentOutOfRangeException("chapter");
            }
            document.CreateImage += createImage;
            document.ScaleImage  += scaleImage;
            document.TempPath     = path;
            document.Numbering    = GetLocalizedNumberingSchema();
            var html = new StringBuilder();

            html.Append(CreateHtmlInner(new Snippet[] { chapter }, document.Numbering, target));
            return(html.ToString());
        }