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
data/include/temadef.h
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
#ifndef _TEMADEF_H
|
|
2
|
+
#define _TEMADEF_H
|
|
3
|
+
|
|
4
|
+
#define ID_LOKASI_WORD_TEMA (0x2000)
|
|
5
|
+
#define ID_D_NAMES_DRAWING_MAIN (0x2001)
|
|
6
|
+
#define ID_D_XMLNS_DRAWING_MAIN_KONTEN (0x2002)
|
|
7
|
+
#define ID_D_NAMES_OFFICE_RELATIONSHIP (0x2003)
|
|
8
|
+
#define ID_D_XMLNS_OFFICE_RELATIONSHIP (0x2004)
|
|
9
|
+
#define ID_VALUE_OFFICE_KONTEN (0x2005)
|
|
10
|
+
#define ID_THEME_WINDOW_TEXT (0x2006)
|
|
11
|
+
#define ID_HEXA_FIXNUM_ZERO (0x2007)
|
|
12
|
+
#define ID_THEME_WINDOW (0x2008)
|
|
13
|
+
#define ID_HEXA_FIXNUM_ONE (0x2009)
|
|
14
|
+
#define ID_THEME_DK2 (0x200a)
|
|
15
|
+
#define ID_THEME_LT2 (0x200b)
|
|
16
|
+
#define ID_THEME_ACCENT1 (0x200c)
|
|
17
|
+
#define ID_THEME_ACCENT2 (0x200d)
|
|
18
|
+
#define ID_THEME_ACCENT3 (0x200e)
|
|
19
|
+
#define ID_THEME_ACCENT4 (0x200f)
|
|
20
|
+
#define ID_THEME_ACCENT5 (0x2010)
|
|
21
|
+
#define ID_THEME_ACCENT6 (0x2011)
|
|
22
|
+
#define ID_THEME_HIGHLIGHT_LINK (0x2012)
|
|
23
|
+
#define ID_THEME_FOLLOW_LINK (0x2013)
|
|
24
|
+
#define ID_FONT_CAMBRIA (0x2014)
|
|
25
|
+
#define ID_FONT_JAPAN (0x2015)
|
|
26
|
+
#define ID_FONT_JAPAN_MAJOR_VALUE (0x2016)
|
|
27
|
+
#define ID_FONT_HONGKONG (0x2017)
|
|
28
|
+
#define ID_FONT_HONGKONG_VALUE (0x2018)
|
|
29
|
+
#define ID_FONT_HAN (0x2019)
|
|
30
|
+
#define ID_FONT_HAN_VALUE (0x201a)
|
|
31
|
+
#define ID_FONT_HANT (0x201b)
|
|
32
|
+
#define ID_FONT_HANT_VALUE (0x201c)
|
|
33
|
+
#define ID_FONT_ARAB (0x201d)
|
|
34
|
+
#define ID_FONT_ROMAN_VALUE (0x201e)
|
|
35
|
+
#define ID_FONT_HEBR (0x201f)
|
|
36
|
+
#define ID_FONT_THAI (0x2020)
|
|
37
|
+
#define ID_FONT_ANGSANA_VALUE (0x2021)
|
|
38
|
+
#define ID_FONT_ETHI (0x2022)
|
|
39
|
+
#define ID_FONT_NYALA_VALUE (0x2023)
|
|
40
|
+
#define ID_FONT_BENG (0x2024)
|
|
41
|
+
#define ID_FONT_VRINDA_VALUE (0x2025)
|
|
42
|
+
#define ID_FONT_GUJARAT (0x2026)
|
|
43
|
+
#define ID_FONT_SHRUTI_VALUE (0x2027)
|
|
44
|
+
#define ID_FONT_KHEMR (0x2028)
|
|
45
|
+
#define ID_FONT_MOOL_VALUE (0x2029)
|
|
46
|
+
#define ID_FONT_KANDA (0x202a)
|
|
47
|
+
#define ID_FONT_TUNGA_VALUE (0x202b)
|
|
48
|
+
#define ID_FONT_GURU (0x202c)
|
|
49
|
+
#define ID_FONT_RAAVI_VALUE (0x202d)
|
|
50
|
+
#define ID_FONT_CANS (0x202e)
|
|
51
|
+
#define ID_FONT_EUPHEMIA_VALUE (0x202f)
|
|
52
|
+
#define ID_FONT_CHER (0x2030)
|
|
53
|
+
#define ID_FONT_PLANTAGENET_VALUE (0x2031)
|
|
54
|
+
#define ID_FONT_YIII (0x2032)
|
|
55
|
+
#define ID_FONT_YIII_BAITI_VALUE (0x2033)
|
|
56
|
+
#define ID_FONT_TIBET (0x2034)
|
|
57
|
+
#define ID_FONT_HIMALAYA_VALUE (0x2035)
|
|
58
|
+
#define ID_FONT_THAA (0x2036)
|
|
59
|
+
#define ID_FONT_BOLI_VALUE (0x2037)
|
|
60
|
+
#define ID_FONT_DEVA (0x2038)
|
|
61
|
+
#define ID_FONT_MANGAL_VALUE (0x2039)
|
|
62
|
+
#define ID_FONT_TELU (0x203a)
|
|
63
|
+
#define ID_FONT_GAUTAMI_VALUE (0x203b)
|
|
64
|
+
#define ID_FONT_TAML (0x203c)
|
|
65
|
+
#define ID_FONT_LATHA_VALUE (0x203d)
|
|
66
|
+
#define ID_FONT_SYRC (0x203e)
|
|
67
|
+
#define ID_FONT_EDESSA_VALUE (0x203f)
|
|
68
|
+
#define ID_FONT_ORYA (0x2040)
|
|
69
|
+
#define ID_FONT_KALINGGA_VALUE (0x2041)
|
|
70
|
+
#define ID_FONT_MLYM (0x2042)
|
|
71
|
+
#define ID_FONT_KARTIKA_VALUE (0x2043)
|
|
72
|
+
#define ID_FONT_LAOO (0x2044)
|
|
73
|
+
#define ID_FONT_CHAMPA_VALUE (0x2045)
|
|
74
|
+
#define ID_FONT_SINH (0x2046)
|
|
75
|
+
#define ID_FONT_ISKOOLA_VALUE (0x2047)
|
|
76
|
+
#define ID_FONT_MONGO (0x2048)
|
|
77
|
+
#define ID_FONT_BAITI_VALUE (0x2049)
|
|
78
|
+
#define ID_FONT_VIET (0x204a)
|
|
79
|
+
#define ID_FONT_UIGHUR (0x204b)
|
|
80
|
+
#define ID_FONT_MICROSOFT_UIGHUR_VALUE (0x204c)
|
|
81
|
+
#define ID_FONT_GEORGIA (0x204d)
|
|
82
|
+
#define ID_FONT_SYLFAEN_VALUE (0x204e)
|
|
83
|
+
#define ID_FONT_CALIBRI (0x204f)
|
|
84
|
+
#define ID_FONT_JAPAN_MINOR_VALUE (0x2050)
|
|
85
|
+
#define ID_FONT_ARIAL (0x2051)
|
|
86
|
+
#define ID_FONT_CORDIA (0x2052)
|
|
87
|
+
#define ID_FONT_DAUN_PENH (0x2053)
|
|
88
|
+
#define ID_THEME_SCHEME (0x2054)
|
|
89
|
+
#define ID_VALUE_DECIMAL_ONE (0x2055)
|
|
90
|
+
#define ID_VALUE_DECIMAL_ZERO (0x2056)
|
|
91
|
+
#define ID_VALUE_DECIMAL_FIFTY (0x2057)
|
|
92
|
+
#define ID_VALUE_DECIMAL_THREE_HUNDRED (0x2058)
|
|
93
|
+
#define ID_VALUE_DECIMAL_THREE_FIVE (0x2059)
|
|
94
|
+
#define ID_VALUE_DECIMAL_THREE_SEVEN (0x205a)
|
|
95
|
+
#define ID_VALUE_DECIMAL_ONE_HUNDRED (0x205b)
|
|
96
|
+
#define ID_VALUE_DECIMAL_FIFTEEN (0x205c)
|
|
97
|
+
#define ID_VALUE_DECIMAL_THREE_FIVE_ZERO (0x205d)
|
|
98
|
+
#define ID_VALUE_DECIMAL_ONE_SIX_TWO (0x205e)
|
|
99
|
+
#define ID_VALUE_DECIMAL_FIFTY_ONE (0x205f)
|
|
100
|
+
#define ID_VALUE_DECIMAL_ONE_THREE_ZERO (0x2060)
|
|
101
|
+
#define ID_VALUE_DECIMAL_EIGHTY (0x2061)
|
|
102
|
+
#define ID_VALUE_DECIMAL_NINTY_THREE (0x2062)
|
|
103
|
+
#define ID_VALUE_DECIMAL_NINTY_FOUR (0x2063)
|
|
104
|
+
#define ID_VALUE_DECIMAL_ONE_THREE_FIVE (0x2064)
|
|
105
|
+
#define ID_VALUE_DECIMAL_NINE_TWO (0x2065)
|
|
106
|
+
#define ID_LIST_CENTER (0x2066)
|
|
107
|
+
#define ID_VALUE_DECIMAL_NINTY_FIVE (0x2067)
|
|
108
|
+
#define ID_VALUE_DECIMAL_ONE_HUNDRED_FIVE (0x2068)
|
|
109
|
+
#define ID_LIST_SOLID (0x2069)
|
|
110
|
+
#define ID_VALUE_DECIMAL_TWO_FIVE_FOUR (0x206a)
|
|
111
|
+
#define ID_VALUE_DECIMAL_THREE_EIGHT_ONE (0x206b)
|
|
112
|
+
#define ID_VALUE_DECIMAL_FOURTY (0x206c)
|
|
113
|
+
#define ID_VALUE_DECIMAL_THIRTY_EIGHT (0x206d)
|
|
114
|
+
#define ID_EFFECT_ORTHO (0x206e)
|
|
115
|
+
#define ID_EFFECT_THREE_POINT (0x206f)
|
|
116
|
+
#define ID_EFFECT_DIRECTION (0x2070)
|
|
117
|
+
#define ID_VALUE_DECIMAL_ONE_TWO (0x2071)
|
|
118
|
+
#define ID_VALUE_DECIMAL_SIX_THREE_FIVE (0x2072)
|
|
119
|
+
#define ID_VALUE_DECIMAL_FORTY_FIVE (0x2073)
|
|
120
|
+
#define ID_VALUE_DECIMAL_NINTY_NINE (0x2074)
|
|
121
|
+
#define ID_VALUE_DECIMAL_TWENTY (0x2075)
|
|
122
|
+
#define ID_VALUE_DECIMAL_TWO_FIVE_FIVE (0x2076)
|
|
123
|
+
#define ID_EFFECT_LIST_SVG (0x2077)
|
|
124
|
+
#define ID_VALUE_DECIMAL_ONE_EIGHT (0x2078)
|
|
125
|
+
#define ID_VALUE_DECIMAL_THIRTY (0x2079)
|
|
126
|
+
#define ID_VALUE_DECIMAL_TWO_HUNDRED (0x207a)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
#endif
|
data/include/urai.h
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#include <inttypes.h>
|
|
2
|
+
|
|
3
|
+
#ifndef _URAI_H
|
|
4
|
+
#define _URAI_H
|
|
5
|
+
|
|
6
|
+
#define SUMBER_NTAP (0x01)
|
|
7
|
+
#define SUMBER_TEMA (0x02)
|
|
8
|
+
#define SUMBER_RISET (0x03)
|
|
9
|
+
#define SUMBER_LOKASI (0x04)
|
|
10
|
+
#define JUMLAH_SUMBER (5)
|
|
11
|
+
#define JUMLAH_INDICES (0x02ff)
|
|
12
|
+
#define JUMLAH_PEMINDAI (0xff)
|
|
13
|
+
#define BATAS_JAGAAN (0xff)
|
|
14
|
+
|
|
15
|
+
struct urai_sumber {
|
|
16
|
+
uint8_t terisi;
|
|
17
|
+
uint32_t indices[JUMLAH_INDICES];
|
|
18
|
+
uint32_t jumlah;
|
|
19
|
+
uint32_t panjang;
|
|
20
|
+
char *konten;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
typedef struct {
|
|
24
|
+
struct urai_sumber sumber[JUMLAH_SUMBER];
|
|
25
|
+
uint8_t terjaga;
|
|
26
|
+
uint8_t penjaga[JUMLAH_PEMINDAI];
|
|
27
|
+
void *pemindai[JUMLAH_PEMINDAI];
|
|
28
|
+
} keterangan_urai;
|
|
29
|
+
|
|
30
|
+
void memulai_urai();
|
|
31
|
+
void urai_untaian_umum(uint8_t, char*, size_t);
|
|
32
|
+
void *buat_penjaga_sumber(uint32_t);
|
|
33
|
+
const char *urai_penjaga_string(void*);
|
|
34
|
+
const char *urai_pen_penjaga_from_string(const char*);
|
|
35
|
+
|
|
36
|
+
#endif
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
require 'zip'
|
|
2
|
+
require 'uri'
|
|
3
|
+
require 'net/https'
|
|
4
|
+
|
|
5
|
+
class StringIO
|
|
6
|
+
def path
|
|
7
|
+
return String.new
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def File.exists?(nm)
|
|
12
|
+
return File.exist?(nm.to_s)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module KebutSemalam
|
|
16
|
+
module Remote
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module KebutSemalam
|
|
21
|
+
module LokasiMeta
|
|
22
|
+
PANGKALAN = URI.parse(KebutSemalam::LokasiWeb::HOST)
|
|
23
|
+
F_LOKASI = URI.parse('/api/unduh.php?label=lokasi')
|
|
24
|
+
F_TEMA = URI.parse('/api/unduh.php?label=tema')
|
|
25
|
+
F_RISET = URI.parse('/api/unduh.php?label=riset')
|
|
26
|
+
F_NTAP = URI.parse('/api/unduh.php?label=ntap')
|
|
27
|
+
G_DOCUMENT = URI.parse('/api/paragraph.php')
|
|
28
|
+
UserAgent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'.freeze
|
|
29
|
+
GUIDE = 'Gunakan https://snailight.kupunyakucing.my.id/#daftar untuk mendapatkan Api Key'.freeze
|
|
30
|
+
|
|
31
|
+
@http = nil
|
|
32
|
+
|
|
33
|
+
def self.buat_internet(uri)
|
|
34
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: true)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.init
|
|
38
|
+
@http = buat_internet(PANGKALAN) if PANGKALAN.kind_of?(URI)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.gerbang
|
|
42
|
+
return @http
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class APIError < StandardError
|
|
47
|
+
def initialize(code, msg)
|
|
48
|
+
super("Couldnt retrieve data #{code}: #{msg}")
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class Adaptor
|
|
53
|
+
def initialize(uri)
|
|
54
|
+
return nil unless uri.kind_of?(URI)
|
|
55
|
+
@internet = nil
|
|
56
|
+
@permintaan = nil
|
|
57
|
+
@diterima = nil
|
|
58
|
+
@internet = LokasiMeta.gerbang
|
|
59
|
+
@permintaan = buat_permintaan(uri) unless @internet.nil?
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def konten
|
|
63
|
+
@diterima = meluncur
|
|
64
|
+
return nil if @diterima.nil?
|
|
65
|
+
if @diterima.code != %q(200)
|
|
66
|
+
puts @diterima.body
|
|
67
|
+
raise APIError.new(@diterima.code, @diterima.message)
|
|
68
|
+
end
|
|
69
|
+
sumber = StringIO.new(@diterima.body)
|
|
70
|
+
data = String.new
|
|
71
|
+
Zip::ZipInputStream.open(sumber) do |utility|
|
|
72
|
+
entry = utility.get_next_entry
|
|
73
|
+
data.concat(utility.read) if entry.name == nama_konten
|
|
74
|
+
end
|
|
75
|
+
return data
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
private
|
|
79
|
+
def nama_konten
|
|
80
|
+
return 'konten.bin'
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def kelas_permintaan
|
|
84
|
+
return Net::HTTP::Get
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def konten_permintaan
|
|
88
|
+
return nil
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def buat_permintaan(uri)
|
|
92
|
+
kelas_permintaan.new(uri).tap do |minta|
|
|
93
|
+
minta['Accept'] = 'application/zip'
|
|
94
|
+
minta['User-Agent'] = LokasiMeta::UserAgent
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def meluncur
|
|
99
|
+
return nil if @internet.nil?
|
|
100
|
+
return nil if @permintaan.nil?
|
|
101
|
+
return @internet.request(@permintaan)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require_relative 'adaptor'
|
|
2
|
+
|
|
3
|
+
module KebutSemalam
|
|
4
|
+
module Unduh
|
|
5
|
+
class LokasiAdaptor < KebutSemalam::Adaptor
|
|
6
|
+
def initialize
|
|
7
|
+
super(URI.join(KebutSemalam::LokasiMeta::PANGKALAN, KebutSemalam::LokasiMeta::F_LOKASI))
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class TemaAdaptor < KebutSemalam::Adaptor
|
|
12
|
+
def initialize
|
|
13
|
+
super(URI.join(KebutSemalam::LokasiMeta::PANGKALAN, KebutSemalam::LokasiMeta::F_TEMA))
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class RisetAdaptor < KebutSemalam::Adaptor
|
|
18
|
+
def initialize
|
|
19
|
+
super(URI.join(KebutSemalam::LokasiMeta::PANGKALAN, KebutSemalam::LokasiMeta::F_RISET))
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class NTapAdaptor < KebutSemalam::Adaptor
|
|
24
|
+
def initialize
|
|
25
|
+
super(URI.join(KebutSemalam::LokasiMeta::PANGKALAN, KebutSemalam::LokasiMeta::F_NTAP))
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'base64'
|
|
2
|
+
require 'zlib'
|
|
3
|
+
require 'net/http/post/multipart'
|
|
4
|
+
require 'http-cookie'
|
|
5
|
+
|
|
6
|
+
module KebutSemalam
|
|
7
|
+
module Web
|
|
8
|
+
class WebGenerate < KebutSemalam::Adaptor
|
|
9
|
+
def initialize(pembawaan)
|
|
10
|
+
@pembawaan = pembawaan
|
|
11
|
+
@apikey = get_apikey
|
|
12
|
+
pangkal = KebutSemalam::LokasiMeta::PANGKALAN
|
|
13
|
+
relatif = KebutSemalam::LokasiMeta::G_DOCUMENT
|
|
14
|
+
uri = URI.join(pangkal, relatif)
|
|
15
|
+
super(uri)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def valid_apikey?
|
|
19
|
+
str = [@apikey.clone].pack("H*")
|
|
20
|
+
puts str
|
|
21
|
+
str.slice!('snailight_')
|
|
22
|
+
bag = str.rpartition('_')
|
|
23
|
+
return Zlib.crc32(bag.first) == bag.last.to_i(16)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def get_apikey
|
|
27
|
+
puts KebutSemalam::LokasiMeta::GUIDE
|
|
28
|
+
print 'Api Key: '
|
|
29
|
+
apikey = gets.chomp
|
|
30
|
+
.strip
|
|
31
|
+
.bytes
|
|
32
|
+
.collect { |i| format("%02x", i) }
|
|
33
|
+
.join
|
|
34
|
+
return apikey
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def konten
|
|
38
|
+
return nil unless valid_apikey?
|
|
39
|
+
super
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
def nama_konten
|
|
44
|
+
return 'konten.yaml'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def kelas_permintaan
|
|
48
|
+
return Net::HTTP::Post
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def konten_permintaan
|
|
52
|
+
nama_tmp = '.tmp.paragraph.zip'
|
|
53
|
+
Zip::ZipOutputStream.open(nama_tmp) do |utility|
|
|
54
|
+
utility.put_next_entry(nama_konten)
|
|
55
|
+
utility.write(@pembawaan)
|
|
56
|
+
end
|
|
57
|
+
return nama_tmp
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def buat_permintaan(uri)
|
|
61
|
+
keterangan = {
|
|
62
|
+
'data' => UploadIO.new(konten_permintaan, 'application/zip', 'dynamic_archieve.zip')
|
|
63
|
+
}
|
|
64
|
+
c = {
|
|
65
|
+
name: "apikey",
|
|
66
|
+
value: @apikey,
|
|
67
|
+
domain: uri.host,
|
|
68
|
+
path: "/",
|
|
69
|
+
expires: Time.now + 3600 * 24 * 7
|
|
70
|
+
}
|
|
71
|
+
jar = HTTP::CookieJar.new
|
|
72
|
+
cookie = HTTP::Cookie.new(c)
|
|
73
|
+
jar.add(cookie)
|
|
74
|
+
Net::HTTP::Post::Multipart.new(uri, keterangan).tap do |minta|
|
|
75
|
+
minta['Accept'] = 'application/zip'
|
|
76
|
+
minta['User-Agent'] = KebutSemalam::LokasiMeta::UserAgent
|
|
77
|
+
minta['Cookie'] = HTTP::Cookie.cookie_value(jar.cookies(uri))
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
data/lib/skripsi.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require_relative 'sks/dasar'
|
|
2
|
+
require_relative '../build/skripsi'
|
|
3
|
+
require_relative 'adaptor/unduh'
|
|
4
|
+
KebutSemalam::LokasiMeta.init
|
|
5
|
+
KebutSemalam::LokasiWeb.perolehan
|
|
6
|
+
|
|
7
|
+
require_relative 'sks/sks'
|
|
8
|
+
|
|
9
|
+
module SistemKebut
|
|
10
|
+
def self.buat_skripsi(&block)
|
|
11
|
+
Skripsi.new(&block)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
module SistemKebut
|
|
2
|
+
module Peralatan
|
|
3
|
+
module Gudang
|
|
4
|
+
DOCUMENT = {
|
|
5
|
+
MARKUP_COMPAT: :MARKUP_COMPAT_VAL,
|
|
6
|
+
OFFICE: :OFFICE_VAL,
|
|
7
|
+
OFFICE_RELATIONSHIP: :OFFICE_RELATIONSHIP_VAL,
|
|
8
|
+
WORD_MAIN: :WORD_MAIN_VAL,
|
|
9
|
+
VML: :VML_VAL,
|
|
10
|
+
DRAWING_PICTURE: :DRAWING_PICTURE_VAL,
|
|
11
|
+
DRAWING_MAIN: :DRAWING_MAIN_VAL,
|
|
12
|
+
OFFICE_WORD: :OFFICE_WORD_VAL,
|
|
13
|
+
WORD_DRAWING: :WORD_DRAWING_VAL,
|
|
14
|
+
WORD_SHAPE: :WORD_SHAPE_VAL,
|
|
15
|
+
WORD_GROUP: :WORD_GROUP_VAL,
|
|
16
|
+
OFFICE_DRAWING: :OFFICE_DRAWING_VAL,
|
|
17
|
+
WORDML10: :WORDML10_VAL,
|
|
18
|
+
WORDML12: :WORDML12_VAL,
|
|
19
|
+
ATTR_IGNORABLE: :D_NAMES_WORDML10
|
|
20
|
+
}
|
|
21
|
+
KOMBINASI = {
|
|
22
|
+
istimewa: [], # toc
|
|
23
|
+
section: [], # sect
|
|
24
|
+
paragraph: [], # p
|
|
25
|
+
media: [], # drawing
|
|
26
|
+
header: [], # hdr
|
|
27
|
+
footer: [] # ftr
|
|
28
|
+
}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
module KebutuhanDasar
|
|
32
|
+
def init_document
|
|
33
|
+
@sequence = []
|
|
34
|
+
@id_media = Gudang::RELS_DOCUMENT_KONTEN.length + 1
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def generate_document
|
|
38
|
+
inner_generate_document
|
|
39
|
+
.catat_administrasi(:LOKASI_WORD_DOCUMENT)
|
|
40
|
+
.catat_arsip
|
|
41
|
+
.struktur
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def pgbreak
|
|
45
|
+
SistemKebut::Section::SectionProperties.new.tap do |s|
|
|
46
|
+
inner_tambah(:section, s)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def kosong
|
|
51
|
+
SistemKebut::Paragraph::Kosong.new.tap do |t|
|
|
52
|
+
inner_tambah(:paragraph, t)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def baris_kosong
|
|
57
|
+
SistemKebut::Paragraph::BarisKosong.new.tap do |t|
|
|
58
|
+
inner_tambah(:paragraph, t)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def judul(teks)
|
|
63
|
+
SistemKebut::Paragraph::Judul.new(teks).tap do |t|
|
|
64
|
+
inner_tambah(:paragraph, t)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def bab(teks)
|
|
69
|
+
judul(teks).tap do |j|
|
|
70
|
+
j.ubah_ukuran(18)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def kutipan(teks)
|
|
75
|
+
SistemKebut::Paragraph::Kutipan.new(teks).tap do |t|
|
|
76
|
+
inner_tambah(:paragraph, t)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def p(teks)
|
|
81
|
+
return nil unless teks.is_a?(String)
|
|
82
|
+
SistemKebut::Paragraph::Teks.new(teks).tap do |t|
|
|
83
|
+
inner_tambah(:paragraph, t)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
alias paragraf p
|
|
88
|
+
|
|
89
|
+
def gambar(lokasi)
|
|
90
|
+
return nil unless File.exist?(lokasi)
|
|
91
|
+
id = "rId#{@id_media}"
|
|
92
|
+
lok = File.join('media', File.basename(lokasi))
|
|
93
|
+
media = File.join('word', lok)
|
|
94
|
+
konten = File.open(lokasi, 'rb')
|
|
95
|
+
inner_catat_gambar(id, lok)
|
|
96
|
+
@id_media += 1
|
|
97
|
+
inst = SistemKebut::Media::Gambar.new(id, lokasi).tap do |g|
|
|
98
|
+
inner_tambah(:media, g)
|
|
99
|
+
end
|
|
100
|
+
SistemKebut::XML::LapisAdministrasi.new(media, konten).tap do |la|
|
|
101
|
+
la.catat_arsip
|
|
102
|
+
end
|
|
103
|
+
10.times { baris_kosong.spacing = :ganda }
|
|
104
|
+
return inst
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
def inner_tambah(jenis, e)
|
|
109
|
+
@sequence.push(jenis)
|
|
110
|
+
Gudang::KOMBINASI[jenis].push(e)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def inner_generate_document
|
|
114
|
+
SistemKebut::Transformasi::Web.kelola(Gudang::KOMBINASI[:paragraph])
|
|
115
|
+
puts Gudang::KOMBINASI[:paragraf]
|
|
116
|
+
SistemKebut::XML::Builder.new do |xml|
|
|
117
|
+
xml.document(Gudang::DOCUMENT) do
|
|
118
|
+
xml.body do
|
|
119
|
+
inner_build_document(xml)
|
|
120
|
+
SistemKebut::Section::XMLBuilder.default(xml)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def inner_build_document(xml)
|
|
127
|
+
kombinasi = {}
|
|
128
|
+
Gudang::KOMBINASI.each do |k, deret|
|
|
129
|
+
kombinasi[k] = deret.to_enum
|
|
130
|
+
end
|
|
131
|
+
@sequence.each do |s|
|
|
132
|
+
pegang = kombinasi[s].next
|
|
133
|
+
pegang.build(xml)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def inner_catat_gambar(id, lokasi)
|
|
138
|
+
Gudang::RELS_DOCUMENT_KONTEN[id] = {
|
|
139
|
+
Type: :OFFICE_RELATIONSHIP_IMAGE_VAL,
|
|
140
|
+
Target: lokasi
|
|
141
|
+
}
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module SistemKebut
|
|
2
|
+
module Peralatan
|
|
3
|
+
module Gudang
|
|
4
|
+
FONT_TABLE = {
|
|
5
|
+
MARKUP_COMPAT: :MARKUP_COMPAT_VAL,
|
|
6
|
+
OFFICE_RELATIONSHIP: :OFFICE_RELATIONSHIP_VAL,
|
|
7
|
+
WORD_MAIN: :WORD_MAIN_VAL,
|
|
8
|
+
WORDML10: :WORDML10_VAL,
|
|
9
|
+
WORDML12: :WORDML12_VAL,
|
|
10
|
+
ATTR_IGNORABLE: :ATTR_IGNORABLE_VAL
|
|
11
|
+
}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module KebutuhanDasar
|
|
15
|
+
SIGNAL_A = {
|
|
16
|
+
CALIBRI_ATTR_USB0: :CALIBRI_USB0_VAL,
|
|
17
|
+
CALIBRI_ATTR_USB1: :CALIBRI_USB1_VAL,
|
|
18
|
+
CALIBRI_ATTR_USB2: '00000009',
|
|
19
|
+
CALIBRI_ATTR_USB3: '00000000',
|
|
20
|
+
CALIBRI_ATTR_CSB0: :CALIBRI_CSB0_VAL,
|
|
21
|
+
CALIBRI_ATTR_CSB1: '00000000'
|
|
22
|
+
}
|
|
23
|
+
SIGNAL_B = {
|
|
24
|
+
CALIBRI_ATTR_USB0: :CALIBRI2_USB0_VAL,
|
|
25
|
+
CALIBRI_ATTR_USB1: :CALIBRI2_USB1_VAL,
|
|
26
|
+
CALIBRI_ATTR_USB2: '00000009',
|
|
27
|
+
CALIBRI_ATTR_USB3: '00000000',
|
|
28
|
+
CALIBRI_ATTR_CSB0: :CALIBRI_CSB0_VAL,
|
|
29
|
+
CALIBRI_ATTR_CSB1: '00000000'
|
|
30
|
+
}
|
|
31
|
+
def generate_font_table
|
|
32
|
+
inner_generate_font_table
|
|
33
|
+
.catat_administrasi(:LOKASI_WORD_FONT_TABLE)
|
|
34
|
+
.catat_arsip
|
|
35
|
+
.struktur
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
def inner_generate_font_table
|
|
40
|
+
SistemKebut::XML::Builder.new do |xml|
|
|
41
|
+
xml.fonts(Gudang::FONT_TABLE) do
|
|
42
|
+
xml.font(ATTR_NAME: :CALIBRI_NAME_VAL) do
|
|
43
|
+
xml.panose1('w:val' => :CALIBRI_PANOSE_VAL)
|
|
44
|
+
xml.charset('w:val' => '00')
|
|
45
|
+
xml.family('w:val' => :CALIBRI_FAMILY_VAL)
|
|
46
|
+
xml.pitch('w:val' => :CALIBRI_PITCH_VAL)
|
|
47
|
+
xml.sig(SIGNAL_A)
|
|
48
|
+
end
|
|
49
|
+
xml.font(ATTR_NAME: :ARIAL_NAME_VAL) do
|
|
50
|
+
xml.panose1('w:val' => :ARIAL_PANOSE_VAL)
|
|
51
|
+
xml.charset('w:val' => '00')
|
|
52
|
+
xml.family('w:val' => :CALIBRI_FAMILY_VAL)
|
|
53
|
+
xml.pitch('w:val' => :CALIBRI_PITCH_VAL)
|
|
54
|
+
xml.sig(SIGNAL_B)
|
|
55
|
+
end
|
|
56
|
+
xml.font(ATTR_NAME: :ROMAN_FAMILY_VAL) do
|
|
57
|
+
xml.panose1('w:val' => '02020603050405020304')
|
|
58
|
+
xml.charset('w:val' => '00')
|
|
59
|
+
xml.family('w:val' => :ROMAN_FAMILY_VAL)
|
|
60
|
+
xml.pitch('w:val' => :CALIBRI_PITCH_VAL)
|
|
61
|
+
xml.sig(SIGNAL_B)
|
|
62
|
+
end
|
|
63
|
+
xml.font(ATTR_NAME: :CALIBRI_LIGHT_NAME_VAL) do
|
|
64
|
+
xml.panose1('w:val' => :CALIBRI_LIGHT_PANOSE_VAL)
|
|
65
|
+
xml.charset('w:val' => '00')
|
|
66
|
+
xml.family('w:val' => :CALIBRI_FAMILY_VAL)
|
|
67
|
+
xml.pitch('w:val' => :CALIBRI_PITCH_VAL)
|
|
68
|
+
xml.sig(SIGNAL_A)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|