Loading src/config.xml +10 −0 Original line number Original line Diff line number Diff line Loading @@ -276,6 +276,16 @@ Go to the <a href="commands.html">next</a> section or return to the Enabling this option can be useful when feeding doxygen a huge amount of source Enabling this option can be useful when feeding doxygen a huge amount of source files, where putting all generated files in the same directory would otherwise files, where putting all generated files in the same directory would otherwise causes performance problems for the file system. causes performance problems for the file system. ]]> </docs> </option> <option type='bool' id='ALLOW_UNICODE_NAMES' defval='0'> <docs> <![CDATA[ If the \c ALLOW_UNICODE_NAMES tag is set to \c YES, doxygen will allow non-ascii characters to appear in the names of generated files. If set to \c NO, non-ASCII characters will be escaped, for example _xE3_x81_x84 will be used for Unicode U+3044. ]]> ]]> </docs> </docs> </option> </option> Loading src/util.cpp +81 −16 Original line number Original line Diff line number Diff line Loading @@ -5144,6 +5144,7 @@ bool hasVisibleRoot(BaseClassList *bcl) QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore) QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore) { { static bool caseSenseNames = Config_getBool("CASE_SENSE_NAMES"); static bool caseSenseNames = Config_getBool("CASE_SENSE_NAMES"); static bool allowUnicodeNames = Config_getBool("ALLOW_UNICODE_NAMES"); static GrowBuf growBuf; static GrowBuf growBuf; growBuf.clear(); growBuf.clear(); char c; char c; Loading Loading @@ -5179,8 +5180,49 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor default: default: if (c<0) if (c<0) { { static char map[] = "0123456789ABCDEF"; char ids[5]; char ids[5]; const unsigned char uc = (unsigned char)c; bool doEscape = TRUE; if (allowUnicodeNames && uc <= 0xf7) { const char* pt = p; ids[ 0 ] = c; int l = 0; if ((uc&0xE0)==0xC0) { l=2; // 11xx.xxxx: >=2 byte character } if ((uc&0xF0)==0xE0) { l=3; // 111x.xxxx: >=3 byte character } if ((uc&0xF8)==0xF0) { l=4; // 1111.xxxx: >=4 byte character } doEscape = l==0; for (int m=1; m<l && !doEscape; ++m) { unsigned char ct = (unsigned char)*pt; if (ct==0 || (ct&0xC0)!=0x80) // invalid unicode character { doEscape=TRUE; } else { ids[ m ] = *pt++; } } if ( !doEscape ) // got a valid unicode character { ids[ l ] = 0; growBuf.addStr( ids ); p += l - 1; } } if (doEscape) // not a valid unicode char or escaping needed { static char map[] = "0123456789ABCDEF"; unsigned char id = (unsigned char)c; unsigned char id = (unsigned char)c; ids[0]='_'; ids[0]='_'; ids[1]='x'; ids[1]='x'; Loading @@ -5189,6 +5231,7 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor ids[4]=0; ids[4]=0; growBuf.addStr(ids); growBuf.addStr(ids); } } } else if (caseSenseNames || !isupper(c)) else if (caseSenseNames || !isupper(c)) { { growBuf.addChar(c); growBuf.addChar(c); Loading Loading @@ -6922,14 +6965,25 @@ const char *writeUtf8Char(FTextStream &t,const char *s) t << c; t << c; if (c<0) // multibyte character if (c<0) // multibyte character { { t << *s++; if (((uchar)c&0xE0)==0xC0) if (((uchar)c&0xE0)==0xE0) { t << *s++; // 11xx.xxxx: >=2 byte character } if (((uchar)c&0xF0)==0xE0) { { t << *s++; // 111x.xxxx: >=3 byte character t << *s++; // 111x.xxxx: >=3 byte character } } if (((uchar)c&0xF0)==0xF0) if (((uchar)c&0xF8)==0xF0) { { t << *s++; // 1111.xxxx: 4 byte character t << *s++; // 1111.xxxx: >=4 byte character } if (((uchar)c&0xFC)==0xF8) { t << *s++; // 1111.1xxx: >=5 byte character } if (((uchar)c&0xFE)==0xFC) { t << *s++; // 1111.1xxx: 6 byte character } } } } return s; return s; Loading @@ -6942,14 +6996,25 @@ int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos) char c = utf8Str[startPos]; char c = utf8Str[startPos]; if (c<0) // multibyte utf-8 character if (c<0) // multibyte utf-8 character { { bytes++; // 1xxx.xxxx: >=2 byte character if (((uchar)c&0xE0)==0xC0) if (((uchar)c&0xE0)==0xE0) { bytes++; // 11xx.xxxx: >=2 byte character } if (((uchar)c&0xF0)==0xE0) { { bytes++; // 111x.xxxx: >=3 byte character bytes++; // 111x.xxxx: >=3 byte character } } if (((uchar)c&0xF0)==0xF0) if (((uchar)c&0xF8)==0xF0) { bytes++; // 1111.xxxx: >=4 byte character } if (((uchar)c&0xFC)==0xF8) { bytes++; // 1111.1xxx: >=5 byte character } if (((uchar)c&0xFE)==0xFC) { { bytes++; // 1111.xxxx: 4 byte character bytes++; // 1111.1xxx: 6 byte character } } } } else if (c=='&') // skip over character entities else if (c=='&') // skip over character entities Loading Loading
src/config.xml +10 −0 Original line number Original line Diff line number Diff line Loading @@ -276,6 +276,16 @@ Go to the <a href="commands.html">next</a> section or return to the Enabling this option can be useful when feeding doxygen a huge amount of source Enabling this option can be useful when feeding doxygen a huge amount of source files, where putting all generated files in the same directory would otherwise files, where putting all generated files in the same directory would otherwise causes performance problems for the file system. causes performance problems for the file system. ]]> </docs> </option> <option type='bool' id='ALLOW_UNICODE_NAMES' defval='0'> <docs> <![CDATA[ If the \c ALLOW_UNICODE_NAMES tag is set to \c YES, doxygen will allow non-ascii characters to appear in the names of generated files. If set to \c NO, non-ASCII characters will be escaped, for example _xE3_x81_x84 will be used for Unicode U+3044. ]]> ]]> </docs> </docs> </option> </option> Loading
src/util.cpp +81 −16 Original line number Original line Diff line number Diff line Loading @@ -5144,6 +5144,7 @@ bool hasVisibleRoot(BaseClassList *bcl) QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore) QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore) { { static bool caseSenseNames = Config_getBool("CASE_SENSE_NAMES"); static bool caseSenseNames = Config_getBool("CASE_SENSE_NAMES"); static bool allowUnicodeNames = Config_getBool("ALLOW_UNICODE_NAMES"); static GrowBuf growBuf; static GrowBuf growBuf; growBuf.clear(); growBuf.clear(); char c; char c; Loading Loading @@ -5179,8 +5180,49 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor default: default: if (c<0) if (c<0) { { static char map[] = "0123456789ABCDEF"; char ids[5]; char ids[5]; const unsigned char uc = (unsigned char)c; bool doEscape = TRUE; if (allowUnicodeNames && uc <= 0xf7) { const char* pt = p; ids[ 0 ] = c; int l = 0; if ((uc&0xE0)==0xC0) { l=2; // 11xx.xxxx: >=2 byte character } if ((uc&0xF0)==0xE0) { l=3; // 111x.xxxx: >=3 byte character } if ((uc&0xF8)==0xF0) { l=4; // 1111.xxxx: >=4 byte character } doEscape = l==0; for (int m=1; m<l && !doEscape; ++m) { unsigned char ct = (unsigned char)*pt; if (ct==0 || (ct&0xC0)!=0x80) // invalid unicode character { doEscape=TRUE; } else { ids[ m ] = *pt++; } } if ( !doEscape ) // got a valid unicode character { ids[ l ] = 0; growBuf.addStr( ids ); p += l - 1; } } if (doEscape) // not a valid unicode char or escaping needed { static char map[] = "0123456789ABCDEF"; unsigned char id = (unsigned char)c; unsigned char id = (unsigned char)c; ids[0]='_'; ids[0]='_'; ids[1]='x'; ids[1]='x'; Loading @@ -5189,6 +5231,7 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor ids[4]=0; ids[4]=0; growBuf.addStr(ids); growBuf.addStr(ids); } } } else if (caseSenseNames || !isupper(c)) else if (caseSenseNames || !isupper(c)) { { growBuf.addChar(c); growBuf.addChar(c); Loading Loading @@ -6922,14 +6965,25 @@ const char *writeUtf8Char(FTextStream &t,const char *s) t << c; t << c; if (c<0) // multibyte character if (c<0) // multibyte character { { t << *s++; if (((uchar)c&0xE0)==0xC0) if (((uchar)c&0xE0)==0xE0) { t << *s++; // 11xx.xxxx: >=2 byte character } if (((uchar)c&0xF0)==0xE0) { { t << *s++; // 111x.xxxx: >=3 byte character t << *s++; // 111x.xxxx: >=3 byte character } } if (((uchar)c&0xF0)==0xF0) if (((uchar)c&0xF8)==0xF0) { { t << *s++; // 1111.xxxx: 4 byte character t << *s++; // 1111.xxxx: >=4 byte character } if (((uchar)c&0xFC)==0xF8) { t << *s++; // 1111.1xxx: >=5 byte character } if (((uchar)c&0xFE)==0xFC) { t << *s++; // 1111.1xxx: 6 byte character } } } } return s; return s; Loading @@ -6942,14 +6996,25 @@ int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos) char c = utf8Str[startPos]; char c = utf8Str[startPos]; if (c<0) // multibyte utf-8 character if (c<0) // multibyte utf-8 character { { bytes++; // 1xxx.xxxx: >=2 byte character if (((uchar)c&0xE0)==0xC0) if (((uchar)c&0xE0)==0xE0) { bytes++; // 11xx.xxxx: >=2 byte character } if (((uchar)c&0xF0)==0xE0) { { bytes++; // 111x.xxxx: >=3 byte character bytes++; // 111x.xxxx: >=3 byte character } } if (((uchar)c&0xF0)==0xF0) if (((uchar)c&0xF8)==0xF0) { bytes++; // 1111.xxxx: >=4 byte character } if (((uchar)c&0xFC)==0xF8) { bytes++; // 1111.1xxx: >=5 byte character } if (((uchar)c&0xFE)==0xFC) { { bytes++; // 1111.xxxx: 4 byte character bytes++; // 1111.1xxx: 6 byte character } } } } else if (c=='&') // skip over character entities else if (c=='&') // skip over character entities Loading