Ticket #5191: eitfixup2.patch

File eitfixup2.patch, 9.1 KB (added by anonymous, 12 years ago)
  • libs/libmythtv/eitfixup.cpp

     
     1/* vim: set expandtab tabstop=4 shiftwidth=4: */
     2
    13#include "eitfixup.h"
    24#include "mythcontext.h"
    35#include "dvbdescriptors.h" // for MythCategoryType
     
    2123      m_ukNew("(New\\.|\\s*(Brand New|New)\\s*(Series|Episode)\\s*[:\\.\\-])",false),
    2224      m_ukCEPQ("[:\\!\\.\\?]"),
    2325      m_ukColonPeriod("[:\\.]"),
    24       m_ukDotSpaceStart("^\\. "),
     26      m_ukDotSpaceStart("^(?:\\. | )"),
    2527      m_ukDotEnd("\\.$"),
    2628      m_ukSpaceColonStart("^[ |:]*"),
    2729      m_ukSpaceStart("^ "),
     
    3234      m_uk24ep("^\\d{1,2}:00[ap]m to \\d{1,2}:00[ap]m: "),
    3335      m_ukStarring("(?:Western\\s)?[Ss]tarring ([\\w\\s\\-']+)[Aa]nd\\s([\\w\\s\\-']+)[\\.|,](?:\\s)*(\\d{4})?(?:\\.\\s)?"),
    3436      m_ukBBC7rpt("\\[Rptd?[^]]+\\d{1,2}\\.\\d{1,2}[ap]m\\]\\."),
    35       m_ukDescriptionRemove("^(?:CBBC\\s*\\.|CBeebies\\s*\\.|Class TV\\s*:|BBC Switch\\.)"),
     37      m_ukDescriptionRemove("^(?:CBBC\\s*\\.|CBeebies\\s*\\.|Class TV\\s*:|BBC Switch(?:\\.|:))"),
    3638      m_ukTitleRemove("^(?:[tT]4:|Schools\\s*:)"),
    3739      m_ukDoubleDotEnd("\\.\\.+$"),
    3840      m_ukDoubleDotStart("^\\.\\.+"),
     
    4143      m_ukYearColon("^[\\d]{4}:"),
    4244      m_ukExclusionFromSubtitle("(starring|stars\\s|drama|series|sitcom)",false),
    4345      m_ukCompleteDots("^\\.\\.+$"),
     46      m_uk5xNumberHyphen3xNumber("\\d\\d\\d\\d\\d-\\d\\d\\d [A-Z]"),
    4447      m_comHemCountry("^(\\(.+\\))?\\s?([^ ]+)\\s([^\\.0-9]+)"
    4548                      "(?:\\sfrån\\s([0-9]{4}))(?:\\smed\\s([^\\.]+))?\\.?"),
    4649      m_comHemDirector("[Rr]egi"),
     
    300303 */
    301304void EITFixUp::SetUKSubtitle(DBEvent &event) const
    302305{
     306    if (!event.subtitle.isEmpty())
     307        return;
     308
    303309    QStringList strListColon = QStringList::split(":",event.description,TRUE);
    304310    QStringList strListEnd;
    305311
     
    325331             QString strTmp = event.description.mid(nPosition1+1,
    326332                                     nLength-nPosition1);
    327333
    328              if (QStringList::split(" ", strTmp ,TRUE).count()< kMaxDotToColon)
     334             if (QStringList::split(" ", strTmp ,TRUE).count()<=kMaxDotToColon)
    329335                 fSingleDot = false;
    330336         }
    331337
     
    336342         }
    337343         else if (!fSingleDot)
    338344         {
    339              QStringList strListTmp;
    340              uint nTitle=0;
    341              int nTitleMax=-1;
     345             int nCount=strListColon.count();
     346             int nMaxLength=0;
     347             int nMaxTitle=0;
    342348             int i;
    343              for (i =0; (i<(int)strListColon.count()) && (nTitleMax==-1);i++)
     349             for (i=0;i<(nCount-1);i++)
    344350             {
    345                  if ((nTitle+=
    346                      QStringList::split(" ",strListColon[i],TRUE).count())
    347                           <kMaxToTitle)
    348                      strListTmp.push_back(strListColon[i]);
    349                  else
    350                      nTitleMax=i;
     351                 QString strTmp = strListColon[i+1].stripWhiteSpace();
     352                 QChar aLetter = strTmp.at(0);
     353                 QChar bLetter = aLetter.lower();
     354                 uint nTmp=
     355                     QStringList::split(" ",strListColon[i],FALSE).count();
     356                 if ((nMaxLength+nTmp > kMaxToTitle) || (aLetter==bLetter))
     357                     break;
     358                 nMaxLength = nMaxLength+nTmp;
     359                 nMaxTitle = i;
    351360             }
    352              QString strPartial;
    353              for (i=0;i<(nTitleMax-1);i++)
    354                  strPartial+=strListTmp[i]+":";
    355              if (nTitleMax>0)
     361             if (nMaxLength)
    356362             {
    357                  strPartial+=strListTmp[nTitleMax-1];
     363                 QString strPartial;
     364                 for (i=0;i<=nMaxTitle;i++)
     365                 {
     366                     strPartial+=strListColon[i];
     367                     if (i<(nMaxTitle))
     368                          strPartial+=":";
     369                 }
    358370                 strListEnd.push_back(strPartial);
    359              }
    360              for (i=nTitleMax+1;i<(int)strListColon.count();i++)
    361                  strListEnd.push_back(strListColon[i]);
    362              fColon = true;
     371                 for (i=(nMaxTitle+1);i<nCount;i++)
     372                     strListEnd.push_back(strListColon[i]);
     373                 fColon=true;
     374             }             
    363375         }
    364376    }
    365377    QStringList strListPeriod;
     
    367379    QStringList strListExcl;
    368380    if (!fColon)
    369381    {
     382        int nLength=INT_MAX;
    370383        strListPeriod = QStringList::split(".",event.description,TRUE);
     384        strListQuestion = QStringList::split("?",event.description,TRUE);
     385        strListExcl = QStringList::split("!",event.description,TRUE);
     386
    371387        if (strListPeriod.count() >1)
    372388        {
    373389            nPosition1 = event.description.find(".");
    374390            int nPosition2 = event.description.find("..");
    375391            if ((nPosition1 < nPosition2) || (nPosition2==-1))
     392            {
     393                nLength = strListPeriod[0].length(); 
    376394                strListEnd = strListPeriod;
     395            }
    377396        }
    378397
    379         strListQuestion = QStringList::split("?",event.description,TRUE);
    380         strListExcl = QStringList::split("!",event.description,TRUE);
    381398        if ((strListQuestion.count()>1) &&
    382                  (strListQuestion.count()<=kMaxQuestionExclamation))
     399                 (strListQuestion.count()<=kMaxQuestionExclamation) &&
     400                 ((int)(strListQuestion[0].length())<nLength))
    383401        {
    384402            strListEnd = strListQuestion;
    385403            strEnd = "?";
    386404        }
    387405        else if ((strListExcl.count()>1) &&
    388                  (strListExcl.count()<=kMaxQuestionExclamation))
     406                 (strListExcl.count()<=kMaxQuestionExclamation) &&
     407                 ((int)(strListExcl[0].length())<nLength))
    389408        {
    390409            strListEnd = strListExcl;
    391410            strEnd = "!";
     
    397416    if (strListEnd.count())
    398417    {
    399418        QStringList strListSpace = QStringList::split(" ",strListEnd[0]);
    400         if (fColon && (strListSpace.count() > kMaxToTitle))
     419        if (strListSpace.count() > kMaxToTitle)
    401420             return;
    402         if (strListSpace.count() > kDotToTitle)
    403              return;
     421
    404422        if (strListSpace.grep(m_ukExclusionFromSubtitle).count()==0)
    405423        {
    406424             event.subtitle = strListEnd[0]+strEnd;
     
    492510    }
    493511
    494512    QRegExp tmp24ep = m_uk24ep;
    495     if (!event.title.startsWith("CSI:") && !event.title.startsWith("CD:"))
     513    if (!event.title.startsWith("CSI:") &&
     514        !event.title.startsWith("Law & Order:") &&
     515        !event.title.startsWith("CD:"))
    496516    {
    497517        if (((position1=event.title.find(m_ukDoubleDotEnd)) != -1) &&
    498518            ((position2=event.description.find(m_ukDoubleDotStart)) != -1))
     
    580600        }
    581601        else
    582602            SetUKSubtitle(event);
     603/*
     604        if (event.subtitle.isEmpty() &&
     605            (position1=event.description.find(m_uk5xNumberHyphen3xNumber)) &&
     606            (position1 >0) && ((uint)position1<SUBTITLE_MAX_LEN))
     607        {
     608            event.subtitle = event.description.left(position1+9);
     609            event.description = event.description.mid(position1+9);
     610        }
     611*/
    583612    }
    584613
    585614    // Work out the year (if any)
     
    597626    }
    598627
    599628    // Trim leading/trailing '.'
     629    event.description.remove(m_ukDotSpaceStart);
    600630    event.subtitle.remove(m_ukDotSpaceStart);
    601631    if (event.subtitle.findRev("..") != (((int)event.subtitle.length())-2))
    602632        event.subtitle.remove(m_ukDotEnd);
    603633
     634    // Demote the subtitle if it matches the title
     635    if (!event.title.isEmpty() && !event.subtitle.isEmpty() &&
     636         event.title == event.subtitle)
     637    {
     638        event.description=event.subtitle+" "+event.description;
     639        event.subtitle=QString::null;
     640    }
     641
    604642    // Reverse the subtitle and empty description
    605643    if (event.description.isEmpty() && !event.subtitle.isEmpty())
    606644    {
  • libs/libmythtv/eitfixup.h

     
    11/*
     2 *  vim: set expandtab tabstop=4 shiftwidth=4:
    23 *  Copyright 2004 - Taylor Jacob (rtjacob at earthlink.net)
    34 */
    45
     
    1819     // max length of subtitle field in db.
    1920     static const uint SUBTITLE_MAX_LEN = 128;
    2021     // max number of words included in a subtitle
    21      static const uint kMaxToTitle = 14;
    22      // max number of words up to a period, question mark
    23      static const uint kDotToTitle = 9;
     22     static const uint kMaxToTitle = 10;
    2423     // max number of question/exclamation marks
    2524     static const uint kMaxQuestionExclamation = 2;
    2625     // max number of difference in words between a period and a colon
    27      static const uint kMaxDotToColon = 5;
     26     static const uint kMaxDotToColon = 6;
    2827
    2928  public:
    3029    enum FixUpType
     
    108107    const QRegExp m_ukYearColon;
    109108    const QRegExp m_ukExclusionFromSubtitle;
    110109    const QRegExp m_ukCompleteDots;
     110    const QRegExp m_uk5xNumberHyphen3xNumber;
    111111    const QRegExp m_comHemCountry;
    112112    const QRegExp m_comHemDirector;
    113113    const QRegExp m_comHemActor;