Skip to content

Commit b11c95a

Browse files
author
WebCoder49
committed
Start adding hex codes in chars; Firefox no longer appears to support calculating width
1 parent 1ab62b4 commit b11c95a

File tree

2 files changed

+42
-54
lines changed

2 files changed

+42
-54
lines changed

plugins/special-chars.css

Lines changed: 40 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,42 +3,28 @@
33
* Files: special-chars.js, special-chars.css
44
*/
55

6-
/*TODO: Update chars to something like this:*/
7-
/*
8-
.char_replacement {
9-
text-decoration: underline;
10-
}
11-
12-
.container {
13-
margin: 0;
14-
padding: 0;
15-
border: 0;
16-
display: inline-block;
17-
}
18-
19-
.demo {
20-
background-color: currentColor;
21-
image-rendering: pixelated;
22-
display: inline-block;
23-
width: 0.6em;
24-
height: 1em;
25-
26-
mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABtJREFUGFdjZGBgYPj///9/RhCAMcA0bg6yHgAPmh/6BoxTcQAAAABJRU5ErkJgggAA'), url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABZJREFUGFdjZGBgYPj///9/RhAggwMAitIUBr9U6sYAAAAASUVORK5CYII='), url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAAB9JREFUGFdj/P///38GKGCEMUCCjCgyYBFGRrAKFBkAuLYT9kYcIu0AAAAASUVORK5CYII='), url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABhJREFUGFdj/P///38GKGCEMUCCjMTJAACYiBPyG8sfAgAAAABJRU5ErkJggg==');
27-
mask-repeat: no-repeat, no-repeat, no-repeat, no-repeat;
28-
mask-size: 49%, 49%, 49%, 49%;
29-
mask-position: 0% 0%, 102% 0%, 0% 102%, 102% 102%;
30-
31-
-webkit-mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABtJREFUGFdjZGBgYPj///9/RhCAMcA0bg6yHgAPmh/6BoxTcQAAAABJRU5ErkJgggAA'), url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABZJREFUGFdjZGBgYPj///9/RhAggwMAitIUBr9U6sYAAAAASUVORK5CYII='), url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAAB9JREFUGFdj/P///38GKGCEMUCCjCgyYBFGRrAKFBkAuLYT9kYcIu0AAAAASUVORK5CYII='), url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABhJREFUGFdj/P///38GKGCEMUCCjMTJAACYiBPyG8sfAgAAAABJRU5ErkJggg==');
32-
-webkit-mask-repeat: no-repeat, no-repeat, no-repeat, no-repeat;
33-
-webkit-mask-size: 49%, 49%, 49%, 49%;
34-
-webkit-mask-position: 0% 0%, 102% 0%, 0% 102%, 102% 102%;
35-
}
36-
*/
37-
386
/* Main styling */
397

