Description: ensure emphases work correctly in different contexts
run this test
Designed by: Crawford Currie
'Code' emphasis (= sign)
Basic cases
Verify that spaces, newlines and left brackets are all valid delimiters for opening an emphasis expression.
CASE NL_BEFORE_SPACE_AFTER
before
within
after
before
within
after
CASE NL_BEFORE_NL_AFTER
before
within
after
before
within
after
CASE NL_BEFORE_RB_AFTER
before
within
)after
before
within
)after
CASE SPACE_BEFORE_NL_AFTER
before
within
after
before
within
after
CASE SPACE_BEFORE_SPACE_AFTER
before
within
after
before
within
after
CASE SPACE_BEFORE_RB_AFTER
before
within
)after
before
within
)after
CASE LB_BEFORE_SPACE_AFTER
(
within
after
(
within
after
CASE LB_BEFORE_NL_AFTER
(
within
after
(
within
after
CASE LB_BEFORE_RB_AFTER
(
within
)
(
within
)
Closings
Assume that the following characters are equivalent to space, nl and RB and can close an expression: ,.;:!?
CASE COMMA_AFTER
before
within
,after
before
within
,after
CASE PERIOD_AFER
before
within
.after
before
within
.after
CASE SEMIC_AFTER
before
within
;after
before
within
;after
CASE COLON_AFTER
before
within
:after
before
within
:after
CASE PLING_AFTER
before
within
!after
before
within
!after
CASE QM_AFTER
before
within
?after
before
within
?after
CASE OTHER_CHARACTERS
before
|
after
before
\
after
before
¬
after
before
`
after
before
!
after
before
1
after
before
"
after
before
2
after
before
£
after
before
3
after
before
$
after
before
4
after
before
%
after
before
5
after
before
^
after
before
6
after
before
&
after
before
7
after
before
*
after
before
8
after
before
(
after
before
9
after
before
)
after
before
0
after
before
_
after
before
-
after
before
+
after
before
=
after
before
}
after
before
]
after
before
{
after
before
[
after
before
~
after
before
#
after
before
@
after
before
'
after
before
:
after
before
;
after
before
?
after
before
/
after
before
>
after
before
.
after
before
<
after
before
,
after
before
A
after
before
B
after
before
C
after
before
D
after
before
E
after
before
F
after
before
G
after
before
H
after
before
I
after
before
J
after
before
K
after
before
L
after
before
M
after
before
N
after
before
O
after
before
P
after
before
Q
after
before
R
after
before
S
after
before
T
after
before
U
after
before
V
after
before
W
after
before
X
after
before
Y
after
before
Z
after
before
a
after
before
b
after
before
c
after
before
d
after
before
e
after
before
f
after
before
g
after
before
h
after
before
i
after
before
j
after
before
k
after
before
l
after
before
m
after
before
n
after
before
o
after
before
p
after
before
q
after
before
r
after
before
s
after
before
t
after
before
u
after
before
v
after
before
w
after
before
x
after
before
y
after
before
z
after
before
|
after
before
\
after
before
¬
after
before
`
after
before
!
after
before
1
after
before
"
after
before
2
after
before
£
after
before
3
after
before
$
after
before
4
after
before
%
after
before
5
after
before
^
after
before
6
after
before
&
after
before
7
after
before
*
after
before
8
after
before
(
after
before
9
after
before
)
after
before
0
after
before
_
after
before
-
after
before
+
after
before
=
after
before
}
after
before
]
after
before
{
after
before
[
after
before
~
after
before
#
after
before
@
after
before
'
after
before
:
after
before
;
after
before
?
after
before
/
after
before
>
after
before
.
after
before
<
after
before
,
after
before
A
after
before
B
after
before
C
after
before
D
after
before
E
after
before
F
after
before
G
after
before
H
after
before
I
after
before
J
after
before
K
after
before
L
after
before
M
after
before
N
after
before
O
after
before
P
after
before
Q
after
before
R
after
before
S
after
before
T
after
before
U
after
before
V
after
before
W
after
before
X
after
before
Y
after
before
Z
after
before
a
after
before
b
after
before
c
after
before
d
after
before
e
after
before
f
after
before
g
after
before
h
after
before
i
after
before
j
after
before
k
after
before
l
after
before
m
after
before
n
after
before
o
after
before
p
after
before
q
after
before
r
after
before
s
after
before
t
after
before
u
after
before
v
after
before
w
after
before
x
after
before
y
after
before
z
after
Embedded delimiters
Cases where a related delimiter is embedded in, or overlaps with the string to be emphasised
CASE RELATIONSHIP_TO_DOUBLE
before
aabb=
after
before
aabb=
after
before
aa=
bb= cc== after
before
aa=
bb= cc== after
before
aa bb
cc
after
before
aa bb
cc
after
before
aa cc
bb
after
before
aa cc
bb
after
before
aa cc
bb
after
before
aa cc
bb
after
before
=
after
before
=
after
before
==
after
before
==
after
before
=
after
before
=
after
CASE SPACES_AROUND_DELIM
before
aa = bb
after
before
aa = bb
after
CASE SPACE_BEFORE_DELIM
before
aa =bb cc
after
before
aa =bb cc
after
CASE VALID_EXPR_EMBEDDED
A valid emphasis expression embedded in an emphasised string.
before
aa bb
cc
after
before
aa =bb
cc= after
CASE ALL_OTHER_EMBEDDED
(
* _ __ = ==
)
(
* _ __ = ==
)
Relationship with other formatting types
Note: Cairo gets the first row wrong, by any sensible definition.
CASE IN_TABLE
* _ _ = == | * _ _ = == |
aa | bb |
= | = |
* _ __ = == |
* _ __ = == |
aa |
bb |
= |
= |
CASE IN_LIST
bb=
=aa
bb=
=aa
'Bold' emphasis (* sign)
Basic cases
Verify that spaces, newlines and left brackets are all valid delimiters for opening an emphasis expression.
CASE NL_BEFORE_SPACE_AFTER
before
within after
before
within after
CASE NL_BEFORE_NL_AFTER
before
within after
before
within
after
CASE NL_BEFORE_RB_AFTER
before
within)after
before
within)after
CASE SPACE_BEFORE_NL_AFTER
before
within after
before
within
after
CASE SPACE_BEFORE_SPACE_AFTER
before
within after
before
within after
CASE SPACE_BEFORE_RB_AFTER
before
within)after
before
within)after
CASE LB_BEFORE_SPACE_AFTER
(
within after
(
within after
CASE LB_BEFORE_NL_AFTER
(
within after
(
within
after
CASE LB_BEFORE_RB_AFTER
(
within)
(
within)
Closings
Assume that the following characters are equivalent to space, nl and RB and can close an expression: ,.;:!?
CASE COMMA_AFTER
before
within,after
before
within,after
CASE PERIOD_AFER
before
within.after
before
within.after
CASE SEMIC_AFTER
before
within;after
before
within;after
CASE COLON_AFTER
before
within:after
before
within:after
CASE PLING_AFTER
before
within!after
before
within!after
CASE QM_AFTER
before
within?after
before
within?after
CASE OTHER_CHARACTERS
before
| after
before
\ after
before
¬ after
before
` after
before
! after
before
1 after
before
" after
before
2 after
before
£ after
before
3 after
before
$ after
before
4 after
before
% after
before
5 after
before
^ after
before
6 after
before
& after
before
7 after
before
* after
before
8 after
before
( after
before
9 after
before
) after
before
0 after
before
_ after
before
- after
before
+ after
before
= after
before
} after
before
] after
before
{ after
before
[ after
before
~ after
before
# after
before
@ after
before
' after
before
: after
before
; after
before
? after
before
/ after
before
> after
before
. after
before
< after
before
, after
before
A after
before
B after
before
C after
before
D after
before
E after
before
F after
before
G after
before
H after
before
I after
before
J after
before
K after
before
L after
before
M after
before
N after
before
O after
before
P after
before
Q after
before
R after
before
S after
before
T after
before
U after
before
V after
before
W after
before
X after
before
Y after
before
Z after
before
a after
before
b after
before
c after
before
d after
before
e after
before
f after
before
g after
before
h after
before
i after
before
j after
before
k after
before
l after
before
m after
before
n after
before
o after
before
p after
before
q after
before
r after
before
s after
before
t after
before
u after
before
v after
before
w after
before
x after
before
y after
before
z after
before
| after
before
\ after
before
¬ after
before
` after
before
! after
before
1 after
before
" after
before
2 after
before
£ after
before
3 after
before
$ after
before
4 after
before
% after
before
5 after
before
^ after
before
6 after
before
& after
before
7 after
before
* after
before
8 after
before
( after
before
9 after
before
) after
before
0 after
before
_ after
before
- after
before
+ after
before
= after
before
} after
before
] after
before
{ after
before
[ after
before
~ after
before
# after
before
@ after
before
' after
before
: after
before
; after
before
? after
before
/ after
before
> after
before
. after
before
< after
before
, after
before
A after
before
B after
before
C after
before
D after
before
E after
before
F after
before
G after
before
H after
before
I after
before
J after
before
K after
before
L after
before
M after
before
N after
before
O after
before
P after
before
Q after
before
R after
before
S after
before
T after
before
U after
before
V after
before
W after
before
X after
before
Y after
before
Z after
before
a after
before
b after
before
c after
before
d after
before
e after
before
f after
before
g after
before
h after
before
i after
before
j after
before
k after
before
l after
before
m after
before
n after
before
o after
before
p after
before
q after
before
r after
before
s after
before
t after
before
u after
before
v after
before
w after
before
x after
before
y after
before
z after
Embedded delimiters
Cases where a related delimiter is embedded in, or overlaps with the string to be emphasised
CASE SPACES_AROUND_DELIM
before
aa * bb after
before
aa * bb after
CASE SPACE_BEFORE_DELIM
before
aa *bb cc after
before
aa *bb cc after
CASE VALID_EXPR_EMBEDDED
A valid emphasis expression embedded in an emphasised string.
before
aa bb cc after
before
aa *bb cc* after
CASE ALL_OTHER_EMBEDDED
(
* _ __ = ==)
(
* _ __ = ==)
Relationship with other formatting types
Note: Cairo gets the first row wrong, by any sensible definition.
CASE IN_TABLE
_ * _ = == | * __ = == |
aa | bb |
* | * |
CASE IN_LIST
bb*
*aa
bb*
*aa
'Italic' emphasis (_ sign)
Basic cases
Verify that spaces, newlines and left brackets are all valid delimiters for opening an emphasis expression.
CASE NL_BEFORE_SPACE_AFTER
before
within after
before
within after
CASE NL_BEFORE_NL_AFTER
before
within after
before
within
after
CASE NL_BEFORE_RB_AFTER
before
within)after
before
within)after
CASE SPACE_BEFORE_NL_AFTER
before
within after
before
within
after
CASE SPACE_BEFORE_SPACE_AFTER
before
within after
before
within after
CASE SPACE_BEFORE_RB_AFTER
before
within)after
before
within)after
CASE LB_BEFORE_SPACE_AFTER
(
within after
(
within after
CASE LB_BEFORE_NL_AFTER
(
within after
(
within
after
CASE LB_BEFORE_RB_AFTER
(
within)
(
within)
Closings
Assume that the following characters are equivalent to space, nl and RB and can close an expression: ,.;:!?
CASE COMMA_AFTER
before
within,after
before
within,after
CASE PERIOD_AFER
before
within.after
before
within.after
CASE SEMIC_AFTER
before
within;after
before
within;after
CASE COLON_AFTER
before
within:after
before
within:after
CASE PLING_AFTER
before
within!after
before
within!after
CASE QM_AFTER
before
within?after
before
within?after
CASE OTHER_CHARACTERS
before
| after
before
\ after
before
¬ after
before
` after
before
! after
before
1 after
before
" after
before
2 after
before
£ after
before
3 after
before
$ after
before
4 after
before
% after
before
5 after
before
^ after
before
6 after
before
& after
before
7 after
before
* after
before
8 after
before
( after
before
9 after
before
) after
before
0 after
before
_ after
before
- after
before
+ after
before
= after
before
} after
before
] after
before
{ after
before
[ after
before
~ after
before
# after
before
@ after
before
' after
before
: after
before
; after
before
? after
before
/ after
before
> after
before
. after
before
< after
before
, after
before
A after
before
B after
before
C after
before
D after
before
E after
before
F after
before
G after
before
H after
before
I after
before
J after
before
K after
before
L after
before
M after
before
N after
before
O after
before
P after
before
Q after
before
R after
before
S after
before
T after
before
U after
before
V after
before
W after
before
X after
before
Y after
before
Z after
before
a after
before
b after
before
c after
before
d after
before
e after
before
f after
before
g after
before
h after
before
i after
before
j after
before
k after
before
l after
before
m after
before
n after
before
o after
before
p after
before
q after
before
r after
before
s after
before
t after
before
u after
before
v after
before
w after
before
x after
before
y after
before
z after
before
| after
before
\ after
before
¬ after
before
` after
before
! after
before
1 after
before
" after
before
2 after
before
£ after
before
3 after
before
$ after
before
4 after
before
% after
before
5 after
before
^ after
before
6 after
before
& after
before
7 after
before
* after
before
8 after
before
( after
before
9 after
before
) after
before
0 after
before
_ after
before
- after
before
+ after
before
= after
before
} after
before
] after
before
{ after
before
[ after
before
~ after
before
# after
before
@ after
before
' after
before
: after
before
; after
before
? after
before
/ after
before
> after
before
. after
before
< after
before
, after
before
A after
before
B after
before
C after
before
D after
before
E after
before
F after
before
G after
before
H after
before
I after
before
J after
before
K after
before
L after
before
M after
before
N after
before
O after
before
P after
before
Q after
before
R after
before
S after
before
T after
before
U after
before
V after
before
W after
before
X after
before
Y after
before
Z after
before
a after
before
b after
before
c after
before
d after
before
e after
before
f after
before
g after
before
h after
before
i after
before
j after
before
k after
before
l after
before
m after
before
n after
before
o after
before
p after
before
q after
before
r after
before
s after
before
t after
before
u after
before
v after
before
w after
before
x after
before
y after
before
z after
Embedded delimiters
Cases where a related delimiter is embedded in, or overlaps with the string to be emphasised
CASE RELATIONSHIP_TO_DOUBLE
before
aabb_ after
before
aabb_ after
before
aa_ bb_ cc__ after
before
aa_ bb_ cc__ after
before
aa bb cc after
before
aa bb cc after
before
aa cc bb after
before
aa cc bb after
before
aa cc bb after
before
aa cc bb after
before
_ after
before
_ after
before
__ after
before
__ after
before
_ after
before
_ after
CASE SPACES_AROUND_DELIM
before
aa _ bb after
before
aa _ bb after
CASE SPACE_BEFORE_DELIM
before
aa _bb cc after
before
aa _bb cc after
CASE VALID_EXPR_EMBEDDED
A valid emphasis expression embedded in an emphasised string.
before
aa bb cc after
before
aa _bb cc_ after
CASE ALL_OTHER_EMBEDDED
(
* _ = == __)
(
* _ = == __)
Relationship with other formatting types
Note: Cairo gets the first row wrong, by any sensible definition.
CASE IN_TABLE
* = = _ __ | * = = _ __ |
aa | bb |
_ | _ |
* = == _ __ |
* = == _ __ |
aa |
bb |
_ |
_ |
CASE IN_LIST
bb_
_aa
bb_
_aa
'Bold Code' emphasis (== sign)
Basic cases
Verify that spaces, newlines and left brackets are all valid delimiters for opening an emphasis expression.
CASE NL_BEFORE_SPACE_AFTER
before
within
after
before
within
after
CASE NL_BEFORE_NL_AFTER
before
within
after
before
within
after
CASE NL_BEFORE_RB_AFTER
before
within
)after
before
within
)after
CASE SPACE_BEFORE_NL_AFTER
before
within
after
before
within
after
CASE SPACE_BEFORE_SPACE_AFTER
before
within
after
before
within
after
CASE SPACE_BEFORE_RB_AFTER
before
within
)after
before
within
)after
CASE LB_BEFORE_SPACE_AFTER
(
within
after
(
within
after
CASE LB_BEFORE_NL_AFTER
(
within
after
(
within
after
CASE LB_BEFORE_RB_AFTER
(
within
)
(
within
)
Closings
Assume that the following characters are equivalent to space, nl and RB and can close an expression: ,.;:!?
CASE COMMA_AFTER
before
within
,after
before
within
,after
CASE PERIOD_AFER
before
within
.after
before
within
.after
CASE SEMIC_AFTER
before
within
;after
before
within
;after
CASE COLON_AFTER
before
within
:after
before
within
:after
CASE PLING_AFTER
before
within
!after
before
within
!after
CASE QM_AFTER
before
within
?after
before
within
?after
CASE OTHER_CHARACTERS
before
|
after
before
\
after
before
¬
after
before
`
after
before
!
after
before
1
after
before
"
after
before
2
after
before
£
after
before
3
after
before
$
after
before
4
after
before
%
after
before
5
after
before
^
after
before
6
after
before
&
after
before
7
after
before
*
after
before
8
after
before
(
after
before
9
after
before
)
after
before
0
after
before
_
after
before
-
after
before
+
after
before
=
after
before
}
after
before
]
after
before
{
after
before
[
after
before
~
after
before
#
after
before
@
after
before
'
after
before
:
after
before
;
after
before
?
after
before
/
after
before
>
after
before
.
after
before
<
after
before
,
after
before
A
after
before
B
after
before
C
after
before
D
after
before
E
after
before
F
after
before
G
after
before
H
after
before
I
after
before
J
after
before
K
after
before
L
after
before
M
after
before
N
after
before
O
after
before
P
after
before
Q
after
before
R
after
before
S
after
before
T
after
before
U
after
before
V
after
before
W
after
before
X
after
before
Y
after
before
Z
after
before
a
after
before
b
after
before
c
after
before
d
after
before
e
after
before
f
after
before
g
after
before
h
after
before
i
after
before
j
after
before
k
after
before
l
after
before
m
after
before
n
after
before
o
after
before
p
after
before
q
after
before
r
after
before
s
after
before
t
after
before
u
after
before
v
after
before
w
after
before
x
after
before
y
after
before
z
after
before
|
after
before
\
after
before
¬
after
before
`
after
before
!
after
before
1
after
before
"
after
before
2
after
before
£
after
before
3
after
before
$
after
before
4
after
before
%
after
before
5
after
before
^
after
before
6
after
before
&
after
before
7
after
before
*
after
before
8
after
before
(
after
before
9
after
before
)
after
before
0
after
before
_
after
before
-
after
before
+
after
before
=
after
before
}
after
before
]
after
before
{
after
before
[
after
before
~
after
before
#
after
before
@
after
before
'
after
before
:
after
before
;
after
before
?
after
before
/
after
before
>
after
before
.
after
before
<
after
before
,
after
before
A
after
before
B
after
before
C
after
before
D
after
before
E
after
before
F
after
before
G
after
before
H
after
before
I
after
before
J
after
before
K
after
before
L
after
before
M
after
before
N
after
before
O
after
before
P
after
before
Q
after
before
R
after
before
S
after
before
T
after
before
U
after
before
V
after
before
W
after
before
X
after
before
Y
after
before
Z
after
before
a
after
before
b
after
before
c
after
before
d
after
before
e
after
before
f
after
before
g
after
before
h
after
before
i
after
before
j
after
before
k
after
before
l
after
before
m
after
before
n
after
before
o
after
before
p
after
before
q
after
before
r
after
before
s
after
before
t
after
before
u
after
before
v
after
before
w
after
before
x
after
before
y
after
before
z
after
'Bold Italic emphasis (__ sign)
Basic cases
Verify that spaces, newlines and left brackets are all valid delimiters for opening an emphasis expression.
CASE NL_BEFORE_SPACE_AFTER
before
within after
before
within after
CASE NL_BEFORE_NL_AFTER
before
within after
before
within
after
CASE NL_BEFORE_RB_AFTER
before
within)after
before
within)after
CASE SPACE_BEFORE_NL_AFTER
before
within after
before
within
after
CASE SPACE_BEFORE_SPACE_AFTER
before
within after
before
within after
CASE SPACE_BEFORE_RB_AFTER
before
within)after
before
within)after
CASE LB_BEFORE_SPACE_AFTER
(
within after
(
within after
CASE LB_BEFORE_NL_AFTER
(
within after
(
within
after
CASE LB_BEFORE_RB_AFTER
(
within)
(
within)
Closings
Assume that the following characters are equivalent to space, nl and RB and can close an expression: ,.;:!?
CASE COMMA_AFTER
before
within,after
before
within,after
CASE PERIOE_AFER
before
within.after
before
within.after
CASE SEMIC_AFTER
before
within;after
before
within;after
CASE COLON_AFTER
before
within:after
before
within:after
CASE PLING_AFTER
before
within!after
before
within!after
CASE QM_AFTER
before
within?after
before
within?after
CASE OTHER_CHARACTERS
before
| after
before
\ after
before
¬ after
before
` after
before
! after
before
1 after
before
" after
before
2 after
before
£ after
before
3 after
before
$ after
before
4 after
before
% after
before
5 after
before
^ after
before
6 after
before
& after
before
7 after
before
* after
before
8 after
before
( after
before
9 after
before
) after
before
0 after
before
_ after
before
- after
before
+ after
before
= after
before
} after
before
] after
before
{ after
before
[ after
before
~ after
before
# after
before
@ after
before
' after
before
: after
before
; after
before
? after
before
/ after
before
> after
before
. after
before
< after
before
, after
before
A after
before
B after
before
C after
before
D after
before
E after
before
F after
before
G after
before
H after
before
I after
before
J after
before
K after
before
L after
before
M after
before
N after
before
O after
before
P after
before
Q after
before
R after
before
S after
before
T after
before
U after
before
V after
before
W after
before
X after
before
Y after
before
Z after
before
a after
before
b after
before
c after
before
d after
before
e after
before
f after
before
g after
before
h after
before
i after
before
j after
before
k after
before
l after
before
m after
before
n after
before
o after
before
p after
before
q after
before
r after
before
s after
before
t after
before
u after
before
v after
before
w after
before
x after
before
y after
before
z after
before
| after
before
\ after
before
¬ after
before
` after
before
! after
before
1 after
before
" after
before
2 after
before
£ after
before
3 after
before
$ after
before
4 after
before
% after
before
5 after
before
^ after
before
6 after
before
& after
before
7 after
before
* after
before
8 after
before
( after
before
9 after
before
) after
before
0 after
before
_ after
before
- after
before
+ after
before
= after
before
} after
before
] after
before
{ after
before
[ after
before
~ after
before
# after
before
@ after
before
' after
before
: after
before
; after
before
? after
before
/ after
before
> after
before
. after
before
< after
before
, after
before
A after
before
B after
before
C after
before
D after
before
E after
before
F after
before
G after
before
H after
before
I after
before
J after
before
K after
before
L after
before
M after
before
N after
before
O after
before
P after
before
Q after
before
R after
before
S after
before
T after
before
U after
before
V after
before
W after
before
X after
before
Y after
before
Z after
before
a after
before
b after
before
c after
before
d after
before
e after
before
f after
before
g after
before
h after
before
i after
before
j after
before
k after
before
l after
before
m after
before
n after
before
o after
before
p after
before
q after
before
r after
before
s after
before
t after
before
u after
before
v after
before
w after
before
x after
before
y after
before
z after