Skip to content

Instantly share code, notes, and snippets.

@puripuri2100
Last active March 13, 2019 09:53
Show Gist options
  • Save puripuri2100/3efb4aab6c12a6c27293c6f25a919599 to your computer and use it in GitHub Desktop.
Save puripuri2100/3efb4aab6c12a6c27293c6f25a919599 to your computer and use it in GitHub Desktop.
SATySFiの`\app`の括弧の色を変える
% Author : T.Suwa and puripuri2100
% LICENSE : LGPL v3
@require: math
@require: color
let half-length hgt dpt hgtaxis fontsize =
let minhalflen = fontsize *' 0.5 in
let lenappend = fontsize *' 0.1 in
length-max minhalflen ((length-max (hgt -' hgtaxis) (hgtaxis +' dpt)) +' lenappend)
let color-paren-left hgt dpt hgtaxis fontsize color =
let halflen = half-length hgt dpt hgtaxis fontsize in
let w0 = fontsize *' 0.1 in
let w1 = fontsize *' 0.075 +' halflen *' 0.01 in
let w2 = halflen *' 0.25 in %temporary
let w-extra = fontsize *' 0.1 in
let t1 = fontsize *' 0.025 in
let t2 = fontsize *' 0.025 in
let qA = halflen *' 0.35 in
let p1 = (w1 +' w2) *' 0.75 in
let q1 = halflen *' 0.3 in
let qB = halflen *' 0.45 in
let p2 = w2 *' 0.5 in
let q2 = halflen *' 0.2 in
let path (xpos, ypos) =
let ycenter = ypos +' hgtaxis in
let x0 = xpos +' w0 in
let x1 = x0 +' w1 in
let x2 = x1 +' w2 in
start-path (x2, ycenter +' halflen)
|> bezier-to (x2 -' p1, ycenter +' halflen -' q1) (x0, ycenter +' qA) (x0, ycenter)
|> bezier-to (x0, ycenter -' qA) (x2 -' p1, ycenter -' halflen +' q1) (x2, ycenter -' halflen)
|> line-to (x2 +' t1, ycenter -' halflen +' t2)
|> bezier-to (x2 -' p2, ycenter -' halflen +' q2) (x1, ycenter -' qB) (x1, ycenter)
|> bezier-to (x1, ycenter +' qB) (x2 -' p2, ycenter +' halflen -' q2) (x2 +' t1, ycenter +' halflen -' t2)
|> close-with-line
in
% 変更箇所
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
let graphics point = [ fill Color.red (path point); ] in
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
let kerninfo _ = 0pt in
(inline-graphics (w0 +' w1 +' w2 +' w-extra) (hgtaxis +' halflen) (halflen -' hgtaxis) graphics, kerninfo)
let color-paren-right hgt dpt hgtaxis fontsize color =
let halflen = half-length hgt dpt hgtaxis fontsize in
let w0 = fontsize *' 0.1 in
let w1 = fontsize *' 0.075 +' halflen *' 0.01 in
let w2 = halflen *' 0.25 in %temporary
let w-extra = fontsize *' 0.1 in
let t1 = 0pt -' fontsize *' 0.025 in
let t2 = fontsize *' 0.025 in
let qA = halflen *' 0.35 in
let p1 = 0pt -' (w1 +' w2) *' 0.75 in
let q1 = halflen *' 0.3 in
let qB = halflen *' 0.45 in
let p2 = 0pt -' w2 *' 0.5 in
let q2 = halflen *' 0.2 in
let path (xpos, ypos) =
let ycenter = ypos +' hgtaxis in
let x0 = xpos +' w-extra +' w2 +' w1 in
let x1 = xpos +' w-extra +' w2 in
let x2 = xpos +' w-extra in
start-path (x2, ycenter +' halflen)
|> bezier-to (x2 -' p1, ycenter +' halflen -' q1) (x0, ycenter +' qA) (x0, ycenter)
|> bezier-to (x0, ycenter -' qA) (x2 -' p1, ycenter -' halflen +' q1) (x2, ycenter -' halflen)
|> line-to (x2 +' t1, ycenter -' halflen +' t2)
|> bezier-to (x2 -' p2, ycenter -' halflen +' q2) (x1, ycenter -' qB) (x1, ycenter)
|> bezier-to (x1, ycenter +' qB) (x2 -' p2, ycenter +' halflen -' q2) (x2 +' t1, ycenter +' halflen -' t2)
|> close-with-line
in
% 変更箇所
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
let graphics point = [ fill Color.red (path point); ] in
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
let widparen = w0 +' w1 +' w2 +' w-extra in
let kerninfo y =
let widkern = widparen *' 0.5 in
let r = 0.25 in
let gap = length-abs (y -' hgtaxis) in
let diff = length-min (gap -' halflen *' r) (halflen *' (1. -. r)) in
if 0pt <' diff then
widkern *' (diff /' (halflen *' (1. -. r)))
else
0pt
in
(inline-graphics widparen (hgtaxis +' halflen) (halflen -' hgtaxis) graphics, kerninfo)
let-math \color-paren = math-paren color-paren-left color-paren-right
let-math \app m1 m2 = ${#m1 \color-paren{#m2}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment