File Coverage

xs/outline.xs
Criterion Covered Total %
statement 37 60 61.6
branch 14 36 38.8
condition n/a
subroutine n/a
pod n/a
total 51 96 53.1


line stmt bran cond sub pod time code
1             MODULE = PDF::Make PACKAGE = PDF::Make::Outline
2             PROTOTYPES: ENABLE
3              
4             const char *
5             title(self)
6             SV *self
7             PREINIT:
8             pdfmake_outline_item_t *item;
9             CODE:
10 7           item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
11 7 50         RETVAL = item->title ? item->title : "";
12             OUTPUT:
13             RETVAL
14              
15             int
16             is_open(self)
17             SV *self
18             PREINIT:
19             pdfmake_outline_item_t *item;
20             CODE:
21 5           item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
22 5 100         RETVAL = item->open;
23             OUTPUT:
24             RETVAL
25              
26             void
27             set_open(self, open)
28             SV *self
29             int open
30             PREINIT:
31             pdfmake_outline_item_t *item;
32             CODE:
33 4           item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
34 4           pdfmake_outline_set_open(item, open);
35              
36             int
37             count(self)
38             SV *self
39             PREINIT:
40             pdfmake_outline_item_t *item;
41             CODE:
42 0           item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
43 0 0         RETVAL = item->count;
44             OUTPUT:
45             RETVAL
46              
47             UV
48             dest_page(self)
49             SV *self
50             PREINIT:
51             pdfmake_outline_item_t *item;
52             CODE:
53 4           item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
54 4 100         RETVAL = (UV)item->dest.page_index;
55             OUTPUT:
56             RETVAL
57              
58             SV *
59             add_child(self, title, page_index, dest_type = "Fit", left = 0, top = 0, zoom = 0)
60             SV *self
61             const char *title
62             UV page_index
63             const char *dest_type
64             double left
65             double top
66             double zoom
67             PREINIT:
68             pdfmake_dest_t dest;
69             pdfmake_outline_item_t *parent_item, *child;
70             SV *sv;
71             CODE:
72 13           parent_item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
73              
74 13 50         if (strEQ(dest_type, "XYZ")) {
75 0           dest = pdfmake_dest_xyz((size_t)page_index, left, top, zoom);
76             }
77 13 50         else if (strEQ(dest_type, "Fit")) {
78 13           dest = pdfmake_dest_fit((size_t)page_index);
79             }
80 0 0         else if (strEQ(dest_type, "FitH")) {
81 0           dest = pdfmake_dest_fith((size_t)page_index, top);
82             }
83 0 0         else if (strEQ(dest_type, "FitV")) {
84 0           dest = pdfmake_dest_fitv((size_t)page_index, left);
85             }
86 0 0         else if (strEQ(dest_type, "FitB")) {
87 0           dest = pdfmake_dest_fitb((size_t)page_index);
88             }
89 0 0         else if (strEQ(dest_type, "FitBH")) {
90 0           dest = pdfmake_dest_fitbh((size_t)page_index, top);
91             }
92 0 0         else if (strEQ(dest_type, "FitBV")) {
93 0           dest = pdfmake_dest_fitbv((size_t)page_index, left);
94             }
95             else {
96 0           dest = pdfmake_dest_fit((size_t)page_index);
97             }
98              
99 13           child = pdfmake_outline_add_child(parent_item, title, dest);
100 13 50         if (!child)
101 0           croak("PDF::Make::Outline::add_child: failed to create child");
102              
103 13           sv = newSV(0);
104 13           sv_setref_pv(sv, "PDF::Make::Outline", (void *)child);
105 13           RETVAL = sv;
106             OUTPUT:
107             RETVAL
108              
109             void
110             children(self)
111             SV *self
112             PPCODE:
113 1           pdfmake_outline_item_t *parent_item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
114 1           pdfmake_outline_item_t *child = parent_item->first;
115 4 100         while (child) {
116 3           SV *sv = sv_newmortal();
117 3           sv_setref_pv(sv, "PDF::Make::Outline", (void *)child);
118 3 50         XPUSHs(sv);
119 3           child = child->next;
120             }
121              
122             int
123             has_children(self)
124             SV *self
125             PREINIT:
126             pdfmake_outline_item_t *item;
127             CODE:
128 1           item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
129 1 50         RETVAL = (item->first != NULL);
130             OUTPUT:
131             RETVAL
132              
133             SV *
134             parent(self)
135             SV *self
136             PREINIT:
137             pdfmake_outline_item_t *item;
138             SV *sv;
139             CODE:
140 1           item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
141 1 50         if (!item->parent)
142 0           XSRETURN_UNDEF;
143 1           sv = newSV(0);
144 1           sv_setref_pv(sv, "PDF::Make::Outline", (void *)item->parent);
145 1           RETVAL = sv;
146             OUTPUT:
147             RETVAL
148              
149             SV *
150             next_sibling(self)
151             SV *self
152             PREINIT:
153             pdfmake_outline_item_t *item;
154             SV *sv;
155             CODE:
156 1           item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
157 1 50         if (!item->next)
158 0           XSRETURN_UNDEF;
159 1           sv = newSV(0);
160 1           sv_setref_pv(sv, "PDF::Make::Outline", (void *)item->next);
161 1           RETVAL = sv;
162             OUTPUT:
163             RETVAL
164              
165             SV *
166             prev_sibling(self)
167             SV *self
168             PREINIT:
169             pdfmake_outline_item_t *item;
170             SV *sv;
171             CODE:
172 0           item = INT2PTR(pdfmake_outline_item_t *, SvIV(SvRV(self)));
173 0 0         if (!item->prev)
174 0           XSRETURN_UNDEF;
175 0           sv = newSV(0);
176 0           sv_setref_pv(sv, "PDF::Make::Outline", (void *)item->prev);
177 0           RETVAL = sv;
178             OUTPUT:
179             RETVAL
180              
181             void
182             DESTROY(self)
183             SV *self
184             CODE:
185             /* Item is doc-owned; zero the pointer to prevent stale access */
186 35           SvIV_set(SvRV(self), 0);