Example #1
0
        protected Flow(FObj parent, PropertyList propertyList)
            : base(parent, propertyList)
        {
            this.name = GetElementName();

            if (parent.GetName().Equals("fo:page-sequence"))
            {
                this.pageSequence = (PageSequence)parent;
            }
            else
            {
                throw new FonetException("flow must be child of "
                                         + "page-sequence, not "
                                         + parent.GetName());
            }
            SetFlowName(GetProperty("flow-name").GetString());

            if (pageSequence.IsFlowSet)
            {
                if (this.name.Equals("fo:flow"))
                {
                    throw new FonetException("Only a single fo:flow permitted"
                                             + " per fo:page-sequence");
                }
                else
                {
                    throw new FonetException(this.name
                                             + " not allowed after fo:flow");
                }
            }
            pageSequence.AddFlow(this);
        }
        public void PageListAddedToSequence()
        {
            var pages = new[] { new SequencedControl(), new SequencedControl(), new SequencedControl() };

            _pageSequence = new PageSequence(_parentControl, pages);
            Assert.That(_pageSequence.Pages, Is.EquivalentTo(pages));
        }
        public void CallingNextAdvancesPage()
        {
            var pages = new[] { new SequencedControl(), new SequencedControl(), new SequencedControl() };

            _pageSequence = new PageSequence(_parentControl, pages);
            _pageSequence.NextPage();
            Assert.That(_pageSequence.CurrentPageIndex, Is.EqualTo(1));
        }
 public void PageParamsAddedToSequence()
 {
     _pageSequence = new PageSequence(_parentControl,
                                      new SequencedControl(),
                                      new SequencedControl(),
                                      new SequencedControl()
                                      );
     Assert.That(_pageSequence.Pages.Count(), Is.EqualTo(3));
 }
        public CookiecutterControl(Redirector outputWindow, ICookiecutterTelemetry telemetry, Uri feedUrl, Action <string> openFolder, Action updateCommandUI)
        {
            _updateCommandUI = updateCommandUI;

            _checkForUpdatesTimer       = new DispatcherTimer();
            _checkForUpdatesTimer.Tick += new EventHandler(CheckForUpdateTimer_Tick);

            string gitExeFilePath = GitClient.RecommendedGitFilePath;
            var    gitClient      = new GitClient(gitExeFilePath, outputWindow);
            var    gitHubClient   = new GitHubClient();

            ViewModel = new CookiecutterViewModel(
                CookiecutterClientProvider.Create(outputWindow),
                gitHubClient,
                gitClient,
                telemetry,
                outputWindow,
                new LocalTemplateSource(CookiecutterViewModel.DefaultInstalledFolderPath, gitClient),
                new FeedTemplateSource(feedUrl),
                new GitHubTemplateSource(gitHubClient),
                openFolder
                );

            ViewModel.UserConfigFilePath = CookiecutterViewModel.GetUserConfigPath();
            ViewModel.OutputFolderPath   = string.Empty; // leaving this empty for now, force user to enter one
            ViewModel.ContextLoaded     += ViewModel_ContextLoaded;
            ViewModel.HomeClicked       += ViewModel_HomeClicked;

            _searchPage = new CookiecutterSearchPage {
                DataContext = ViewModel
            };
            _optionsPage = new CookiecutterOptionsPage {
                DataContext = ViewModel
            };

            var pages = new List <Page>();

            pages.Add(_searchPage);
            pages.Add(_optionsPage);

            _pageSequence = new CollectionViewSource {
                Source = new ObservableCollection <Page>(pages)
            };
            PageCount = _pageSequence.View.OfType <object>().Count();

            PageSequence = _pageSequence.View;
            PageSequence.MoveCurrentToFirst();

            DataContext = this;

            InitializeComponent();

            _searchPage.SelectedTemplateChanged += SearchPage_SelectedTemplateChanged;
        }
