CppUmlClass 0.8.0 → 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 +4 -4
- data/README.md +86 -42
- data/exe/create_cpp_uml_class.rb +4 -2
- data/img/CppUMLClass.mp4 +0 -0
- data/img/class_color.png +0 -0
- data/img/setting.png +0 -0
- data/lib/CppUmlClass/version.rb +1 -1
- data/lib/config/setting.json +12 -2
- data/lib/config.ru +1 -1
- data/lib/cpp_uml_class.rb +6 -3
- data/lib/create_uml_class.rb +34 -73
- data/lib/css/index.css +297 -125
- data/lib/html/index.html +54 -57
- data/lib/ifdef_process.rb +160 -0
- data/lib/js/main.js +51 -12
- data/lib/wsserver.rb +1 -1
- metadata +3 -2
data/lib/css/index.css
CHANGED
@@ -1,182 +1,354 @@
|
|
1
1
|
body {
|
2
|
-
|
3
|
-
background
|
4
|
-
|
5
|
-
|
2
|
+
font-family: 'Roboto', Arial, sans-serif;
|
3
|
+
background: linear-gradient(135deg, #e3f0fc 0%, #b6d6f6 100%);
|
4
|
+
min-height: 100vh;
|
5
|
+
margin: 0;
|
6
|
+
padding: 0;
|
7
|
+
color: #234067;
|
8
|
+
font-size: 13px;
|
6
9
|
}
|
7
10
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
border-style: solid;
|
16
|
-
/* 枠の種類 */
|
11
|
+
.app-header {
|
12
|
+
display: flex;
|
13
|
+
align-items: center;
|
14
|
+
background: #b3d6f6;
|
15
|
+
padding: 10px 20px;
|
16
|
+
box-shadow: 0 1px 8px #afd6f9aa;
|
17
|
+
border-bottom: 1px solid #a3c9e6;
|
17
18
|
}
|
18
19
|
|
19
|
-
.
|
20
|
-
|
20
|
+
.app-header .material-icons {
|
21
|
+
font-size: 1.6rem;
|
22
|
+
color: #539ad9;
|
23
|
+
margin-right: 10px;
|
21
24
|
}
|
22
25
|
|
23
|
-
.
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
height: 50vh;
|
29
|
-
overflow: auto;
|
26
|
+
.app-title {
|
27
|
+
font-size: 1.2rem;
|
28
|
+
font-weight: 700;
|
29
|
+
letter-spacing: 1px;
|
30
|
+
color: #234067;
|
30
31
|
}
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
/* Modern Menu Styling */
|
34
|
+
.menu {
|
35
|
+
display: flex;
|
36
|
+
list-style: none;
|
37
|
+
padding: 0;
|
38
|
+
margin: 18px 0 0 18px;
|
39
|
+
gap: 10px;
|
40
|
+
font-size: 13px;
|
37
41
|
}
|
38
42
|
|
39
|
-
|
40
|
-
|
41
|
-
background
|
42
|
-
|
43
|
-
|
43
|
+
.menu>li {
|
44
|
+
position: relative;
|
45
|
+
background: #e5f2fb;
|
46
|
+
border-radius: 5px;
|
47
|
+
overflow: visible;
|
48
|
+
transition: box-shadow 0.2s;
|
44
49
|
}
|
45
50
|
|
46
|
-
|
47
|
-
|
48
|
-
|
51
|
+
.menu>li:hover,
|
52
|
+
.menu>li:focus-within {
|
53
|
+
box-shadow: 0 2px 8px #539ad955;
|
54
|
+
background: #d2e8f7;
|
49
55
|
}
|
50
56
|
|
51
|
-
.
|
52
|
-
|
57
|
+
.menu>li>a,
|
58
|
+
.menu>li>span {
|
59
|
+
display: block;
|
60
|
+
color: #234067;
|
61
|
+
font-weight: 500;
|
62
|
+
padding: 7px 16px;
|
63
|
+
text-decoration: none;
|
64
|
+
cursor: pointer;
|
65
|
+
font-size: 13px;
|
66
|
+
transition: background 0.2s;
|
53
67
|
}
|
54
68
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
69
|
+
/* サブメニューの表示制御 */
|
70
|
+
.menuSub {
|
71
|
+
display: none;
|
72
|
+
position: absolute;
|
73
|
+
top: 100%;
|
74
|
+
left: 0;
|
75
|
+
background: #f6fbff;
|
76
|
+
box-shadow: 0 1px 5px #b6d6f6;
|
77
|
+
border-radius: 0 0 5px 5px;
|
78
|
+
min-width: 150px;
|
79
|
+
z-index: 100;
|
80
|
+
padding: 0;
|
81
|
+
margin: 0;
|
61
82
|
}
|
62
83
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
color: black;
|
84
|
+
.menu>li:hover>.menuSub,
|
85
|
+
.menu>li:focus-within>.menuSub {
|
86
|
+
display: block;
|
67
87
|
}
|
68
88
|
|
69
|
-
.
|
70
|
-
|
71
|
-
overflow-y: auto;
|
72
|
-
/* prevent horizontal scrollbar */
|
73
|
-
overflow-x: hidden;
|
74
|
-
/* add padding to account for vertical scrollbar */
|
75
|
-
z-index: 1000 !important;
|
89
|
+
.menuSub li {
|
90
|
+
list-style: none;
|
76
91
|
}
|
77
92
|
|
78
|
-
.
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
93
|
+
.menuSub li a {
|
94
|
+
color: #3b5c7e;
|
95
|
+
padding: 7px 15px;
|
96
|
+
display: block;
|
97
|
+
border-bottom: 1px solid #e3f0fc;
|
98
|
+
transition: color 0.2s, background 0.2s;
|
99
|
+
text-decoration: none;
|
100
|
+
font-size: 13px;
|
84
101
|
}
|
85
102
|
|
86
|
-
.
|
87
|
-
|
103
|
+
.menuSub li:last-child a {
|
104
|
+
border-bottom: none;
|
88
105
|
}
|
89
106
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
font-size: 14px;
|
107
|
+
.menuSub li a:hover {
|
108
|
+
background: #d2e8f7;
|
109
|
+
color: #234067;
|
94
110
|
}
|
95
111
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
112
|
+
/* Main Content Layout */
|
113
|
+
.main-content {
|
114
|
+
display: flex;
|
115
|
+
flex-direction: column;
|
116
|
+
margin: 5px 1vw 0 1vw;
|
117
|
+
/* 余白を減らす */
|
118
|
+
gap: 6px;
|
119
|
+
/* 要素間の隙間も少し減らす */
|
120
|
+
font-size: 13px;
|
101
121
|
}
|
102
122
|
|
103
|
-
.
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
123
|
+
.input-row {
|
124
|
+
display: flex;
|
125
|
+
align-items: center;
|
126
|
+
gap: 10px;
|
127
|
+
margin-bottom: 7px;
|
128
|
+
font-size: 13px;
|
108
129
|
}
|
109
130
|
|
110
|
-
.
|
111
|
-
|
112
|
-
background
|
113
|
-
|
131
|
+
.input-row input[type="search"],
|
132
|
+
.input-row input[type="text"] {
|
133
|
+
background: #e5f2fb;
|
134
|
+
border: 1px solid #b3d6f6;
|
135
|
+
border-radius: 4px;
|
136
|
+
padding: 6px 10px;
|
137
|
+
color: #234067;
|
138
|
+
font-size: 13px;
|
139
|
+
outline: none;
|
140
|
+
transition: box-shadow 0.2s;
|
141
|
+
width: 170px;
|
114
142
|
}
|
115
143
|
|
116
|
-
|
117
|
-
|
144
|
+
.input-row input[type="search"]:focus {
|
145
|
+
box-shadow: 0 0 0 2px #b6d6f6;
|
146
|
+
}
|
147
|
+
|
148
|
+
.input-row button,
|
149
|
+
.input-row input[type="button"] {
|
150
|
+
background: #b6d6f6;
|
151
|
+
color: #234067;
|
152
|
+
border: none;
|
153
|
+
border-radius: 4px;
|
154
|
+
padding: 6px 13px;
|
155
|
+
font-size: 13px;
|
156
|
+
cursor: pointer;
|
157
|
+
transition: background 0.2s, color 0.2s;
|
158
|
+
font-weight: 500;
|
159
|
+
margin-left: 1px;
|
160
|
+
box-shadow: 0 1px 4px #b6d6f633;
|
161
|
+
}
|
162
|
+
|
163
|
+
.input-row button:hover,
|
164
|
+
.input-row input[type="button"]:hover {
|
165
|
+
background: #d2e8f7;
|
166
|
+
color: #539ad9;
|
167
|
+
box-shadow: 0 1px 8px #b6d6f6cc;
|
168
|
+
}
|
169
|
+
|
170
|
+
/* Log Output */
|
171
|
+
.outarea {
|
172
|
+
background: #f6fbff;
|
173
|
+
border-radius: 7px;
|
174
|
+
min-height: 200px;
|
175
|
+
width: 95vw;
|
176
|
+
height: 75vh;
|
177
|
+
max-width: 95vw;
|
178
|
+
max-height: 90vh;
|
179
|
+
box-shadow: 0 1px 8px #b6d6f677;
|
180
|
+
margin-top: 4px;
|
181
|
+
color: #b0bec5;
|
182
|
+
overflow-y: auto;
|
118
183
|
font-size: 12px;
|
119
|
-
|
184
|
+
margin-left: 1px;
|
185
|
+
margin-right: 1px;
|
186
|
+
display: block;
|
187
|
+
padding: 1px 1px;
|
188
|
+
|
120
189
|
}
|
121
190
|
|
122
|
-
|
123
|
-
|
191
|
+
ul.log {
|
192
|
+
margin: 0;
|
193
|
+
padding-left: 0.5px;
|
194
|
+
font-size: 13px;
|
195
|
+
color: #539ad9;
|
196
|
+
letter-spacing: 0.1px;
|
197
|
+
padding: 0.5px 0.5px;
|
124
198
|
}
|
125
199
|
|
126
|
-
|
127
|
-
-
|
200
|
+
ul.log li {
|
201
|
+
margin-bottom: 0.3em;
|
128
202
|
}
|
129
203
|
|
130
|
-
/*
|
131
|
-
.
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
font-size:
|
204
|
+
/* Dialog Styling Overrides */
|
205
|
+
.ui-dialog {
|
206
|
+
background: #e5f2fb;
|
207
|
+
color: #234067;
|
208
|
+
border-radius: 6px;
|
209
|
+
box-shadow: 0 2px 12px #b6d6f677;
|
210
|
+
border: none;
|
211
|
+
font-size: 13px;
|
212
|
+
}
|
213
|
+
|
214
|
+
.ui-dialog-titlebar {
|
215
|
+
background: #b6d6f6;
|
216
|
+
color: #539ad9;
|
217
|
+
border: none;
|
218
|
+
border-radius: 6px 6px 0 0;
|
219
|
+
font-weight: 700;
|
220
|
+
font-size: 13px;
|
221
|
+
}
|
222
|
+
|
223
|
+
.ui-dialog-buttonpane button {
|
224
|
+
background: #b6d6f6;
|
225
|
+
color: #234067;
|
226
|
+
border: none;
|
227
|
+
border-radius: 4px;
|
228
|
+
padding: 5px 11px;
|
138
229
|
font-weight: bold;
|
230
|
+
margin: 0 5px;
|
231
|
+
font-size: 13px;
|
232
|
+
transition: background 0.2s, color 0.2s;
|
139
233
|
}
|
140
234
|
|
141
|
-
.
|
142
|
-
|
143
|
-
|
144
|
-
margin-left: 1px;
|
145
|
-
padding: 5px;
|
146
|
-
background: #d8dada;
|
147
|
-
list-style-type: none;
|
235
|
+
.ui-dialog-buttonpane button:hover {
|
236
|
+
background: #539ad9;
|
237
|
+
color: #f6fbff;
|
148
238
|
}
|
149
239
|
|
150
|
-
|
151
|
-
|
240
|
+
/* Settings dialog table */
|
241
|
+
#setting_dialog table {
|
242
|
+
width: 95%;
|
243
|
+
margin-bottom: 5px;
|
244
|
+
font-size: 13px;
|
152
245
|
}
|
153
246
|
|
154
|
-
.
|
155
|
-
|
247
|
+
#setting_dialog .setting_name {
|
248
|
+
color: #539ad9;
|
249
|
+
width: 120px;
|
250
|
+
font-weight: bold;
|
251
|
+
padding-right: 12px;
|
252
|
+
font-size: 13px;
|
156
253
|
}
|
157
254
|
|
158
|
-
.
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
255
|
+
#setting_dialog .setting_value {
|
256
|
+
width: 100%;
|
257
|
+
max-width: 100%;
|
258
|
+
min-width: 120px;
|
259
|
+
box-sizing: border-box;
|
163
260
|
}
|
164
261
|
|
165
|
-
|
166
|
-
|
167
|
-
|
262
|
+
#setting_dialog input,
|
263
|
+
#setting_dialog select {
|
264
|
+
background: #f6fbff;
|
265
|
+
color: #234067;
|
266
|
+
border: 1px solid #b3d6f6;
|
267
|
+
border-radius: 4px;
|
268
|
+
padding: 5px 8px;
|
269
|
+
font-size: 13px;
|
168
270
|
}
|
169
271
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
margin-bottom: -5px;
|
175
|
-
display: block;
|
176
|
-
color: rgb(20, 114, 192);
|
177
|
-
text-decoration: none;
|
272
|
+
#msg_text {
|
273
|
+
font-size: 13px;
|
274
|
+
color: #234067;
|
275
|
+
padding: 10px 0;
|
178
276
|
}
|
179
277
|
|
180
|
-
|
181
|
-
|
182
|
-
|
278
|
+
@media (max-width: 700px) {
|
279
|
+
.main-content {
|
280
|
+
margin: 7px 2vw;
|
281
|
+
}
|
282
|
+
|
283
|
+
.outarea {
|
284
|
+
padding: 7px;
|
285
|
+
}
|
286
|
+
|
287
|
+
.menu>li>a,
|
288
|
+
.menu>li>span {
|
289
|
+
padding: 7px 7px;
|
290
|
+
}
|
291
|
+
|
292
|
+
.input-row input[type="search"] {
|
293
|
+
width: 80px;
|
294
|
+
}
|
295
|
+
}
|
296
|
+
|
297
|
+
.input-row input#inDir {
|
298
|
+
width: 80vw;
|
299
|
+
max-width: 80vw;
|
300
|
+
min-width: 200px;
|
301
|
+
}
|
302
|
+
|
303
|
+
.input-row input#outFile {
|
304
|
+
width: 80vw;
|
305
|
+
max-width: 80vw;
|
306
|
+
min-width: 200px;
|
307
|
+
}
|
308
|
+
|
309
|
+
.input-row input#inDir,
|
310
|
+
.input-row input#outDir {
|
311
|
+
background: #f6fbff;
|
312
|
+
color: #234067;
|
313
|
+
border: 1px solid #b3d6f6;
|
314
|
+
border-radius: 4px;
|
315
|
+
padding: 6px 10px;
|
316
|
+
font-size: 13px;
|
317
|
+
outline: none;
|
318
|
+
transition: box-shadow 0.2s;
|
319
|
+
}
|
320
|
+
|
321
|
+
.input-row input#inDir:focus,
|
322
|
+
.input-row input#outDir:focus {
|
323
|
+
box-shadow: 0 0 0 2px #b6d6f6;
|
324
|
+
}
|
325
|
+
|
326
|
+
.input-row input#outFile,
|
327
|
+
.input-row input#outDir {
|
328
|
+
background: #f6fbff;
|
329
|
+
color: #234067;
|
330
|
+
border: 1px solid #b3d6f6;
|
331
|
+
border-radius: 4px;
|
332
|
+
padding: 6px 10px;
|
333
|
+
font-size: 13px;
|
334
|
+
outline: none;
|
335
|
+
transition: box-shadow 0.2s;
|
336
|
+
}
|
337
|
+
|
338
|
+
.input-row input#outFile:focus,
|
339
|
+
.input-row input#outDir:focus {
|
340
|
+
box-shadow: 0 0 0 2px #b6d6f6;
|
341
|
+
}
|
342
|
+
|
343
|
+
#dialog1 #search_str {
|
344
|
+
width: 100%;
|
345
|
+
box-sizing: border-box;
|
346
|
+
min-width: 120px;
|
347
|
+
max-width: 100%;
|
348
|
+
}
|
349
|
+
|
350
|
+
#dialog2 #search_str2 {
|
351
|
+
width: 100%;
|
352
|
+
box-sizing: border-box;
|
353
|
+
min-width: 120px;
|
354
|
+
max-width: 100%;
|
data/lib/html/index.html
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<html>
|
2
|
+
<html lang="ja">
|
3
3
|
|
4
4
|
<head>
|
5
5
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
6
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
7
|
<title>CppUMLClass</title>
|
8
|
-
<!--
|
8
|
+
<!-- Google Fonts & Material Icons -->
|
9
|
+
<link href="https://fonts.googleapis.com/css?family=Roboto:400,700&display=swap" rel="stylesheet">
|
10
|
+
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
11
|
+
|
12
|
+
<!-- jQuery & jQuery UI -->
|
9
13
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
10
|
-
<!-- jQuery UI -->
|
11
14
|
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
|
12
15
|
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
|
13
16
|
|
@@ -16,65 +19,59 @@
|
|
16
19
|
</head>
|
17
20
|
|
18
21
|
<body>
|
19
|
-
<
|
20
|
-
<
|
21
|
-
|
22
|
-
|
22
|
+
<header class="app-header">
|
23
|
+
<span class="material-icons">developer_board</span>
|
24
|
+
<span class="app-title">CppUMLClass</span>
|
25
|
+
</header>
|
26
|
+
|
23
27
|
<!-- menu -->
|
24
|
-
<
|
25
|
-
<
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
<li><a href="#" id="stop" name="stop">停止</a></li>
|
31
|
-
<li>
|
28
|
+
<ul class="menu">
|
29
|
+
<li><a href="#" id="exec"><span class="material-icons" style="vertical-align:middle;">play_arrow</span> 実行</a></li>
|
30
|
+
<li><a href="#" id="stop"><span class="material-icons" style="vertical-align:middle;">stop</span> 停止</a></li>
|
31
|
+
<li>
|
32
|
+
<span style="display:flex;align-items:center;gap:4px;cursor:pointer;">
|
33
|
+
<span class="material-icons" style="vertical-align:middle;">settings</span>
|
32
34
|
設定
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
</
|
39
|
-
|
40
|
-
|
41
|
-
menu3
|
42
|
-
<ul class="menuSub">
|
43
|
-
<li><a href="#">menu3-1</a></li>
|
44
|
-
<li><a href="#">menu3-2</a></li>
|
45
|
-
</ul>
|
46
|
-
</li>
|
47
|
-
-->
|
48
|
-
</ul>
|
49
|
-
</div>
|
35
|
+
</span>
|
36
|
+
<ul class="menuSub">
|
37
|
+
<li><a href="#" id="setting">設定ダイアログ</a></li>
|
38
|
+
<li><a href="#" id="save_setting">設定保存</a></li>
|
39
|
+
<li><a href="#" id="load_setting">設定読み込み</a></li>
|
40
|
+
</ul>
|
41
|
+
</li>
|
42
|
+
</ul>
|
50
43
|
|
51
|
-
<
|
52
|
-
<
|
53
|
-
<
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
<td class="long"><input class="inarea" type="search" id="inDir" name="inDir"></td>
|
59
|
-
<td><input type="button" id="select_dir" value="対象フォルダ" /></td>
|
60
|
-
</tr>
|
61
|
-
<tr>
|
62
|
-
<td>
|
63
|
-
<div id="dialog2" style="display:none;">
|
64
|
-
<input class="inarea" type="search" name="search_str2" id="search_str2">
|
65
|
-
</div>
|
66
|
-
</td>
|
67
|
-
<td class="long"><input class="inarea" type="search" id="outFile" name="outFile"></td>
|
68
|
-
<td><input type="button" id="select_file" value="出力ファイル" /></td>
|
69
|
-
<td><input type="button" id="open_file" value="開く" /></td>
|
70
|
-
</tr>
|
71
|
-
</table>
|
44
|
+
<section class="main-content">
|
45
|
+
<div id="msg_dialog" style="display:none;">
|
46
|
+
<div id="msg_text">message</div>
|
47
|
+
</div>
|
48
|
+
<div id="setting_dialog" style="display:none;">
|
49
|
+
<dl id="wrap"></dl>
|
50
|
+
</div>
|
72
51
|
|
73
|
-
|
74
|
-
<
|
75
|
-
|
76
|
-
|
52
|
+
<!-- 入力行: 入力ディレクトリ/ファイル、検索 -->
|
53
|
+
<div class="input-row">
|
54
|
+
<input class="inarea" type="search" id="inDir" name="inDir" placeholder="入力フォルダ">
|
55
|
+
<div id="dialog1" style="display:none;">
|
56
|
+
<input class="inarea" type="search" name="search_str" id="search_str" placeholder="ファイル/ディレクトリ検索...">
|
57
|
+
</div>
|
58
|
+
<input type="button" id="select_dir" value="対象フォルダ" />
|
59
|
+
</div>
|
60
|
+
<div class="input-row">
|
61
|
+
<input class="inarea" type="search" id="outFile" name="outFile" placeholder="出力ファイル">
|
62
|
+
<div id="dialog2" style="display:none;">
|
63
|
+
<input class="inarea" type="search" name="search_str2" id="search_str2" placeholder="ファイル名検索...">
|
64
|
+
</div>
|
65
|
+
<input type="button" id="select_file" value="出力ファイル" />
|
66
|
+
<input type="button" id="open_file" value="開く" />
|
67
|
+
</div>
|
77
68
|
|
69
|
+
<!-- ログ表示 -->
|
70
|
+
<div class="outarea">
|
71
|
+
<ul name="log" id="log" class="log">
|
72
|
+
</ul>
|
73
|
+
</div>
|
74
|
+
</section>
|
78
75
|
</body>
|
79
76
|
|
80
77
|
</html>
|