8+
:root, body { /* Font for hex chars */
9+
--code-input_special-chars_0: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABtJREFUGFdjZGBgYPj///9/RhCAMcA0bg6yHgAPmh/6BoxTcQAAAABJRU5ErkJgggAA');
10+
--code-input_special-chars_1: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABZJREFUGFdjZGBgYPj///9/RhAggwMAitIUBr9U6sYAAAAASUVORK5CYII=');
11+
--code-input_special-chars_2: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAAB9JREFUGFdj/P///38GKGCEMUCCjCgyYBFGRrAKFBkAuLYT9kYcIu0AAAAASUVORK5CYII=');
12+
--code-input_special-chars_3: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABhJREFUGFdj/P///38GKGCEMUCCjMTJAACYiBPyG8sfAgAAAABJRU5ErkJggg==');
13+
--code-input_special-chars_4: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAAB5JREFUGFdj/P///39GRkZGMI3BYYACRhgDrAKZAwAYxhvyz0DRIQAAAABJRU5ErkJggg==');
14+
--code-input_special-chars_5: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAACJJREFUGFdj/P///38GKGAEcRgZGRlBfDAHLgNjgFUgywAAuR4T9hxJl2YAAAAASUVORK5CYII=');
15+
--code-input_special-chars_6: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAACBJREFUGFdj/P///38GKGAEcRgZGRlBfDAHQwasAlkGABcdF/Y4yco2AAAAAElFTkSuQmCC');
16+
--code-input_special-chars_7: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABZJREFUGFdj/P///38GKGCEMUCCRHIAWMgT8kue3bQAAAAASUVORK5CYII=');
17+
--code-input_special-chars_8: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABlJREFUGFdj/P///38GKGAEcRgZGSE0cTIAvHcb8v+mIfAAAAAASUVORK5CYII=');
18+
--code-input_special-chars_9: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAAB9JREFUGFdj/P///38GKGAEcRgZGSE0igxMCVgGmQMAPqcX8hWL1K0AAAAASUVORK5CYII=');
19+
--code-input_special-chars_a: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAACBJREFUGFdjZGBgYPj///9/RhCAMcA0iADJggCmDEw5ALdxH/aGuYHqAAAAAElFTkSuQmCC');
20+
--code-input_special-chars_b: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABlJREFUGFdj/P///38GBgYGRhAAceA0cTIAvc0b/vRDnVoAAAAASUVORK5CYII=');
21+
--code-input_special-chars_c: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAAB5JREFUGFdjZGBgYPj///9/EM0IYjAyMjIS4CDrAQC57hP+uLwvFQAAAABJRU5ErkJggg==');
22+
--code-input_special-chars_d: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABtJREFUGFdj/P///38GBgYGRhAAceA0fg5MDwAveh/6ToN9VwAAAABJRU5ErkJggg==');
23+
--code-input_special-chars_e: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAABxJREFUGFdj/P///38GKGAEcRgZGRlBfDCHsAwA2UwT+mVIH1MAAAAASUVORK5CYII=');
24+
--code-input_special-chars_f: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAAXNSR0IArs4c6QAAAB5JREFUGFdj/P///38GKGAEcRgZGRlBfDAHtwxMGQDZZhP+BnB1kwAAAABJRU5ErkJggg==');
25+
}
26+
4027
.code-input_special-char_container { /* pre element */
41-
line-height: 4;
4228
font-size: 20px;
4329
}
4430

@@ -74,27 +60,28 @@
7460
/* Default - Two bytes - 4 hex chars */
7561

7662
.code-input_special-char::before {
77-
content: attr(data-hex0) "\A" attr(data-hex1);
78-
79-
top: -1.5em;
80-
left: 0;
81-
padding: 0;
82-
padding-bottom: 2px;
83-
border-top: 1px solid;
84-
border-left: 1px solid;
85-
border-right: 1px solid;
86-
}
63+
content: " ";
8764

88-
.code-input_special-char::after {
89-
content: attr(data-hex2) "\A" attr(data-hex3);
90-
91-
bottom: -1.5em;
92-
left: 0;
93-
padding: 0;
94-
padding-top: 2px;
95-
border-bottom: 1px solid;
96-
border-left: 1px solid;
97-
border-right: 1px solid;
65+
background-color: currentColor;
66+
image-rendering: pixelated;
67+
display: inline-block;
68+
width: 100%;
69+
height: 100%;
70+
71+
--char-0: var(--code-input_special-chars_0);
72+
--char-1: var(--code-input_special-chars_1);
73+
--char-2: var(--code-input_special-chars_2);
74+
--char-3: var(--code-input_special-chars_3);
75+
76+
mask-image: var(--char-0), var(--char-1), var(--char-2), var(--char-3);
77+
mask-repeat: no-repeat, no-repeat, no-repeat, no-repeat;
78+
mask-size: 45%, 45%, 45%, 45%;
79+
mask-position: 2% 2%, 100% 2%, 2% 100%, 100% 100%;
80+
81+
-webkit-mask-image: var(--char-0), var(--char-1), var(--char-2), var(--char-3);
82+
-webkit-mask-repeat: no-repeat, no-repeat, no-repeat, no-repeat;
83+
-webkit-mask-size: 40%, 40%, 40%, 40%;
84+
-webkit-mask-position: 10% 10%, 90% 10%, 10% 90%, 90% 90%;
9885
}
9986

10087
/* Zero-width - style so takes up no space */

plugins/special-chars.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,10 @@ codeInput.plugins.SpecialChars = class extends codeInput.Plugin {
153153

154154
// Try to get width
155155
let width = this.canvasContext.measureText(char).width;
156+
this.canvasContext.fillText(char, 100, 100);
156157
if(width > 20) {
157158
width /= 2; // Fix double-width-in-canvas Firefox bug
158-
} else if(width == 0) {
159+
} else if(width == 0 && char != "\u0096") {
159160
let fallbackWidth = this.getCharacterWidth("\u0096");
160161
return fallbackWidth; // In Firefox some control chars don't render, but all control chars are the same width
161162
}

0 commit comments

Comments
 (0)