Example #6
0
        public IList <Page> GetPages(PageSequence pageSequence, PageCollection pageCollection,
                                     PageTemplateCollection pageTemplateCollection)
        {
            List <Page> pages           = new List <Page>();
            int         fillUpPageIndex = -1;

            // Add dynamic elements.
            foreach (PageSequenceElement pageSequenceElement in pageSequence)
            {
                if (pageSequenceElement.FillUpMultiplier == 0)
                {
                    if (pageSequenceElement.PageReferenceKey != null)
                    {
                        Page page = pageCollection[pageSequenceElement.PageReferenceKey];
                        if (page != null)
                        {
                            pages.Add(page);
                        }
                    }

                    if (pageSequenceElement.PageTemplateReferenceKey != null)
                    {
                        pages.AddRange(
                            CreatePagesFromTemplate(pageTemplateCollection[pageSequenceElement.PageTemplateReferenceKey]));
                    }
                }
                else
                {
                    fillUpPageIndex = pages.Count;
                }
            }

            // Also check if there are fillup templates.
            if (pageSequence.Any(pe => pe.FillUpMultiplier > 0))
            {
                int multiplier = pageSequence.Where(pe => pe.FillUpMultiplier > 0).FirstOrDefault().FillUpMultiplier;

                // Add fillup pages.
                int pagesToAdd = multiplier - (pages.Count % multiplier);
                if (pagesToAdd < multiplier)
                {
                    Page p = pageCollection[pageSequence.Where(pe => pe.FillUpMultiplier > 0).FirstOrDefault().PageReferenceKey];
                    for (int x = 0; x < pagesToAdd; x++)
                    {
                        p.Key += "_fillup_" + x;

                        pages.Insert(fillUpPageIndex, p);
                    }
                }
            }

            return(pages);
        }
        /// <summary>
        ///     Format the PageSequence. The PageSequence formats Pages and adds
        ///     them to the AreaTree, which subsequently calls the StreamRenderer
        ///     instance (this) again to render the page.  At this time the page
        ///     might be printed or it might be queued. A page might not be
        ///     renderable immediately if the IDReferences are not all valid. In
        ///     this case we defer the rendering until they are all valid.
        /// </summary>
        /// <param name="pageSequence"></param>
        public void Render(PageSequence pageSequence)
        {
            AreaTree a = new AreaTree(this);

            a.setFontInfo(fontInfo);

            pageSequence.Format(a);

            this.results.HaveFormattedPageSequence(pageSequence);

            FonetDriver.ActiveDriver.FireFonetInfo(
                "Last page-sequence produced " + pageSequence.PageCount + " page(s).");
        }
Example #8
0
        internal void HaveFormattedPageSequence(PageSequence pageSequence)
        {
            this.pageCount += pageSequence.PageCount;
            if (this.pageSequences == null)
            {
                this.pageSequences = new ArrayList();
            }

            this.pageSequences.Add(
                new PageSequenceResults(
                    pageSequence.GetProperty("id").GetString(),
                    pageSequence.PageCount));
        }
        public void QueuePage(Page page)
        {
            // Process markers
            PageSequence pageSequence = page.getPageSequence();

            if (pageSequence != currentPageSequence)
            {
                currentPageSequence        = pageSequence;
                currentPageSequenceMarkers = null;
            }
            ArrayList markers = page.getMarkers();

            if (markers != null)
            {
                if (documentMarkers == null)
                {
                    documentMarkers = new ArrayList();
                }
                if (currentPageSequenceMarkers == null)
                {
                    currentPageSequenceMarkers = new ArrayList();
                }
                for (int i = 0; i < markers.Count; i++)
                {
                    Marker marker = (Marker)markers[i];
                    marker.releaseRegistryArea();
                    currentPageSequenceMarkers.Add(marker);
                    documentMarkers.Add(marker);
                }
            }


            // Try to optimise on the common case that there are no pages pending
            // and that all ID references are valid on the current pages. This
            // short-cuts the pipeline and renders the area immediately.
            if ((renderQueue.Count == 0) && idReferences.IsEveryIdValid())
            {
                renderer.Render(page);
            }
            else
            {
                AddToRenderQueue(page);
            }

            pageCount++;
        }
