diff options
-rw-r--r-- | chars.c | 18 | ||||
-rw-r--r-- | gmdiff | 11 | ||||
-rw-r--r-- | mandoc_char.7 | 28 | ||||
-rw-r--r-- | regress/char/unicode/latin1.in | 10 | ||||
-rw-r--r-- | regress/char/unicode/latin1.out_ascii | 10 | ||||
-rw-r--r-- | regress/char/unicode/latin1.out_html | 10 | ||||
-rw-r--r-- | regress/char/unicode/latin1.out_utf8 | 10 | ||||
-rw-r--r-- | regress/char/unicode/named.in | 5 | ||||
-rw-r--r-- | regress/char/unicode/named.out_ascii | 5 | ||||
-rw-r--r-- | regress/char/unicode/named.out_html | 5 | ||||
-rw-r--r-- | regress/char/unicode/named.out_utf8 | 5 | ||||
-rw-r--r-- | regress/char/unicode/namediff.in | 7 | ||||
-rw-r--r-- | regress/char/unicode/namediff.out_ascii | 7 | ||||
-rw-r--r-- | regress/char/unicode/namediff.out_html | 7 | ||||
-rw-r--r-- | regress/char/unicode/namediff.out_utf8 | 7 |
15 files changed, 112 insertions, 33 deletions
@@ -1,7 +1,7 @@ /* $Id$ */ /* * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2011, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2011, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -81,6 +81,10 @@ static struct ln lines[] = { { "sh", "#", 0x0023 }, { "CR", "_|", 0x21b5 }, { "OK", "\\/", 0x2713 }, + { "CL", "<club>", 0x2663 }, + { "SP", "<spade>", 0x2660 }, + { "HE", "<heart>", 0x2665 }, + { "DI", "<diamond>", 0x2666 }, /* Legal symbols. */ { "co", "(C)", 0x00a9 }, @@ -161,6 +165,7 @@ static struct ln lines[] = { { "uA", "=\b^", 0x21d1 }, { "dA", "=\bv", 0x21d3 }, { "vA", "^=v", 0x21d5 }, + { "an", "-", 0x23af }, /* Logic. */ { "AN", "^", 0x2227 }, @@ -234,11 +239,20 @@ static struct ln lines[] = { { "Ah", "N", 0x2135 }, { "Im", "I", 0x2111 }, { "Re", "R", 0x211c }, + { "wp", "P", 0x2118 }, { "pd", "a", 0x2202 }, { "-h", "/h", 0x210f }, + { "hbar", "/h", 0x210f }, { "12", "1/2", 0x00bd }, { "14", "1/4", 0x00bc }, { "34", "3/4", 0x00be }, + { "18", "1/8", 0x215B }, + { "38", "3/8", 0x215C }, + { "58", "5/8", 0x215D }, + { "78", "7/8", 0x215E }, + { "S1", "1", 0x00B9 }, + { "S2", "2", 0x00B2 }, + { "S3", "3", 0x00B3 }, /* Ligatures. */ { "ff", "ff", 0xfb00 }, @@ -354,6 +368,8 @@ static struct ln lines[] = { { "fm", "\'", 0x2032 }, { "sd", "''", 0x2033 }, { "mc", ",\bu", 0x00b5 }, + { "Of", "_\ba", 0x00aa }, + { "Om", "_\bo", 0x00ba }, /* Greek characters. */ { "*A", "A", 0x0391 }, @@ -29,17 +29,20 @@ if [ "X$1" = "X-h" ]; then EQN="neqn" ROFF="nroff" MOPT="-Omdoc $MOPT" +elif [ "X$1" = "X-u" ]; then + shift + ROFF="groff -ket -ww -Tutf8 -P -c" + MOPT="-Werror -Tutf8 $MOPT" else - EQN="eqn -Tascii" - ROFF="groff -ww -Tascii -P -c" + ROFF="groff -et -ww -Tascii -P -c" + MOPT="-Werror -Tascii $MOPT" fi -MOPT="-Werror -Tascii $MOPT" while [ -n "$1" ]; do file=$1 shift echo " ========== $file ========== " - tbl $file | $EQN | $ROFF -mandoc 2> /tmp/roff.err > /tmp/roff.out + $ROFF -mandoc $file 2> /tmp/roff.err > /tmp/roff.out ${MANDOC:=mandoc} -Ios='OpenBSD ports' $MOPT $file \ 2> /tmp/mandoc.err > /tmp/mandoc.out for i in roff mandoc; do diff --git a/mandoc_char.7 b/mandoc_char.7 index a9018b91..88d6e9d4 100644 --- a/mandoc_char.7 +++ b/mandoc_char.7 @@ -2,7 +2,7 @@ .\" .\" Copyright (c) 2003 Jason McIntyre <jmc@openbsd.org> .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> -.\" Copyright (c) 2011, 2013, 2015 Ingo Schwarze <schwarze@openbsd.org> +.\" Copyright (c) 2011, 2013, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org> .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -169,6 +169,8 @@ even on request and macro lines. .Ss Accents In output modes supporting such special output characters, for example .Fl T Cm pdf , +and sometimes less consistently in +.Fl T Cm utf8 , some .Xr roff 7 formatters convert the following ASCII input characters to the @@ -177,6 +179,7 @@ following Unicode special output characters: .It \(ga Ta U+2018 Ta left single quotation mark .It \(aq Ta U+2019 Ta right single quotation mark .It \(ti Ta U+02DC Ta small tilde +.It \(ha Ta U+02C6 Ta modifier letter circumflex .El .Pp In prose, this automatic substitution is often desirable; @@ -187,6 +190,7 @@ escaping to render as follows: .It \e(ga Ta U+0060 Ta grave accent .It \e(aq Ta U+0027 Ta apostrophe .It \e(ti Ta U+007E Ta tilde +.It \e(ha Ta U+005E Ta circumflex accent .El .Ss Periods The period @@ -279,6 +283,10 @@ Text markers: .It \e(sh Ta \(sh Ta hash (pound) .It \e(CR Ta \(CR Ta carriage return .It \e(OK Ta \(OK Ta check mark +.It \e(CL Ta \(CL Ta club suit +.It \e(SP Ta \(SP Ta spade suit +.It \e(HE Ta \(HE Ta heart suit +.It \e(DI Ta \(DI Ta diamond suit .El .Pp Legal symbols: @@ -372,6 +380,7 @@ Arrows: .It \e(uA Ta \(uA Ta up double-arrow .It \e(dA Ta \(dA Ta down double-arrow .It \e(vA Ta \(vA Ta up-down double-arrow +.It \e(an Ta \(an Ta horizontal arrow extension .El .Pp Logical: @@ -450,11 +459,20 @@ Mathematical: .It \e(Ah Ta \(Ah Ta aleph .It \e(Im Ta \(Im Ta imaginary .It \e(Re Ta \(Re Ta real +.It \e(wp Ta \(wp Ta Weierstrass p .It \e(pd Ta \(pd Ta partial differential .It \e(-h Ta \(-h Ta Planck constant over 2\(*p -.It \e[12] Ta \[12] Ta one-half -.It \e[14] Ta \[14] Ta one-fourth -.It \e[34] Ta \[34] Ta three-fourths +.It \e[hbar] Ta \[hbar] Ta Planck constant over 2\(*p +.It \e(12 Ta \(12 Ta one-half +.It \e(14 Ta \(14 Ta one-fourth +.It \e(34 Ta \(34 Ta three-fourths +.It \e(18 Ta \(18 Ta one-eighth +.It \e(38 Ta \(38 Ta three-eighths +.It \e(58 Ta \(58 Ta five-eighths +.It \e(78 Ta \(78 Ta seven-eighths +.It \e(S1 Ta \(S1 Ta superscript 1 +.It \e(S2 Ta \(S2 Ta superscript 2 +.It \e(S3 Ta \(S3 Ta superscript 3 .El .Pp Ligatures: @@ -588,6 +606,8 @@ Units: .It \e(fm Ta \(fm Ta minute .It \e(sd Ta \(sd Ta second .It \e(mc Ta \(mc Ta micro +.It \e(Of Ta \(Of Ta Spanish female ordinal +.It \e(Om Ta \(Om Ta Spanish masculine ordinal .El .Pp Greek letters: diff --git a/regress/char/unicode/latin1.in b/regress/char/unicode/latin1.in index 4c99e986..54b9ca6e 100644 --- a/regress/char/unicode/latin1.in +++ b/regress/char/unicode/latin1.in @@ -10,20 +10,20 @@ BEGINTEST \[u00A6]\(bb BROKEN BAR \[u00A8]\(ad DIAERESIS \[u00A9]\(co COPYRIGHT SIGN -\[u00AA] FEMININE ORDINAL INDICATOR +\[u00AA]\(Of FEMININE ORDINAL INDICATOR \[u00AB]\(Fo LEFT-POINTING DOUBLE ANGLE QUOTATION MARK \[u00AC]\(no\[tno] NOT SIGN \[u00AD] SOFT HYPHEN \[u00AE]\(rg REGISTERED SIGN \[u00B1]\(+-\[t+-] PLUS-MINUS SIGN -\[u00B2] SUPERSCRIPT TWO -\[u00B3] SUPERSCRIPT THREE +\[u00B2]\(S2 SUPERSCRIPT TWO +\[u00B3]\(S3 SUPERSCRIPT THREE \[u00B4]\'\(aa ACUTE ACCENT \[u00B5]\(mc MICRO SIGN \[u00B7]\(pc MIDDLE DOT \[u00B8]\(ac CEDILLA -\[u00B9] SUPERSCRIPT ONE -\[u00BA] MASCULINE ORDINAL INDICATOR +\[u00B9]\(S1 SUPERSCRIPT ONE +\[u00BA]\(Om MASCULINE ORDINAL INDICATOR \[u00BB]\(Fc RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK \[u00BC]\(14 VULGAR FRACTION ONE QUARTER \[u00BD]\(12 VULGAR FRACTION ONE HALF diff --git a/regress/char/unicode/latin1.out_ascii b/regress/char/unicode/latin1.out_ascii index 1eb8436d..e772f9f7 100644 --- a/regress/char/unicode/latin1.out_ascii +++ b/regress/char/unicode/latin1.out_ascii @@ -13,20 +13,20 @@ DDEESSCCRRIIPPTTIIOONN || BROKEN BAR "" DIAERESIS (C)(C) COPYRIGHT SIGN - _a FEMININE ORDINAL INDICATOR + _a_a FEMININE ORDINAL INDICATOR <<<< LEFT-POINTING DOUBLE ANGLE QUOTATION MARK ~~~ NOT SIGN SOFT HYPHEN (R)(R) REGISTERED SIGN +-+-+- PLUS-MINUS SIGN - 2 SUPERSCRIPT TWO - 3 SUPERSCRIPT THREE + 22 SUPERSCRIPT TWO + 33 SUPERSCRIPT THREE ''' ACUTE ACCENT ,u,u MICRO SIGN .. MIDDLE DOT ,, CEDILLA - 1 SUPERSCRIPT ONE - _o MASCULINE ORDINAL INDICATOR + 11 SUPERSCRIPT ONE + _o_o MASCULINE ORDINAL INDICATOR >>>> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 1/41/4 VULGAR FRACTION ONE QUARTER 1/21/2 VULGAR FRACTION ONE HALF diff --git a/regress/char/unicode/latin1.out_html b/regress/char/unicode/latin1.out_html index d8fbf958..0196d76d 100644 --- a/regress/char/unicode/latin1.out_html +++ b/regress/char/unicode/latin1.out_html @@ -5,20 +5,20 @@ BEGINTEST ¦¦ BROKEN BAR ¨¨ DIAERESIS ©© COPYRIGHT SIGN -ª FEMININE ORDINAL INDICATOR +ªª FEMININE ORDINAL INDICATOR «« LEFT-POINTING DOUBLE ANGLE QUOTATION MARK ¬¬¬ NOT SIGN ­ SOFT HYPHEN ®® REGISTERED SIGN ±±± PLUS-MINUS SIGN -² SUPERSCRIPT TWO -³ SUPERSCRIPT THREE +²² SUPERSCRIPT TWO +³³ SUPERSCRIPT THREE ´´´ ACUTE ACCENT µµ MICRO SIGN ·· MIDDLE DOT ¸¸ CEDILLA -¹ SUPERSCRIPT ONE -º MASCULINE ORDINAL INDICATOR +¹¹ SUPERSCRIPT ONE +ºº MASCULINE ORDINAL INDICATOR »» RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK ¼¼ VULGAR FRACTION ONE QUARTER ½½ VULGAR FRACTION ONE HALF diff --git a/regress/char/unicode/latin1.out_utf8 b/regress/char/unicode/latin1.out_utf8 index 5fcc6dda..b9f1ad85 100644 --- a/regress/char/unicode/latin1.out_utf8 +++ b/regress/char/unicode/latin1.out_utf8 @@ -13,20 +13,20 @@ DDEESSCCRRIIPPTTIIOONN ¦¦ BROKEN BAR ¨¨ DIAERESIS ©© COPYRIGHT SIGN - ª FEMININE ORDINAL INDICATOR + ªª FEMININE ORDINAL INDICATOR «« LEFT-POINTING DOUBLE ANGLE QUOTATION MARK ¬¬¬ NOT SIGN SOFT HYPHEN ®® REGISTERED SIGN ±±± PLUS-MINUS SIGN - ² SUPERSCRIPT TWO - ³ SUPERSCRIPT THREE + ²² SUPERSCRIPT TWO + ³³ SUPERSCRIPT THREE ´´´ ACUTE ACCENT µµ MICRO SIGN ·· MIDDLE DOT ¸¸ CEDILLA - ¹ SUPERSCRIPT ONE - º MASCULINE ORDINAL INDICATOR + ¹¹ SUPERSCRIPT ONE + ºº MASCULINE ORDINAL INDICATOR »» RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK ¼¼ VULGAR FRACTION ONE QUARTER ½½ VULGAR FRACTION ONE HALF diff --git a/regress/char/unicode/named.in b/regress/char/unicode/named.in index 5644d325..c18d4253 100644 --- a/regress/char/unicode/named.in +++ b/regress/char/unicode/named.in @@ -91,6 +91,10 @@ BEGINTEST \[u211C]\(Re BLACK-LETTER CAPITAL R \[u2122]\(tm TRADE MARK SIGN \[u2135]\(Ah ALEF SYMBOL +\[u215B]\(18 VULGAR FRACTION ONE EIGHTH +\[u215C]\(38 VULGAR FRACTION THREE EIGHTHS +\[u215D]\(58 VULGAR FRACTION FIVE EIGHTHS +\[u215E]\(78 VULGAR FRACTION SEVEN EIGHTHS \[u2190]\(<- LEFTWARDS ARROW \[u2191]\(ua UPWARDS ARROW \[u2192]\(-> RIGHTWARDS ARROW @@ -143,6 +147,7 @@ BEGINTEST \[u230A]\(lf LEFT FLOOR \[u230B]\(rf RIGHT FLOOR \[u23AA]\(bv CURLY BRACKET EXTENSION +\[u23AF]\(an HORIZONTAL LINE EXTENSION \[u2502]\(br BOX DRAWINGS LIGHT VERTICAL \[u25A1]\(sq WHITE SQUARE \[u25CA]\(lz LOZENGE diff --git a/regress/char/unicode/named.out_ascii b/regress/char/unicode/named.out_ascii index 3f92caf1..b527ad13 100644 --- a/regress/char/unicode/named.out_ascii +++ b/regress/char/unicode/named.out_ascii @@ -94,6 +94,10 @@ DDEESSCCRRIIPPTTIIOONN RR BLACK-LETTER CAPITAL R tmtm TRADE MARK SIGN NN ALEF SYMBOL + 1/81/8 VULGAR FRACTION ONE EIGHTH + 3/83/8 VULGAR FRACTION THREE EIGHTHS + 5/85/8 VULGAR FRACTION FIVE EIGHTHS + 7/87/8 VULGAR FRACTION SEVEN EIGHTHS <-<- LEFTWARDS ARROW |^|^ UPWARDS ARROW ->-> RIGHTWARDS ARROW @@ -146,6 +150,7 @@ DDEESSCCRRIIPPTTIIOONN |_|_ LEFT FLOOR _|_| RIGHT FLOOR || CURLY BRACKET EXTENSION + -- HORIZONTAL LINE EXTENSION || BOX DRAWINGS LIGHT VERTICAL [][] WHITE SQUARE <><> LOZENGE diff --git a/regress/char/unicode/named.out_html b/regress/char/unicode/named.out_html index c4de9a5b..bf7605c3 100644 --- a/regress/char/unicode/named.out_html +++ b/regress/char/unicode/named.out_html @@ -86,6 +86,10 @@ BEGINTEST ℜℜ BLACK-LETTER CAPITAL R ™™ TRADE MARK SIGN ℵℵ ALEF SYMBOL +⅛⅛ VULGAR FRACTION ONE EIGHTH +⅜⅜ VULGAR FRACTION THREE EIGHTHS +⅝⅝ VULGAR FRACTION FIVE EIGHTHS +⅞⅞ VULGAR FRACTION SEVEN EIGHTHS ←← LEFTWARDS ARROW ↑↑ UPWARDS ARROW →→ RIGHTWARDS ARROW @@ -138,6 +142,7 @@ BEGINTEST ⌊⌊ LEFT FLOOR ⌋⌋ RIGHT FLOOR ⎪⎪ CURLY BRACKET EXTENSION +⎯⎯ HORIZONTAL LINE EXTENSION ││ BOX DRAWINGS LIGHT VERTICAL □□ WHITE SQUARE ◊◊ LOZENGE diff --git a/regress/char/unicode/named.out_utf8 b/regress/char/unicode/named.out_utf8 index 3900ceb5..24910b81 100644 --- a/regress/char/unicode/named.out_utf8 +++ b/regress/char/unicode/named.out_utf8 @@ -94,6 +94,10 @@ DDEESSCCRRIIPPTTIIOONN ℜℜ BLACK-LETTER CAPITAL R ™™ TRADE MARK SIGN ℵℵ ALEF SYMBOL + ⅛⅛ VULGAR FRACTION ONE EIGHTH + ⅜⅜ VULGAR FRACTION THREE EIGHTHS + ⅝⅝ VULGAR FRACTION FIVE EIGHTHS + ⅞⅞ VULGAR FRACTION SEVEN EIGHTHS ←← LEFTWARDS ARROW ↑↑ UPWARDS ARROW →→ RIGHTWARDS ARROW @@ -146,6 +150,7 @@ DDEESSCCRRIIPPTTIIOONN ⌊⌊ LEFT FLOOR ⌋⌋ RIGHT FLOOR ⎪⎪ CURLY BRACKET EXTENSION + ⎯⎯ HORIZONTAL LINE EXTENSION ││ BOX DRAWINGS LIGHT VERTICAL □□ WHITE SQUARE ◊◊ LOZENGE diff --git a/regress/char/unicode/namediff.in b/regress/char/unicode/namediff.in index 672478e4..78094b96 100644 --- a/regress/char/unicode/namediff.in +++ b/regress/char/unicode/namediff.in @@ -9,7 +9,8 @@ BEGINTEST \[u0393]\(*G GREEK CAPITAL LETTER GAMMA \[u03A3]\(*S GREEK CAPITAL LETTER SIGMA \[u203E]\(rn OVERLINE -\[u210F]\(-h PLANCK CONSTANT OVER TWO PI +\[u210F]\[hbar]\(-h PLANCK CONSTANT OVER TWO PI +\[u2118]\(wp SCRIPT CAPITAL P \[u2195]\(va UP DOWN ARROW \[u21D5]\(vA UP DOWN DOUBLE ARROW \[u2207]\(gr NABLA @@ -38,6 +39,10 @@ BEGINTEST \[u23AB]\[bracerighttp] RIGHT CURLY BRACKET UPPER HOOK \[u23AC]\[bracerightmid] RIGHT CURLY BRACKET MIDDLE PIECE \[u23AD]\[bracerightbt] RIGHT CURLY BRACKET LOWER HOOK +\[u2660]\(SP BLACK SPADE SUIT +\[u2663]\(CL BLACK CLUB SUIT +\[u2665]\(HE BLACK HEART SUIT +\[u2666]\(DI BLACK DIAMOND SUIT \[u2713]\(OK CHECK MARK ENDTEST .fi diff --git a/regress/char/unicode/namediff.out_ascii b/regress/char/unicode/namediff.out_ascii index cd8313a3..9422f2f8 100644 --- a/regress/char/unicode/namediff.out_ascii +++ b/regress/char/unicode/namediff.out_ascii @@ -12,7 +12,8 @@ DDEESSCCRRIIPPTTIIOONN GG GREEK CAPITAL LETTER GAMMA SS GREEK CAPITAL LETTER SIGMA -- OVERLINE - /h/h PLANCK CONSTANT OVER TWO PI + /h/h/h PLANCK CONSTANT OVER TWO PI + PP SCRIPT CAPITAL P ^v^v UP DOWN ARROW ^=v^=v UP DOWN DOUBLE ARROW VV NABLA @@ -41,6 +42,10 @@ DDEESSCCRRIIPPTTIIOONN -.-. RIGHT CURLY BRACKET UPPER HOOK }} RIGHT CURLY BRACKET MIDDLE PIECE -'-' RIGHT CURLY BRACKET LOWER HOOK + <spade><spade> BLACK SPADE SUIT + <club><club> BLACK CLUB SUIT + <heart><heart> BLACK HEART SUIT + <diamond><diamond> BLACK DIAMOND SUIT \/\/ CHECK MARK ENDTEST diff --git a/regress/char/unicode/namediff.out_html b/regress/char/unicode/namediff.out_html index d682ffbe..fe556af1 100644 --- a/regress/char/unicode/namediff.out_html +++ b/regress/char/unicode/namediff.out_html @@ -4,7 +4,8 @@ BEGINTEST ΓΓ GREEK CAPITAL LETTER GAMMA ΣΣ GREEK CAPITAL LETTER SIGMA ‾‾ OVERLINE -ℏℏ PLANCK CONSTANT OVER TWO PI +ℏℏℏ PLANCK CONSTANT OVER TWO PI +℘℘ SCRIPT CAPITAL P ↕↕ UP DOWN ARROW ⇕⇕ UP DOWN DOUBLE ARROW ∇∇ NABLA @@ -33,5 +34,9 @@ BEGINTEST ⎫⎫ RIGHT CURLY BRACKET UPPER HOOK ⎬⎬ RIGHT CURLY BRACKET MIDDLE PIECE ⎭⎭ RIGHT CURLY BRACKET LOWER HOOK +♠♠ BLACK SPADE SUIT +♣♣ BLACK CLUB SUIT +♥♥ BLACK HEART SUIT +♦♦ BLACK DIAMOND SUIT ✓✓ CHECK MARK ENDTEST diff --git a/regress/char/unicode/namediff.out_utf8 b/regress/char/unicode/namediff.out_utf8 index 9ac104bf..6c3de0db 100644 --- a/regress/char/unicode/namediff.out_utf8 +++ b/regress/char/unicode/namediff.out_utf8 @@ -12,7 +12,8 @@ DDEESSCCRRIIPPTTIIOONN ΓΓ GREEK CAPITAL LETTER GAMMA ΣΣ GREEK CAPITAL LETTER SIGMA ‾‾ OVERLINE - ℏℏ PLANCK CONSTANT OVER TWO PI + ℏℏℏ PLANCK CONSTANT OVER TWO PI + ℘℘ SCRIPT CAPITAL P ↕↕ UP DOWN ARROW ⇕⇕ UP DOWN DOUBLE ARROW ∇∇ NABLA @@ -41,6 +42,10 @@ DDEESSCCRRIIPPTTIIOONN ⎫⎫ RIGHT CURLY BRACKET UPPER HOOK ⎬⎬ RIGHT CURLY BRACKET MIDDLE PIECE ⎭⎭ RIGHT CURLY BRACKET LOWER HOOK + ♠♠ BLACK SPADE SUIT + ♣♣ BLACK CLUB SUIT + ♥♥ BLACK HEART SUIT + ♦♦ BLACK DIAMOND SUIT ✓✓ CHECK MARK ENDTEST |