mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-30 17:24:08 +00:00
fix id replacement should consider the javascript reference also
This commit is contained in:
parent
fcf0fec3ff
commit
ad7242deae
15
mdx.cc
15
mdx.cc
|
@ -200,6 +200,7 @@ struct MdxRegex
|
||||||
wordCrossLink( "([\\s\"']href\\s*=)\\s*([\"'])entry://([^>#]*?)((?:#[^>]*?)?)\\2",
|
wordCrossLink( "([\\s\"']href\\s*=)\\s*([\"'])entry://([^>#]*?)((?:#[^>]*?)?)\\2",
|
||||||
QRegularExpression::CaseInsensitiveOption ),
|
QRegularExpression::CaseInsensitiveOption ),
|
||||||
anchorIdRe( "([\\s\"'](?:name|id)\\s*=)\\s*([\"'])\\s*(?=\\S)", QRegularExpression::CaseInsensitiveOption ),
|
anchorIdRe( "([\\s\"'](?:name|id)\\s*=)\\s*([\"'])\\s*(?=\\S)", QRegularExpression::CaseInsensitiveOption ),
|
||||||
|
anchorIdReWord( "([\\s\"'](?:name|id)\\s*=)\\s*([\"'])\\s*(?=\\S)([^\"]*)", QRegularExpression::CaseInsensitiveOption ),
|
||||||
anchorIdRe2( "([\\s\"'](?:name|id)\\s*=)\\s*(?=[^\"'])([^\\s\">]+)", QRegularExpression::CaseInsensitiveOption ),
|
anchorIdRe2( "([\\s\"'](?:name|id)\\s*=)\\s*(?=[^\"'])([^\\s\">]+)", QRegularExpression::CaseInsensitiveOption ),
|
||||||
anchorLinkRe( "([\\s\"']href\\s*=\\s*[\"'])entry://#", QRegularExpression::CaseInsensitiveOption ),
|
anchorLinkRe( "([\\s\"']href\\s*=\\s*[\"'])entry://#", QRegularExpression::CaseInsensitiveOption ),
|
||||||
audioRe( "([\\s\"']href\\s*=)\\s*([\"'])sound://([^\">]+)\\2",
|
audioRe( "([\\s\"']href\\s*=)\\s*([\"'])sound://([^\">]+)\\2",
|
||||||
|
@ -224,6 +225,7 @@ struct MdxRegex
|
||||||
QRegularExpression allLinksRe;
|
QRegularExpression allLinksRe;
|
||||||
QRegularExpression wordCrossLink;
|
QRegularExpression wordCrossLink;
|
||||||
QRegularExpression anchorIdRe;
|
QRegularExpression anchorIdRe;
|
||||||
|
QRegularExpression anchorIdReWord;
|
||||||
QRegularExpression anchorIdRe2;
|
QRegularExpression anchorIdRe2;
|
||||||
QRegularExpression anchorLinkRe;
|
QRegularExpression anchorLinkRe;
|
||||||
QRegularExpression audioRe;
|
QRegularExpression audioRe;
|
||||||
|
@ -1079,6 +1081,7 @@ QString & MdxDictionary::filterResource( QString const & articleId, QString & ar
|
||||||
QString articleNewText;
|
QString articleNewText;
|
||||||
int linkPos = 0;
|
int linkPos = 0;
|
||||||
QRegularExpressionMatchIterator it = mdxRx.allLinksRe.globalMatch( article );
|
QRegularExpressionMatchIterator it = mdxRx.allLinksRe.globalMatch( article );
|
||||||
|
QMap<QString,QString> idMap;
|
||||||
while( it.hasNext() )
|
while( it.hasNext() )
|
||||||
{
|
{
|
||||||
QRegularExpressionMatch allLinksMatch = it.next();
|
QRegularExpressionMatch allLinksMatch = it.next();
|
||||||
|
@ -1098,6 +1101,11 @@ QString & MdxDictionary::filterResource( QString const & articleId, QString & ar
|
||||||
QRegularExpressionMatch match = mdxRx.anchorIdRe.match( linkTxt );
|
QRegularExpressionMatch match = mdxRx.anchorIdRe.match( linkTxt );
|
||||||
if( match.hasMatch() )
|
if( match.hasMatch() )
|
||||||
{
|
{
|
||||||
|
auto wordMatch = mdxRx.anchorIdReWord.match( linkTxt );
|
||||||
|
if( wordMatch.hasMatch() )
|
||||||
|
{
|
||||||
|
idMap.insert( wordMatch.captured( 3 ), uniquePrefix + wordMatch.captured( 3 ) );
|
||||||
|
}
|
||||||
QString newText = match.captured( 1 ) + match.captured( 2 ) + uniquePrefix;
|
QString newText = match.captured( 1 ) + match.captured( 2 ) + uniquePrefix;
|
||||||
newLink = linkTxt.replace( match.capturedStart(), match.capturedLength(), newText );
|
newLink = linkTxt.replace( match.capturedStart(), match.capturedLength(), newText );
|
||||||
}
|
}
|
||||||
|
@ -1206,6 +1214,13 @@ QString & MdxDictionary::filterResource( QString const & articleId, QString & ar
|
||||||
article = articleNewText;
|
article = articleNewText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//some built-in javascript may reference this id. replace "idxxx" with "unique_idxxx"
|
||||||
|
foreach ( const auto& key, idMap.keys() )
|
||||||
|
{
|
||||||
|
const auto& value = idMap[ key ];
|
||||||
|
article.replace("\""+key+"\"","\""+value+"\"");
|
||||||
|
}
|
||||||
|
|
||||||
return article;
|
return article;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue