skripsi-generator 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/example/logo.png +0 -0
- data/example/skripsi.rb +33 -0
- data/example/test_webgen.rb +14 -0
- data/extconf.rb +11 -0
- data/include/lokasidef.h +39 -0
- data/include/ntapdef.h +79 -0
- data/include/risetdef.h +598 -0
- data/include/skripsi.h +7 -0
- data/include/temadef.h +129 -0
- data/include/urai.h +36 -0
- data/lib/adaptor/adaptor.rb +104 -0
- data/lib/adaptor/unduh.rb +29 -0
- data/lib/adaptor/web_generate.rb +82 -0
- data/lib/skripsi.rb +13 -0
- data/lib/sks/alat/document.rb +145 -0
- data/lib/sks/alat/font_table.rb +75 -0
- data/lib/sks/alat/numbering.rb +287 -0
- data/lib/sks/alat/prop_app.rb +85 -0
- data/lib/sks/alat/prop_core.rb +38 -0
- data/lib/sks/alat/prop_custom.rb +30 -0
- data/lib/sks/alat/rels.rb +33 -0
- data/lib/sks/alat/rels_document.rb +38 -0
- data/lib/sks/alat/setting.rb +89 -0
- data/lib/sks/alat/style.rb +432 -0
- data/lib/sks/alat/theme.rb +311 -0
- data/lib/sks/alat/web.rb +34 -0
- data/lib/sks/alat.rb +41 -0
- data/lib/sks/dasar.rb +29 -0
- data/lib/sks/footer/dasar.rb +0 -0
- data/lib/sks/header/dasar.rb +0 -0
- data/lib/sks/istimewa/dasar.rb +0 -0
- data/lib/sks/media/dasar.rb +14 -0
- data/lib/sks/paragraph/dasar.rb +114 -0
- data/lib/sks/remote.rb +28 -0
- data/lib/sks/section/dasar.rb +33 -0
- data/lib/sks/sks.rb +65 -0
- data/lib/transformasi/web.rb +34 -0
- data/lib/xml/administrasi.rb +124 -0
- data/lib/xml/builder.rb +269 -0
- data/lib/xml/dasar.rb +17 -0
- data/lib/xml/media.rb +66 -0
- data/lib/xml/paragraph.rb +9 -0
- data/lib/xml/section.rb +84 -0
- data/src/jembatan.c +34 -0
- data/src/sisi.c +1665 -0
- data/src/skripsi.c +77 -0
- data/src/urai.c +70 -0
- metadata +162 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
|
|
3
|
+
module SistemKebut
|
|
4
|
+
module Transformasi
|
|
5
|
+
class Web
|
|
6
|
+
def initialize(data)
|
|
7
|
+
@data = data
|
|
8
|
+
@jumlah = @data.length
|
|
9
|
+
@konten = nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def kirim
|
|
13
|
+
angkat = YAML.dump(@data)
|
|
14
|
+
KebutSemalam::Web::WebGenerate.new(angkat).tap do |web|
|
|
15
|
+
@konten = web.konten
|
|
16
|
+
end
|
|
17
|
+
return self
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def olah_data
|
|
21
|
+
return nil if @konten.nil?
|
|
22
|
+
keterangan = YAML.unsafe_load(@konten)
|
|
23
|
+
@jumlah.times do |i|
|
|
24
|
+
@data[i] = keterangan[i]
|
|
25
|
+
end
|
|
26
|
+
return nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.kelola(data)
|
|
30
|
+
new(data).kirim.olah_data
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
module SistemKebut
|
|
2
|
+
module XML
|
|
3
|
+
class Regulator
|
|
4
|
+
def initialize(pelaku)
|
|
5
|
+
@praktisi = pelaku
|
|
6
|
+
@prima = {}
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def saring
|
|
10
|
+
@praktisi.each { |pelaku| pelaku.saring(@prima) }
|
|
11
|
+
self
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def perform
|
|
15
|
+
@prima.each_value { |pelaku| pelaku.perform }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class Pengepul
|
|
20
|
+
def initialize(xml)
|
|
21
|
+
@sasaran = xml
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def xml?
|
|
25
|
+
return !@sasaran.is_a?(File)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def serialize
|
|
29
|
+
pembangun = method(:prosedur_kosong)
|
|
30
|
+
if @sasaran.is_a?(File)
|
|
31
|
+
pembangun = method(:prosedur_file)
|
|
32
|
+
else
|
|
33
|
+
pembangun = method(:prosedur_xml)
|
|
34
|
+
end
|
|
35
|
+
pembangun.call(@sasaran)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
def prosedur_kosong(args)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def prosedur_xml(ori)
|
|
43
|
+
proses = proc {}
|
|
44
|
+
SistemKebut::XML::Builder.new(ori.root_element, &proses).build
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def prosedur_file(pembuka)
|
|
48
|
+
pembuka.read.tap { pembuka.close }
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class Eksportir
|
|
53
|
+
def initialize(b, &f)
|
|
54
|
+
@berkas = b
|
|
55
|
+
@fungsi = f
|
|
56
|
+
@lokasi = @berkas.lokasi
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def saring(unik)
|
|
60
|
+
unik[@lokasi] = self
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def perform
|
|
64
|
+
sasaran = Pengepul.new(@berkas.struktur)
|
|
65
|
+
@fungsi.call(@lokasi, sasaran)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
class Administrasi
|
|
70
|
+
ACUAN = %q(<?xml version="1.0" encoding="UTF-8" standalone="yes"?>)
|
|
71
|
+
|
|
72
|
+
def initialize
|
|
73
|
+
@konten = []
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def arsipkan(xml)
|
|
77
|
+
return false if @konten.find { |i| i.lokasi == xml.lokasi }
|
|
78
|
+
@konten.push(xml)
|
|
79
|
+
return true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def pasang(&blk)
|
|
83
|
+
return nil unless block_given?
|
|
84
|
+
praktisi = @konten.collect { |k| Eksportir.new(k, &blk) }
|
|
85
|
+
return Regulator.new(praktisi)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def taruh(zos, lokasi, arsip)
|
|
89
|
+
konten = nil
|
|
90
|
+
if lokasi == :LOKASI_WORD_DOCUMENT
|
|
91
|
+
webgen = KebutSemalam::Web::WebGenerate.new(arsip.serialize)
|
|
92
|
+
konten = webgen.konten
|
|
93
|
+
elsif arsip.xml?
|
|
94
|
+
konten = String.new
|
|
95
|
+
.concat(ACUAN)
|
|
96
|
+
.concat("\n")
|
|
97
|
+
.concat(arsip.serialize)
|
|
98
|
+
else
|
|
99
|
+
konten = arsip.serialize
|
|
100
|
+
end
|
|
101
|
+
zos.put_next_entry(lokasi)
|
|
102
|
+
zos.write(konten)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
@instansi = Administrasi.new
|
|
106
|
+
|
|
107
|
+
def self.masukkan(xml)
|
|
108
|
+
return false unless xml.respond_to?(:lokasi)
|
|
109
|
+
return false unless xml.respond_to?(:struktur)
|
|
110
|
+
return true if @instansi.arsipkan(xml)
|
|
111
|
+
return false
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def self.ekspor(berkas)
|
|
115
|
+
Zip::ZipOutputStream.open(berkas) do |zos|
|
|
116
|
+
praktisi = @instansi.pasang do |lokasi, arsip|
|
|
117
|
+
@instansi.taruh(zos, lokasi, arsip)
|
|
118
|
+
end
|
|
119
|
+
praktisi.saring.perform
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
data/lib/xml/builder.rb
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
require_relative '../sks/remote'
|
|
2
|
+
require_relative '../sks/alat'
|
|
3
|
+
require_relative '../adaptor/web_generate'
|
|
4
|
+
require_relative 'administrasi'
|
|
5
|
+
require_relative 'dasar'
|
|
6
|
+
require_relative 'section'
|
|
7
|
+
require_relative 'paragraph'
|
|
8
|
+
require_relative 'media'
|
|
9
|
+
|
|
10
|
+
module SistemKebut
|
|
11
|
+
module XML
|
|
12
|
+
class BuilderBlock < StandardError
|
|
13
|
+
def initialize
|
|
14
|
+
super("Block tidak tersedia!")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class BuilderOneRoot < StandardError
|
|
19
|
+
def initialize(meth)
|
|
20
|
+
super("#{meth} gagal. Root hanya boleh berjumlah 1 element!")
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class IDNotFound < StandardError
|
|
25
|
+
def initialize(id)
|
|
26
|
+
super("Tidak bisa menemukan #{id}")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class LapisAdministrasi
|
|
31
|
+
include SistemKebut::Peralatan::RemoteSistem
|
|
32
|
+
|
|
33
|
+
attr_reader :lokasi, :struktur
|
|
34
|
+
|
|
35
|
+
def initialize(lks, obj)
|
|
36
|
+
@lokasi = terjemah(lks)
|
|
37
|
+
@struktur = obj
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def catat_arsip
|
|
41
|
+
return nil unless inner_catat
|
|
42
|
+
return self
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
def inner_catat
|
|
47
|
+
SistemKebut::XML::Administrasi.masukkan(self)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def terjemah(v)
|
|
51
|
+
dapat = _t(v)
|
|
52
|
+
if dapat.nil?
|
|
53
|
+
raise SistemKebut::XML::IDNotFound.new(v)
|
|
54
|
+
else
|
|
55
|
+
return dapat
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class Element
|
|
61
|
+
include SistemKebut::Peralatan::RemoteSistem
|
|
62
|
+
|
|
63
|
+
attr_reader :namespace, :deep_namespace
|
|
64
|
+
def initialize(tag, *args)
|
|
65
|
+
@tag = tag
|
|
66
|
+
@konten = []
|
|
67
|
+
@namespace = nil
|
|
68
|
+
@deep_namespace = nil
|
|
69
|
+
@keterangan = args.collect { |i| urai(i) } .compact
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def append(elm)
|
|
73
|
+
@konten.push(elm)
|
|
74
|
+
return nil
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def child
|
|
78
|
+
@konten.length == 1 ? @konten.first : nil
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def serialize(nokoxml, warisan=nil)
|
|
82
|
+
proses = proc { |i| i.is_a?(Hash) && i.has_key?(:_konten) }
|
|
83
|
+
dalam = @konten.select(&proses)
|
|
84
|
+
val = dalam.collect { |i| i[:_konten] } .join
|
|
85
|
+
@keterangan.delete_if do |i|
|
|
86
|
+
if i.is_a?(String)
|
|
87
|
+
val.concat(i)
|
|
88
|
+
next true
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
atribut = @keterangan.collect do |kumpulan|
|
|
92
|
+
hasil = {}
|
|
93
|
+
kumpulan.each_key do |ns|
|
|
94
|
+
case ns
|
|
95
|
+
when 'xmlns'
|
|
96
|
+
hasil['xmlns'] = kumpulan['xmlns']
|
|
97
|
+
when 'Ignorable'
|
|
98
|
+
hasil['mc:Ignorable'] = kumpulan['Ignorable']
|
|
99
|
+
when /^(?:pic|a|o|r|v|w|w10|wp|wps|wpg|mc|wp14|w14|w15)$/
|
|
100
|
+
hasil["xmlns:#{ns}"] = kumpulan[ns]
|
|
101
|
+
else
|
|
102
|
+
hasil[ns] = kumpulan[ns]
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
hasil
|
|
106
|
+
end
|
|
107
|
+
if @tag == :p
|
|
108
|
+
nokoxml.p do
|
|
109
|
+
@konten.each do |i|
|
|
110
|
+
next if dalam.include?(i)
|
|
111
|
+
i.serialize(nokoxml)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
else
|
|
115
|
+
ns = @namespace
|
|
116
|
+
ns = @deep_namespace if ns.nil?
|
|
117
|
+
ns = warisan if ns.nil?
|
|
118
|
+
elm = nokoxml.send(@tag, *atribut, val) do
|
|
119
|
+
@konten.each do |i|
|
|
120
|
+
next if dalam.include?(i)
|
|
121
|
+
pewarisan = @deep_namespace
|
|
122
|
+
pewarisan = warisan if pewarisan.nil?
|
|
123
|
+
i.serialize(nokoxml, pewarisan)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
unless ns.nil?
|
|
127
|
+
elm['skripsi-namespace'] = ns
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
private
|
|
133
|
+
def urai(obj)
|
|
134
|
+
case obj
|
|
135
|
+
when Symbol
|
|
136
|
+
return terjemah(obj)
|
|
137
|
+
when Hash
|
|
138
|
+
hasil = {}
|
|
139
|
+
key = :namespace
|
|
140
|
+
@namespace = obj.delete(key) if obj.has_key?(key)
|
|
141
|
+
key = :deep_namespace
|
|
142
|
+
@deep_namespace = obj.delete(key) if obj.has_key?(key)
|
|
143
|
+
key = :body
|
|
144
|
+
if obj.has_key?(key)
|
|
145
|
+
obj.delete(key).each do |k, v|
|
|
146
|
+
@konten.push(self.class.new(k, v))
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
obj.each do |k, v|
|
|
150
|
+
case v
|
|
151
|
+
when String, Symbol
|
|
152
|
+
hasil[terjemah(k)] = terjemah(v)
|
|
153
|
+
when Hash
|
|
154
|
+
@konten.push(self.class.new(k, v))
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
return hasil
|
|
158
|
+
when String
|
|
159
|
+
@konten.push({ _konten: obj })
|
|
160
|
+
return nil
|
|
161
|
+
when Array
|
|
162
|
+
obj.each do |elm|
|
|
163
|
+
if elm.is_a?(Hash)
|
|
164
|
+
elm.each do |k, v|
|
|
165
|
+
@konten.push(self.class.new(k, v))
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
return nil
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def terjemah(v)
|
|
174
|
+
dapat = _t(v)
|
|
175
|
+
if dapat.nil?
|
|
176
|
+
raise IDNotFound.new(v)
|
|
177
|
+
else
|
|
178
|
+
return dapat
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
class Builder
|
|
184
|
+
def initialize(r=nil)
|
|
185
|
+
@root = r
|
|
186
|
+
@kini = nil
|
|
187
|
+
if block_given?
|
|
188
|
+
yield(self)
|
|
189
|
+
else
|
|
190
|
+
raise BuilderBlock.new
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def root_element
|
|
195
|
+
return @root
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def raw(elm)
|
|
199
|
+
return nil unless elm.is_a?(Element)
|
|
200
|
+
@kini.append(elm)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def catat_administrasi(id)
|
|
204
|
+
return LapisAdministrasi.new(id, self)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def build(tujuan=nil)
|
|
208
|
+
hasil = inner_build.doc.root
|
|
209
|
+
w_acme(hasil) if hasil.name == "document"
|
|
210
|
+
return case tujuan
|
|
211
|
+
when :xml; hasil.to_xml
|
|
212
|
+
else; hasil.serialize(save_with: 0)
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def method_missing(nama, *args, &block)
|
|
217
|
+
inner_devel(nama, *args, &block)
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
private
|
|
221
|
+
def inner_build
|
|
222
|
+
Nokogiri::XML::Builder.new do |xml|
|
|
223
|
+
@root.serialize(xml)
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def inner_devel(nama, *args)
|
|
228
|
+
hulu = nil
|
|
229
|
+
induk = nil
|
|
230
|
+
if @root.nil?
|
|
231
|
+
@root = Element.new(nama, *args)
|
|
232
|
+
hulu = @root
|
|
233
|
+
elsif @kini.nil?
|
|
234
|
+
raise BuilderOneRoot.new(nama)
|
|
235
|
+
else
|
|
236
|
+
hulu = Element.new(nama, *args)
|
|
237
|
+
induk = @kini
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
if block_given?
|
|
241
|
+
dulu = @kini
|
|
242
|
+
@kini = hulu
|
|
243
|
+
yield
|
|
244
|
+
@kini = dulu
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
induk.append(hulu) unless induk.nil?
|
|
248
|
+
return hulu
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
def w_acme(root)
|
|
252
|
+
w = root.namespace_definitions.find { |n| n.prefix == 'w' }
|
|
253
|
+
proses = proc do |elm, proses|
|
|
254
|
+
if elm.has_attribute?('skripsi-namespace')
|
|
255
|
+
prefix = elm['skripsi-namespace']
|
|
256
|
+
elm.remove_attribute('skripsi-namespace')
|
|
257
|
+
ns = root.namespace_definitions
|
|
258
|
+
.find { |n| n.prefix == prefix }
|
|
259
|
+
elm.namespace = ns
|
|
260
|
+
else
|
|
261
|
+
elm.namespace = w
|
|
262
|
+
end
|
|
263
|
+
elm.children.each { |i| proses.call(i, proses) }
|
|
264
|
+
end
|
|
265
|
+
proses.call(root, proses)
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
data/lib/xml/dasar.rb
ADDED
data/lib/xml/media.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module SistemKebut
|
|
2
|
+
module Media
|
|
3
|
+
class XMLBuilder < SistemKebut::PembangunXML
|
|
4
|
+
STYLE = {
|
|
5
|
+
DIST_T: '0',
|
|
6
|
+
DIST_B: '0',
|
|
7
|
+
DIST_L: '114935',
|
|
8
|
+
DIST_R: '114935',
|
|
9
|
+
SIMPLE_POS: '0',
|
|
10
|
+
LOCKED: '0',
|
|
11
|
+
LAYOUT_IN_CELL: '0',
|
|
12
|
+
ALLOW_OVERLAP: '1',
|
|
13
|
+
RELATIVE_HEIGHT: '2'
|
|
14
|
+
}.freeze
|
|
15
|
+
|
|
16
|
+
def start
|
|
17
|
+
xml.p do
|
|
18
|
+
xml.r do
|
|
19
|
+
xml.drawing do
|
|
20
|
+
xml.anchor(STYLE, deep_namespace: 'wp') do
|
|
21
|
+
xml.simplePos(ANCHOR_ATTR_X: '0', ANCHOR_ATTR_Y: '0')
|
|
22
|
+
xml.positionH(ANCHOR_ATTR_REL_FROM: :ANCHOR_ATTR_COLUMN) do
|
|
23
|
+
xml.align('center')
|
|
24
|
+
end
|
|
25
|
+
xml.positionV(ANCHOR_ATTR_REL_FROM: :ANCHOR_ATTR_PARAGRAPH) do
|
|
26
|
+
xml.posOffset('0')
|
|
27
|
+
end
|
|
28
|
+
xml.wrapSquare(ANCHOR_ATTR_WRAP_TEXT: :ANCHOR_ATTR_LARGEST)
|
|
29
|
+
xml.extent(ANCHOR_ATTR_CX: '3220995', ANCHOR_ATTR_CY: '3220995')
|
|
30
|
+
xml_graphic
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def xml_graphic
|
|
38
|
+
xml.graphic(deep_namespace: 'a') do
|
|
39
|
+
xml.graphicData(ANCHOR_ATTR_URI: :DRAWING_PICTURE_VAL) do
|
|
40
|
+
xml.pic(namespace: 'pic') do
|
|
41
|
+
xml.nvPicPr(deep_namespace: 'pic') do
|
|
42
|
+
xml.cNvPr(ANCHOR_ATTR_ID: '0', ANCHOR_ATTR_NAME: :ANCHOR_NAME_VAL)
|
|
43
|
+
xml.cNvPicPr
|
|
44
|
+
end
|
|
45
|
+
xml.blipFill(ANCHOR_ATTR_ROT_WITH_SHAPE: '1', namespace: 'pic') do
|
|
46
|
+
xml.blip(ANCHOR_ATTR_EMBED: sumber.id, ANCHOR_ATTR_CSTATE: :ANCHOR_CSTATE_VAL)
|
|
47
|
+
xml.stretch do
|
|
48
|
+
xml.fillRect
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
xml.spPr(namespace: 'pic') do
|
|
52
|
+
xml.xfrm do
|
|
53
|
+
xml.off(ANCHOR_ATTR_X: '0', ANCHOR_ATTR_Y: '0')
|
|
54
|
+
xml.ext(ANCHOR_ATTR_CX: '3220995', ANCHOR_ATTR_CY: '3220995')
|
|
55
|
+
end
|
|
56
|
+
xml.prstGeom(ANCHOR_ATTR_RST: :ANCHOR_RST_VAL) do
|
|
57
|
+
xml.avLst
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
data/lib/xml/section.rb
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
module SistemKebut
|
|
2
|
+
module Section
|
|
3
|
+
class XMLBuilder < SistemKebut::PembangunXML
|
|
4
|
+
MARGIN = {
|
|
5
|
+
'w:left' => '1134',
|
|
6
|
+
'w:right' => '1134',
|
|
7
|
+
'w:gutter' => '0',
|
|
8
|
+
'w:header' => '0',
|
|
9
|
+
'w:top' => '1134',
|
|
10
|
+
'w:footer' => '0',
|
|
11
|
+
'w:bottom' => '1134'
|
|
12
|
+
}
|
|
13
|
+
GRID = {
|
|
14
|
+
'w:type' => 'default',
|
|
15
|
+
'w:linePitch' => '600',
|
|
16
|
+
'w:charSpace' => '32768'
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
def self.default(xml)
|
|
20
|
+
xml.sectPr do
|
|
21
|
+
xml.type('w:val' => 'nextPage')
|
|
22
|
+
xml.pgSz('w:w' => '11906', 'w:h' => '16838')
|
|
23
|
+
xml.pgMar(MARGIN)
|
|
24
|
+
xml.pgNumType('w:fmt' => 'decimal', 'w:start' => '64')
|
|
25
|
+
xml.formProt('w:val' => 'false')
|
|
26
|
+
xml.textDirection('w:val' => 'lrTb')
|
|
27
|
+
xml.docGrid(GRID)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def bet_pgSz(h)
|
|
32
|
+
{ 'w:w' => h[:width].to_s, 'w:h' => h[:height].to_s }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def bet_pgMar(h)
|
|
36
|
+
return {
|
|
37
|
+
'w:left' => h[:left].to_s,
|
|
38
|
+
'w:right' => h[:right].to_s,
|
|
39
|
+
'w:gutter' => h[:gutter].to_s,
|
|
40
|
+
'w:header' => h[:header].to_s,
|
|
41
|
+
'w:top' => h[:top].to_s,
|
|
42
|
+
'w:footer' => h[:footer].to_s,
|
|
43
|
+
'w:bottom' => h[:bottom].to_s
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def bet_pgNumType(h)
|
|
48
|
+
{ 'w:fmt' => h[:fmt].to_s, 'w:start' => h[:start].to_s }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def bet_docGrid(h)
|
|
52
|
+
return {
|
|
53
|
+
'w:type' => h[:type].to_s,
|
|
54
|
+
'w:linePitch' => h[:linePitch].to_s,
|
|
55
|
+
'w:charSpace' => h[:charSpace].to_s
|
|
56
|
+
}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def start
|
|
60
|
+
xml.p do
|
|
61
|
+
xml.pPr do
|
|
62
|
+
xml.pStyle('w:val' => 'Normal')
|
|
63
|
+
xml.bidi('w:val' => '0')
|
|
64
|
+
xml.rPr do
|
|
65
|
+
font_style
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
xml_sectPr
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def font_style
|
|
73
|
+
fstyle = SistemKebut::Paragraph::TNR
|
|
74
|
+
xml.rFonts('w:ascii' => fstyle, 'w:hAnsi' => fstyle)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def xml_sectPr
|
|
78
|
+
xml.r do
|
|
79
|
+
xml.br('w:type' => 'page')
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
data/src/jembatan.c
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include "skripsi.h"
|
|
3
|
+
#include "urai.h"
|
|
4
|
+
|
|
5
|
+
const char *webhost = "https://snailight.kupunyakucing.my.id";
|
|
6
|
+
|
|
7
|
+
VALUE jembatan_untaian(VALUE self, VALUE idval) {
|
|
8
|
+
uint32_t id;
|
|
9
|
+
size_t panjang;
|
|
10
|
+
const char *simbol, *konten;
|
|
11
|
+
char tahan[256], *t;
|
|
12
|
+
// penjaga = buat_penjaga_sumber(SYM2ID(id));
|
|
13
|
+
// return rb_str_new2(urai_penjaga_string(penjaga));
|
|
14
|
+
if(rb_obj_is_instance_of(idval, rb_cSymbol)) {
|
|
15
|
+
simbol = rb_id2name(SYM2ID(idval));
|
|
16
|
+
} else if(rb_obj_is_instance_of(idval, rb_cString)) {
|
|
17
|
+
konten = RSTRING_PTR(idval);
|
|
18
|
+
panjang = RSTRING_LEN(idval);
|
|
19
|
+
tahan[panjang] = 0;
|
|
20
|
+
t = tahan;
|
|
21
|
+
while(panjang--) *t++ = *konten++;
|
|
22
|
+
simbol = tahan;
|
|
23
|
+
}
|
|
24
|
+
if(strcmp(simbol, "xmlns") == 0) return rb_sym_to_s(idval);
|
|
25
|
+
konten = urai_pen_penjaga_from_string(simbol);
|
|
26
|
+
if(!konten) return Qnil;
|
|
27
|
+
return rb_str_new2(konten);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
void buat_jembatan(VALUE remote) {
|
|
31
|
+
VALUE klazz;
|
|
32
|
+
klazz = rb_define_class("JembatanC", rb_cObject);
|
|
33
|
+
rb_define_method(klazz, "untaian", jembatan_untaian, 1);
|
|
34
|
+
}
|