svg-icons-3.9: src/SvgIcons/Images/CountryFlags.hs
{-# LANGUAGE OverloadedStrings #-}
{- |
Country flags (only Europe at this moment) and the European Union flag.
All flags are built on a @viewbox "0 0 w h"@
where @w@ and @h@ are particular to each flag (according to official ratios)
Flags are named with the 2-letter ISO code of each country, with very few exceptions,
named with the 3-letter ISO code to avoid name collision with some HTML or `Attribute` functions
like `hr` or `cy`.
-}
module SvgIcons.Images.CountryFlags where
import Text.Blaze.Svg11 ((!))
import Text.Blaze.Svg11 as S
import Text.Blaze.Svg11.Attributes as A
import SvgIcons.Core.Geometry
import SvgIcons.Core.Utils
import SvgIcons.Images.CountryFlagsCoAs
{- |
A list with all the flags of this module,
together with appropriate names.
>countryFlags :: [ (String , S.Svg) ]
>countryFlags =
> [ (,) "ad" ad
> , (,) "af" af
> , (,) "al" al
> , (,) "at" at
> , (,) "ba" ba
> , (,) "be" be
> , (,) "bf" bf
> , (,) "bg" bg
> , (,) "bj" bj
> , (,) "by" blr
> , (,) "cd" cd
> , (,) "cf" cf
> , (,) "cg" cg
> , (,) "ch" ch
> , (,) "ci" ci
> , (,) "cm" cm
> , (,) "cv" cv
> , (,) "cy" cyp
> , (,) "cz" cz
> , (,) "de" de
> , (,) "dj" dj
> , (,) "dk" dk
> , (,) "dz" dz
> , (,) "ee" ee
> , (,) "eg" eg
> , (,) "er" er
> , (,) "es" es
> , (,) "et" et
> , (,) "eu" eu
> , (,) "fi" fi
> , (,) "fr" fr
> , (,) "ga" ga
> , (,) "gh" gh
> , (,) "gm" gm
> , (,) "gn" gn
> , (,) "gq" gq
> , (,) "gr" gr
> , (,) "gw" gw
> , (,) "hr" hrv
> , (,) "ie" ie
> , (,) "is" is
> , (,) "it" it
> , (,) "li" li
> , (,) "lr" lbr
> , (,) "lt" lt
> , (,) "lu" lu
> , (,) "lv" lv
> , (,) "ly" ly
> , (,) "ma" ma
> , (,) "mc" mc
> , (,) "md" md
> , (,) "me" me
> , (,) "mk" mk
> , (,) "ml" ml
> , (,) "mr" mrt
> , (,) "mt" mt
> , (,) "ne" ne
> , (,) "ng" ng
> , (,) "nl" nl
> , (,) "no" no
> , (,) "pl" pl
> , (,) "pt" pt
> , (,) "ro" ro
> , (,) "rs" rs
> , (,) "ru" ru
> , (,) "sd" sd
> , (,) "se" se
> , (,) "si" si
> , (,) "sk" sk
> , (,) "sl" sl
> , (,) "sm" sm
> , (,) "sn" sn
> , (,) "so" so
> , (,) "ss" ss
> , (,) "st" st
> , (,) "td" td
> , (,) "tg" tg
> , (,) "tn" tn
> , (,) "ua" ua
> , (,) "ug" ug
> , (,) "uk" uk
> , (,) "va" va
> , (,) "xk" xk
> ]
-}
countryFlags :: [ (String , S.Svg) ]
countryFlags =
[ (,) "ad" ad
, (,) "af" af
, (,) "al" al
, (,) "at" at
, (,) "ba" ba
, (,) "be" be
, (,) "bf" bf
, (,) "bg" bg
, (,) "bj" bj
, (,) "by" blr
, (,) "cd" cd
, (,) "cf" cf
, (,) "cg" cg
, (,) "ch" ch
, (,) "ci" ci
, (,) "cm" cm
, (,) "cv" cv
, (,) "cy" cyp
, (,) "cz" cz
, (,) "de" de
, (,) "dj" dj
, (,) "dk" dk
, (,) "dz" dz
, (,) "ee" ee
, (,) "eg" eg
, (,) "er" er
, (,) "es" es
, (,) "et" et
, (,) "eu" eu
, (,) "fi" fi
, (,) "fr" fr
, (,) "ga" ga
, (,) "gh" gh
, (,) "gm" gm
, (,) "gn" gn
, (,) "gq" gq
, (,) "gr" gr
, (,) "gw" gw
, (,) "hr" hrv
, (,) "ie" ie
, (,) "is" is
, (,) "it" it
, (,) "li" li
, (,) "lr" lbr
, (,) "lt" lt
, (,) "lu" lu
, (,) "lv" lv
, (,) "ly" ly
, (,) "ma" ma
, (,) "mc" mc
, (,) "md" md
, (,) "me" me
, (,) "mk" mk
, (,) "ml" ml
, (,) "mr" mrt
, (,) "mt" mt
, (,) "ne" ne
, (,) "ng" ng
, (,) "nl" nl
, (,) "no" no
, (,) "pl" pl
, (,) "pt" pt
, (,) "ro" ro
, (,) "rs" rs
, (,) "ru" ru
, (,) "sd" sd
, (,) "se" se
, (,) "si" si
, (,) "sk" sk
, (,) "sl" sl
, (,) "sm" sm
, (,) "sn" sn
, (,) "so" so
, (,) "ss" ss
, (,) "st" st
, (,) "td" td
, (,) "tg" tg
, (,) "tn" tn
, (,) "ua" ua
, (,) "ug" ug
, (,) "uk" uk
, (,) "va" va
, (,) "xk" xk
]
{- |
Handy function to draw a flag with 3 vertical stripes of the same size.
-}
flagV3Eq
:: (Float,Float) -- ^ @w@ and @h@ parameters for the viewbox
-> String -- ^ color for the left stripe
-> String -- ^ color for the central stripe
-> String -- ^ color for the right stripe
-> Svg -- ^ resulting flag
flagV3Eq (w,h) c1 c2 c3 =
S.svg
! A.viewbox (S.toValue $ "0 0 " ++ show w ++ " " ++ show h)
! (A.width .: 300)
! (A.height .: 300*h/w)
$ do
leftStripe
centralStripe
rightStripe
where
leftStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: w/3)
! (A.height .: h)
! A.stroke "none"
! A.fill (S.toValue c1)
centralStripe =
S.rect
! (A.x .: w/3)
! (A.y .: 0)
! (A.width .: w/3)
! (A.height .: h)
! A.stroke "none"
! A.fill (S.toValue c2)
rightStripe =
S.rect
! (A.x .: 2*w/3)
! (A.y .: 0)
! (A.width .: w/3)
! (A.height .: h)
! A.stroke "none"
! A.fill (S.toValue c3)
{- |
Handy function to draw a flag with 3 horizontal stripes of the same size.
-}
flagH3Eq
:: (Float,Float) -- ^ @w@ and @h@ parameters for the viewbox
-> String -- ^ color for the top stripe
-> String -- ^ color for the central stripe
-> String -- ^ color for the bottom stripe
-> Svg -- ^ resulting flag
flagH3Eq (w,h) c1 c2 c3 =
S.svg
! A.viewbox (S.toValue $ "0 0 " ++ show w ++ " " ++ show h)
! (A.width .: 300)
! (A.height .: 300*h/w)
$ do
topStripe
midStripe
botStripe
where
topStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: w)
! (A.height .: h/3)
! A.stroke "none"
! A.fill (S.toValue c1)
midStripe =
S.rect
! (A.x .: 0)
! (A.y .: h/3)
! (A.width .: w)
! (A.height .: h/3)
! A.stroke "none"
! A.fill (S.toValue c2)
botStripe =
S.rect
! (A.x .: 0)
! (A.y .: 2*h/3)
! (A.width .: w)
! (A.height .: h/3)
! A.stroke "none"
! A.fill (S.toValue c3)
--------------------------------------------------------------------------------
{- |
Flag of Andorra

-}
ad :: Svg
ad =
S.svg
! A.viewbox "0 0 1000 700"
! A.width "300"
! A.height "210"
$ do
leftStripe
centreStripe
rightStripe
adCoA
where
leftStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 320)
! (A.height .: 700)
! A.stroke "none"
! A.fill "#10069F"
centreStripe =
S.rect
! (A.x .: 320)
! (A.y .: 0)
! (A.width .: 360)
! (A.height .: 700)
! A.stroke "none"
! A.fill "#FEDD00"
rightStripe =
S.rect
! (A.x .: 680)
! (A.y .: 0)
! (A.width .: 320)
! (A.height .: 700)
! A.stroke "none"
! A.fill "#D50032"
{- |
Flag of Afghanistan

-}
af :: Svg
af =
flagV3Eq
(3,2)
"rgb(0,0,0)"
"rgb(190,0,0)"
"rgb(0,122,54)"
{- |
Flag of Albania

-}
al :: Svg
al =
S.svg
! A.viewbox "0 0 980 700"
! A.width "300"
! A.height "214.285"
$ do
background
alCoA
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 980)
! (A.height .: 700)
! A.stroke "none"
! A.fill "#FF0000"
{- |
Flag of Austria

-}
at :: Svg
at =
flagH3Eq
(3,2)
"#C8102E"
"#FFFFFF"
"#C8102E"
{- |
Flag of Bosnia and Herzegovina

-}
ba :: Svg
ba =
S.svg
! A.viewbox "0 0 400 200"
! A.width "300"
! A.height "150"
$ do
defs $
starDef
background
triangle
S.g $ do
star
star ! A.transform (translate 25 25)
star ! A.transform (translate 50 50)
star ! A.transform (translate 75 75)
star ! A.transform (translate 100 100)
star ! A.transform (translate 125 125)
star ! A.transform (translate 150 150)
star ! A.transform (translate 175 175)
star ! A.transform (translate 200 200)
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 400)
! (A.height .: 200)
! A.stroke "none"
! A.fill "#001489"
triangle =
S.path
! A.fill "#FFCD00"
! A.stroke "none"
! A.strokeWidth "0"
! A.d triangleDirs
triangleDirs = mkPath $ do
m 106 0
l 306 0
l 306 200
S.z
a = (19 * (sqrt 5) - 38) / 2
starDef =
starRegular 5 19 (68,-a)
! A.fill "#FFFFFF"
! A.strokeWidth "0"
! A.id_ "HaskellSvgIcons-baFlagStar"
star =
S.use
! A.fill "#FFFFFF"
! A.xlinkHref "#HaskellSvgIcons-baFlagStar"
{- |
Flag of Belgium

-}
be :: Svg
be =
flagV3Eq
(3,2.6)
"#000000"
"#FFE936"
"#FF0F21"
{- |
Flag of Burkina Faso

-}
bf :: Svg
bf =
S.svg
! A.viewbox "0 0 18 12"
! A.width "300"
! A.height "200"
$ do
topBand
botBand
star
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "18"
! A.height "6"
! A.fill "#EF2B2D"
botBand =
S.rect
! A.x "0"
! A.y "6"
! A.width "18"
! A.height "6"
! A.fill "#009E49"
star =
starRegular 5 2 (9,6)
! A.fill "#FCD116"
{- |
Flag of Bulgaria

-}
bg :: Svg
bg =
flagH3Eq
(5,3)
"#FFFFFF"
"#009B74"
"#D01C1F"
{- |
Flag of Benin

-}
bj :: Svg
bj =
S.svg
! A.viewbox "0 0 300 200"
! A.width "300"
! A.height "200"
$ do
topBand
botBand
leftStripe
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "300"
! A.height "100"
! A.fill "#FCD20F"
botBand =
S.rect
! A.x "0"
! A.y "100"
! A.width "300"
! A.height "100"
! A.fill "#E90929"
leftStripe =
S.rect
! A.x "0"
! A.y "0"
! A.width "120"
! A.height "200"
! A.fill "#008850"
{- |
Flag of Belarus

-}
blr :: Svg
blr =
S.svg
! A.viewbox "0 0 90 45"
! A.width "300"
! A.height "150"
$ do
topStripe
botStripe
whiteStripe
ruchnik
where
topStripe =
S.rect
! (A.x .: 10)
! (A.y .: 0)
! (A.width .: 80)
! (A.height .: 30)
! A.stroke "none"
! A.fill "#CF101A"
botStripe =
S.rect
! (A.x .: 10)
! (A.y .: 30)
! (A.width .: 80)
! (A.height .: 15)
! A.stroke "none"
! A.fill "#007D2C"
whiteStripe =
S.rect
! (A.x .: 1)
! (A.y .: 0)
! (A.width .: 9)
! (A.height .: 45)
! A.stroke "none"
! A.fill "#FFFFFF"
ruchnikMatrix =
[ [0,0,0,0,1,1,1,0,0,0,0,1]
, [1,0,0,1,1,1,1,1,0,0,0,1]
, [0,0,1,1,1,0,1,1,1,0,0,0]
, [0,1,1,1,0,0,0,1,1,1,0,0]
, [1,1,1,0,0,1,0,0,1,1,1,0] -- center 1
, [0,1,1,1,0,0,0,1,1,1,0,0]
, [0,0,1,1,1,0,1,1,1,0,0,0]
, [1,0,0,1,1,1,1,1,0,0,0,1]
, [0,0,0,0,1,1,1,0,0,0,0,1]
, [0,0,1,0,0,1,0,0,1,0,0,0]
, [0,1,1,1,0,0,0,1,1,1,0,0]
, [1,1,0,1,1,0,1,1,0,1,1,0] -- center 2
, [0,1,1,1,0,0,0,1,1,1,0,0]
, [0,0,1,0,0,1,0,0,1,0,0,0]
, [0,0,0,0,1,1,1,0,0,0,0,1]
, [1,0,0,1,1,1,1,1,0,0,0,1]
, [0,0,1,1,1,1,1,1,1,0,0,0]
, [0,1,1,1,1,1,1,1,1,1,0,0]
, [1,1,1,1,1,1,1,1,1,1,1,0]
, [1,1,1,1,0,0,0,1,1,1,1,1] -- center 3
, [0,1,1,1,1,1,0,0,1,1,1,1]
, [0,0,1,1,1,0,0,0,0,1,1,1]
, [1,0,0,1,0,0,0,0,1,1,1,1]
, [0,0,0,0,0,0,0,1,1,1,1,0]
, [1,0,0,0,0,0,1,1,1,1,0,0]
, [1,1,0,0,0,1,1,1,1,0,0,1]
, [1,1,1,0,1,1,1,1,0,0,0,0]
, [0,1,1,1,1,1,1,0,0,1,0,0]
, [0,0,1,1,1,1,0,0,0,1,1,0]
, [0,0,0,1,1,1,0,0,0,0,1,1]
, [0,0,0,0,1,1,0,1,0,0,0,1]
]
w = 10 / 23
h = 45 / 61
ruchnik =
S.path
! A.fill "none"
! A.stroke "#CF101A"
! (A.strokeWidth .: w)
! A.d ruchnikDirs
ruchnikDirs = mkPath $ do
mapM_
(\n -> drawLine (fromIntegral n) $ ruchnikMatrix !! n)
[0 .. 30]
mapM_
(\n -> drawLine (fromIntegral n) $ ruchnikMatrix !! (60 - n))
[31 .. 60]
drawLine n binL = do
mapM_
(\k ->
if 0 == binL !! (fromEnum k)
then return ()
else m ( 0 + (fromIntegral k)*w + w/2) (n*h) >> vr h
) [0 .. 10]
if 0 == binL !! 11
then return ()
else m 5 (n*h) >> vr h
mapM_
(\k ->
if 0 == binL !! k
then return ()
else m (10 - (fromIntegral k)*w - w/2) (n*h) >> vr h
) [0 .. 10]
{- |
Flag of the Democratic Republic of the Congo

-}
cd :: Svg
cd =
S.svg
! A.viewbox "0 0 800 600"
! A.width "300"
! A.height "225"
$ do
back
yellowBand
redBand
star
where
back =
S.rect
! A.x "0"
! A.y "0"
! A.width "800"
! A.height "600"
! A.fill "#007FFF"
yellowBand =
S.path
! A.fill "#F7D618"
! A.d yellowDirs
yellowDirs = mkPath $ do
m 750 0
l 0 450
l 0 600
l 50 600
l 800 150
l 800 0
S.z
redBand =
S.path
! A.fill "#CE1021"
! A.d redDirs
redDirs = mkPath $ do
m 800 0
l 0 480
l 0 600
l 800 120
S.z
r1 = 220 / (1 + cos(pi/5))
star =
starRegular 5 r1 (146, 36 + r1)
! A.fill "#F7D618"
{- |
Flag of the Central African Republic

-}
cf :: Svg
cf =
S.svg
! A.viewbox "0 0 60 40"
! A.width "300"
! A.height "200"
$ do
band1
band2
band3
band4
centralStripe
star
where
band1 =
S.rect
! A.x "0"
! A.y "0"
! A.width "60"
! A.height "10"
! A.fill "#003082"
band2 =
S.rect
! A.x "0"
! A.y "10"
! A.width "60"
! A.height "10"
! A.fill "#FFFFFF"
band3 =
S.rect
! A.x "0"
! A.y "20"
! A.width "60"
! A.height "10"
! A.fill "#289728"
band4 =
S.rect
! A.x "0"
! A.y "30"
! A.width "60"
! A.height "10"
! A.fill "#FFCE00"
centralStripe =
S.rect
! A.x "25"
! A.y "0"
! A.width "10"
! A.height "40"
! A.fill "#D21034"
a = (107 - 9 * sqrt 5) / 16
star =
starRegular 5 4.5 (10 , a)
! A.fill "#FFCE00"
{- |
Flag of Congo

-}
cg :: Svg
cg =
S.svg
! A.viewbox "0 0 300 200"
! A.width "300"
! A.height "200"
$ do
leftTriangle
midBand
rightTriangle
where
leftTriangle =
S.path
! A.fill "#009543"
! A.d leftDirs
midBand =
S.path
! A.fill "#FBDE4A"
! A.d midDirs
rightTriangle =
S.path
! A.fill "#DC241F"
! A.d rightDirs
leftDirs = mkPath $ do
m 0 0
l 200 0
l 0 200
S.z
midDirs = mkPath $ do
m 200 0
l 300 0
l 100 200
l 0 200
S.z
rightDirs = mkPath $ do
m 300 0
l 300 200
l 100 200
S.z
{- |
Flag of Switzerland

-}
ch :: S.Svg
ch =
S.svg
! A.viewbox "0 0 32 32"
! A.width "300"
! A.height "300"
$ do
background
cross
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 32)
! (A.height .: 32)
! A.stroke "none"
! A.fill "#FF0000"
cross =
S.path
! A.fill "none"
! A.stroke "#FFFFFF"
! A.strokeWidth "6"
! A.d crossDirs
crossDirs = mkPath $ do
m 16 6
l 16 26
m 6 16
l 26 16
{- |
Flag of Côte d'Ivoire

-}
ci :: Svg
ci =
flagV3Eq
(3,2)
"#FF8200"
"#FFFFFF"
"#009A44"
{- |
Flag of Cameroon

-}
cm :: Svg
cm =
S.svg
! A.viewbox "0 0 300 200"
! A.width "300"
! A.height "200"
$ do
leftBand
midBand
rightBand
star
where
leftBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "100"
! A.height "200"
! A.fill "#007A5E"
midBand =
S.rect
! A.x "100"
! A.y "0"
! A.width "100"
! A.height "200"
! A.fill "#CE1126"
rightBand =
S.rect
! A.x "200"
! A.y "0"
! A.width "100"
! A.height "200"
! A.fill "#FCD116"
star =
starRegular 5 27 (150,100)
! A.fill "#FCD116"
{- |
Flag of Cabo Verde

-}
cv :: Svg
cv =
S.svg
! A.viewbox "0 0 450 300"
! A.width "300"
! A.height "200"
$ do
blueBand
whiteBand
redBand
starCircle
where
blueBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "450"
! A.height "300"
! A.fill "#003893"
whiteBand =
S.rect
! A.x "0"
! A.y "150"
! A.width "450"
! A.height "75"
! A.fill "#FFFFFF"
redBand =
S.rect
! A.x "0"
! A.y "175"
! A.width "450"
! A.height "25"
! A.fill "#CF2027"
star (c1,c2) =
starRegular 5 12.5 (c1,c2)
! A.fill "#F7D116"
getCentre k =
( 168.75 - 75 * sin (k * 2*pi / 10)
, 187.5 + 75 * cos (k * 2*pi / 10)
)
starCircle =
S.g $ mapM_ (star . getCentre . fromIntegral) [0 .. 9]
{- |
Flag of Cyprus

-}
cyp :: Svg
cyp =
S.svg
! A.viewbox "0 0 900 600"
! A.width "300"
! A.height "200"
$ do
background
cyCoA
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 900)
! (A.height .: 600)
! A.stroke "none"
! A.fill "#FFFFFF"
{- |
Flag of Czech Republic

-}
cz :: S.Svg
cz =
S.svg
! A.viewbox "0 0 6 4"
! A.width "300"
! A.height "200"
$ do
topStripe
leftTriangle
botStripe
where
topStripe =
S.path
! A.strokeWidth "0"
! A.fill "#FFFFFF"
! A.d topDirs
topDirs = mkPath $ do
m 0 0
l 6 0
l 6 2
l 3 2
S.z
leftTriangle =
S.path
! A.strokeWidth "0"
! A.fill "#11457E"
! A.d triangleDirs
triangleDirs = mkPath $ do
m 0 0
l 3 2
l 0 4
S.z
botStripe =
S.path
! A.strokeWidth "0"
! A.fill "#D7141A"
! A.d botDirs
botDirs = mkPath $ do
m 0 4
l 6 4
l 6 2
l 3 2
S.z
{- |
Flag of Germany

-}
de :: Svg
de =
flagH3Eq
(5,3)
"rgb(0,0,0)"
"rgb(255,0,0)"
"rgb(255,204,0)"
{- |
Flag of Djibouti

-}
dj :: Svg
dj =
S.svg
! A.viewbox "0 0 300 200"
! A.width "300"
! A.height "200"
$ do
topBand
botBand
leftTriangle
star
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "300"
! A.height "100"
! A.fill "#6AB2E7"
botBand =
S.rect
! A.x "0"
! A.y "100"
! A.width "300"
! A.height "100"
! A.fill "#12AD2B"
leftTriangle =
S.path
! A.fill "#FFFFFF"
! A.d triangleDirs
triangleDirs = mkPath $ do
m 0 0
l (100 * tan(pi/3)) 100
l 0 200
S.z
star =
starRegular 5 (100/3) (100 * tan(pi/6) , 100)
! A.fill "#D7141A"
{- |
Flag of Denmark

-}
dk :: Svg
dk =
S.svg
! A.viewbox "0 0 37 28"
! A.width "300"
! A.height "227"
$ do
background
cross
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 37)
! (A.height .: 28)
! A.stroke "none"
! A.fill "#C8102E"
cross =
S.path
! A.fill "none"
! A.stroke "#FFFFFF"
! A.strokeWidth "4"
! A.d crossDirs
crossDirs = mkPath $ do
m 14 0
l 14 28
m 0 14
l 37 14
{- |
Flag of Algeria

-}
dz :: Svg
dz =
S.svg
! A.viewbox "0 0 30 20"
! A.width "300"
! A.height "200"
$ do
leftBand
rightBand
moon
star
where
leftBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "15"
! A.height "20"
! A.fill "#006633"
rightBand =
S.rect
! A.x "15"
! A.y "0"
! A.width "15"
! A.height "20"
! A.fill "#FFFFFF"
x1 = 2.5 / tan (pi/6)
y1 = 2.5
r1 = 5
r2 = 4
moon =
S.path
! A.fill "#D21034"
! A.d moonDirs
moonDirs = mkPath $ do
m (15 + x1) (10 - y1)
aa r1 r1 0 True False (15 + x1) (10 + y1)
aa r2 r2 0 True True (15 + x1) (10 - y1)
S.z
b = (5 + 5 * sqrt 5) / 8
star =
starRegular 5 2.5 (15 + b, 10)
! A.fill "#D21034"
! A.transform (rotateAround 90 (15 + b) 10)
{- |
Flag of Estonia

-}
ee :: Svg
ee =
flagH3Eq
(5.5, 3.5)
"#0072CE"
"#000000"
"#FFFFFF"
{- |
Flag of Egypt

-}
eg :: Svg
eg =
S.svg
! A.viewbox "0 0 900 600"
! A.width "300"
! A.height "200"
$ do
topBand
midBand
botBand
egCoA
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "900"
! A.height "200"
! A.fill "#CE1126"
midBand =
S.rect
! A.x "0"
! A.y "200"
! A.width "900"
! A.height "200"
! A.fill "#FFFFFF"
botBand =
S.rect
! A.x "0"
! A.y "400"
! A.width "900"
! A.height "200"
! A.fill "#000000"
{- |
Flag of Eritrea

-}
er :: Svg
er =
S.svg
! A.viewbox "0 0 1200 600"
! A.width "300"
! A.height "150"
$ do
topBand
botBand
redTriangle
erCoA
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "1200"
! A.height " 300"
! A.fill "#0BAC24"
botBand =
S.rect
! A.x "0"
! A.y "300"
! A.width "1200"
! A.height " 300"
! A.fill "#3C8BDC"
redTriangle =
S.path
! A.fill "#EB0433"
! A.d triangleDirs
triangleDirs = mkPath $ do
m 0 0
l 1200 300
l 0 600
S.z
{- |
Flag of Spain

-}
es :: Svg
es =
S.svg
! A.viewbox "0 0 750 500"
! A.width "300"
! A.height "200"
$ do
redBand
yellowBand
where
colRed = "rgb(198,11,30)"
colYellow = "rgb(255,196,0)"
redBand =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 750)
! (A.height .: 500)
! A.stroke "none"
! A.fill colRed
yellowBand =
S.rect
! (A.x .: 0)
! (A.y .: 125)
! (A.width .: 750)
! (A.height .: 250)
! A.stroke "none"
! A.fill colYellow
{- |
Flag of the Ethiopia

-}
et :: Svg
et =
S.svg
! A.viewbox "0 0 1200 600"
! A.width "300"
! A.height "150"
$ do
topBand
midBand
botBand
etCoA
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "1200"
! A.height "200"
! A.fill "#078930"
midBand =
S.rect
! A.x "0"
! A.y "200"
! A.width "1200"
! A.height "200"
! A.fill "#FCDD09"
botBand =
S.rect
! A.x "0"
! A.y "400"
! A.width "1200"
! A.height "200"
! A.fill "#DA121A"
{- |
Flag of the European Union

-}
eu :: Svg
eu =
S.svg
! A.viewbox "0 0 3 2"
! A.width "300"
! A.height "200"
$ do
background
mapM_ star [0..11]
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 3)
! (A.height .: 2)
! A.stroke "none"
! A.fill "#003399"
starPos k =
( 3/2 + (2/3) * cos (k*pi/6)
, 1 + (2/3) * sin (k*pi/6)
)
star k =
starRegular 5 (1/9) (starPos k)
! A.fill "#FFCC00"
! A.id_ "HaskellSvgIcons-euFlagStar"
{- |
Flag of Finland

-}
fi :: S.Svg
fi =
S.svg
! A.viewbox "0 0 36 22"
! A.width "300"
! A.height "183.33"
$ do
background
cross
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 36)
! (A.height .: 22)
! A.stroke "none"
! A.fill "#FFFFFF"
cross =
S.path
! A.fill "none"
! A.stroke "#002F6C"
! A.strokeWidth "6"
! A.d crossDirs
crossDirs = mkPath $ do
m 13 0
l 13 26
m 0 11
l 36 11
{- |
Flag of France

-}
fr :: S.Svg
fr =
flagV3Eq
(3,2)
"rgb(0,85,164)"
"rgb(255,255,255"
"rgb(239,65,53)"
{- |
Flag of Gabon

-}
ga :: Svg
ga =
flagH3Eq
(4,3)
"#009E60"
"#FCD116"
"#3A75C4"
{- |
Flag of Ghana

-}
gh :: Svg
gh =
S.svg
! A.viewbox "0 0 18 12"
! A.width "300"
! A.height "200"
$ do
topBand
midBand
botBand
star
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "18"
! A.height "4"
! A.fill "#CF0921"
midBand =
S.rect
! A.x "0"
! A.y "4"
! A.width "18"
! A.height "4"
! A.fill "#FCD20F"
botBand =
S.rect
! A.x "0"
! A.y "8"
! A.width "18"
! A.height "4"
! A.fill "#006B3D"
d = 8 - (8/5) * sqrt 5
a = d/2 - 2
star =
starRegular 5 (d/2) (9 , 6+a)
! A.fill "#000000"
{- |
Flag of Gambia

-}
gm :: Svg
gm =
S.svg
! A.viewbox "0 0 27 18"
! A.width "300"
! A.height "200"
$ do
topBand
midBand
botBand
blueBand
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "27"
! A.height "6"
! A.fill "#CE1126"
midBand =
S.rect
! A.x "0"
! A.y "6"
! A.width "27"
! A.height "6"
! A.fill "#FFFFFF"
botBand =
S.rect
! A.x "0"
! A.y "12"
! A.width "27"
! A.height "6"
! A.fill "#3A7728"
blueBand =
S.rect
! A.x "0"
! A.y "7"
! A.width "27"
! A.height "4"
! A.fill "#0C1C8C"
{- |
Flag of Guinea (Conakry)

-}
gn :: Svg
gn =
flagV3Eq
(3,2)
"#CE1126"
"#FCD116"
"#009460"
{- |
Flag of Equatorial Guinea

-}
gq :: Svg
gq =
S.svg
! A.viewbox "0 0 3600 2400"
! A.width "300"
! A.height "200"
$ do
topBand
midBand
botBand
leftTriangle
gqCoA
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "3600"
! A.height "800"
! A.fill "#3E9A00"
midBand =
S.rect
! A.x "0"
! A.y "800"
! A.width "3600"
! A.height "800"
! A.fill "#FFFFFF"
botBand =
S.rect
! A.x "0"
! A.y "1600"
! A.width "3600"
! A.height "800"
! A.fill "#E32118"
leftTriangle =
S.path
! A.fill "#0073CE"
! A.d triangleDirs
triangleDirs = mkPath $ do
m 0 0
l 900 1200
l 0 2400
S.z
{- |
Flag of Greece

-}
gr :: Svg
gr =
S.svg
! A.viewbox "0 0 27 18"
! A.width "300"
! A.height "200"
$ do
blueLines
whiteLines
blueSquare
greekCross
where
blueLines =
S.path
! A.fill "none"
! A.stroke "#004C98"
! A.strokeWidth "2"
! A.d blueDirs
whiteLines =
S.path
! A.fill "none"
! A.stroke "#FFFFFF"
! A.strokeWidth "2"
! A.d whiteDirs
blueDirs = mkPath $ do
m 0 1 >> hr 27
m 0 5 >> hr 27
m 0 9 >> hr 27
m 0 13 >> hr 27
m 0 17 >> hr 27
whiteDirs = mkPath $ do
m 0 3 >> hr 27
m 0 7 >> hr 27
m 0 11 >> hr 27
m 0 15 >> hr 27
blueSquare =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 10)
! (A.height .: 10)
! A.stroke "none"
! A.fill "#004C98"
greekCross =
S.path
! A.fill "none"
! A.stroke "#FFFFFF"
! A.strokeWidth "2"
! A.d crossDirs
crossDirs = mkPath $ do
m 5 0
l 5 10
m 0 5
l 10 5
{- |
Flag of Guinea Bissau

-}
gw :: Svg
gw =
S.svg
! A.viewbox "0 0 12 6"
! A.width "300"
! A.height "150"
$ do
topBand
botBand
leftBand
star
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "12"
! A.height "3"
! A.fill "#FCD116"
botBand =
S.rect
! A.x "0"
! A.y "3"
! A.width "12"
! A.height "3"
! A.fill "#009E49"
leftBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "4"
! A.height "6"
! A.fill "#CE1126"
star =
starRegular 5 1 (2,3)
! A.fill "#000000"
{- |
Flag of Croatia

-}
hrv :: Svg
hrv =
S.svg
! A.viewbox "0 0 1200 600"
! A.width "300"
! A.height "150"
$ do
S.rect
! A.x "0"
! A.y "0"
! A.height "200"
! A.width "1200"
! A.fill "#FF0000"
S.rect
! A.x "0"
! A.y "200"
! A.height "200"
! A.width "1200"
! A.fill "#FFFFFF"
S.rect
! A.x "0"
! A.y "400"
! A.height "200"
! A.width "1200"
! A.fill "#171796"
hrCoA
{- |
Flag of Ireland

-}
ie :: S.Svg
ie =
flagV3Eq
(3,1.5)
"rgb(22,155,98)"
"rgb(255,255,255)"
"rgb(255,136,62)"
{- |
Flag of Iceland

-}
is :: S.Svg
is =
S.svg
! A.viewbox "0 0 25 18"
! A.width "300"
! A.height "216"
$ do
background
whiteCross
redCross
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 25)
! (A.height .: 18)
! A.stroke "none"
! A.fill "#02529C"
whiteCross =
S.path
! A.fill "none"
! A.strokeWidth "4"
! A.stroke "#FFFFFF"
! A.d crossDirs
redCross =
S.path
! A.fill "none"
! A.strokeWidth "2"
! A.stroke "#DC1E35"
! A.d crossDirs
crossDirs = mkPath $ do
m 0 9
l 25 9
m 9 0
l 9 18
{- |
Flag of Italy

-}
it :: Svg
it =
flagV3Eq
(3,2)
"rgb(0,140,69)"
"rgb(244,249,255"
"rgb(205,33,42)"
{- |
Flag of Liechtenstein

-}
li :: Svg
li =
S.svg
! A.viewbox "0 0 1000 600"
! A.width "300"
! A.height "180"
$ do
topStripe
botStripe
liCoA
where
topStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 1000)
! (A.height .: 300)
! A.stroke "none"
! A.fill "#002780"
botStripe =
S.rect
! (A.x .: 0)
! (A.y .: 300)
! (A.width .: 1000)
! (A.height .: 300)
! A.stroke "none"
! A.fill "#CF0921"
{- |
Flag of Liberia

-}
lbr :: Svg
lbr =
S.svg
! A.viewbox "0 0 209 110"
! A.width "300"
! A.height "157.894736"
$ do
redBackground
whiteStripes
blueSquare
star
where
redBackground =
S.rect
! A.x "0"
! A.y "0"
! A.width "209"
! A.height "110"
! A.fill "#B22234"
whiteStripe ky =
S.rect
! A.x "0"
! A.y (S.toValue ky)
! A.width "209"
! A.height "10"
! A.fill "#FFFFFF"
whiteStripes =
S.g $ mapM_ whiteStripe ([10, 30, 50, 70, 90] :: [Int])
blueSquare =
S.rect
! A.x "0"
! A.y "0"
! A.width "50"
! A.height "50"
! A.fill "#00205B"
r1 = 30 / (1 + cos(pi/5))
star =
starRegular 5 r1 (25,25)
! A.fill "#FFFFFF"
{- |
Flag of Lithuania

-}
lt :: Svg
lt =
flagH3Eq
(5,3)
"#FFB81C"
"#046A38"
"#BE3A34"
{- |
Flag of Luxembourg

-}
lu :: S.Svg
lu =
flagH3Eq
(3,2)
"#EA141D"
"#FFFFFF"
"#51ADDA"
{- |
Flag of Latvia

-}
lv :: S.Svg
lv =
S.svg
! A.viewbox "0 0 20 10"
! A.width "300"
! A.height "150"
$ do
topStripe
midStripe
botStripe
where
topStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 20)
! (A.height .: 4)
! A.stroke "none"
! A.fill "#A4343A"
midStripe =
S.rect
! (A.x .: 0)
! (A.y .: 4)
! (A.width .: 20)
! (A.height .: 2)
! A.stroke "none"
! A.fill "#FFFFFF"
botStripe =
S.rect
! (A.x .: 0)
! (A.y .: 6)
! (A.width .: 20)
! (A.height .: 4)
! A.stroke "none"
! A.fill "#A4343A"
{- |
Flag of Libya

-}
ly :: Svg
ly =
S.svg
! A.viewbox "0 0 48 24"
! A.width "300"
! A.height "150"
$ do
topBand
midBand
botBand
moon
star
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "48"
! A.height "6"
! A.fill "#E70013"
midBand =
S.rect
! A.x "0"
! A.y "6"
! A.width "48"
! A.height "12"
! A.fill "#000000"
botBand =
S.rect
! A.x "0"
! A.y "18"
! A.width "48"
! A.height "6"
! A.fill "#239E46"
x1 = 24 + 3 * cos(pi/4)
y1 = 12 - 3 * sin(pi/4)
y2 = 12 + 3 * sin(pi/4)
a = 0.5 * sqrt (706 - 480 * sqrt 2)
c = (1/5) * (15 - 3 * sqrt 5) * sqrt (5 + sqrt 5)
d = 3 + (c/8) * (-1 + sqrt 5)
moon =
S.path
! A.fill "#FFFFFF"
! A.d moonDirs
moonDirs = mkPath $ do
m x1 y1
aa 3 3 0 True False x1 y2
aa a a 0 True True x1 y1
S.z
star =
starRegular 5 (c/2) (24 + d , 12)
! A.fill "#FFFFFF"
! A.transform (rotateAround (-90) (24 + d) 12)
{- |
Flag of Morocco

-}
ma :: Svg
ma =
S.svg
! A.viewbox "0 0 6 4"
! A.width "300"
! A.height "200"
$ do
back
centralStar
where
back =
S.rect
! A.x "0"
! A.y "0"
! A.width "300"
! A.height "200"
! A.fill "#C1272D"
a = 0.5 * sqrt (10 + 2 * sqrt 5)
b = a / 20
centralStar =
starPolygonOverlap 5 1 b (3,2)
! A.fill "#006233"
! A.stroke "#000000"
! A.strokeWidth "0.01"
{- |
Flag of Monaco

-}
mc :: S.Svg
mc =
S.svg
! A.viewbox "0 0 5 4"
! A.width "300"
! A.height "240"
$ do
topStripe
botStripe
where
topStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 5)
! (A.height .: 2)
! A.stroke "none"
! A.fill "#CE1126"
botStripe =
S.rect
! (A.x .: 0)
! (A.y .: 2)
! (A.width .: 5)
! (A.height .: 2)
! A.stroke "none"
! A.fill "#FFFFFF"
{- |
Flag of Moldova

-}
md :: Svg
md =
S.svg
! A.viewbox "0 0 1800 900"
! A.width "300"
! A.height "150"
$ do
S.rect
! A.x "0"
! A.y "0"
! A.width "600"
! A.height "900"
! A.fill "#003DA5"
S.rect
! A.x "600"
! A.y "0"
! A.width "600"
! A.height "900"
! A.fill "#FFD100"
S.rect
! A.x "1200"
! A.y "0"
! A.width "600"
! A.height "900"
! A.fill "#C8102E"
mdCoA
{- |
Flag of Montenegro

-}
me :: Svg
me =
S.svg
! A.viewbox "0 0 1200 600"
! A.width "300"
! A.height "150"
$ do
background
border
meCoA
where
w = 1200
h = 600
s = h / 40
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: w)
! (A.height .: h)
! A.stroke "none"
! A.fill "#FF0000"
border =
S.path
! A.fill "none"
! A.stroke "#E6B319"
! (A.strokeWidth .: 2*s)
! A.d borderDirs
borderDirs = mkPath $ do
m (0 + s) (0 + s)
l (w - s) (0 + s)
l (w - s) (h - s)
l (0 + s) (h - s)
S.z
{- |
Flag of North Macedonia

-}
mk :: Svg
mk =
S.svg
! A.viewbox "0 0 2 1"
! A.width "300"
! A.height "150"
$ do
background
rays
sun
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 2)
! (A.height .: 1)
! A.stroke "none"
! A.fill "#CE2028"
d = 2/7
sun =
S.circle
! (A.cx .: 1)
! (A.cy .: 0.5)
! (A.r .: d/2)
! A.fill "#F9D616"
! A.stroke "#CE2028"
! (A.strokeWidth .: d/8)
rays =
S.path
! A.stroke "none"
! A.strokeWidth "0"
! A.fill "#F9D616"
! A.d raysDirs
x1 = 1 + (1/68) * sqrt (3825 / 98) -- 1.09187 etc.
x2 = 1 - (1/68) * sqrt (3825 / 98)
y1 = (3/5) * x1 - 1/10
y2 = (3/5) * x2 - 1/10
raysDirs = mkPath $ do
m (1 - 0.1) (0)
l (1 + 0.1) (0)
l (1 ) (0.5 - d/2 + d/8)
S.z
m (1 - 0.1) (1)
l (1 + 0.1) (1)
l (1 ) (0.5 + d/2 - d/8)
S.z
m (0 ) (0.5 - 0.1)
l (0 ) (0.5 + 0.1)
l (1 ) 0.5
S.z
m (2 ) (0.5 - 0.1)
l (2 ) (0.5 + 0.1)
l (1 ) 0.5
S.z
m (0 ) 0
l (0 + 0.3) 0
l x1 y1
S.z
m (2 - 0.3) 0
l (2 ) 0
l x2 y1
S.z
m (2 - 0.3) 1
l (2 ) 1
l x2 y2
S.z
m (0 ) 1
l (0 + 0.3) 1
l x1 y2
S.z
{- |
Flag of Mali

-}
ml :: Svg
ml =
flagV3Eq
(3,2)
"#14B53A"
"#FCD116"
"#CE1126"
{- |
Flag of Mauritania

-}
mrt :: Svg
mrt =
S.svg
! A.viewbox "0 0 1500 1000"
! A.width "300"
! A.height "200"
$ do
topBand
midBand
botBand
moon
star
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "1500"
! A.height " 200"
! A.fill "#D01C1F"
midBand =
S.rect
! A.x "0"
! A.y "200"
! A.width "1500"
! A.height " 600"
! A.fill "#00A95C"
botBand =
S.rect
! A.x "0"
! A.y "800"
! A.width "1500"
! A.height " 200"
! A.fill "#D01C1F"
x1 = 750 - 375
x2 = 750 + 375
y1 = 325
r1 = 375
r2 = (273^2 + 375^2) / (2 * 273)
moon =
S.path
! A.fill "#FFD700"
! A.d moonDirs
moonDirs = mkPath $ do
m x1 y1
aa r1 r1 0 True False x2 y1
aa r2 r2 0 False True x1 y1
S.z
r3 = 191 / (1 + cos (pi/5))
y3 = 300 + r3
star =
starRegular 5 r3 (750 , y3)
! A.fill "#FFD700"
{- |
Flag of Malta

-}
mt :: Svg
mt =
S.svg
! A.viewbox "0 0 900 600"
! A.width "300"
! A.height "200"
$ do
leftStripe
rightStripe
mtCoA
where
leftStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 450)
! (A.height .: 600)
! A.stroke "none"
! A.fill "#FFFFFF"
rightStripe =
S.rect
! (A.x .: 450)
! (A.y .: 0)
! (A.width .: 450)
! (A.height .: 600)
! A.stroke "none"
! A.fill "#C01B22"
{- |
Flag of Niger

-}
ne :: Svg
ne =
S.svg
! A.viewbox "0 0 7 6"
! A.width "300"
! (A.height .: 300 * 6 / 7)
$ do
topBand
midBand
botBand
centralCircle
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "7"
! A.height "2"
! A.fill "#E05206"
midBand =
S.rect
! A.x "0"
! A.y "2"
! A.width "7"
! A.height "2"
! A.fill "#FFFFFF"
botBand =
S.rect
! A.x "0"
! A.y "4"
! A.width "7"
! A.height "2"
! A.fill "#0DB02B"
centralCircle =
S.circle
! A.fill "#E05206"
! A.cx "3.5"
! A.cy "3"
! A.r "0.85"
{- |
Flag of the Nigeria

-}
ng :: Svg
ng =
flagV3Eq
(2,1)
"#008753"
"#FFFFFF"
"#008753"
{- |
Flag of the Netherlands

-}
nl :: S.Svg
nl =
flagH3Eq
(3,2)
"#AE1C28"
"#FFFFFF"
"#21468B"
{- |
Flag of Norway

-}
no :: S.Svg
no =
S.svg
! A.viewbox "0 0 22 16"
! A.width "300"
! A.height "218.18"
$ do
background
whiteCross
blueCross
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 22)
! (A.height .: 16)
! A.stroke "none"
! A.fill "#BA0C2F"
whiteCross =
S.path
! A.fill "none"
! A.stroke "#FFFFFF"
! A.strokeWidth "4"
! A.d crossDirs
blueCross =
S.path
! A.fill "none"
! A.stroke "#00205B"
! A.strokeWidth "2"
! A.d crossDirs
crossDirs = mkPath $ do
m 8 0
l 8 16
m 0 8
l 22 8
{- |
Flag of Polonia

-}
pl :: Svg
pl =
S.svg
! A.viewbox "0 0 8 5"
! A.width "300"
! A.height "187.5"
$ do
topStripe
botStripe
where
topStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 8)
! (A.height .: 2.5)
! A.stroke "none"
! A.fill "#FFFFFF"
botStripe =
S.rect
! (A.x .: 0)
! (A.y .: 2.5)
! (A.width .: 8)
! (A.height .: 2.5)
! A.stroke "none"
! A.fill "#DC143C"
{- |
Flag of Portugal

-}
pt :: S.Svg
pt =
S.svg
! A.viewbox "0 0 600 400"
! A.width "300"
! A.height "200"
$ do
greenBand
redBand
ptCoA
where
greenBand =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 240)
! (A.height .: 400)
! A.stroke "none"
! A.fill "rgb(0,102,0)"
redBand =
S.rect
! (A.x .: 240)
! (A.y .: 0)
! (A.width .: 360)
! (A.height .: 400)
! A.stroke "none"
! A.fill "rgb(255,0,0)"
{- |
Flag of Romania

-}
ro :: Svg
ro =
flagV3Eq
(3,2)
"#002B7F"
"#FCD116"
"#CE1126"
{- |
Flag of Serbia

-}
rs :: Svg
rs =
flagH3Eq
(3,2)
"#C7363D"
"#0C4077"
"#FFFFFF"
{- |
Flag of Russia

-}
ru :: S.Svg
ru =
flagH3Eq
(3,2)
"#FFFFFF"
"#0039A6"
"#E4181C"
{- |
Flag of Sudan

-}
sd :: Svg
sd =
S.svg
! A.viewbox "0 0 6 3"
! A.width "300"
! A.height "150"
$ do
topBand
midBand
botBand
leftTriangle
where
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "6"
! A.height "1"
! A.fill "#D21034"
midBand =
S.rect
! A.x "0"
! A.y "1"
! A.width "6"
! A.height "1"
! A.fill "#FFFFFF"
botBand =
S.rect
! A.x "0"
! A.y "2"
! A.width "6"
! A.height "1"
! A.fill "#000000"
leftTriangle =
S.path
! A.fill "#007229"
! A.d triangleDirs
triangleDirs = mkPath $ do
m 0 0
l 2 1.5
l 0 3
S.z
{- |
Flag of Sweden

-}
se :: S.Svg
se =
S.svg
! A.viewbox "0 0 16 10"
! A.width "300"
! A.height "187.5"
$ do
background
cross
where
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 16)
! (A.height .: 10)
! A.stroke "none"
! A.fill "#006AA7"
cross =
S.path
! A.fill "none"
! A.stroke "#FECC02"
! A.strokeWidth "2"
! A.d crossDirs
crossDirs = mkPath $ do
m 6 0
l 6 10
m 0 5
l 16 5
{- |
Flag of Slovenia

-}
si :: Svg
si =
S.svg
! A.viewbox "0 0 240 120"
! A.width "300"
! A.height "150"
$ do
S.rect
! A.x "0"
! A.y "0"
! A.width "240"
! A.height " 40"
! A.fill "#FFFFFF"
S.rect
! A.x "0"
! A.y "40"
! A.width "240"
! A.height " 40"
! A.fill "#0000FF"
S.rect
! A.x "0"
! A.y "80"
! A.width "240"
! A.height " 40"
! A.fill "#FF0000"
siCoA
{- |
Flag of Slovakia

-}
sk :: Svg
sk =
S.svg
! A.viewbox "0 0 900 600"
! A.width "300"
! A.height "200"
$ do
topStripe
midStripe
botStripe
skCoA
where
topStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 900)
! (A.height .: 200)
! A.stroke "none"
! A.fill "#FFFFFF"
midStripe =
S.rect
! (A.x .: 0)
! (A.y .: 200)
! (A.width .: 900)
! (A.height .: 200)
! A.stroke "none"
! A.fill "#0B4EA2"
botStripe =
S.rect
! (A.x .: 0)
! (A.y .: 400)
! (A.width .: 900)
! (A.height .: 200)
! A.stroke "none"
! A.fill "#EE1C25"
{- |
Flag of Sierra Leona

-}
sl :: Svg
sl =
flagH3Eq
(3,2)
"#1EB53A"
"#FFFFFF"
"#0072C6"
{- |
Flag of San Marino

-}
sm :: Svg
sm =
S.svg
! A.viewbox "0 0 800 600"
! A.width "300"
! A.height "225"
$ do
topStripe
botStripe
smCoA
where
topStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 800)
! (A.height .: 300)
! A.stroke "none"
! A.fill "#FFFFFF"
botStripe =
S.rect
! (A.x .: 0)
! (A.y .: 300)
! (A.width .: 800)
! (A.height .: 300)
! A.stroke "none"
! A.fill "#5EB6E4"
{- |
Flag of Senegal

-}
sn :: Svg
sn =
S.svg
! A.viewbox "0 0 300 200"
! A.width "300"
! A.height "200"
$ do
leftBand
midBand
rightBand
starRegular 5 33 (150,100)
! A.fill "#00853F"
where
leftBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "100"
! A.height "200"
! A.fill "#00853F"
midBand =
S.rect
! A.x "100"
! A.y "0"
! A.width "100"
! A.height "200"
! A.fill "#FDEF42"
rightBand =
S.rect
! A.x "200"
! A.y "0"
! A.width "100"
! A.height "200"
! A.fill "#E31B23"
{- |
Flag of Somalia

-}
so :: Svg
so =
S.svg
! A.viewbox "0 0 300 200"
! A.width "300"
! A.height "200"
$ do
back
star
where
back =
S.rect
! A.x "0"
! A.y "0"
! A.width "300"
! A.height "200"
! A.fill "#4189DD"
r1 = 13/54 * 200
star =
starRegular 5 r1 (150,100)
! A.fill "#FFFFFF"
{- |
Flag of South Sudan

-}
ss :: Svg
ss =
S.svg
! A.viewbox "0 0 114 57"
! A.width "300"
! A.height "150"
$ do
whiteBackground
topBand
midBand
botBand
leftTriangle
star
where
whiteBackground =
S.rect
! A.x "0"
! A.y "0"
! A.width "114"
! A.height "57"
! A.fill "#FFFFFF"
topBand =
S.rect
! A.x "0"
! A.y "0"
! A.width "114"
! A.height "17"
! A.fill "#000000"
midBand =
S.rect
! A.x "0"
! A.y "20"
! A.width "114"
! A.height "17"
! A.fill "#DB0A13"
botBand =
S.rect
! A.x "0"
! A.y "40"
! A.width "114"
! A.height "17"
! A.fill "#018A2C"
leftTriangle =
S.path
! A.fill "#0645B1"
! A.d triangleDirs
triangleDirs = mkPath $ do
m 0 0
l (57 * cos(pi/6)) 28.5
l 0 57
S.z
(c1,c2) = (28.5 * tan(pi/6) , 28.5)
star =
starRegular 5 9.5 (c1,c2)
! A.fill "#FCDE02"
! A.transform (rotateAround (-90) c1 c2)
{- |
Flag of São Tomé and Príncipe

-}
st :: Svg
st =
S.svg
! A.viewbox "0 0 28 14"
! A.width "300"
! A.height "150"
$ do
back
midBand
leftTriangle
leftStar
rightStar
where
back =
S.rect
! A.x "0"
! A.y "0"
! A.width "28"
! A.height "14"
! A.fill "#009739"
midBand =
S.rect
! A.x "0"
! A.y "4"
! A.width "28"
! A.height "6"
! A.fill "#FFD100"
leftTriangle =
S.path
! A.fill "#EF3340"
! A.d triangleDirs
triangleDirs = mkPath $ do
m 0 0
l 7 7
l 0 14
S.z
leftStar =
starRegular 5 2 (14,7)
! A.fill "#000000"
rightStar =
starRegular 5 2 (21,7)
! A.fill "#000000"
{- |
Flag of Chad

-}
td :: Svg
td =
flagV3Eq
(3,2)
"#002669"
"#FFCC00"
"#D20F36"
{- |
Flag of Togo

-}
tg :: Svg
tg =
S.svg
! A.viewbox (S.toValue $ "0 0 " ++ show w ++ " " ++ show h)
! A.width "300"
! A.height (S.toValue (300 / φ))
$ do
greenBackground
topStripe
botStripe
redSquare
star
where
φ = (1 + sqrt 5) / 2
h = 500
w = h * φ
greenBackground =
S.rect
! A.x "0"
! A.y "0"
! (A.width .: w)
! (A.height .: h)
! A.fill "#006A4E"
topStripe =
S.rect
! A.x "0"
! A.y "100"
! (A.width .: w)
! (A.height .: h/5)
! A.fill "#FFCE00"
botStripe =
S.rect
! A.x "0"
! A.y "300"
! (A.width .: w)
! (A.height .: h/5)
! A.fill "#FFCE00"
redSquare =
S.rect
! A.x "0"
! A.y "0"
! A.width "300"
! A.height "300"
! A.fill "#D21034"
star =
starRegular 5 100 (150,150)
! A.fill "#FFFFFF"
{- |
Flag of Tunisia

-}
tn :: Svg
tn =
S.svg
! A.viewbox "0 0 60 40"
! A.width "300"
! A.height "200"
$ do
redBackground
whiteCircle
moon
star
where
redBackground =
S.rect
! A.x "0"
! A.y "0"
! A.width "60"
! A.height "40"
! A.fill "#E70013"
whiteCircle =
S.circle
! A.cx "30"
! A.cy "20"
! A.r "10"
! A.fill "#FFFFFF"
x1 = 31 + 81/16
b = -40
c = x1^2 - 64*x1 + 32^2 + 20^2 - 36
y1 = 0.5 * (-b + sqrt (b^2 - 4*c))
y2 = 0.5 * (-b - sqrt (b^2 - 4*c))
moon =
S.path
! A.fill "#E70013"
! A.d moonDirs
moonDirs = mkPath $ do
m x1 y1
aa 7.5 7.5 0 True True x1 y2
aa 6 6 0 True False x1 y1
S.z
star =
starRegular 5 4.5 (32,20)
! A.fill "#E70013"
! A.transform (rotateAround (-90) 32 20)
{- |
Flag of Ukraine

-}
ua :: S.Svg
ua =
S.svg
! A.viewbox "0 0 3 2"
! A.width "300"
! A.height "200"
$ do
topStripe
botStripe
where
topStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 3)
! (A.height .: 1)
! A.stroke "none"
! A.fill "#0057B7"
botStripe =
S.rect
! (A.x .: 0)
! (A.y .: 1)
! (A.width .: 3)
! (A.height .: 1)
! A.stroke "none"
! A.fill "#FFDD00"
{- |
Flag of the Uganda

-}
ug :: Svg
ug =
S.svg
! A.viewbox "0 0 900 600"
! A.width "300"
! A.height "200"
$ do
mkRect " 0" "#000000"
mkRect "100" "#FCDC04"
mkRect "200" "#D90000"
mkRect "300" "#000000"
mkRect "400" "#FCDC04"
mkRect "500" "#D90000"
where
mkRect ky color =
S.rect
! A.x "0"
! A.y ky
! A.width "900"
! A.height "100"
! A.fill color
{- |
Flag of the United Kingdom

-}
uk :: S.Svg
uk =
S.svg
! A.viewbox "0 0 50 30"
! A.width "300"
! A.height "180"
$ do
scotland
irelandBase
irelandBase ! A.transform (rotateAround 180 mx my)
englandRed
englandWhite
where
w = 50
h = 30
mx = w / 2
my = h / 2
-- x0 = 3 / sin (atan (3/5))
x1 = 2 / sin (atan (3/5))
-- y0 = 3 / sin (atan (5/3))
y1 = 2 / sin (atan (5/3))
colWhite = "white"
colBlue = "rgb(1,33,105)"
colRed = "rgb(200,16,46)"
scotland = do
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: w)
! (A.height .: h)
! A.stroke "none"
! A.fill colBlue
S.path
! (A.strokeWidth .: 6)
! A.stroke colWhite
! A.fill "none"
! A.d scotlandDirs
scotlandDirs = mkPath $ do
m 0 0
l w h
m 0 h
l w 0
irelandBase =
S.path
! A.stroke "none"
! A.fill colRed
! A.d irelandDirs
irelandDirs = mkPath $ do
m 0 0
l 0 y1
l (mx - x1) my
l mx my
S.z
m 0 h
l x1 h
l mx (my + y1)
l mx my
S.z
englandRed =
S.path
! (A.strokeWidth .: 6)
! A.stroke colRed
! A.fill "none"
! A.d englandDirsRed
englandWhite =
S.path
! (A.strokeWidth .: 2)
! A.stroke colWhite
! A.fill "none"
! A.d englandDirsWhite
englandDirsRed = mkPath $ do
m 0 my
l w my
m mx 0
l mx h
englandDirsWhite = mkPath $ do
m 0 (my + 4)
l (mx - 4) (my + 4)
l (mx - 4) h
m (mx + 4) h
l (mx + 4) (my + 4)
l w (my + 4)
m w (my - 4)
l (mx + 4) (my - 4)
l (mx + 4) 0
m (mx - 4) 0
l (mx - 4) (my - 4)
l 0 (my - 4)
{- |
Flag of the Holy See (Vatican City)

-}
va :: S.Svg
va =
S.svg
! A.viewbox "0 0 1e3 1e3"
! A.width "300"
! A.height "300"
$ do
leftStripe
rightStripe
vaCoA
where
leftStripe =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 500)
! (A.height .: 1000)
! A.stroke "none"
! A.fill "#FFE000"
rightStripe =
S.rect
! (A.x .: 500)
! (A.y .: 0)
! (A.width .: 500)
! (A.height .: 1000)
! A.stroke "none"
! A.fill "#FFFFFF"
{- |
Flag of Kosovo

-}
xk :: Svg
xk =
S.svg
! A.viewbox "0 0 840 600"
! A.width "300"
! A.height "214.285"
$ do
background
xkCoA
star (420 - d3, y3)
star (420 - d2, y2)
star (420 - d1, y1)
star (420 + d1, y1)
star (420 + d2, y2)
star (420 + d3, y3)
where
d1 = 42
d2 = 124.3
d3 = 203
y1 = 121.7
y2 = 136
y3 = 164.8
background =
S.rect
! (A.x .: 0)
! (A.y .: 0)
! (A.width .: 840)
! (A.height .: 600)
! A.stroke "none"
! A.fill "#244AA5"
star (c0,c1) =
starRegular 5 36 (c0,c1)
! A.fill "#FFFFFF"