texmacs-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Texmacs-dev] Complete Re: adding pdf hyperlink support


From: Sam Liddicott
Subject: [Texmacs-dev] Complete Re: adding pdf hyperlink support
Date: Fri, 01 Jul 2011 10:20:06 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.19pre) Gecko/20110630 Lightning/1.0b2 Lanikai/3.1.12pre

Attached is a patch that provides hyperlink support when the file is exported to ps and then converted to pdf using ps2pdf.

No external style sheets are needed.

After patching and re-building you WILL need to:

texmacs --delete-style-cache

once, or within texmacs click on "tools, updates, styles"

The only problem I am aware of is that the link generally moves to the top of the target page (or bottom, if it is the last page) instead of the correct part of the target page.

labels have a new internal definition and are implemented as a locus containing a link of type "anchor" in which the id is written as a named destination in postscript. (In fact the ID is always written as a named destination even for non-anchor links, which probably doesn't matter).

The body of the locus is the original label definition so it should all work fine I hope.

(Let me know if labels behave badly).

best regards

Anyone want to review this, or commit this to the main project?

Sam


On 30/06/11 20:55, Sam Liddicott wrote:


I think I'm abusing locus a little too much and it's not robust.

I think I need to change the definition of reference:

  env ("reference")= tree (MACRO, "Id",
                           tree (LOCUS, copy (ref_id), ln3, reftxt));

and replace reftxt with something like
tree(DECORATE_LINK, tree(ARG, "Id"), refrext);

And DECORATE_LINK will work something like datoms but emit the right postscript.

This can be a general way for annotating a box with hidden postscript.

Sam

On 30/06/11 17:57, Sam Liddicott wrote:


I've decided to extend the built-in label macro to also contain a special locus that will generate the pdfmark for a named destination (anchor to html people).

I've already got my hackery in place for locus, so spotting a new kind should be easy enough.

I hope to post the full patch sometime tomorrow.

(Sadly it only works for postscript -> pdf and not new pdf rendering).

Sam

On 30/06/11 12:21, Sam Liddicott wrote:


On 29/06/11 19:54, marc lalaude-labayle wrote:
I follow your posts about this feature and really hopes you'll achieve to add this one to texmacs.

I've done it.
It's hell.

B the time a <reference> is rendered it's a locus and knowledge that it was a reference has gone, and the actual reference value is hard 9for me) to get hold of. However I've got the locus rendering to emit the required pdfmark, and that's hacky but works.
Joris may have something to say.
I would rather have done this as a <specific printer> macro but I have no knowledge of the bounding rect which is needed.

However, a <label> is not actually rendered so there is nowhere for me to overload to add the pdfmark to the postscript.

Based on my hacking of <specific|printer<image|<tuple|<raw-data|magic-macro>... I'm emitting the pdfmark stuff for the label.
(It's very slow generating the post-script).

Anyway, it works - although I have to override the label macro to emit this.

The downsides are:
1. hackyness
2. slow - I need to have the label rendered directly or find some better means of injecting post-script 3. despite me trying to do do the label's properly (in postscript) the link-targets just seem to be to "the page" rather that the right part of the page, so I'll have to see what I did wrong there.



Sam


Marc

2011/6/29 Sam Liddicott <address@hidden <mailto:address@hidden>>


    Wow, I'm nearly there.

    Using post_display on locus_box_rep I can blot out a hyperlink!

So I'm just adding the anchor and href methods to the renderer class.

    Sam


    On 28/06/11 18:15, Sam Liddicott wrote:



        I'm determined to add PDF hyperlink support to texmacs.

This post-script can be inserted wherever a <label> is rendered:

        [ /Dest (LABEL-ID-HERE) cvn /View [/XYZ null null null] /DEST
        pdfmark

        I've found the point at which the label is rendered but
        because it has no real appearance of it's own I've still got
        to poke my way through to the printer_rep layer.

        This post-script can be inserted wherever a reference appears,
        by which I mean a certain type of LOCUS.

        [
        /Rect [ .. ..... .. ]
        /Border [16 16 1 [3 10]]
        /Color [1 0 0]
        /Dest (LABEL-ID-HERE) cvn
        /Subtype /Link
        /ANN pdfmark

        The rect coordinates are the same as used when rendering the
        locus with mouse-over so that it shows a green box.

        I've tested the post-script by hand-editing files and it does
        work.

        I'm sure that I get to do this somewhere around the final
        print statement in concater_rep::typeset_locus file
        concat_active.cpp but I still can't make the link between that
        point and the printer_rep renderer, unless concat_active is a
        subclass which I doubt.

        So right now I'm trying to track down what locus_box does. I
        see it in change_boxes.cpp but am no closer to finding the
        point at which printer_rep's print() is invoked or where the
        green rect coords are kept, but I hope to find it soon.


        I'm both cases LABEL-ID-HERE has to have weird symbols in
        octal with \, and \ ( ) escaped by \

        This is taking me HOURS so if anyone who knows the C better
        than me wants to speak out, please do.

        Sam

        _______________________________________________
        Texmacs-dev mailing list
        address@hidden <mailto:address@hidden>
        https://lists.gnu.org/mailman/listinfo/texmacs-dev



    --     [FSF Associate Member #2325]
<http://www.fsf.org/register_form?referrer=2325>

<http://www.openrightsgroup.org/>


    _______________________________________________
    Texmacs-dev mailing list
    address@hidden <mailto:address@hidden>
    https://lists.gnu.org/mailman/listinfo/texmacs-dev



_______________________________________________
Texmacs-dev mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/texmacs-dev








--
[FSF Associate Member #2325] <http://www.fsf.org/register_form?referrer=2325>

<http://www.openrightsgroup.org/>

Attachment: texmacs-hyperlink.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]