summaryrefslogtreecommitdiff
path: root/tex/context/base/lpdf-swf.lua
blob: 34e72f1ecb87ae865d312af423cef4534cb506f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
if not modules then modules = { } end modules ['lpdf-swf'] = {
    version   = 1.001,
    comment   = "companion to lpdf-ini.mkiv",
    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
    copyright = "PRAGMA ADE / ConTeXt Development Team",
    license   = "see context related readme files"
}

-- The following code is based on tests by Luigi Scarso. His prototype
-- was using tex code. This is the official implementation.

local format = string.format

local pdfconstant        = lpdf.constant
local pdfboolean         = lpdf.boolean
local pdfstring          = lpdf.string
local pdfunicode         = lpdf.unicode
local pdfdictionary      = lpdf.dictionary
local pdfarray           = lpdf.array
local pdfnull            = lpdf.null
local pdfreference       = lpdf.reference
local pdfimmediateobject = lpdf.immediateobject

function backends.pdf.helpers.insertswf(spec)

    local width, height, filename = spec.width, spec.height, spec.foundname

    local eref = backends.codeinjections.embedfile(filename)

    local flash = pdfdictionary {
        Subtype   = pdfconstant("Flash"),
        Instances = pdfarray {
            pdfdictionary {
                Asset  = eref,
                Params = pdfdictionary {
                    Binding = pdfconstant("Foreground")
                }
            },
        },
    }

    local fref = pdfreference(pdfimmediateobject(tostring(flash)))

    local configuration = pdfdictionary {
        Configurations = pdfarray { fref },
        Assets         = pdfdictionary {
            Names = pdfarray {
                pdfstring(filename),
                eref,
            }
        },
    }

    local cref = pdfreference(pdfimmediateobject(tostring(configuration)))

    local activation = pdfdictionary {
        Activation = pdfdictionary {
            Type          = pdfconstant("RichMediaActivation"),
            Condition     = pdfconstant("PO"),
            Configuration = fref,
            Animation     = pdfdictionary {
                Subtype   = pdfconstant("Linear"),
                Speed     = 1,
                Playcount = 1,
            },
            Deactivation  = pdfdictionary {
                Type      = pdfconstant("RichMediaDeactivation"),
                Condition = pdfconstant("XD"),
            },
            Presentation  = pdfdictionary {
                PassContextClick = false,
                Style            = pdfconstant("Embedded"),
                Toolbar          = false,
                NavigationPane   = false,
                Transparent      = true,
                Window           = pdfdictionary {
                    Type     = pdfconstant("RichMediaWindow"),
                    Width    = pdfdictionary {
                        Default = 100,
                        Min     = 100,
                        Max     = 100,
                    },
                    Height   = pdfdictionary {
                        Default = 100,
                        Min     = 100,
                        Max     = 100,
                    },
                    Position = pdfdictionary {
                        Type    = pdfconstant("RichMediaPosition"),
                        HAlign  = pdfconstant("Near"),
                        VAlign  = pdfconstant("Near"),
                        HOffset = 0,
                        VOffset = 0,
                    }
                }
            }
        }
    }

    local aref = pdfreference(pdfimmediateobject(tostring(activation)))

    local annotation = pdfdictionary {
       Subtype           = pdfconstant("RichMedia"),
       RichMediaContent  = cref,
       RichMediaSettings = aref,
    }

    return annotation, nil, nil

end