//newSilAAA.bcpl

get "sil.defs"


let doMapping(obj,length) be
[
// used by Control Y Command for mapping of the extended fonts
// currently ttable is defined only for ChemTimes8 
let font =(obj>>item.font)/2
let FontItem = FontOrientation!font
let ttable = FontItem & #177400
if ttable eq 0 then
		[
		obj>>item.string.length = length -1 
		return
		]
let char = obj>>item.string.char↑length
let newchar = 0
  newchar = selecton char into
	[
	case  #041: 275b // $!: 275b
	case  #042: 264b // $": 264b
	case  #043: 354b // $#: 354b //added 12-17-80
	case  #044: 355b // $$: 355b //added 12-17-80
	case  #045: 373b // $%: 373b
	case  #046: 356b // $&: 356b //added 12-17-80
	case  #047: 140b // $': 140b
	case  #050: 300b // $(: 300b
	case  #051: 212b // $): 212b
	case  #052: 265b // $*: 265b
	case  #053: 274b // $+: 274b
	case  #054: 374b // $,: 374b
	case  #055: 277b // $-: 277b // changed from 337b to 277b 12-17-80
	case  #056: 236b // $.: 236b
	case  #057: 340b // $/: 340b
	case  #060: 232b // $0: 232b
	case  #061: 341b // $1: 341b
	case  #062: 342b // $2: 342b
	case  #063: 343b // $3: 343b
	case  #064: 344b // $4: 344b
	case  #065: 345b // $5: 345b
	case  #066: 346b // $6: 346b
	case  #067: 347b // $7: 347b
	case  #070: 375b // $8: 375b
	case  #071: 251b // $9: 251b
	case  #072: 350b // $:: 350b
	case  #073: 351b // $;: 351b
	case  #074: 333b // $<: 333b
	case  #075: 352b // $=: 352b //added 12-17-80
	case  #076: 334b // $>: 334b
	case  #077: 276b // $?: 276b

	case  #100: 353b // $@: 353b //added 12-17-80
	case  #141: 242b	// $a: 242b
	case  #142: 267b	// $b: 267b
	case  #143: 244b	// $c: 244b
	case  #144: 270b	// $d: 270b
	case  #145: 246b	// $e: 246b
	case  #146: 220b  // $f: 220b
	case  #147: 240b  // $g: 240b
	case  #150: 241b  // $h:241b
	case  #151: 223b  // $i: 223b
	case  #152: 226b  // $j: 226b
	case  #153: 336b  // $k: 336b
	case  #154: 224b  // $l: 224b
	case  #155: 234b  // $m: 234b
	case  #156: 233b  // $n: 233b
	case  #157: 245b  // $o: 245b
	case  #160: 272b  // $p: 272b
	case  #161: 221b  // $q: 221b
	case  #162: 222b  // $r: 222b
	case  #163: 266b  // $s: 266b
	case  #165: 243b  // $u: 243b
	case  #167: 247b  // $w: 247b
	case  #170: 372b  // $x: 372b
	case  #171: 255b  // $y: 255b
	case  #172: 210b  // $z: 210b
	case  #173: 250b  // ${: 250b
	case  #175: 252b  // $}: 252b
	case  #176: 260b  // $~: 260b

	case  #101: 202b	// $A: 202b
	case  #102: 0b	// $B: 0b
	case  #103: 204b	// $C: 204b
	case  #104: 271b	// $D: 271b
	case  #105: 206b	// $E:  206b
	case  #106: 263b // $F: 263b
	case  #107: 200b  // $G: 200b
	case  #110: 201b // $H: 201b
	case  #111: 376b // $I: 376b
	case  #113: 335b // $K: 335b
	case  #114: 261b // $L: 261b
	case  #115: 231b // $M: 231b
	case  #116: 230b // $N: 230b
	case  #117: 205b // $O: 205b
	case  #120: 213b // $P: 213b
	case  #122: 262b // $R: 262b
	case  #123: 225b // $S: 225b
	case  #124: 237b // $T: 237b
	case  #125: 203b // $U: 203b
	case  #127: 207b // $W:207b
	case  #131: 214b // $Y: 214b
	case  #133: 254b // $[: 254b
	case  #134: 273b // $\: 273b
	case  #135: 253b // $]: 253b
	case  #136: 256b // $↑: 256b
	case  #137: 257b // $←: 257b
	]
test newchar eq 0 
ifso [ obj>>item.string.length = length -1 ]
ifnot	[
	// check character within range or well defined
	let font =(obj>>item.font)/2
	let fontptr = FontVec!font
	let width = getStringWidth(fontptr,newchar)
	test width gr 0 & width le 100 
	ifso	[ obj>>item.string.char↑length = newchar ]
	ifnot  [ obj>>item.string.length = length -1 ]
	]
ReWriteObj(obj) 
]