Xdxf: Fix empty tags conversion

This commit is contained in:
Abs62 2017-04-30 15:33:45 +03:00
parent ab7df09bee
commit ab6b1f62ef

View file

@ -107,6 +107,10 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
// We build a dom representation of the given xml, then do some transforms // We build a dom representation of the given xml, then do some transforms
QDomDocument dd; QDomDocument dd;
// Empty element which will be removed after
// We will insert it to other empty elements to avoid output ones in <xxx/> form
QDomElement fakeElement = dd.createElement( "b" );
QString errorStr; QString errorStr;
int errorLine, errorColumn; int errorLine, errorColumn;
@ -136,6 +140,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
if( isLogicalFormat ) if( isLogicalFormat )
el.setAttribute( "class", "xdxf_ex" ); el.setAttribute( "class", "xdxf_ex" );
@ -149,6 +156,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
el.setAttribute( "class", "xdxf_ex_markd" ); el.setAttribute( "class", "xdxf_ex_markd" );
} }
@ -162,6 +172,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
if( type == STARDICT ) if( type == STARDICT )
{ {
el.setTagName( "span" ); el.setTagName( "span" );
@ -279,6 +292,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
el.setAttribute( "class", "xdxf_opt" ); el.setAttribute( "class", "xdxf_opt" );
} }
@ -289,6 +305,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "a" ); el.setTagName( "a" );
el.setAttribute( "href", QString( "bword:" ) + el.text() ); el.setAttribute( "href", QString( "bword:" ) + el.text() );
el.setAttribute( "class", "xdxf_kref" ); el.setAttribute( "class", "xdxf_kref" );
@ -310,6 +329,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
QString ref = el.attribute( "href" ); QString ref = el.attribute( "href" );
if( ref.isEmpty() ) if( ref.isEmpty() )
ref = el.text(); ref = el.text();
@ -328,6 +350,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
el.setAttribute( "class", "xdxf_abbr" ); el.setAttribute( "class", "xdxf_abbr" );
if( type == XDXF && pAbrv != NULL ) if( type == XDXF && pAbrv != NULL )
@ -379,6 +404,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
el.setAttribute( "class", "xdxf_dtrn" ); el.setAttribute( "class", "xdxf_dtrn" );
} }
@ -389,6 +417,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
if ( el.hasAttribute( "c" ) ) if ( el.hasAttribute( "c" ) )
@ -406,6 +437,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
if( isLogicalFormat ) if( isLogicalFormat )
el.setAttribute( "class", "xdxf_co" ); el.setAttribute( "class", "xdxf_co" );
@ -419,6 +453,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
if( isLogicalFormat ) if( isLogicalFormat )
el.setAttribute( "class", "xdxf_gr" ); el.setAttribute( "class", "xdxf_gr" );
@ -430,6 +467,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
if( isLogicalFormat ) if( isLogicalFormat )
el.setAttribute( "class", "xdxf_gr" ); el.setAttribute( "class", "xdxf_gr" );
@ -441,6 +481,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
if( isLogicalFormat ) if( isLogicalFormat )
el.setAttribute( "class", "xdxf_gr" ); el.setAttribute( "class", "xdxf_gr" );
@ -455,6 +498,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
el.setTagName( "span" ); el.setTagName( "span" );
if( isLogicalFormat ) if( isLogicalFormat )
el.setAttribute( "class", "xdxf_tr" ); el.setAttribute( "class", "xdxf_tr" );
@ -472,6 +518,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( i ).toElement(); QDomElement el = nodes.at( i ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
if ( el.hasAttribute( "src" ) ) if ( el.hasAttribute( "src" ) )
{ {
fixLink( el, dictPtr->getId(), "src" ); fixLink( el, dictPtr->getId(), "src" );
@ -494,6 +543,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
{ {
QDomElement el = nodes.at( 0 ).toElement(); QDomElement el = nodes.at( 0 ).toElement();
if( el.text().isEmpty() && el.childNodes().isEmpty() )
el.appendChild( fakeElement );
// if( type == XDXF && dictPtr != NULL && !el.hasAttribute( "start" ) ) // if( type == XDXF && dictPtr != NULL && !el.hasAttribute( "start" ) )
if( dictPtr != NULL && !el.hasAttribute( "start" ) ) if( dictPtr != NULL && !el.hasAttribute( "start" ) )
{ {
@ -588,9 +640,9 @@ string convert( string const & in, DICT_TYPE type, map < string, string > const
el.setAttribute( "class", "xdxf_rref" ); el.setAttribute( "class", "xdxf_rref" );
} }
// DPRINTF( "Result>>>>>>>>>>: %s\n\n\n", dd.toByteArray().data() ); // GD_DPRINTF( "Result>>>>>>>>>>: %s\n\n\n", dd.toByteArray( 0 ).data() );
return dd.toString().remove('\n').remove( QRegExp( "<(b|i)/>" ) ).toUtf8().data(); return dd.toString( 0 ).remove('\n').remove( QRegExp( "<(b|i)/>" ) ).toUtf8().data();
} }
} }