Skip to content

Commit 5f4297b

Browse files
committed
PR doxygen#11736 Simplify code a bit
1 parent 057b646 commit 5f4297b

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

src/markdown.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,20 @@ enum class ExplicitPageResult
8989
c=='>' || c==':' || c==',' || \
9090
c==';' || c=='\'' || c=='"' || c=='`')
9191

92-
// is character at position i in data allowed before an emphasis section
92+
// is character c allowed before an emphasis section
9393
#define isOpenEmphChar(c) \
9494
(c=='\n' || c==' ' || c=='\'' || c=='<' || \
9595
c=='>' || c=='{' || c=='(' || c=='[' || \
9696
c==',' || c==':' || c==';')
9797

98+
// test for non breakable space (UTF-8)
99+
#define isUtf8Nbsp(c1,c2) \
100+
(c1==static_cast<char>(0xc2) && c2==static_cast<char>(0xa0))
101+
102+
#define isAllowedEmphStr(data,offset) \
103+
(!(offset>0 && isOpenEmphChar(data.data()[-1])) && \
104+
!(offset>1 && isUtf8Nbsp(data.data()[-2],data.data()[-1])))
105+
98106
// is character at position i in data an escape that prevents ending an emphasis section
99107
// so for example *bla (*.txt) is cool*
100108
#define ignoreCloseEmphChar(c,cn) \
@@ -1117,15 +1125,12 @@ int Markdown::Private::processEmphasis(std::string_view data,size_t offset)
11171125
AUTO_TRACE("data='{}' offset={}",Trace::trunc(data),offset);
11181126
const size_t size = data.size();
11191127

1120-
if (!(offset>1 && static_cast<unsigned char>(data.data()[-2])==0xc2 && static_cast<unsigned char>(data.data()[-1])==0xa0)) // check UTF-8 non-breaking space
1128+
if (isAllowedEmphStr(data,offset) || // invalid char before * or _
1129+
(size>1 && data[0]!=data[1] && !(isIdChar(data[1]) || extraChar(data[1]))) || // invalid char after * or _
1130+
(size>2 && data[0]==data[1] && !(isIdChar(data[2]) || extraChar(data[2])))) // invalid char after ** or __
11211131
{
1122-
if ((offset>0 && !isOpenEmphChar(data.data()[-1])) || // invalid char before * or _
1123-
(size>1 && data[0]!=data[1] && !(isIdChar(data[1]) || extraChar(data[1]))) || // invalid char after * or _
1124-
(size>2 && data[0]==data[1] && !(isIdChar(data[2]) || extraChar(data[2])))) // invalid char after ** or __
1125-
{
1126-
AUTO_TRACE_EXIT("invalid surrounding characters");
1127-
return 0;
1128-
}
1132+
AUTO_TRACE_EXIT("invalid surrounding characters");
1133+
return 0;
11291134
}
11301135

11311136
char c = data[0];

0 commit comments

Comments
 (0)