From 78357e1be4fd9853fa6711fa3f0442f155293448 Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 1 Feb 2018 07:57:01 +0100 Subject: [PATCH 01/15] black --- index.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/index.html b/index.html index 5e24ee6..b21dbff 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,8 @@ margin: 0 auto; padding: 0; overflow: hidden; + color: #ddd; + background-color: #222; } div { color: #ddd; From 99bd9f11de71e6c6d3c1d64446f039435a98bf46 Mon Sep 17 00:00:00 2001 From: Greg Herbowicz Date: Thu, 15 Mar 2018 23:28:59 +0100 Subject: [PATCH 02/15] beautify --- index.html | 378 ++++++++++++++++++++++++++--------------------------- 1 file changed, 189 insertions(+), 189 deletions(-) diff --git a/index.html b/index.html index b21dbff..25e7fc9 100644 --- a/index.html +++ b/index.html @@ -1,198 +1,198 @@ - - - - -
Width: Size:
- - - - + + + From 8530afdc67c263abdb2df67f59be75ba08cba1ab Mon Sep 17 00:00:00 2001 From: herbowicz Date: Wed, 30 Oct 2024 14:38:09 +0100 Subject: [PATCH 03/15] Change bg to light for Hacktoberfestg 2024 --- index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 25e7fc9..808e425 100644 --- a/index.html +++ b/index.html @@ -6,11 +6,11 @@ margin: 0 auto; padding: 0; overflow: hidden; - color: #ddd; - background-color: #222; + color: #222; + background-color: #ccc; } div { - color: #ddd; + color: #222; float: right; } From 929757f678c0ea37d66525bd663a861a99db8e6c Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 31 Oct 2024 10:15:40 +0100 Subject: [PATCH 04/15] sample text in README --- README.md | 3 +++ image.png | Bin 0 -> 7973 bytes 2 files changed, 3 insertions(+) create mode 100644 image.png diff --git a/README.md b/README.md index fbf0697..01512a7 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,6 @@ With this concept in mind, out of 2^12 = 4096 signs available, only some were carefully chosen to represent all large and small characters of the standard Latin alphabet. Enjoy! [Demo](https://herbowicz.github.io/12/) (start typing, try w/caps lock too) + +## Sample text +![sample text](image.png) \ No newline at end of file diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..321a108c05846c3d83dd955488fcbf225bf51c3e GIT binary patch literal 7973 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 literal 0 HcmV?d00001 From f8aed5efafb1e0d941715b69948dde7b29ba712f Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 31 Oct 2024 11:33:34 +0100 Subject: [PATCH 05/15] proper head and style file --- index.html | 21 ++++++--------------- style.css | 12 ++++++++++++ 2 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 style.css diff --git a/index.html b/index.html index 808e425..db76ff7 100644 --- a/index.html +++ b/index.html @@ -1,19 +1,10 @@ - - + + - + + + 12 lines +
Width: Size:
diff --git a/style.css b/style.css new file mode 100644 index 0000000..9826ec0 --- /dev/null +++ b/style.css @@ -0,0 +1,12 @@ +body { + margin: 0 auto; + padding: 0; + overflow: hidden; + color: #222; + background-color: #ccc; +} + +div { + color: #222; + float: right; +} \ No newline at end of file From ae359ee8e97eeea65974e9a1b642b8645e199cdb Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 31 Oct 2024 11:39:16 +0100 Subject: [PATCH 06/15] updated README file --- README.md | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 01512a7..e68d441 100644 --- a/README.md +++ b/README.md @@ -5,4 +5,33 @@ With this concept in mind, out of 2^12 = 4096 signs available, only some were ca [Demo](https://herbowicz.github.io/12/) (start typing, try w/caps lock too) ## Sample text -![sample text](image.png) \ No newline at end of file +![sample text](image.png) + +Why Generate Letters from HTML Canvas Lines for Cryptography? +While using HTML canvas to generate letters for cryptographic purposes might seem unconventional, it offers some intriguing possibilities: + +1. Unique Randomness: + +Noise-Based Generation: By manipulating canvas elements like lines, curves, or random pixel patterns, you can generate visually distinct letters. +Seed-Based Variation: Using different seeds or initial conditions can lead to a vast range of letter variations, making it difficult for attackers to predict patterns. + +2. Visual Obfuscation: + +Camouflaging Information: Embedding information within complex canvas-generated images can make it harder for attackers to identify and extract sensitive data. +Steganography: By hiding messages within seemingly random patterns, you can create a more secure form of communication.   + +3. Human-Resistant Challenges: + +CAPTCHA-like Applications: Creating visually challenging CAPTCHAs that require users to identify letters generated from canvas elements can deter automated attacks. +User Verification: Implementing unique visual puzzles that only humans can solve can be used for authentication purposes. + +4. Art and Design Applications: + +Dynamic Typography: Generating unique fonts or letterforms based on canvas manipulations can add a creative and artistic element to design projects. +Interactive Art: Creating interactive art pieces that respond to user input by generating dynamic letterforms. +However, it's important to note that: + +Security: While canvas-based techniques can add a layer of complexity, strong cryptographic algorithms and secure protocols are still essential for robust security. +Performance: Generating letters on-the-fly can be computationally expensive, especially for large-scale applications. +Accessibility: Ensure that any visual challenges or puzzles are accessible to users with disabilities. +In conclusion, while using HTML canvas to generate letters for cryptography and other purposes is an interesting approach, it should be used in conjunction with other proven security measures. The specific implementation and application would determine its effectiveness and suitability for a particular use case. \ No newline at end of file From cdddac769959a2b9f31ea925bcd5e107aab8705f Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 31 Oct 2024 11:41:02 +0100 Subject: [PATCH 07/15] feat: styling README title --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e68d441..1bb454d 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,8 @@ With this concept in mind, out of 2^12 = 4096 signs available, only some were ca ## Sample text ![sample text](image.png) -Why Generate Letters from HTML Canvas Lines for Cryptography? +## Why Generate Letters from HTML Canvas Lines for Cryptography? + While using HTML canvas to generate letters for cryptographic purposes might seem unconventional, it offers some intriguing possibilities: 1. Unique Randomness: From 7ed716b2b0b4e81aff33203c2ce9fb0300046e23 Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 31 Oct 2024 11:57:52 +0100 Subject: [PATCH 08/15] imporved README using AI --- README.md | 66 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 1bb454d..8e221d7 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,60 @@ -# 12 Lines +# 12 Lines Font 12 Lines Font utilizes a 3-column-3-row grid as start and end points for 6 vertical and 6 horizontal segments of lines that are allowed to join these points in the shortest way possible. With this concept in mind, out of 2^12 = 4096 signs available, only some were carefully chosen to represent all large and small characters of the standard Latin alphabet. Enjoy! [Demo](https://herbowicz.github.io/12/) (start typing, try w/caps lock too) -## Sample text -![sample text](image.png) +## A Unique Approach to Cryptography and Design -## Why Generate Letters from HTML Canvas Lines for Cryptography? +**A novel approach to representing characters using a minimal set of lines.** -While using HTML canvas to generate letters for cryptographic purposes might seem unconventional, it offers some intriguing possibilities: +This project explores the concept of the 12 Lines font, a unique way to represent characters using a binary code and basic line segments. This approach offers exciting possibilities in cryptography, design, and other security applications. -1. Unique Randomness: +### How it Works -Noise-Based Generation: By manipulating canvas elements like lines, curves, or random pixel patterns, you can generate visually distinct letters. -Seed-Based Variation: Using different seeds or initial conditions can lead to a vast range of letter variations, making it difficult for attackers to predict patterns. +1. **Character Representation:** -2. Visual Obfuscation: +Each character is represented by a 12-bit binary code. Each bit corresponds to a specific line segment within a 3x3 grid. -Camouflaging Information: Embedding information within complex canvas-generated images can make it harder for attackers to identify and extract sensitive data. -Steganography: By hiding messages within seemingly random patterns, you can create a more secure form of communication.   +``` +[1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1] // A +[1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1] // B +[1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0] // C +``` -3. Human-Resistant Challenges: +2. **Canvas Rendering:** -CAPTCHA-like Applications: Creating visually challenging CAPTCHAs that require users to identify letters generated from canvas elements can deter automated attacks. -User Verification: Implementing unique visual puzzles that only humans can solve can be used for authentication purposes. +The binary code is used to determine which line segments to draw on a canvas. For example, the first bit indicates whether the top horizontal line should be drawn. -4. Art and Design Applications: +```javascript +ctx.moveTo(s+l,s+d); if (sign[at][0]) { ctx.lineTo(s*2+l,s+d); }  +ctx.moveTo(s*2+l,s+d); if (sign[at][1]) { ctx.lineTo(s*3+l,s+d); } +// ... +``` -Dynamic Typography: Generating unique fonts or letterforms based on canvas manipulations can add a creative and artistic element to design projects. -Interactive Art: Creating interactive art pieces that respond to user input by generating dynamic letterforms. -However, it's important to note that: +### Benefits and Applications -Security: While canvas-based techniques can add a layer of complexity, strong cryptographic algorithms and secure protocols are still essential for robust security. -Performance: Generating letters on-the-fly can be computationally expensive, especially for large-scale applications. -Accessibility: Ensure that any visual challenges or puzzles are accessible to users with disabilities. -In conclusion, while using HTML canvas to generate letters for cryptography and other purposes is an interesting approach, it should be used in conjunction with other proven security measures. The specific implementation and application would determine its effectiveness and suitability for a particular use case. \ No newline at end of file +1. **Cryptography:** + +* **Steganography:** Embed information within images or other media using the minimalist nature of the font. +* **Security Tokens:** Create unique visual patterns for security tokens or watermarks. +* **Cryptography:** Utilize the binary representation as input for cryptographic algorithms. + +2. **Design:** + +* **Unique Typography:** Add a distinctive aesthetic to design projects with the font's style. +* **Minimalist Design:** Align your project with minimalist design principles using the font's simplicity. +* **Interactive Art:** Create interactive art installations or digital experiences with the font. + +3. **Accessibility:** + +* **Simplified Character Recognition:** The reduced number of elements can make character recognition easier for certain applications, such as OCR. +* **Universal Design:** Adapt the font for various screen sizes and resolutions due to its simplicity. + +### Future Directions + +* **Dynamic Font Generation:** Explore techniques to generate custom fonts based on specific design constraints or security requirements. +* **Font Optimization:** Optimize the font for different rendering contexts, such as web, print, and mobile devices. +* **Security Analysis:** Conduct a thorough security analysis to identify potential vulnerabilities and strengthen the font's security properties. + +The 12 Lines font offers a promising approach with potential applications in various fields. By leveraging its unique characteristics, we can unlock new possibilities for creative endeavors and security advancements. From 891e2955d65c911320b6429ce63d5aeae1be6edb Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 31 Oct 2024 12:05:24 +0100 Subject: [PATCH 09/15] feat: add missing pic --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8e221d7..43d2449 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ With this concept in mind, out of 2^12 = 4096 signs available, only some were ca [Demo](https://herbowicz.github.io/12/) (start typing, try w/caps lock too) ## A Unique Approach to Cryptography and Design +![sample text](image.png) **A novel approach to representing characters using a minimal set of lines.** From a0788dbadfcce15246c2f0830c3b3d58a427fe68 Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 31 Oct 2024 12:07:50 +0100 Subject: [PATCH 10/15] feat: fix --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 43d2449..01eb6e0 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,11 @@ With this concept in mind, out of 2^12 = 4096 signs available, only some were ca [Demo](https://herbowicz.github.io/12/) (start typing, try w/caps lock too) -## A Unique Approach to Cryptography and Design +## Sample text ![sample text](image.png) +## A Unique Approach to Cryptography and Design + **A novel approach to representing characters using a minimal set of lines.** This project explores the concept of the 12 Lines font, a unique way to represent characters using a binary code and basic line segments. This approach offers exciting possibilities in cryptography, design, and other security applications. From c8c4138b34de3bde98520b8add1803e0f0e64264 Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 31 Oct 2024 12:12:54 +0100 Subject: [PATCH 11/15] feat: letters and numbers sample pic --- README.md | 3 +++ letters.png | Bin 0 -> 7169 bytes 2 files changed, 3 insertions(+) create mode 100644 letters.png diff --git a/README.md b/README.md index 01eb6e0..efb7c22 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,9 @@ With this concept in mind, out of 2^12 = 4096 signs available, only some were ca ## Sample text ![sample text](image.png) +## Letters and numbers +![alt text](letters.png) + ## A Unique Approach to Cryptography and Design **A novel approach to representing characters using a minimal set of lines.** diff --git a/letters.png b/letters.png new file mode 100644 index 0000000000000000000000000000000000000000..0279e2a836b408da07e72d69c4ff2ea1cebf8004 GIT binary patch literal 7169 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 literal 0 HcmV?d00001 From 831da3d9b70aae6191c6245a6d3765c4c23579a0 Mon Sep 17 00:00:00 2001 From: herbowicz Date: Thu, 31 Oct 2024 13:37:59 +0100 Subject: [PATCH 12/15] styl: 12-Bit --- README.md | 10 +++++----- index.html | 2 +- letters.png | Bin 7169 -> 0 bytes signs.png | Bin 0 -> 8778 bytes 4 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 letters.png create mode 100644 signs.png diff --git a/README.md b/README.md index efb7c22..0d1625d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# 12 Lines Font -12 Lines Font utilizes a 3-column-3-row grid as start and end points for 6 vertical and 6 horizontal segments of lines that are allowed to join these points in the shortest way possible. +# 12-Bit +12-Bit font utilizes a 3-column-3-row grid as start and end points for 6 vertical and 6 horizontal segments of lines that are allowed to join these points in the shortest way possible. With this concept in mind, out of 2^12 = 4096 signs available, only some were carefully chosen to represent all large and small characters of the standard Latin alphabet. Enjoy! [Demo](https://herbowicz.github.io/12/) (start typing, try w/caps lock too) @@ -8,13 +8,13 @@ With this concept in mind, out of 2^12 = 4096 signs available, only some were ca ![sample text](image.png) ## Letters and numbers -![alt text](letters.png) +![alt text](signs.png) ## A Unique Approach to Cryptography and Design **A novel approach to representing characters using a minimal set of lines.** -This project explores the concept of the 12 Lines font, a unique way to represent characters using a binary code and basic line segments. This approach offers exciting possibilities in cryptography, design, and other security applications. +This project explores the concept of the 12-Bit font, a unique way to represent characters using a binary code and basic line segments. This approach offers exciting possibilities in cryptography, design, and other security applications. ### How it Works @@ -63,4 +63,4 @@ ctx.moveTo(s*2+l,s+d); if (sign[at][1]) { ctx.lineTo(s*3+l,s+d); } * **Font Optimization:** Optimize the font for different rendering contexts, such as web, print, and mobile devices. * **Security Analysis:** Conduct a thorough security analysis to identify potential vulnerabilities and strengthen the font's security properties. -The 12 Lines font offers a promising approach with potential applications in various fields. By leveraging its unique characteristics, we can unlock new possibilities for creative endeavors and security advancements. +The 12-Bit font offers a promising approach with potential applications in various fields. By leveraging its unique characteristics, we can unlock new possibilities for creative endeavors and security advancements. diff --git a/index.html b/index.html index db76ff7..6312bd2 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - 12 lines + 12-Bit diff --git a/letters.png b/letters.png deleted file mode 100644 index 0279e2a836b408da07e72d69c4ff2ea1cebf8004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7169 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 diff --git a/signs.png b/signs.png new file mode 100644 index 0000000000000000000000000000000000000000..7263b374f40f6cbf79a1a4b1655c1f27aaf91e1a GIT binary patch literal 8778 zcmch7c~p}5{=d!KYVNJc%uLPFNpESnrkT6U9W`5VXd{=TTr!t3Trw17W}4iWF*DON zZZxGuK)K=uH74#-qd>SoN=Si9N~nO~_k-E}&HbJ8J>S1(&QYI-bDr}&A3o3f{o3AU zeh>Bi`X8JBp{1qu^@07~N42z8=74kYSF6C^u5-WN0f!awM}5E3BK2)~4?g@Y;$KJp zrKR;Wf6c<#mEiN=FYWh_*V5XwUGux*z|ntx(9+t*JK+7V<5z+whY#h1`=YeoY#uV` zdDdL?qZR$7Q3!vxq`3U&zd8Q>8)G+V)sM`P753jz^!9T98FlX~%ls2=+3VeYesU<} zyN&f%{@J?54-GFEwXRx_25ZoqYdS9Va=jUsDDkvE7{Ni0)$Q$NR}9V{e{c z6DKGqWP4XHCA*YaT9bmWOT`LM`+BO9F&U3HQl5|LS&&KdV3hz|uxw~^!-n{hF6 z`@Xf?5QT;&riV}4afgSkEG;c%o-dw;ws#ThxdC}5kl=M&oL|yTZ$TbmMFqi3>B8ZL zc$p~Sf>m;v!>sW6Y7?s@E-JzWH50aY+4az&L*a>uwcH9l4$gu|*Q=$za5Ndi>lH}t z`d#h{WK5C#r6Lk98}ba=PE$-F-DRbo2kYKEpX&rP@Hq5szglg2SRK z+E4~NMQ*nuJ?nQxo$mSV-`MM8ROOV>o)t9Zh~%aOBT12=_H1TGzj{$ydy=2E!O=51 zI$9_Yt!zF9!@dxe{^OfrHxBZOlw(U!Rh;`LGUnyEB7(B?yLMu%L&ec1K?%*$tsD zo)~Dnb?xCAx{kee&-$^!ay;F9$XUz?<0y3RGm)Fv=&)?dK(`4i@b>F2%BRGF<b$*_Krd(Wm~6s6igSWz5_lXzoj zcWPe#G%bWI%4Zmh3k;cjM3S1+@czMVkrY~d;cPhsOLd=rb5+ofQztC90z4QM?h^NQ ze}jDd_U%r1M0|YpF!7*!T`RoLRf@_0v#6sEP8F zOX|WE4h@T4yqrR3r)<(eh7aNH%`$W3$-n^Rl+KE@Cp7$tL(V z3Vyb=BXKj*xSJB|{X!2lmFsElJqh8g&9vmZ=X9jJbb!?F9|jU7p1CH%^&&s_y-mXY3K6{r!xi+sNz7 zp~Jb3etIsRBc<D+)n%R7z3^NT1Bj zxWn?z2#H}|316JBA8RiOg(1TYaL@-RXK-l;+&qeR9!8LNZDL!o*uPx9)#D6l*~EbH zH|9iqGxS^4OW{3D*MxEC=7CtecU#c~bd}8f;PD`0-Ivy#bvAg#z4A`{VCHpeQp}{C zzvf2pI?Y`ezT?Q?caQ^14Dqe;pVc*=@4MVR3#^8CVOKG2K@c}P!BO|lsxBYyuBWLc z6$^uGYF)E}NhUG+ov(a2Bj-cZ{J1yIegqd0i9{yBp#}mo9TR!Kwd}gW^}Ppc39$3T zrqP)p)GDH_^itJLX*lM>g=PqBa&0f1VBgyc9Y9?r=92r@it$X$JtoDqBvsv2M!w7M zVO0^y(1fkuM0rL;o3}bgY-}N~>x8$@+ zhR58EV-?UM#G-<&8fweRAOLFkWB+s?aT*z*jc^*}(gp^Gu0YqsdKs8`v+$Dw7;FqV8O>3 z6j#m+GgsydQM`(4{o3gUfzdZHiot%dviqHO(ez#O>3l>&I)rTy#)kj{C5M?!Q8}bCHg_L zFEQKygFbz+y~H7+3#%4lSt+a1*KOT}oiWEAm3U=Dd*a8Uicrob@^luaWv8y#FXNr&6X_T1OzmNV& z$HD5SPmvF?tFAjIO$Euj;8d{iEzXzzz3|FJ1#7AQl{sCIq}5?Il*Dmap><1tC4aZR zO;9B~f=9*3eu~%?rB1j|=8VKI2oUPPLFaA3-M@dosZ_ovgfaQREeD%Ol&#idcl#@V`GxLuYQiv#MP&MxHiMas@UNe zOpCkFg|U+z6n|t9@#eixFOF2+G}TCOpM4!F$TYw6jt3Qj-U>&(yPMv{ZArOZ!YJU! ze|Yn}s<}C6>4~#m_W#=h7p_g;s;#X}PTU82>rF{kDTF`SJf=ssu*J%|#nQ{FH>)8Q zyhZh#IR22-B?|4j^m-K)*iYYuuZoORKdHWz{tTZZfpDnZed!Ykd@0BM=TrarP8)OD zZ#l2kal}^D7UoiRbhFm2J!||$_J-QUnnBI!Zxh}`a*Vi!NwNRy6zhK!ss@=fL=6<` zvmd_{tlo_(o(BNnS1`Xr_{!=!eP zAO)r~j>hbliJKj@&BD4 z4afbj`MO%x{gsV2+%yOI?_5@AlI6IPNKX=vP!|?l&7-5kK+z=}e{{ z8sGf!zO6L_tCj+3x!ZF^b%p`11MTA<5U`6tAOJ$jL3%`X&~;t3ak9q|MPBLaiUKb- z+;0Ye^qyzaH$HyO-{1e?+*;G|vo{!+sd&Lulf)*XuWTofe6fo9*07Rv7@n#>K01-8 zj895z3_5a~tRYAQj9++!E{P)uEs(vzZ`Hbh$1g)Ot|N`lDQtZ6{Ei1%-?`U_oFYNf zBynL_{EVJ#Br}5`xLh@vULyLtA?<1ji*0pS=66&>oJ%@H{@xEeNGl0u?_-~2@9@*x z?O7o2`jtsB-RhBCGn_0YhNDmoSg(_(^BRK^UHFT_l&A3tE{&6QL!#{nKc;9t;c1xC zran1u1G{en(l}aH_6t}|2zvaUk?=525TknUjY%>ci)tv35qli-xGTUFSKq-tP^{rk z^C*CeY;A2*INc&p;~&x?R*?DU+M@V0-X-5Qz3ovzZ8BZZ^OsQFf!w3mKu2qNaWCp zd42<)xc6o2w-32bgehz!X{cM9nR#Fk#{k#4teg9QdglOoCqiHVU~9`Q#!B;JRGA@VNjFcn zgG&`aI%9!;uDcunq=CIK`Vsc}7aA1(Vb zo>iaK_}MgM-h`hwmEMke=b9UU7$0TPhdO^DcL3RyXBo(KsL>7Igbcrx4pZ(kPsW)H z;trci??m!CI^2f?#!=2S5FMb!qtN)VQXed^6L-t^TdT`9gu5fW#?P9Igk9#K`P3Cy zMMd1)NK$ci1mh-eVcZEYe!w5wOYG0swOZTQs(v``5K5B58={RE%S%nPx*=tF;l^91;1n^cH^x(&-0WszW!!*6)3R9jvj0bg`Ac*D{U=o zQ>U}LTeTrU%TmCG1FYl{BB-V$>WlIYU(cf#DWhpsNfNGla<+rL(7~QaI@^jorn-g{_LMjXvJnd* zE*M3^;<=~mOgw|Q3ReA109CTs2WBMsdUhC*&fFy*^q(-27F;mimz$4%wLv)=MkKA_ zJDAW>RWba2QL2Ftbw{-cbO)j^JP_em+PEwn0&V_kZ#WdEUXafq7G((8o#$$mvfD&G zYQj>khiTe23w=bh!fyCR1|T^Z+vHJz^!aFhkd6ihi>XeSi|k}CglQgf zftXEbavdq{cmhm7bwh(cJ0*$njVS^ccppr$*$lTP%tW^jMpEGDIbU z({^cleEc3Y6^{!{mCU97ad}(auRO7`wPh=7-bSZZ2`sZHb*wg-6ISZ9q-&HM2J|Ud zXgsh5gV6t4sByy|mzg6rJqUnRhs}E72x!wOV8O;$<{Km}uqFY(I~axySdd2#AIF|; zUh?TOHUbemTUE>y`p8GMv8Pf$-ZNneU!6Zrj`Rk)6K4T5@)Eoc4RKGd+v++%<9NzT zfhWuQCyAKbUUcE~+DQh`w4#5Feth4rx;<&cb4nZc0Na>B!S{?cZDB&w&^~QNM+TgI ziDdtt))-aidH~e&EK^b^SYb(@5ufj#fG$g^2QRl{6a2UvEMUqn8-mR>3bM-+b*zV} zI$6*g0J8xK)J=D?a28{O{#9-FA#R5T=EI`R57q%t%R1y%7#?k&McJXtM%QeH@8!@d zm};P^HR2h%QB{)f|Kcwf%Bge~izQ;BT8+5h2LnUI27An^r=Fk!0m1sb$BtawU4Auo zQ9ZL7`(ZTzAz{3L^+6ENu)7Ni5I=n27mooo5saV&i( z({*m$2zDXJ#eaYy(J|#G|NiDD*>v3vd7pSEfTiQ20u|IVv*p;bRhsrNmFBQPN0c;0|4}jmq_$@v}8|`CGQx zOLWwrBbtKCZG`>f9tSmR*4^$!1sr|5lF}%d0ag~m63)>URRWN{AuwE0rTTn?=Q$nt zCU_9iN5h5kXRAH!WavD1^1jTBL)3BeF|A zO8QHRX&(coicI94mnrocZ1CPM9Qz;#3Woi#ivBoZdD2apOs4+&)y?AK?xl#-*aN7n zJLrNRQ50oD19eG1NhT6TlH_@AQ6uuARFH{W^8Dou3Ee{t?4pN0E^QXXku32IP*o)UwH2(z;@LX z9tjK5=*l^6O6(`7SK9Zrwx(+rYmC3(p(7mX^JnXdKTI9>a)cKl3{H3{lX#m}#UvZAo(UP0?HW<&F9BP$9carwhe zXxg}$NGbdE`AYs>U2{+pFKVloZp9e`jVaF%`GM@^6;M%%LSnhar|gl{x7=Cgk06|} zt{p@3?-*gr-HG(6)%5`&Lxfbn!TqYyPk){b{cLZS?dWos8RqVj1^ikGLc(~BnP=0~ zGLR@zWyIK`STx^A)^MNVx_aFf3)-TRhM1ikVt)d%cj&JTaWPeb=uJ{PFRH0Be)P9% zGcq!^rOYjf1OiI{PJ1M?fY&wAWIzwRq7CEu2vU7MVm~(!uz*6B? zg5g>48&JbnO$%o zfev;{pR{498VWmk@}$V)OXVmFKV$6TNgTJ_McOo%n z#*Lf8vmgx-PH?IaZ@DL70_}K&x%!G=G!&IQ_se|dwEyg zo1ht943@u*2H|FpZyn0O(Q~G4{im!&BQze9JHbytZ?VkNgvFj3P`Dpo4pAEaveD48 zAFzFKZH<1HYL15hMZlw#^l5}rt`qmvQqh(`>(q87=p*Ma&ySU)Hx;TbY5a0Xx&6S;nP4&qWNPCA2dDCH z7%z?PipMF3)suZJ0T4x}4`=6D@)tUH^rQ27;Mro!+m$k7K%>Bq1LEFLk|fOS1Wz4H zd0vCI)%sy%;*+{|PeLq=>38!~BfKI_s3RC_%T^7&-||`6tdC&au@;NPU@ApUl@XFV zCe~fEMRguh)Vl>1lWD3U8j&9_D1zI#lX9fyw+~BQ>=D)^atxl8(ydIxqzW^7nxynF zpcbcF&IC~PwVqw9dr7kk4h$r~h4a&V0T>YxKsu^%qwQ{7n8d5h6VtdbL{kNV4Ddy! zt_FM`Gw!{r47N64z|$!9eYhC=ULlC}8mU!=4ES-b!`tX)$oS|nAVWbPCzUzv$j-3L zlC1Rdo-`WYru9Vk{!WAXgda8lk>T3M@y?A0S@B~gx^}ZhwOWBOS=+pw_rSt#?G-N-<}M&$0~E78&Nvv^ zrYAr#QiA0#(>-fGQ1C#^x1&O%`AX^cC9^n91%4`ikg*0Y7r#BRf5{Z`%C_;g)@^dZ z;%nwxw6q4t0acBMfb0Z45o%&dle*FRY5vVP)kK7#&rMMg-phNR-S#E9E-%P&~n#ZqcY$5Upg|QUCw| literal 0 HcmV?d00001 From 2d742f3bca547e1e45b0ce20db10cdbc72914008 Mon Sep 17 00:00:00 2001 From: herbowicz Date: Mon, 4 Nov 2024 10:41:48 +0100 Subject: [PATCH 13/15] diff font widths --- README.md | 3 +++ font-width.png | Bin 0 -> 25438 bytes 2 files changed, 3 insertions(+) create mode 100644 font-width.png diff --git a/README.md b/README.md index 0d1625d..4a165de 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,9 @@ With this concept in mind, out of 2^12 = 4096 signs available, only some were ca ## Letters and numbers ![alt text](signs.png) +Different font widths can obscure readability. +![alt text](font-width.png) + ## A Unique Approach to Cryptography and Design **A novel approach to representing characters using a minimal set of lines.** diff --git a/font-width.png b/font-width.png new file mode 100644 index 0000000000000000000000000000000000000000..4245ebec0581a10b70ccef5105342e4161969a4c GIT binary patch literal 25438 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 literal 0 HcmV?d00001 From c440c9cb8d9f5ea4c950aa916a309fec7e9b6ef6 Mon Sep 17 00:00:00 2001 From: herbowicz Date: Mon, 4 Nov 2024 10:58:43 +0100 Subject: [PATCH 14/15] js file --- index.html | 177 +---------------------------------------------------- script.js | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+), 176 deletions(-) create mode 100644 script.js diff --git a/index.html b/index.html index 6312bd2..1869681 100644 --- a/index.html +++ b/index.html @@ -9,181 +9,6 @@
Width: Size:
- + diff --git a/script.js b/script.js new file mode 100644 index 0000000..a927f72 --- /dev/null +++ b/script.js @@ -0,0 +1,177 @@ +var canvas = document.getElementById("canvas"); +var ctx = canvas.getContext("2d"); +canvas.width = window.innerWidth; +canvas.height = window.innerHeight; +sign = [ + [1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0], //! + [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0], //"v + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], //# + [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1], //$ + [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0], //% + [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], //& + [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], //' + [1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0], //( + [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1], //) + [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1], //* + [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0], //+ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], //, + [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], //- + [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], //. + [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0], /// + [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], //0 + [1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0], //1 + [1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0], //2 + [1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1], //3 + [0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1], //4 + [0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1], //5 + [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1], //6 + [1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1], //7 + [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1], //8 + [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1], //9 + [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], //: + [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0], //; + [0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0], //< + [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], //= + [1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0], //> + [1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0], //? + [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1], //@ + [1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], //A + [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1], //B + [1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], //C + [1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1], //D + [1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0], //E + [1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0], //F + [1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1], //G + [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], //H + [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0], //I + [1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1], //J + [0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0], //K + [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], //L + [1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1], //M + [1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], //N + [1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1], //O + [1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0], //P + [1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0], //Q + [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0], //R + [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1], //S + [1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], //T + [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1], //U + [0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0], //V + [0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1], //W + [0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1], //X + [0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0], //Y + [1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0], //Z + [1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0], //[ + [1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1], //\ + [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1], //] + [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], //^ + [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], //_ + [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], //` + [0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0], //a + [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1], //b + [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0], //c + [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1], //d + [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0], //e + [0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0], //f + [0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1], //g + [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1], //h + [0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0], //i + [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1], //j + [0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0], //k + [0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0], //l + [0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1], //m + [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1], //n + [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1], //o + [0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0], //p + [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0], //q + [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0], //r + [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0], //s + [0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0], //t + [0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1], //u + [0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1], //v + [0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1], //w + [0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0], //x + [0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1], //y + [0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0], //z + [0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0], //{ + [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], //| + [1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0], //} + [1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0] //~ +] +var s = 12; //size +var l = 0; //left +var d = 0; //down +var w = 2; //width +on = true; +var update = function () { + document.getElementById('width').innerHTML = w; + document.getElementById('size').innerHTML = s; +} +update(); +var clear = function () { + ctx.clearRect(s / 2 + l, s / 2 + d, s * 3, s * 3); +} +var cursor = function () { + if (on) { + clear(); + ctx.beginPath(); + ctx.lineWidth = w; + ctx.moveTo(s + l, s * 3 + d); + ctx.lineTo(s * 3 + l, s * 3 + d); + ctx.stroke(); + on = false; + } else { + clear(); + on = true; + } +} +setInterval(cursor, 500); +document.onkeydown = function (e) { + if (e.keyCode == 8) { + clear(); + l -= s * 3; + clear(); + if (l < 0) { + l = 0; + } + } //backspace +} +document.onkeypress = function (evt) { + evt = evt || window.event; + var charCode = evt.keyCode || evt.which; + if (charCode == 13 || l > canvas.width - s * 3) { + clear(); + l = 0; + d += s * 3; + return; + } //enter+EOL + if (charCode == 32) { + clear(); + l += s * 3; + return; + } //space + + var at = charCode - 33; + clear(); + ctx.beginPath(); + ctx.lineWidth = w; + //horizontal lines + ctx.moveTo(s + l, s + d); if (sign[at][0]) { ctx.lineTo(s * 2 + l, s + d); } + ctx.moveTo(s * 2 + l, s + d); if (sign[at][1]) { ctx.lineTo(s * 3 + l, s + d); } + ctx.moveTo(s + l, s * 2 + d); if (sign[at][2]) { ctx.lineTo(s * 2 + l, s * 2 + d); } + ctx.moveTo(s * 2 + l, s * 2 + d); if (sign[at][3]) { ctx.lineTo(s * 3 + l, s * 2 + d); } + ctx.moveTo(s + l, s * 3 + d); if (sign[at][4]) { ctx.lineTo(s * 2 + l, s * 3 + d); } + ctx.moveTo(s * 2 + l, s * 3 + d); if (sign[at][5]) { ctx.lineTo(s * 3 + l, s * 3 + d); } + //vertical lines + ctx.moveTo(s + l, s + d); if (sign[at][6]) { ctx.lineTo(s + l, s * 2 + d); } + ctx.moveTo(s + l, s * 2 + d); if (sign[at][7]) { ctx.lineTo(s + l, s * 3 + d); } + ctx.moveTo(s * 2 + l, s + d); if (sign[at][8]) { ctx.lineTo(s * 2 + l, s * 2 + d); } + ctx.moveTo(s * 2 + l, s * 2 + d); if (sign[at][9]) { ctx.lineTo(s * 2 + l, s * 3 + d); } + ctx.moveTo(s * 3 + l, s + d); if (sign[at][10]) { ctx.lineTo(s * 3 + l, s * 2 + d); } + ctx.moveTo(s * 3 + l, s * 2 + d); if (sign[at][11]) { ctx.lineTo(s * 3 + l, s * 3 + d); } + ctx.stroke(); + l += s * 3; +} + + + From 88d075cdca20c305a76f4f0deafa0aefd8c8bb63 Mon Sep 17 00:00:00 2001 From: herbowicz Date: Fri, 22 Nov 2024 15:41:37 +0100 Subject: [PATCH 15/15] AI improvements and fixes --- font-width.png | Bin 25438 -> 45532 bytes index.html | 20 +++- script.js | 313 +++++++++++++++++++++++++------------------------ 3 files changed, 180 insertions(+), 153 deletions(-) diff --git a/font-width.png b/font-width.png index 4245ebec0581a10b70ccef5105342e4161969a4c..af7b07fbc633891707f0ece899bf47570909ce5a 100644 GIT binary patch literal 45532 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 diff --git a/index.html b/index.html index 1869681..14687a5 100644 --- a/index.html +++ b/index.html @@ -1,14 +1,28 @@ + 12-Bit + -
Width: Size:
+
+ Width: + + + +
+
+ Size: + + + +
- + - + + \ No newline at end of file diff --git a/script.js b/script.js index a927f72..3cb08f4 100644 --- a/script.js +++ b/script.js @@ -1,117 +1,137 @@ -var canvas = document.getElementById("canvas"); -var ctx = canvas.getContext("2d"); +let canvas = document.getElementById("canvas"); +let ctx = canvas.getContext("2d"); canvas.width = window.innerWidth; canvas.height = window.innerHeight; -sign = [ - [1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0], //! - [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0], //"v - [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], //# - [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1], //$ - [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0], //% - [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], //& - [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], //' - [1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0], //( - [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1], //) - [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1], //* - [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0], //+ - [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], //, - [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], //- - [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], //. - [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0], /// - [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], //0 - [1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0], //1 - [1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0], //2 - [1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1], //3 - [0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1], //4 - [0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1], //5 - [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1], //6 - [1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1], //7 - [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1], //8 - [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1], //9 - [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], //: - [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0], //; - [0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0], //< - [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], //= - [1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0], //> - [1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0], //? - [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1], //@ - [1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], //A - [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1], //B - [1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], //C - [1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1], //D - [1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0], //E - [1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0], //F - [1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1], //G - [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], //H - [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0], //I - [1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1], //J - [0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0], //K - [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], //L - [1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1], //M - [1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], //N - [1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1], //O - [1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0], //P - [1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0], //Q - [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0], //R - [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1], //S - [1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], //T - [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1], //U - [0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0], //V - [0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1], //W - [0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1], //X - [0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0], //Y - [1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0], //Z - [1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0], //[ - [1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1], //\ - [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1], //] - [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], //^ - [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], //_ - [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], //` - [0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0], //a - [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1], //b - [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0], //c - [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1], //d - [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0], //e - [0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0], //f - [0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1], //g - [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1], //h - [0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0], //i - [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1], //j - [0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0], //k - [0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0], //l - [0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1], //m - [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1], //n - [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1], //o - [0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0], //p - [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0], //q - [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0], //r - [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0], //s - [0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0], //t - [0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1], //u - [0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1], //v - [0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1], //w - [0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0], //x - [0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1], //y - [0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0], //z - [0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0], //{ - [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], //| - [1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0], //} - [1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0] //~ -] -var s = 12; //size -var l = 0; //left -var d = 0; //down -var w = 2; //width -on = true; -var update = function () { - document.getElementById('width').innerHTML = w; - document.getElementById('size').innerHTML = s; + +const sign = { + "!": [1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0], //! + "\"": [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0], //" + "#": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], //# + "$": [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1], //$ + "%": [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0], //% + "&": [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], //& + "'": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], //' + "(": [1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0], //( + ")": [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1], //) + "*": [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1], //* + "+": [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0], //+ + ",": [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], //, + "-": [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], //- + ".": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], //. + "/": [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0], /// + "0": [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], //0 + "1": [1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0], //1 + "2": [1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0], //2 + "3": [1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1], //3 + "4": [0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1], //4 + "5": [0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1], //5 + "6": [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1], //6 + "7": [1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1], //7 + "8": [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1], //8 + "9": [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1], //9 + ":": [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], //: + ";": [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0], //; + "<": [0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0], //< + "=": [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], //= + ">": [1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0], //> + "?": [1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0], //? + "@": [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1], //@ + "A": [1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], //A + "B": [1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1], //B + "C": [1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], //C + "D": [1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1], //D + "E": [1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0], //E + "F": [1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0], //F + "G": [1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1], //G + "H": [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], //H + "I": [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0], //I + "J": [1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1], //J + "K": [0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0], //K + "L": [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], //L + "M": [1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1], //M + "N": [1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], //N + "O": [1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1], //O + "P": [1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0], //P + "Q": [1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0], //Q + "R": [1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0], //R + "S": [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1], //S + "T": [1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], //T + "U": [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1], //U + "V": [0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0], //V + "W": [0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1], //W + "X": [0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1], //X + "Y": [0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0], //Y + "Z": [1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0], //Z + "[": [1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0], //[ + "\\": [1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1], //\ + "]": [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1], //] + "^": [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], //^ + "_": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], //_ + "`": [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], //` + "a": [0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0], //a + "b": [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1], //b + "c": [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0], //c + "d": [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1], //d + "e": [1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0], //e + "f": [0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0], //f + "g": [0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1], //g + "h": [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1], //h + "i": [0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0], //i + "j": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1], //j + "k": [0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0], //k + "l": [0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0], //l + "m": [0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1], //m + "n": [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1], //n + "o": [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1], //o + "p": [0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0], //p + "q": [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0], //q + "r": [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0], //r + "s": [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0], //s + "t": [0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0], //t + "u": [0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1], //u + "v": [0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1], //v + "w": [0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1], //w + "x": [0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0], //x + "y": [0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1], //y + "z": [0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0], //z + "{": [0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0], //{ + "|": [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], //| + "}": [1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0], //} + "~": [1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0], //~ } -update(); -var clear = function () { + +let l = 0; // left offset +let d = 0; // down offset +let w = 2; // width +let s = 12; // size +let on = true; +const widthSpan = document.querySelector('#width span'); +const sizeSpan = document.querySelector('#size span'); + +widthSpan.textContent = w; +sizeSpan.textContent = s; + +console.log(widthSpan.textContent, sizeSpan.textContent) + +document.querySelectorAll('button') + .forEach(el => el.addEventListener('click', (event) => { + + console.log(event.target.parentElement.id, event.target.className) + + if (event.target.parentElement.id === 'width') { + w = Math.max(1, w + Number(event.target.className)); + widthSpan.textContent = w; + } else if (event.target.parentElement.id === 'size') { + s = Math.max(1, s + Number(event.target.className)); + sizeSpan.textContent = s; + } + })) + +const clear = () => { ctx.clearRect(s / 2 + l, s / 2 + d, s * 3, s * 3); -} -var cursor = function () { +}; + +const cursor = () => { if (on) { clear(); ctx.beginPath(); @@ -125,53 +145,46 @@ var cursor = function () { on = true; } } + setInterval(cursor, 500); -document.onkeydown = function (e) { - if (e.keyCode == 8) { - clear(); + +document.addEventListener('keydown', (event) => { + const key = event.key; + // console.log({ key }) + + clear(); + + if (key === 'Backspace') { // Backspace l -= s * 3; - clear(); if (l < 0) { l = 0; } - } //backspace -} -document.onkeypress = function (evt) { - evt = evt || window.event; - var charCode = evt.keyCode || evt.which; - if (charCode == 13 || l > canvas.width - s * 3) { - clear(); + } else if (key === 'Enter' || l >= canvas.width - s * 3) { // Enter or end of line l = 0; d += s * 3; - return; - } //enter+EOL - if (charCode == 32) { - clear(); + } else if (key === ' ') { // Space l += s * 3; - return; - } //space - - var at = charCode - 33; - clear(); - ctx.beginPath(); - ctx.lineWidth = w; - //horizontal lines - ctx.moveTo(s + l, s + d); if (sign[at][0]) { ctx.lineTo(s * 2 + l, s + d); } - ctx.moveTo(s * 2 + l, s + d); if (sign[at][1]) { ctx.lineTo(s * 3 + l, s + d); } - ctx.moveTo(s + l, s * 2 + d); if (sign[at][2]) { ctx.lineTo(s * 2 + l, s * 2 + d); } - ctx.moveTo(s * 2 + l, s * 2 + d); if (sign[at][3]) { ctx.lineTo(s * 3 + l, s * 2 + d); } - ctx.moveTo(s + l, s * 3 + d); if (sign[at][4]) { ctx.lineTo(s * 2 + l, s * 3 + d); } - ctx.moveTo(s * 2 + l, s * 3 + d); if (sign[at][5]) { ctx.lineTo(s * 3 + l, s * 3 + d); } - //vertical lines - ctx.moveTo(s + l, s + d); if (sign[at][6]) { ctx.lineTo(s + l, s * 2 + d); } - ctx.moveTo(s + l, s * 2 + d); if (sign[at][7]) { ctx.lineTo(s + l, s * 3 + d); } - ctx.moveTo(s * 2 + l, s + d); if (sign[at][8]) { ctx.lineTo(s * 2 + l, s * 2 + d); } - ctx.moveTo(s * 2 + l, s * 2 + d); if (sign[at][9]) { ctx.lineTo(s * 2 + l, s * 3 + d); } - ctx.moveTo(s * 3 + l, s + d); if (sign[at][10]) { ctx.lineTo(s * 3 + l, s * 2 + d); } - ctx.moveTo(s * 3 + l, s * 2 + d); if (sign[at][11]) { ctx.lineTo(s * 3 + l, s * 3 + d); } - ctx.stroke(); - l += s * 3; -} - + } else { + ctx.beginPath(); + ctx.lineWidth = w; + if (!sign[key]) return; + //horizontal lines + ctx.moveTo(s + l, s + d); if (sign[key][0]) { ctx.lineTo(s * 2 + l, s + d); } + ctx.moveTo(s * 2 + l, s + d); if (sign[key][1]) { ctx.lineTo(s * 3 + l, s + d); } + ctx.moveTo(s + l, s * 2 + d); if (sign[key][2]) { ctx.lineTo(s * 2 + l, s * 2 + d); } + ctx.moveTo(s * 2 + l, s * 2 + d); if (sign[key][3]) { ctx.lineTo(s * 3 + l, s * 2 + d); } + ctx.moveTo(s + l, s * 3 + d); if (sign[key][4]) { ctx.lineTo(s * 2 + l, s * 3 + d); } + ctx.moveTo(s * 2 + l, s * 3 + d); if (sign[key][5]) { ctx.lineTo(s * 3 + l, s * 3 + d); } + //vertical lines + ctx.moveTo(s + l, s + d); if (sign[key][6]) { ctx.lineTo(s + l, s * 2 + d); } + ctx.moveTo(s + l, s * 2 + d); if (sign[key][7]) { ctx.lineTo(s + l, s * 3 + d); } + ctx.moveTo(s * 2 + l, s + d); if (sign[key][8]) { ctx.lineTo(s * 2 + l, s * 2 + d); } + ctx.moveTo(s * 2 + l, s * 2 + d); if (sign[key][9]) { ctx.lineTo(s * 2 + l, s * 3 + d); } + ctx.moveTo(s * 3 + l, s + d); if (sign[key][10]) { ctx.lineTo(s * 3 + l, s * 2 + d); } + ctx.moveTo(s * 3 + l, s * 2 + d); if (sign[key][11]) { ctx.lineTo(s * 3 + l, s * 3 + d); } + ctx.stroke(); + l += s * 3; + } +});