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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/example/logo.png +0 -0
  3. data/example/skripsi.rb +33 -0
  4. data/example/test_webgen.rb +14 -0
  5. data/extconf.rb +11 -0
  6. data/include/lokasidef.h +39 -0
  7. data/include/ntapdef.h +79 -0
  8. data/include/risetdef.h +598 -0
  9. data/include/skripsi.h +7 -0
  10. data/include/temadef.h +129 -0
  11. data/include/urai.h +36 -0
  12. data/lib/adaptor/adaptor.rb +104 -0
  13. data/lib/adaptor/unduh.rb +29 -0
  14. data/lib/adaptor/web_generate.rb +82 -0
  15. data/lib/skripsi.rb +13 -0
  16. data/lib/sks/alat/document.rb +145 -0
  17. data/lib/sks/alat/font_table.rb +75 -0
  18. data/lib/sks/alat/numbering.rb +287 -0
  19. data/lib/sks/alat/prop_app.rb +85 -0
  20. data/lib/sks/alat/prop_core.rb +38 -0
  21. data/lib/sks/alat/prop_custom.rb +30 -0
  22. data/lib/sks/alat/rels.rb +33 -0
  23. data/lib/sks/alat/rels_document.rb +38 -0
  24. data/lib/sks/alat/setting.rb +89 -0
  25. data/lib/sks/alat/style.rb +432 -0
  26. data/lib/sks/alat/theme.rb +311 -0
  27. data/lib/sks/alat/web.rb +34 -0
  28. data/lib/sks/alat.rb +41 -0
  29. data/lib/sks/dasar.rb +29 -0
  30. data/lib/sks/footer/dasar.rb +0 -0
  31. data/lib/sks/header/dasar.rb +0 -0
  32. data/lib/sks/istimewa/dasar.rb +0 -0
  33. data/lib/sks/media/dasar.rb +14 -0
  34. data/lib/sks/paragraph/dasar.rb +114 -0
  35. data/lib/sks/remote.rb +28 -0
  36. data/lib/sks/section/dasar.rb +33 -0
  37. data/lib/sks/sks.rb +65 -0
  38. data/lib/transformasi/web.rb +34 -0
  39. data/lib/xml/administrasi.rb +124 -0
  40. data/lib/xml/builder.rb +269 -0
  41. data/lib/xml/dasar.rb +17 -0
  42. data/lib/xml/media.rb +66 -0
  43. data/lib/xml/paragraph.rb +9 -0
  44. data/lib/xml/section.rb +84 -0
  45. data/src/jembatan.c +34 -0
  46. data/src/sisi.c +1665 -0
  47. data/src/skripsi.c +77 -0
  48. data/src/urai.c +70 -0
  49. 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