Example #10
0
        private void EndElement()
        {
            if (currentFObj != null)
            {
                currentFObj.End();

                // If it is a page-sequence, then we can finally render it.
                // This is the biggest performance problem we have, we need
                // to be able to render prior to this point.
                PageSequence pageSeq = currentFObj as PageSequence;
                if (pageSeq != null)
                {
                    streamRenderer.Render(pageSeq);
                }

                currentFObj = currentFObj.getParent();
            }
        }
Example #11
0
        /// <summary>
        ///     Format the PageSequence. The PageSequence formats Pages and adds
        ///     them to the AreaTree, which subsequently calls the StreamRenderer
        ///     instance (this) again to render the page.  At this time the page
        ///     might be printed or it might be queued. A page might not be
        ///     renderable immediately if the IDReferences are not all valid. In
        ///     this case we defer the rendering until they are all valid.
        /// </summary>
        /// <param name="pageSequence"></param>
        public void Render(PageSequence pageSequence)
        {
            AreaTree a = new AreaTree(this);

            a.setFontInfo(fontInfo);

            var sw = System.Diagnostics.Stopwatch.StartNew();

            pageSequence.Format(a);

            FonetDriver.ActiveDriver.FireFonetInfo(string.Format("Rendered Page Sequence Output in [{0}] seconds.", sw.Elapsed.TotalSeconds));


            this.results.HaveFormattedPageSequence(pageSequence);

            FonetDriver.ActiveDriver.FireFonetInfo(
                "Last page-sequence produced " + pageSequence.PageCount + " page(s).");
        }
Example #12
0
        public override Status Layout(Area area)
        {
            if (marker == MarkerStart)
            {
                marker = 0;
                Page containingPage = area.getPage();
                bestMarker = SearchPage(containingPage);

                if (bestMarker != null)
                {
                    bestMarker.resetMarkerContent();
                    return(bestMarker.LayoutMarker(area));
                }

                AreaTree areaTree = containingPage.getAreaTree();
                if (retrieveBoundary == RetrieveBoundary.PAGE_SEQUENCE)
                {
                    PageSequence pageSequence = areaTree.GetCurrentPageSequence();
                    if (pageSequence == containingPage.getPageSequence())
                    {
                        return(LayoutBestMarker(areaTree.GetCurrentPageSequenceMarkers(), area));
                    }
                }
                else if (retrieveBoundary == RetrieveBoundary.DOCUMENT)
                {
                    return(LayoutBestMarker(areaTree.GetDocumentMarkers(), area));
                }
                else if (retrieveBoundary != RetrieveBoundary.PAGE)
                {
                    throw new FonetException("Illegal 'retrieve-boundary' value");
                }
            }
            else if (bestMarker != null)
            {
                return(bestMarker.LayoutMarker(area));
            }

            return(new Status(Status.OK));
        }
 private void ViewModel_HomeClicked(object sender, EventArgs e)
 {
     PageSequence.MoveCurrentToFirst();
     _updateCommandUI();
 }
        static StandardElementMapping()
        {
            foObjs = new Hashtable();

            // Declarations and Pagination and Layout Formatting Objects
            foObjs.Add("root", Root.GetMaker());
            foObjs.Add("declarations", Declarations.GetMaker());
            foObjs.Add("color-profile", ColorProfile.GetMaker());
            foObjs.Add("page-sequence", PageSequence.GetMaker());
            foObjs.Add("layout-master-set", LayoutMasterSet.GetMaker());
            foObjs.Add("page-sequence-master", PageSequenceMaster.GetMaker());
            foObjs.Add("single-page-master-reference", SinglePageMasterReference.GetMaker());
            foObjs.Add("repeatable-page-master-reference", RepeatablePageMasterReference.GetMaker());
            foObjs.Add("repeatable-page-master-alternatives", RepeatablePageMasterAlternatives.GetMaker());
            foObjs.Add("conditional-page-master-reference", ConditionalPageMasterReference.GetMaker());
            foObjs.Add("simple-page-master", SimplePageMaster.GetMaker());
            foObjs.Add("region-body", RegionBody.GetMaker());
            foObjs.Add("region-before", RegionBefore.GetMaker());
            foObjs.Add("region-after", RegionAfter.GetMaker());
            foObjs.Add("region-start", RegionStart.GetMaker());
            foObjs.Add("region-end", RegionEnd.GetMaker());
            foObjs.Add("flow", Flow.Flow.GetMaker());
            foObjs.Add("static-content", StaticContent.GetMaker());
            foObjs.Add("title", Title.GetMaker());

            // Block-level Formatting Objects
            foObjs.Add("block", Block.GetMaker());
            foObjs.Add("block-container", BlockContainer.GetMaker());

            // Inline-level Formatting Objects
            foObjs.Add("bidi-override", BidiOverride.GetMaker());
            foObjs.Add("character", Character.GetMaker());
            foObjs.Add("initial-property-set", InitialPropertySet.GetMaker());
            foObjs.Add("external-graphic", ExternalGraphic.GetMaker());
            foObjs.Add("instream-foreign-object", InstreamForeignObject.GetMaker());
            foObjs.Add("inline", Inline.GetMaker());
            foObjs.Add("inline-container", InlineContainer.GetMaker());
            foObjs.Add("leader", Leader.GetMaker());
            foObjs.Add("page-number", PageNumber.GetMaker());
            foObjs.Add("page-number-citation", PageNumberCitation.GetMaker());

            // Formatting Objects for Tables
            foObjs.Add("table-and-caption", TableAndCaption.GetMaker());
            foObjs.Add("table", Table.GetMaker());
            foObjs.Add("table-column", TableColumn.GetMaker());
            foObjs.Add("table-caption", TableCaption.GetMaker());
            foObjs.Add("table-header", TableHeader.GetMaker());
            foObjs.Add("table-footer", TableFooter.GetMaker());
            foObjs.Add("table-body", TableBody.GetMaker());
            foObjs.Add("table-row", TableRow.GetMaker());
            foObjs.Add("table-cell", TableCell.GetMaker());

            // Formatting Objects for Lists
            foObjs.Add("list-block", ListBlock.GetMaker());
            foObjs.Add("list-item", ListItem.GetMaker());
            foObjs.Add("list-item-body", ListItemBody.GetMaker());
            foObjs.Add("list-item-label", ListItemLabel.GetMaker());

            // Dynamic Effects: Link and Multi Formatting Objects
            foObjs.Add("basic-link", BasicLink.GetMaker());
            foObjs.Add("multi-switch", MultiSwitch.GetMaker());
            foObjs.Add("multi-case", MultiCase.GetMaker());
            foObjs.Add("multi-toggle", MultiToggle.GetMaker());
            foObjs.Add("multi-properties", MultiProperties.GetMaker());
            foObjs.Add("multi-property-set", MultiPropertySet.GetMaker());

            // Out-of-Line Formatting Objects
            foObjs.Add("float", Float.GetMaker());
            foObjs.Add("footnote", Footnote.GetMaker());
            foObjs.Add("footnote-body", FootnoteBody.GetMaker());

            // Other Formatting Objects
            foObjs.Add("wrapper", Wrapper.GetMaker());
            foObjs.Add("marker", Marker.GetMaker());
            foObjs.Add("retrieve-marker", RetrieveMarker.GetMaker());
        }
Example #15
0
 public void setPageSequence(PageSequence pageSequence)
 {
     this.pageSequence = pageSequence;
 }
 private void ViewModel_ContextLoaded(object sender, EventArgs e)
 {
     PageSequence.MoveCurrentToLast();
     _updateCommandUI();
 }
