X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=include%2Fyaz%2Fsortspec.h;h=9f8324614a86c30dfd4bf7748192ba76e0185812;hp=98a63e008e61b00e72b5008f4593765bd62d9b52;hb=487b5074b34ff24575136df048d9c7970ccaf98f;hpb=109b6408fbe38ca68651a23b59a9ac875e7b8944 diff --git a/include/yaz/sortspec.h b/include/yaz/sortspec.h index 98a63e0..9f83246 100644 --- a/include/yaz/sortspec.h +++ b/include/yaz/sortspec.h @@ -1,42 +1,112 @@ -/* - * Copyright (c) 1995-2001, Index Data. - * - * Permission to use, copy, modify, distribute, and sell this software and - * its documentation, in whole or in part, for any purpose, is hereby granted, - * provided that: - * - * 1. This copyright and permission notice appear in all copies of the - * software and its documentation. Notices of copyright or attribution - * which appear at the beginning of any file must remain unchanged. - * - * 2. The name of Index Data or the individual authors may not be used to - * endorse or promote products derived from this software without specific - * prior written permission. +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2012 Index Data. + * All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: * - * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR - * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Index Data nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. * - * $Id: sortspec.h,v 1.1 2001-08-08 19:35:06 adam Exp $ + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/** + * \file sortspec.h + * \brief Header for SortSpec parsing. + */ #ifndef SORTSPEC_H #define SORTSPEC_H #include -#include +#include +#include YAZ_BEGIN_CDECL -YAZ_EXPORT Z_SortKeySpecList *yaz_sort_spec (ODR out, const char *arg); +/** \brief parse sort spec string + \param odr memory for result + \param arg sort spec string + \returns Z39.50 SortKeySpecList or NULL on error + + The sort spec list is of the form: + (field flags)+ + where field is either a string or one or more attribute pairs + key=value (there must be no blanks in either field of flags). + flags is a character list: + dD> : descending + aA< : ascending (default) + iI : ignoreccase / case-insensitive (default) + sS : respectcase / case-sensitive + ! : abort of key is omitted in result + =value : missing value + + Examples: + + title a + + 1=4 ia 1=1003 sd +*/ +YAZ_EXPORT Z_SortKeySpecList *yaz_sort_spec(ODR odr, const char *arg); +/* \brief converts SortKeySpecList to CQL sortby string + \param sksl SortKeySpecList + \param w resulting CQL SORTBY string (of string to be appended) + \retval 0 successful + \retval -1 failure +*/ +YAZ_EXPORT int yaz_sort_spec_to_cql(Z_SortKeySpecList *sksl, WRBUF w); + +/* \brief adds PQF type-7 sorting to existing PQF from SortKeySpecList + \param sksl SortKeySpecList + \param w original PQF (without the Type-7) + \retval 0 successful + \retval -1 failure + + If successful, the pqf WRBUF holds the new PQF including the Type-7 + part. +*/ +YAZ_EXPORT int yaz_sort_spec_to_type7(Z_SortKeySpecList *sksl, WRBUF pqf); + +/* \brief converts Z39.50 SortKeySpecList to SRU 1.1 sort key + \param sksl SortKeySpecList + \param w resulting sortkey will be appended to this + \retval 0 successful + \retval -1 failure +*/ +YAZ_EXPORT int yaz_sort_spec_to_srw_sortkeys(Z_SortKeySpecList *sksl, WRBUF w); + +/* \brief converts SRU/SRW 1.1 sortkeys to Z39.50 sortspec (WRBUF) + \param srw_sortkeys SRU sortkeys string + \param w resulting Z39.50 sortspec, WRBUF string + \retval 0 successful + \retval -1 failure +*/ +YAZ_EXPORT int yaz_srw_sortkeys_to_sort_spec(const char *srw_sortkeys, WRBUF w); YAZ_END_CDECL #endif +/* + * Local variables: + * c-basic-offset: 4 + * c-file-style: "Stroustrup" + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +