Ejemplo n.º 1
0
bool CCit_gen::GetLabelV1(string* label, TLabelFlags flags) const
{
    bool unique = (flags & fLabel_Unique) != 0;

    if (IsSetSerial_number()) {
        *label += "[" + NStr::IntToString(GetSerial_number()) + "]";
    }
    if (IsSetMuid()) {
        *label += "NLM" + NStr::IntToString(GetMuid());
    }

    string date;
    string* date_ptr = 0;
    if ( IsSetDate() ) {
        date_ptr = &date;
        GetDate().GetDate(date_ptr, true);
    }

    const string* title2 = 0;
    const string* titleunique = 0;
    bool unpublished = false;
    const CTitle* title = IsSetJournal() ? &GetJournal() : 0;
    const CAuth_list* authors = IsSetAuthors() ? &GetAuthors() : 0;
    const string* volume = IsSetVolume() ? &GetVolume() : 0;
    const string* issue = IsSetIssue() ? &GetIssue() : 0;
    const string* pages = IsSetPages() ? &GetPages() : 0;

    if (IsSetCit()) {
        if ( NStr::EqualNocase( GetCit(), "Unpublished") ) {
            unpublished = true;
        } else if (!title) {
            title2 = &GetCit();
        }
    }
    if (IsSetTitle()) {
        titleunique = &GetTitle();
    } else if (title2) {
        titleunique = title2;
    } else if (!title && IsSetCit()) {
        titleunique = &GetCit();
    }
    if (!title && !authors && !IsSetTitle() && !volume &&
        !pages && !issue) {
        titleunique = 0;
        if (IsSetCit()) {
            string cit(GetCit());
            if (!unique) {
                try {
                    cit.resize(cit.find_last_of('|'));
                } catch(length_error&) {}
            }   
            *label += cit;
        }
        return true;
    }

    return x_GetLabelV1(label, unique,
        authors, 0, title, 0, 0, 0, title2, titleunique,
        date_ptr, volume, issue, pages, unpublished);
}
Ejemplo n.º 2
0
int CPatent_seq_id::Compare(const CPatent_seq_id& psip2) const
{
    int ret = GetSeqid() - psip2.GetSeqid();
    if ( ret == 0 ) {
        ret = GetCit().Match(psip2.GetCit())? 0: this < &psip2? -1: 1;
    }
    return ret;
}
Ejemplo n.º 3
0
// format a FASTA style string
ostream& CPatent_seq_id::AsFastaString(ostream& s) const
{
    const CId_pat& idp = GetCit();
	
    s << idp.GetCountry() << '|';  // no Upcase per Ostell - Karl 7/2001

    if ( idp.GetId().IsNumber() ) {
        s << idp.GetId().GetNumber();
    } else {
        s << idp.GetId().GetApp_number();
    }
    s << '|' << GetSeqid();
    return s;
}
Ejemplo n.º 4
0
// comparison function
bool CPatent_seq_id::Match(const CPatent_seq_id& psip2) const
{
    return GetSeqid() == psip2.GetSeqid()  &&  GetCit().Match(psip2.GetCit());
}
Ejemplo n.º 5
0
// Based on FormatCitGen from the C Toolkit's api/asn2gnb5.c.
bool CCit_gen::GetLabelV2(string* label, TLabelFlags flags) const
{
    if ( !CanGetCit()  &&  !CanGetJournal()  &&  !CanGetDate()
        &&  CanGetSerial_number() ) {
        return false;
    }

    if ( !CanGetJournal()  &&  CanGetCit()  &&  SWNC(GetCit(), "unpublished")) {
        if ((flags & fLabel_NoUnpubAffil) != 0) {
            MaybeAddSpace(label);
            *label += "Unpublished";
            return true;
        }

        if (CanGetAuthors()  &&  GetAuthors().CanGetAffil()) {
            MaybeAddSpace(label);
            *label += "Unpublished ";
            GetAuthors().GetAffil().GetLabel(label, flags, eLabel_V2);
            NStr::TruncateSpacesInPlace(*label, NStr::eTrunc_End);
            return true;
        }

        if (CanGetCit()  &&  HasText(GetCit())) {
            MaybeAddSpace(label);
            *label += NStr::TruncateSpaces(GetCit());
            return true;
        } else {
            return false;
        }
    }

    string year  = CanGetDate()  ? GetParenthesizedYear(GetDate()) : kEmptyStr;
    string pages = CanGetPages() ? FixPages(GetPages())            : kEmptyStr;
    string journal, inpress;
    SIZE_TYPE pos;

    if (CanGetJournal()) {
        journal = GetJournal().GetTitle();
    }

    if (CanGetCit()) {
        pos = GetCit().find("Journal=\"");
        if (pos != NPOS) {
            journal = GetCit().substr(pos + 9);
        } else if (SWNC(GetCit(), "submitted")
                   ||  SWNC(GetCit(), "unpublished")) {
            if ((flags & fLabel_NoBadCitGen) == 0  ||  !journal.empty()) {
                inpress = GetCit();
            } else {
                inpress = "Unpublished";
            }
        } else if (SWNC(GetCit(), "Online Publication")
                   ||  SWNC(GetCit(), "Published Only in DataBase")
                   ||  SWNC(GetCit(), "In press")) {
            inpress = GetCit();
        } else if (SWNC(GetCit(), "(er) ")) {
            journal = GetCit();
        } else if ((flags & fLabel_NoBadCitGen) == 0  &&  journal.empty()) {
            journal = GetCit();
        }
    }

    if ((!HasText(pages) || (flags & (fLabel_FlatNCBI | fLabel_FlatEMBL)) == 0)
        &&  journal.empty()  &&  !HasText(inpress)  &&  !HasText(year)
        &&  (!CanGetVolume() || !HasText(GetVolume()))) {
        return false;
    }

    string prefix;
    MaybeAddSpace(label);

    if ( !journal.empty() ) {
        pos = journal.find_first_of("=\"");
        if (pos != NPOS) {
            journal.resize(pos);
        }
        *label += journal;
        prefix = " ";
    }

    if (HasText(inpress)) {
        *label += prefix + inpress;
        prefix = " ";
    }

    if (CanGetVolume()  &&  HasText(GetVolume())) {
        *label += prefix + GetVolume();
    }

    if (HasText(pages)) {
        if ((flags & fLabel_FlatNCBI) != 0) {
            *label += ", " + pages;
        } else if ((flags & fLabel_FlatEMBL) != 0) {
            *label += ':' + pages;
        }
    }

    if (HasText(year)) {
        *label += ' ' + year;
    }

    return true;
}