Thank you all for the comments.
I managed using a quite ugly solution but does the job: I edited the
layout.html
and included a hidden full toctree using:
<div style="display: none !important;"id="full_toctree">
{{ toctree(maxdepth=-1|toint, collapse=False,includehidden=True|tobool)
}}
</div>
This way, I can inspect the output HTML and fetch the entire toctree to
later on pass it to my PDF generator. H
ope it helps others!
On Monday, February 18, 2019 at 5:54:52 PM UTC+1, Peter Burdine wrote:
>
> See:
> https://groups.google.com/forum/#!msg/sphinx-users/0UW05Inwfac/X8bCZmlLBwAJ
> This is what I did a few years back. The builders are inconstant when
> they create events and I haven't been able to figure out how to make it
> work either.
>
> I have an extension that followed the todo example, which works great when
>> the output is latex, but for HTML it doesn't work right. The reason for
>> this seems to be that we are using Sphinx for a modular documentation
>> project so not all of the files will be included in the output. When using
>> the latex builder, we get a single doctree when the 'doctree-resolved'
>> event is called. When using the HTML builder, it gets called once for
>> every input file. Since I want to only include found items that are in the
>> final document, I found I can't trust the information I have when
>> 'doctree-resolved' is emitted since the final document structure isn't
>> complete. The only time I have found that I can trust that the document
>> has been assembled is when the 'env-updated' event is emitted, and then I
>> can browse the document tree like:
>>
>> def env_updated(app, env):
>> relations = env.collect_relations()
>> included_docs = []
>> updated_docs = []
>> # Each relation is a list in the following order [parent, prev_doc,
>> next_doc]
>> cur_doc = env.config.master_doc
>> while cur_doc:
>> included_docs.append(cur_doc)
>> doctree = env.get_doctree(cur_doc)
>> cur_doc = relations[cur_doc][2]
>>
>> This gives me a nice list of the documents in the order that they will be
>> in. I can even find all of the elements I want using:
>>
>> for docname in included_docs:
>> doctree = env.get_doctree(docname)
>> for table in doctree.traverse(my_node_type):
>> updated_docs.append(docname)
>> # Add rows to the table here...
>> return updated_docs
>>
>>
>> At the end of the handling the 'env-updated' event, I return a list of
>> documents I've modified (in my case, I appended rows to an existing table),
>> then I return the list of docnames I've modified. However, none of the
>> rows I've added to the table will show up in the final output. The code to
>> modify the table is good, it worked just fine in the 'doctree-resolved'
>> event handler, so I don't think that is the issue. Is there something I
>> need to do other the returning the list of docnames from the 'env-updated'
>> event handler to make these changes stick?
>>
>
>
> On Monday, February 4, 2019 at 3:26:25 AM UTC-8, [email protected]
> wrote:
>>
>> Hi Michael, thank you very much for your reply,
>>
>> I am already using wkhtmltopdf to build PDF from HTMLs. Also, I already
>> tried the singlehtml and indeed works but the problem is that it increases
>> so much the build time that it makes kind of impossible to work locally to
>> test. Using singlehtml to build the PDFs means building 1 time for the
>> documentation and n-times for each desired PDF, which can lead to building
>> time of hours. That is why I would like to avoid rebuilding the
>> documentation, simply converting the current build to PDF reduces so much
>> the time, but as mentioned, getting the *full* (infinite depth) tree
>> from the built html seems tricky.
>>
>> On Saturday, February 2, 2019 at 1:02:54 PM UTC+1, Michael Gielda wrote:
>>>
>>> Have you looked at WeasyPrint on a single html build? Don't know how
>>> well it works for your use case but that's what I would try first. It's in
>>> Python (yay), and a direct HTML to PDF converter, implementing the CSS Page
>>> spec (for stuff like headers and footers).
>>>
>>> Best regards
>>> Michael
>>>
>>
--
You received this message because you are subscribed to the Google Groups
"sphinx-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sphinx-users.
For more options, visit https://groups.google.com/d/optout.