View Issue Details

IDProjectCategoryView StatusLast Update
0015584ScribusLanguage Toolspublic2019-03-01 17:13
Reporterwilliam Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Product Version1.5.5.svn 
Summary0015584: [patch] Warn when a hyphenation dictionary is missing
DescriptionI had two documents, both in English, and Scribus was hyphenating one but not the other.
I put in debug code, and apparently one document was British English and the other was US English.
Scribus found the British English hyphenation dictionary hyph_en_GB.dic in its resources, but it didn't have a corresponding US English hyphenation dictionary.
I have Fedora 28 x86_64 Linux, and I installed the 'hyphen-en' package, which created /usr/share/hyphen/hyph_en_US.dic, and then Scribus found it and hyphenated my document.
The Fedora/RedHat/CentOS notes for Scribus should probably mention installing the hyphen-en package.
The hyphen-en package creates a lot of symbolic links in /usr/share/hyphen that all point to hyph_en_US.dic, so maybe Scribus can use its en_GB dictionary for other English regions as well.
I have attached a patch to hyphenator.cpp that shows a warning on the first attempt to reference a missing hyphenation dictionary.
Probably LanguageManager should have a flag for languages that are ok without hyphenation dictionaries so this warning does not get annoying.
I have Scribus 1.5.5.svn that I built from source. The product version pull down in mantis only goes up to 1.5.4.svn.
TagsNo tags attached.
PatchYes

Activities

william

2019-03-01 00:02

updater  

scribus-hyphenator-warning-20190228-233546.pat (1,467 bytes)   
*** scribus/hyphenator.cpp	2019-02-28 05:09:51.937524116 +0000
--- /var/tmp/scribus15/scribus/hyphenator.cpp	2019-02-28 23:28:35.344995014 +0000
*************** Hyphenator::~Hyphenator()
*** 58,65 ****
  
  bool Hyphenator::loadDict(const QString& name)
  {
! 	if (LanguageManager::instance()->getHyphFilename(name).isEmpty())
  		return false;
  		
  	if (m_language != name)
  	{
--- 58,73 ----
  
  bool Hyphenator::loadDict(const QString& name)
  {
! 	static QStringList didWarning;
! 	if (LanguageManager::instance()->getHyphFilename(name).isEmpty()) {
! 		if (!didWarning.contains(name)) {
! 			didWarning.append(name);
! 			QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
! 			ScMessageBox::warning(nullptr, CommonStrings::trWarning, tr("Hyphenation is not available for language '%1'.").arg(name));
! 			QApplication::restoreOverrideCursor();
! 		}
  		return false;
+ 	}
  		
  	if (m_language != name)
  	{
*************** bool Hyphenator::loadDict(const QString&
*** 78,83 ****
--- 86,99 ----
  			return true;
  		}
  		m_hdict = nullptr;
+ 		if (!didWarning.contains(name)) {
+ 			didWarning.append(name);
+ 			QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
+ 			ScMessageBox::warning(nullptr, CommonStrings::trWarning,
+ 				tr("Hyphenation file '%1' for language '%2' not found.")
+ 					.arg(LanguageManager::instance()->getHyphFilename(name), name));
+ 			QApplication::restoreOverrideCursor();
+ 		}
  		return false;
  	}
  

ale

2019-03-01 08:32

manager   ~0045941

a/ i've updated the version... 1.5.5svn is available : - )

b/ i upload a diff so that the patch can be seen by expanding it in mantis

c/ i like the idea of warning the user when the hyphenation does not happen because of a missing dictionary... the patch is very simple, but i don't really like that a pop is shown the first time it's used.

d/ i wonder if this should not go into the preflight verifier...

e/ ... and/or below the language select box in the PP

what do you think?
scribus-hyphenator-warning-20190228-233546.diff (1,467 bytes)   
*** scribus/hyphenator.cpp	2019-02-28 05:09:51.937524116 +0000
--- /var/tmp/scribus15/scribus/hyphenator.cpp	2019-02-28 23:28:35.344995014 +0000
*************** Hyphenator::~Hyphenator()
*** 58,65 ****
  
  bool Hyphenator::loadDict(const QString& name)
  {
! 	if (LanguageManager::instance()->getHyphFilename(name).isEmpty())
  		return false;
  		
  	if (m_language != name)
  	{
--- 58,73 ----
  
  bool Hyphenator::loadDict(const QString& name)
  {
! 	static QStringList didWarning;
! 	if (LanguageManager::instance()->getHyphFilename(name).isEmpty()) {
! 		if (!didWarning.contains(name)) {
! 			didWarning.append(name);
! 			QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
! 			ScMessageBox::warning(nullptr, CommonStrings::trWarning, tr("Hyphenation is not available for language '%1'.").arg(name));
! 			QApplication::restoreOverrideCursor();
! 		}
  		return false;
+ 	}
  		
  	if (m_language != name)
  	{
*************** bool Hyphenator::loadDict(const QString&
*** 78,83 ****
--- 86,99 ----
  			return true;
  		}
  		m_hdict = nullptr;
+ 		if (!didWarning.contains(name)) {
+ 			didWarning.append(name);
+ 			QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
+ 			ScMessageBox::warning(nullptr, CommonStrings::trWarning,
+ 				tr("Hyphenation file '%1' for language '%2' not found.")
+ 					.arg(LanguageManager::instance()->getHyphFilename(name), name));
+ 			QApplication::restoreOverrideCursor();
+ 		}
  		return false;
  	}
  

william

2019-03-01 15:22

updater   ~0045943

Thanks.
I think that the language selection box is better than the preflight verifier because if you are trying to figure out why a document isn't hyphenating, you might think to double-check the language, but you might not try the preflight verifier until immediately before trying to produce a PDF. Also, each page can have multiple text frames; each text frame can have text with multiple styles; each style can have a different language, so the preflight verifier could potentially show a large number of warnings.

ale

2019-03-01 17:13

manager   ~0045944

it's possible that both are needed.
(as an example for the case that you get a file from somebody who had the hyphenation, you edit and then produce a pdf)

for the number of warnings:
- you're right
- you can turn off warnings in the settings
- i think that if you pick a language you should have its hyphenation installed
- (what to do for languages that do not have (yet) an hyphenation?)

Issue History

Date Modified Username Field Change
2019-03-01 00:02 william New Issue
2019-03-01 00:02 william File Added: scribus-hyphenator-warning-20190228-233546.pat
2019-03-01 08:29 ale Product Version 1.5.4.svn => 1.5.5.svn
2019-03-01 08:29 ale Description Updated
2019-03-01 08:32 ale File Added: scribus-hyphenator-warning-20190228-233546.diff
2019-03-01 08:32 ale Note Added: 0045941
2019-03-01 15:22 william Note Added: 0045943
2019-03-01 17:13 ale Note Added: 0045944