summaryrefslogtreecommitdiffstats
path: root/kbabel/datatools/regexp
diff options
context:
space:
mode:
Diffstat (limited to 'kbabel/datatools/regexp')
-rw-r--r--kbabel/datatools/regexp/Makefile.am21
-rw-r--r--kbabel/datatools/regexp/kbabel_regexptool.desktop92
-rw-r--r--kbabel/datatools/regexp/main.cc181
-rw-r--r--kbabel/datatools/regexp/main.h73
-rw-r--r--kbabel/datatools/regexp/regexplist.xml303
5 files changed, 670 insertions, 0 deletions
diff --git a/kbabel/datatools/regexp/Makefile.am b/kbabel/datatools/regexp/Makefile.am
new file mode 100644
index 00000000..e727ca25
--- /dev/null
+++ b/kbabel/datatools/regexp/Makefile.am
@@ -0,0 +1,21 @@
+
+INCLUDES = -I$(srcdir)/../../common -I../../common $(all_includes)
+kbabel_regexptool_la_LIBADD = $(LIB_KIO) ../../common/libkbabelcommon.la
+
+####### Files
+
+kde_module_LTLIBRARIES = kbabel_regexptool.la
+
+kbabel_regexptool_la_SOURCES = main.cc
+
+kbabel_regexptool_la_LDFLAGS = $(all_libraries) -avoid-version -module -no-undefined
+
+noinst_HEADERS = main.h
+
+kbabel_regexptool_la_METASOURCES = AUTO
+
+service_DATA = kbabel_regexptool.desktop
+servicedir = $(kde_servicesdir)
+
+regexp_DATA = regexplist.xml
+regexpdir = $(kde_datadir)/kbabel
diff --git a/kbabel/datatools/regexp/kbabel_regexptool.desktop b/kbabel/datatools/regexp/kbabel_regexptool.desktop
new file mode 100644
index 00000000..dbd84491
--- /dev/null
+++ b/kbabel/datatools/regexp/kbabel_regexptool.desktop
@@ -0,0 +1,92 @@
+[Desktop Entry]
+Name=Catalan Grammar
+Name[br]=Yezhadur gatalaneg
+Name[ca]=Gramàtica catalana
+Name[cs]=Katalánská gramatika
+Name[da]=Katalansk grammatik
+Name[de]=Katalanische Grammatik
+Name[el]=Γραμματική καταλανικών
+Name[eo]=Kataluna Gramatiko
+Name[es]=Gramática catalana
+Name[et]=Katalaani grammatika
+Name[eu]=Katalanaren gramatika
+Name[fa]=دستور زبان کاتالان
+Name[fi]=Katalaanin kielioppi
+Name[fr]=Grammaire du catalan
+Name[ga]=Gramadach na Catalóinise
+Name[gl]=Gramática catalá
+Name[he]=תחברי קטאלני
+Name[hu]=Katalán nyelvtan
+Name[is]=Katalónsk málfræði
+Name[it]=Grammatica catalana
+Name[ja]=カタロニア文節
+Name[ka]=კატალანური გრამატიკა
+Name[kk]=Каталон грамматикасы
+Name[lt]=Katalonų gramatika
+Name[nb]=Katalansk grammatikk
+Name[nds]=Katalaansch Grammatik
+Name[ne]=क्याटालान ब्याकरण
+Name[nl]=Catalaanse grammatica
+Name[nn]=Katalansk grammatikk
+Name[pa]=ਕਾਟਾਲਾਨ ਗਰਾਮਰ
+Name[pl]=Gramatyka katalońska
+Name[pt]=Gramática Catalã
+Name[pt_BR]=Gramática Catalã
+Name[ru]=Каталонская гамматика
+Name[sk]=Katalánska gramatika
+Name[sl]=katalonska slovnica
+Name[sr]=Каталонијска граматика
+Name[sr@Latn]=Katalonijska gramatika
+Name[sv]=Katalansk grammatik
+Name[tr]=Katalan Dil Bilgisi
+Name[uk]=Каталонська граматика
+Name[zh_CN]=Catalan 语法
+Name[zh_TW]=Catalan 文法
+ValidationString=external script checking
+X-KDE-Library=kbabel_regexptool
+Type=Service
+Commands=validate
+Comment=Check Translated Messages with a set of Regular Expressions
+Comment[bg]=Проверка на преведените съобщения с регулярни изрази
+Comment[ca]=Comprova els missatges traduïts amb un conjunt d'expressions regulars
+Comment[cs]=Zkontrolovat přeložené zprávy pomocí sady reg. výrazů
+Comment[da]=Tjek oversat besked med et sæt regulære udtryk
+Comment[de]=Überprüfung übersetzter Meldungen mit einem Satz regulärer Ausdrücke
+Comment[el]=Έλεγχος μεταφρασμένων μηνυμάτων με ένα σύνολο κανονικών εκφράσεων
+Comment[eo]=Kontroli tradukitajn mesaĝojn per aro da regulesprimoj
+Comment[es]=Comprobar mensajes traducidos mediante un juego de expresiones regulares
+Comment[et]=Tõlgitud teate kontroll regulaaravaldistega
+Comment[eu]=Egiaztatu itzulitako mezuak espresio erregular sorta batekin
+Comment[fa]=بررسی پیامهای ترجمه‌شده توسط مجموعه‌ای از عبارتهای منظم
+Comment[fi]=Tarkista käännetyt viestit säännöllisten lausekkeiden avulla
+Comment[fr]=Vérifie les messages traduits avec un jeu d'expressions rationnelles
+Comment[gl]=Verificación das mensaxes traducidas cun conxunto de expresións regulares
+Comment[hu]=A lefordított üzenetek ellenőrzése reguláris kifejezésekkel
+Comment[is]=Athuga þýdd skilaboð með reglulegum segðum
+Comment[it]=Controlla i messaggi tradotti con un insieme di espressioni regolari
+Comment[ja]=正規表現を用いて翻訳メッセージを検証
+Comment[ka]=რეგულარული გამოსახულებების შეცველი ნათარგმნი შეტყობინებების შემოწმება
+Comment[kk]=Аударылған жазуларды үлгі өрнегімен тексеру
+Comment[lt]=Tikrinti išverstus pranešimus panaudojant įprastųjų išraiškų rinkinį
+Comment[nb]=Sjekk oversatte strenger med et sett regulære uttrykk
+Comment[nds]=Översett Mellen mit en Sett vun regulere Utdrück pröven
+Comment[ne]=नियमित अभिव्यक्तिका सेट भएका अनुबाद गरिएका सन्देशको जाँच गर्नुहोस्
+Comment[nl]=Vertaalde tekst controleren met behulp van reguliere expressies
+Comment[nn]=Sjekk omsette strengar med eit sett regulære uttrykk
+Comment[pl]=Sprawdzenie przetłumaczonych komunikatów za pomocą zestawu wyrażeń regularnych
+Comment[pt]=Verificação das Mensagens Traduzidas com um Conjunto de Expressões Regulares
+Comment[pt_BR]=Verificação das Mensagens Traduzidas com um Conjunto de Expressões Regulares
+Comment[ru]=Проверить переведенных сообщения по регулярному выражению
+Comment[sk]=Kontrola preložených textov pomocou sady regulárnych výrazov
+Comment[sl]=Preveri prevedena sporočila z naborom regularnih izrazov
+Comment[sr]=Провери преведене поруке скупом регуларних израза
+Comment[sr@Latn]=Proveri prevedene poruke skupom regularnih izraza
+Comment[sv]=Kontrollera översatta meddelanden med en uppsättning reguljära uttryck
+Comment[tr]=Bir Düzgün Anlatım grubu ile birlikte çevrilen mesajları denetle
+Comment[uk]=Перевірити перекладені фрази за допомогою набору формальних виразів
+Comment[zh_CN]=用一组正则表达式检查已翻译消息
+Comment[zh_TW]=利用正規表示式檢查已翻譯訊息
+ServiceTypes=KDataTool,KBabelValidator
+DataType=CatalogItem
+DataMimeTypes=application/x-kbabel-catalogitem
+ReadOnly=true
diff --git a/kbabel/datatools/regexp/main.cc b/kbabel/datatools/regexp/main.cc
new file mode 100644
index 00000000..4464170d
--- /dev/null
+++ b/kbabel/datatools/regexp/main.cc
@@ -0,0 +1,181 @@
+/* Copyright (C) 2005 Albert Cervera i Areny <albertca at hotpop dot com>
+
+ Based on Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
+ 2002 Stanislav Visnovsky <visnovsky@kde.org>
+ 2003 Dwayne Bailey <dwayne@translate.org.za>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <resources.h>
+#include "catalog.h"
+#include "catalogitem.h"
+#include "catalogsettings.h"
+#include "main.h"
+#include <math.h>
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qdom.h>
+#include <qstringlist.h>
+#include <qregexp.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kgenericfactory.h>
+#include <klibloader.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+/***************************************************
+ *
+ * Factory
+ *
+ ***************************************************/
+
+K_EXPORT_COMPONENT_FACTORY( kbabel_regexptool, KGenericFactory<RegExpTool> ( "kbabeldatatool" ) )
+
+using namespace KBabel;
+
+RegExpTool::RegExpTool( QObject* parent, const char* name, const QStringList & )
+ : KDataTool( parent, name )
+{
+ i18n("which check found errors","translation has inconsistent length");
+ loadExpressions();
+ if ( ! _error.isNull() )
+ KMessageBox::error( (QWidget*)parent, i18n( "Error loading data (%1)" ).arg( _error ) );
+}
+
+bool RegExpTool::run( const QString& command, void* data, const QString& datatype, const QString& mimetype )
+{
+ if ( command != "validate" )
+ {
+ kdDebug(KBABEL) << "RegExpTool only accepts the 'validate' command" << endl;
+ kdDebug(KBABEL) << " The command " << command << " is not accepted" << endl;
+ return false;
+ }
+ // Check wether we can accept the data
+ if ( datatype != "CatalogItem" )
+ {
+ kdDebug(KBABEL) << "RegExpTool only accepts the CatalogItem datatype" << endl;
+ return false;
+ }
+ if ( mimetype != "application/x-kbabel-catalogitem" )
+ {
+ kdDebug(KBABEL) << "RegExpTool only accepts the 'application/x-kbabel-catalogitem' mimetype" << endl;
+ return false;
+ }
+
+ bool hasError = false;
+ if( command == "validate" )
+ {
+ CatalogItem* item = (CatalogItem*)(data);
+
+ if(!item->isUntranslated()) {
+ ExpressionList::Iterator it( _list.begin() );
+ ExpressionList::Iterator end( _list.end() );
+ QStringList msgs = item->msgstr();
+ QStringList results;
+ for ( ; it != end; ++it ) {
+ results.clear();
+ results = msgs.grep( (*it).regExp() );
+ if ( results.size() > 0 ) {
+ hasError = true;
+ break;
+ }
+ }
+ }
+ if(hasError) {
+ item->appendError( "regexp" );
+ } else {
+ item->removeError( "regexp" );
+ }
+ }
+ return !hasError;
+}
+
+
+void RegExpTool::loadExpressions()
+{
+ // TODO: Change file path
+ QFile file( QDir::homeDirPath() + "/.kde/share/apps/kbabel/regexplist.xml" );
+ QDomDocument doc;
+
+ if ( ! file.open( IO_ReadOnly ) ) {
+ kdDebug() << "File not found" << endl;
+ _error = i18n( "File not found" );
+ return;
+ }
+ if ( ! doc.setContent( &file ) ) {
+ kdDebug() << "Could not set content of xml file" << endl;
+ _error = i18n( "The file is not a XML" );
+ return;
+ }
+ file.close();
+
+ QDomElement docElem = doc.documentElement();
+ QDomNode n = docElem.firstChild();
+ while( !n.isNull() ) {
+ QDomElement e = n.toElement();
+ if( !e.isNull() )
+ elementToExpression( e );
+ if ( ! _error.isNull() )
+ break;
+ n = n.nextSibling();
+ }
+}
+
+void RegExpTool::elementToExpression( const QDomElement& e )
+{
+ QString name;
+ QString exp;
+ bool cs = false; //Expressions are case insensitive by default
+
+ if ( e.tagName().compare( "item" ) != 0 ) {
+ _error = i18n( "Expected tag 'item'" );
+ return;
+ }
+
+ QDomNode n = e.firstChild();
+ if ( n.isNull() ) {
+ _error = i18n( "First child of 'item' is not a node" );
+ return;
+ }
+
+ QDomElement el = n.toElement();
+ if ( el.isNull() || el.tagName().compare( "name" ) != 0 ) {
+ _error = i18n( "Expected tag 'name'" );
+ return;
+ }
+ name = el.text();
+
+ n = n.nextSibling();
+ el = n.toElement();
+ if ( el.isNull() || el.tagName().compare( "exp" ) != 0 ) {
+ _error = i18n( "Expected tag 'exp'" );
+ return;
+ }
+ exp = el.text();
+
+ n = n.nextSibling();
+ el = n.toElement();
+ if ( ! el.isNull() )
+ cs = true;
+
+ kdDebug(KBABEL) << "RegExpTool: Adding expression: " << name << endl;
+ _list.append( Expression( name, QRegExp( exp, cs ) ) );
+}
+
+#include "main.moc"
diff --git a/kbabel/datatools/regexp/main.h b/kbabel/datatools/regexp/main.h
new file mode 100644
index 00000000..690c5769
--- /dev/null
+++ b/kbabel/datatools/regexp/main.h
@@ -0,0 +1,73 @@
+/*
+ Copyright (C) 2005 Albert Cervera i Areny <albertca at hotpop dot com>
+
+ Based on Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
+ 2002 Stanislav Visnovsky <visnovsky@kde.org>
+ 2003 Dwayne Bailey <dwayne@translate.org.za>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef __main_h__
+#define __main_h__
+
+#include <kdatatool.h>
+#include <qvaluelist.h>
+
+class QDomElement;
+
+class Expression
+{
+public:
+ Expression() {};
+ Expression( const QString& name, const QRegExp& regExp )
+ {
+ _name = name;
+ _regExp = regExp;
+ }
+ const QString& name() const
+ {
+ return _name;
+ }
+ const QRegExp& regExp() const
+ {
+ return _regExp;
+ }
+
+private:
+ QString _name;
+ QRegExp _regExp;
+};
+
+typedef QValueList<Expression> ExpressionList;
+
+class RegExpTool : public KDataTool
+{
+ Q_OBJECT
+
+public:
+ RegExpTool( QObject* parent, const char* name, const QStringList & );
+ virtual bool run( const QString& command, void* data, const QString& datatype, const QString& mimetype);
+
+private:
+ void loadExpressions();
+ void elementToExpression( const QDomElement& e );
+
+ ExpressionList _list;
+ QString _error;
+};
+
+#endif
diff --git a/kbabel/datatools/regexp/regexplist.xml b/kbabel/datatools/regexp/regexplist.xml
new file mode 100644
index 00000000..1cd0b23d
--- /dev/null
+++ b/kbabel/datatools/regexp/regexplist.xml
@@ -0,0 +1,303 @@
+<!--
+ This file contains the list of regular expressions the plugin should check for.
+ Please, follow this syntax:
+ <regexplist>
+ <item>
+ <name></name>
+ <exp></exp>
+ <cs/> (only when the expression needs to be case sensitive)
+ </item>
+ ...
+ </regexplist>
+
+ Right now the file should be copied to ~/.kde/share/apps/kbabel/regexplist.xml. I'm sorry this cannot be configured but hope it will in the future. By the time if you need another location you have to modify the source code (main.cc)
+
+ You'll see in the example that most expressions start with '(^| |\\t)+' and then a word. This is to ensure it _is_ a word. Using the usual expressions to ensure we pick up a whole word doesn't work for the catalan language. Anyway, if you need to match a tab be sure you use the '\\t' expression.
+
+ Right now names in expressions aren't much useful, but I aim to modify kbabel in order to give more information about the error found. And I will probably add a description tag to enable long explanations of the mistake.
+
+ Also note the syntax of the file is quite strict. Mmmmm... too many words without a joke, this really doesn't seem to be open source :(
+ -->
+
+<regexplist>
+ <item>
+ <name>_el_ seguit de vocal</name>
+ <exp>(^| |\\t)+el +[a,e,i,o,u][a-z]+</exp>
+ </item>
+ <item>
+ <name>_la_ seguit de a,e,o</name>
+ <exp>(^| |\\t)+la +[a,e,o][a-z]+</exp>
+ </item>
+ <item>
+ <name>_per el_</name>
+ <exp>(^| |\\t)+per +el( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>_per els_</name>
+ <exp>(^| |\\t)+per +els( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>_de el_</name>
+ <exp>(^| |\\t)+de +el( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>_de els_</name>
+ <exp>(^| |\\t)+de +els( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>_a el_</name>
+ <exp>(^| |\\t)+a +el( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>_a els_</name>
+ <exp>(^| |\\t)+a +els( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>_al_ seguit de vocal</name>
+ <exp>(^| |\\t)+al +[a,e,i,o,u][a-z]+</exp>
+ </item>
+ <item>
+ <name>m'els</name>
+ <exp>(^| |\\t)m'els( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>mels</name>
+ <exp>(^| |\\t)mels( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>s'el</name>
+ <exp>(^| |\\t)s'el( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>sel</name>
+ <exp>(^| |\\t)sel( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>s'els</name>
+ <exp>(^| |\\t)s'els( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>sels</name>
+ <exp>(^| |\\t)sels( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>s'em</name>
+ <exp>(^| |\\t)s'em( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>sem</name>
+ <exp>(^| |\\t)sem( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>s'hem</name>
+ <exp>(^| |\\t)s'hem( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>s'ens</name>
+ <exp>(^| |\\t)s'ens( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>s'et</name>
+ <exp>(^| |\\t)s'et( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>susa</name>
+ <exp>(^| |\\t)susa( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>s'us</name>
+ <exp>(^| |\\t)s'us( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>su's</name>
+ <exp>(^| |\\t)su's( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>t'els</name>
+ <exp>(^| |\\t)t'els( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>t'el</name>
+ <exp>(^| |\\t)t'el( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>t'em</name>
+ <exp>(^| |\\t)t'em( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>t'ens</name>
+ <exp>(^| |\\t)t'ens( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>t'en</name>
+ <exp>(^| |\\t)t'en( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>ten</name>
+ <exp>(^| |\\t)ten( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>t'ens</name>
+ <exp>(^| |\\t)t'ens( |\\t|$)+</exp>
+ </item>
+ <item>
+ <name>vos sense accent</name>
+ <exp>(^| |\\t)vos( |\\t|$)</exp>
+ </item>
+ <item>
+ <name>Terminal s mascul (si es tracta d'informtica): el terminal</name>
+ <exp>(^| |\\t)la +terminal( |\\t|$)</exp>
+ </item>
+ <item>
+ <name>Terminal s mascul (si es tracta d'informtica): un terminal</name>
+ <exp>(^| |\\t)una +terminal( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)a +que( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)de +que( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)en +que( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)amb +que( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)per +que( |\\t|$)</exp>
+ </item>
+ <!-- En fase de test, ltimes propostes d'en David -->
+
+ <!--
+ Abans de "aquest", "aquell", "algun", "un" i les seues variants no posarem
+ "a", sin "en" (per a moviment i situaci):
+ Voleu desar el fitxer en aquesta carpeta?
+ Tanmateix, per a la resta de casos cal posar "a"!
+
+ Probablement comprovar "a un" donaria massa falsos positius.
+ -->
+ <!--
+ <item>
+ <name></name>
+ <exp>(^| |\\t)a +(aquest|aquell|algun)( |\\t|$)</exp>
+ </item>
+ -->
+ <!--
+ El pronom es, davant d'un mot comenat per sa-, se-, si-, so-, su-, ce- o
+ ci-, s'escriur sempre en la forma plena (se):
+
+ Se sap que algunes caracterstiques...
+ Les propietats d'aquest programa se sumen a les de...
+ -->
+ <item>
+ <name></name>
+ <exp>(^| |\\t)es +(sa|se|si|so|su|ce|ci)</exp>
+ </item>
+
+ <!--
+ En frases negatives, les partcules mai, cap, res, gens i ning han de dur
+ no sempre:
+
+ No tragueu mai el disquet abans d'hora.
+ Cap ordre no s'ha d'escriure en majscules.
+ Sense la contrasenya, ning no est autoritzat a accedir a la informaci.
+ -->
+ <!--
+ <item>
+ <name></name>
+ <exp>(((^| |\\t)(mai|cap|res|gens|ning)( |\\t|$))(?!.*(^| |\\t)no( |\\t|$)))|(((^| |\\t)(mai|cap|res|gens|ning)( |\\t|$))(?!.*(^| |\\t)no( |\\t|$)))</exp>
+ </item>
+ -->
+ <!--
+ 3.3. Construccions incorrectes
+ Podrem buscar "donat que" per a substituir-ho per "ats que".
+ "tals com" -> "com ara"
+ "tal i com" -> "tal com"
+ "teniu que" -> "heu de"/"heu d'"
+ "en quant a" -> "pel que fa a", "quant a"
+ -->
+ <!--
+ <item>
+ <name></name>
+ <exp>(^| |\\t)donat +que( |\\t|$)</exp>
+ </item>
+ -->
+ <item>
+ <name></name>
+ <exp>(^| |\\t)tals +com( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)tal +i +com( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)teniu +que( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)en +quant +a( |\\t|$)</exp>
+ </item>
+
+ <!--
+ Softcatal:
+ * Hi han: El verb haver-hi s impersonal, per aix no t plural en catal central, ats que no t subjecte. Per tant, no es diu hi han, hi havien, hi hauran, sin hi ha, hi havia, hi haur, encara que el complement que el segueixi sigui plural.
+ -->
+ <item>
+ <name></name>
+ <exp>(^| |\\t)hi +han( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)hi +havien( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)hi +hauran( |\\t|$)</exp>
+ </item>
+
+ <!--
+ Softcatal:
+ * Tenir que: s la traducci incorrecta al catal de l'expressi castellana tener que. La forma correcta s haver de; tamb es pot utilitzar el verb impersonal caldre.
+ -->
+ <item>
+ <name></name>
+ <exp>(^| |\\t)teniu +que( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)tenim +que( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)tenen +que( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)en +quant +a( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)en +quant +a( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)en +quant +a( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)en +quant +a( |\\t|$)</exp>
+ </item>
+ <item>
+ <name></name>
+ <exp>(^| |\\t)en +quant +a( |\\t|$)</exp>
+ </item>
+
+
+</regexplist> \ No newline at end of file