-
Notifications
You must be signed in to change notification settings - Fork 2
/
ascii.scad
86 lines (66 loc) · 2.77 KB
/
ascii.scad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// ASCII lookup table and other utility functions
// from user MichaelAtOz
// date 16 Jun 2013
// on OpenSCAD github, issue #116 discussion thread:
// https://github.com/openscad/openscad/issues/116
ASCIIv = [
[ " ",32],[ "!",33],["\"",34],[ "#",35],[ "$",36],
[ "%",37],[ "&",38],[ "'",39],[ "(",40],[ ")",41],
[ "*",42],[ "+",43],[ ",",44],[ "-",45],[ ".",46],
[ "/",47],
[ "0",48],[ "1",49],[ "2",50],[ "3",51],[ "4",52],
[ "5",53],[ "6",54],[ "7",55],[ "8",56],[ "9",57],
[ ":",58],[ ";",59],[ "<",60],[ "=",61],[ ">",62],
[ "?",63],[ "@",64],
[ "A",65],[ "B",66],[ "C",67],[ "D",68],[ "E",69],
[ "F",70],[ "G",71],[ "H",72],[ "I",73],[ "J",74],
[ "K",75],[ "L",76],[ "M",77],[ "N",78],[ "O",79],
[ "P",80],[ "Q",81],[ "R",82],[ "S",83],[ "T",84],
[ "U",85],[ "V",86],[ "W",87],[ "X",88],[ "Y",89],
[ "Z",90],
[ "[",91],[ "\\",92],[ "]",93],[ "^",94],[ "_",95],
[ "`",96],
[ "a", 97],[ "b", 98],[ "c", 99],[ "d",100],[ "e",101],
[ "f",102],[ "g",103],[ "h",104],[ "i",105],[ "j",106],
[ "k",107],[ "l",108],[ "m",109],[ "n",110],[ "o",111],
[ "p",112],[ "q",113],[ "r",114],[ "s",115],[ "t",116],
[ "u",117],[ "v",118],[ "w",119],[ "x",120],[ "y",121],
[ "z",122],
[ "{",123],[ "|",124],[ "}",125],[ "~",126]
];
ASCIIstart=32;
ASCIIend=len(ASCIIv)-1+ASCIIstart;
ASCIIfirst=ASCIIv[0][0];
ASCIIlast=ASCIIv[len(ASCIIv)-1][0];
// myasc() return the character code (number) of the first char of a string
function myasc(string) = ASCIIv[search(string[0],ASCIIv,1,0)[0]][1];
// mychr() return the character (string really) matching the character number
function mychr(charNum) = ASCIIv[search(charNum,ASCIIv,0,1)[0]][0];
// above will go into a library
// testing - comment out
echo("Test Part 1");
for (i = [0 : len(ASCIIv)-1 ] )
{
echo( i,
ASCIIv[i][0],
search(i+32,ASCIIv,0,1)[0],
search(i+32,ASCIIv,0,1)[0]+32,
ASCIIv[search(i+32,ASCIIv,0,1)[0]][0]);
}
echo(str(" start=",ASCIIstart,
" end=",ASCIIend,
" first='",ASCIIfirst,
"' last='",ASCIIlast,
"' "));
echo("Test Part 2");
echo("myasc(A) =",myasc("A"));
echo("mychr(65)=",mychr(65));
echo("myasc(a) =",myasc("a"));
echo("mychr(97)=",mychr(97));
// space-> ! " # $ % & ' ( <- in ASCII order
charWidth = [ 5,2,6,5,6,2,4,2,4 ]; // ... (use 0 for chars you don't support)
function ascWidth(string) = charWidth[(myasc(string[0])-ASCIIstart)];
echo("Width3=",charWidth[3]);
echo(myasc("#"));
echo("Width'#'=", ascWidth("#"));
echo("Width'$'=", ascWidth("$"));