Example #17
0
        internal void Parse(PixelFarm.Drawing.Pdf.MyPdfDocument doc)
        {
            //TEST CODE ONLY ***

            var root_maker = Root.GetMaker();
            //
            var layout_master_set_maker = LayoutMasterSet.GetMaker();
            var simplpe_page_master     = SimplePageMaster.GetMaker();
            var region_body             = RegionBody.GetMaker();
            var region_before           = RegionBefore.GetMaker();
            var region_after            = RegionAfter.GetMaker();

            //
            var pageSeq_maker = PageSequence.GetMaker();
            var flow_maker    = Flow.Flow.GetMaker();
            var block_maker   = Flow.Block.GetMaker();


            string nsuri = "http://www.w3.org/1999/XSL/Format";

            streamRenderer.StartRenderer();

            //1. root
            Root rootObj = CreateAndAppend <Root>(null,
                                                  root_maker,
                                                  nsuri,
                                                  "root",
                                                  CreateAttributes());
            //2.
            LayoutMasterSet masterSet = CreateAndAppend(rootObj, layout_master_set_maker, nsuri,
                                                        "layout-master-set",
                                                        CreateAttributes());
            {
                SimplePageMaster simpleMaster = CreateAndAppend(
                    masterSet, simplpe_page_master, nsuri,
                    "simple-page-master",
                    CreateAttributes(
                        new AttrKeyValue("master-name", "simple"),
                        new AttrKeyValue("page-height", "29.7cm"),
                        new AttrKeyValue("margin-top", "1cm"),
                        new AttrKeyValue("margin-bottom", "2cm"),
                        new AttrKeyValue("margin-left", "2.5cm"),
                        new AttrKeyValue("margin-right", "2.5cm")
                        ));
                RegionBody rgnBody = CreateAndAppend(simpleMaster, region_body, nsuri, "region-body",
                                                     CreateAttributes(new AttrKeyValue("margin-top", "3cm")));
                RegionBefore rgnBefore = CreateAndAppend(simpleMaster, region_before, nsuri, "region-before",
                                                         CreateAttributes(new AttrKeyValue("extent", "3cm")));
                RegionAfter rgnAfter = CreateAndAppend(simpleMaster, region_after, nsuri, "region-after",
                                                       CreateAttributes(new AttrKeyValue("extent", "1.5cm")));
                simpleMaster.End();
            }

            List <PixelFarm.Drawing.Pdf.MyPdfPage> pages = doc.Pages;
            int page_count = pages.Count;

            for (int i = 0; i < page_count; ++i)
            {
                PixelFarm.Drawing.Pdf.MyPdfPage   p      = pages[i];
                PixelFarm.Drawing.Pdf.MyPdfCanvas canvas = p.Canvas;

                PageSequence page_seq = CreateAndAppend(rootObj, pageSeq_maker, nsuri, "page-sequence",
                                                        CreateAttributes(new AttrKeyValue("master-reference", "simple")));

                Flow.Flow flow_obj = CreateAndAppend(page_seq, flow_maker, nsuri, "flow",
                                                     CreateAttributes(new AttrKeyValue("flow-name", "xsl-region-body")));

                Flow.Block block_obj = CreateAndAppend(
                    flow_obj, block_maker, nsuri, "block",
                    CreateAttributes(new AttrKeyValue("font-size", "18pt"),
                                     new AttrKeyValue("color", "black"),
                                     new AttrKeyValue("text-align", "center")
                                     ));

                //very simple
                List <PixelFarm.Drawing.Pdf.MyPdfTextBlock> textElems = canvas.TextElems;
                //first sample ,

                int elem_count = textElems.Count;
                for (int n = 0; n < elem_count; ++n)
                {
                    PixelFarm.Drawing.Pdf.MyPdfTextBlock textBlock = textElems[n];
                    string txt = textBlock.Text;
                    //
                    char[] charBuff = txt.ToCharArray();
                    block_obj.AddCharacters(charBuff, 0, charBuff.Length);
                }

                streamRenderer.Render(page_seq);
            }
            FonetDriver.ActiveDriver.FireFonetInfo("Parsing of document complete, stopping renderer");
            streamRenderer.StopRenderer();
        }