Implementation of creating pill and printing to StdOut.
commit
b2b8268532
@ -0,0 +1,33 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"text/template"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
baseColour = "#555"
|
||||||
|
modifier float64 = 0.2
|
||||||
|
maxValue = 220
|
||||||
|
blue = 55
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
t := template.New("svgConv")
|
||||||
|
|
||||||
|
percentage := 0.999
|
||||||
|
fill := percentageToRGB(percentage)
|
||||||
|
|
||||||
|
pill := CoveragePill{
|
||||||
|
fmt.Sprintf("%.1f", toFixed(percentage, 3)*100),
|
||||||
|
baseColour,
|
||||||
|
fill,
|
||||||
|
}
|
||||||
|
t, err := t.Parse(svgTemplate)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = t.Execute(os.Stdout, pill)
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
const svgTemplate string = `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="108" height="20" version="1.1">
|
||||||
|
<linearGradient x2="0" y2="100%">
|
||||||
|
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
|
||||||
|
<stop offset="1" stop-opacity=".1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<mask id="a">
|
||||||
|
<rect width="108" height="20" rx="12" fill="#fff"/>
|
||||||
|
</mask>
|
||||||
|
<g mask="url(#a)">
|
||||||
|
<path d="M0 0h66v20H0z" fill="{{.BaseColour}}"/>
|
||||||
|
<path d="M66 0h44v20H66z" fill="{{.FillColour}}"/>
|
||||||
|
</g>
|
||||||
|
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
||||||
|
<text x="34" y="14" fill="#010101" fill-opacity="0.5">coverage</text>
|
||||||
|
<text x="34" y="13">coverage</text>
|
||||||
|
<text x="87" y="15" fill="#010101" fill-opacity=".5">{{.Percentage}}%</text>
|
||||||
|
<text x="87" y="14">{{.Percentage}}%</text>
|
||||||
|
</g>
|
||||||
|
</svg>`
|
||||||
|
|
||||||
|
type CoveragePill struct {
|
||||||
|
Percentage string
|
||||||
|
BaseColour string
|
||||||
|
FillColour string
|
||||||
|
}
|
||||||
|
|
||||||
|
func percentageToRGB(percentage float64) string {
|
||||||
|
red := modifier + clamp(2-2*math.Pow(percentage, 2), 0, 1)*(1-modifier)
|
||||||
|
green := modifier + clamp(2*math.Pow(percentage, 2), 0, 1)*(1-modifier)
|
||||||
|
|
||||||
|
redValue := strconv.Itoa(int(red * maxValue))
|
||||||
|
greenValue := strconv.Itoa(int(green * maxValue))
|
||||||
|
blueValue := strconv.Itoa(blue)
|
||||||
|
|
||||||
|
return "rgb(" + redValue + ", " + greenValue + ", " + blueValue + ")"
|
||||||
|
}
|
||||||
|
|
||||||
|
func clamp(operation float64, min float64, max float64) float64 {
|
||||||
|
if operation < min {
|
||||||
|
return min
|
||||||
|
}
|
||||||
|
if operation > max {
|
||||||
|
return max
|
||||||
|
}
|
||||||
|
return operation
|
||||||
|
}
|
||||||
|
|
||||||
|
func round(num float64) int {
|
||||||
|
return int(num + math.Copysign(0.5, num))
|
||||||
|
}
|
||||||
|
|
||||||
|
func toFixed(num float64, precision int) float64 {
|
||||||
|
output := math.Pow(10, float64(precision))
|
||||||
|
return float64(round(num*output)) / output
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="108" height="20" version="1.1">
|
||||||
|
<linearGradient x2="0" y2="100%">
|
||||||
|
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
|
||||||
|
<stop offset="1" stop-opacity=".1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<mask id="a">
|
||||||
|
<rect width="108" height="20" rx="12" fill="#fff"/>
|
||||||
|
</mask>
|
||||||
|
<g mask="url(#a)">
|
||||||
|
<path d="M0 0h66v20H0z" fill="#555"/>
|
||||||
|
<path d="M66 0h44v20H66z" fill="rgb(49, 220, 55)"/>
|
||||||
|
</g>
|
||||||
|
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
|
||||||
|
<text x="34" y="14" fill="#010101" fill-opacity="0.5">coverage</text>
|
||||||
|
<text x="34" y="13">coverage</text>
|
||||||
|
<text x="87" y="15" fill="#010101" fill-opacity=".5">99.9%</text>
|
||||||
|
<text x="87" y="14">99.9%</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 875 B |
Loading…
Reference in New Issue