~ubuntu-branches/ubuntu/quantal/psi/quantal

« back to all changes in this revision

Viewing changes to iris/libidn/punycode.h

  • Committer: Bazaar Package Importer
  • Author(s): Jan Niehusmann
  • Date: 2009-09-25 17:49:51 UTC
  • mfrom: (6.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20090925174951-lvm7kdap82o8xhn3
Tags: 0.13-1
* Updated to upstream version 0.13
* Set Standards-Version to 3.8.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* punycode.h   Declarations for punycode functions.
2
 
 * Copyright (C) 2002, 2003  Simon Josefsson
3
 
 *
4
 
 * This file is part of GNU Libidn.
5
 
 *
6
 
 * GNU Libidn is free software; you can redistribute it and/or
7
 
 * modify it under the terms of the GNU Lesser General Public
8
 
 * License as published by the Free Software Foundation; either
9
 
 * version 2.1 of the License, or (at your option) any later version.
10
 
 *
11
 
 * GNU Libidn is distributed in the hope that it will be useful,
12
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 
 * Lesser General Public License for more details.
15
 
 *
16
 
 * You should have received a copy of the GNU Lesser General Public
17
 
 * License along with GNU Libidn; if not, write to the Free Software
18
 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
 
 *
20
 
 */
21
 
 
22
 
/*
23
 
 * This file is derived from RFC 3492 written by Adam M. Costello.
24
 
 *
25
 
 * Disclaimer and license: Regarding this entire document or any
26
 
 * portion of it (including the pseudocode and C code), the author
27
 
 * makes no guarantees and is not responsible for any damage resulting
28
 
 * from its use.  The author grants irrevocable permission to anyone
29
 
 * to use, modify, and distribute it in any way that does not diminish
30
 
 * the rights of anyone else to use, modify, and distribute it,
31
 
 * provided that redistributed derivative works do not contain
32
 
 * misleading author or version information.  Derivative works need
33
 
 * not be licensed under similar terms.
34
 
 *
35
 
 * Copyright (C) The Internet Society (2003).  All Rights Reserved.
36
 
 *
37
 
 * This document and translations of it may be copied and furnished to
38
 
 * others, and derivative works that comment on or otherwise explain it
39
 
 * or assist in its implementation may be prepared, copied, published
40
 
 * and distributed, in whole or in part, without restriction of any
41
 
 * kind, provided that the above copyright notice and this paragraph are
42
 
 * included on all such copies and derivative works.  However, this
43
 
 * document itself may not be modified in any way, such as by removing
44
 
 * the copyright notice or references to the Internet Society or other
45
 
 * Internet organizations, except as needed for the purpose of
46
 
 * developing Internet standards in which case the procedures for
47
 
 * copyrights defined in the Internet Standards process must be
48
 
 * followed, or as required to translate it into languages other than
49
 
 * English.
50
 
 *
51
 
 * The limited permissions granted above are perpetual and will not be
52
 
 * revoked by the Internet Society or its successors or assigns.
53
 
 *
54
 
 * This document and the information contained herein is provided on an
55
 
 * "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
56
 
 * TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
57
 
 * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
58
 
 * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
59
 
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
60
 
 */
61
 
 
62
 
#ifndef _PUNYCODE_H
63
 
#define _PUNYCODE_H
64
 
 
65
 
#ifdef __cplusplus
66
 
extern "C"
67
 
{
68
 
#endif
69
 
 
70
 
#include <stddef.h>             /* size_t */
71
 
#include <libidn/idn-int.h>             /* my_uint32_t */
72
 
 
73
 
  typedef enum
74
 
  {
75
 
    PUNYCODE_SUCCESS = 0,
76
 
    PUNYCODE_BAD_INPUT,         /* Input is invalid.                       */
77
 
    PUNYCODE_BIG_OUTPUT,        /* Output would exceed the space provided. */
78
 
    PUNYCODE_OVERFLOW           /* Input needs wider integers to process.  */
79
 
  } Punycode_status;
80
 
 
81
 
  /* For RFC compatibility. */
82
 
  enum punycode_status
83
 
  {
84
 
    punycode_success = PUNYCODE_SUCCESS,
85
 
    punycode_bad_input = PUNYCODE_BAD_INPUT,
86
 
    punycode_big_output = PUNYCODE_BIG_OUTPUT,
87
 
    punycode_overflow = PUNYCODE_OVERFLOW
88
 
  };
89
 
 
90
 
  typedef my_uint32_t punycode_uint;
91
 
 
92
 
  int punycode_encode (size_t input_length,
93
 
                       const punycode_uint input[],
94
 
                       const unsigned char case_flags[],
95
 
                       size_t * output_length, char output[]);
96
 
 
97
 
  /* punycode_encode() converts Unicode to Punycode.  The input     */
98
 
  /* is represented as an array of Unicode code points (not code    */
99
 
  /* units; surrogate pairs are not allowed), and the output        */
100
 
  /* will be represented as an array of ASCII code points.  The     */
101
 
  /* output string is *not* null-terminated; it will contain        */
102
 
  /* zeros if and only if the input contains zeros.  (Of course     */
103
 
  /* the caller can leave room for a terminator and add one if      */
104
 
  /* needed.)  The input_length is the number of code points in     */
105
 
  /* the input.  The output_length is an in/out argument: the       */
106
 
  /* caller passes in the maximum number of code points that it     */
107
 
  /* can receive, and on successful return it will contain the      */
108
 
  /* number of code points actually output.  The case_flags array   */
109
 
  /* holds input_length boolean values, where nonzero suggests that */
110
 
  /* the corresponding Unicode character be forced to uppercase     */
111
 
  /* after being decoded (if possible), and zero suggests that      */
112
 
  /* it be forced to lowercase (if possible).  ASCII code points    */
113
 
  /* are encoded literally, except that ASCII letters are forced    */
114
 
  /* to uppercase or lowercase according to the corresponding       */
115
 
  /* uppercase flags.  If case_flags is a null pointer then ASCII   */
116
 
  /* letters are left as they are, and other code points are        */
117
 
  /* treated as if their uppercase flags were zero.  The return     */
118
 
  /* value can be any of the punycode_status values defined above   */
119
 
  /* except punycode_bad_input; if not punycode_success, then       */
120
 
  /* output_size and output might contain garbage.                  */
121
 
 
122
 
  int punycode_decode (size_t input_length,
123
 
                       const char input[],
124
 
                       size_t * output_length,
125
 
                       punycode_uint output[], unsigned char case_flags[]);
126
 
 
127
 
  /* punycode_decode() converts Punycode to Unicode.  The input is  */
128
 
  /* represented as an array of ASCII code points, and the output   */
129
 
  /* will be represented as an array of Unicode code points.  The   */
130
 
  /* input_length is the number of code points in the input.  The   */
131
 
  /* output_length is an in/out argument: the caller passes in      */
132
 
  /* the maximum number of code points that it can receive, and     */
133
 
  /* on successful return it will contain the actual number of      */
134
 
  /* code points output.  The case_flags array needs room for at    */
135
 
  /* least output_length values, or it can be a null pointer if the */
136
 
  /* case information is not needed.  A nonzero flag suggests that  */
137
 
  /* the corresponding Unicode character be forced to uppercase     */
138
 
  /* by the caller (if possible), while zero suggests that it be    */
139
 
  /* forced to lowercase (if possible).  ASCII code points are      */
140
 
  /* output already in the proper case, but their flags will be set */
141
 
  /* appropriately so that applying the flags would be harmless.    */
142
 
  /* The return value can be any of the punycode_status values      */
143
 
  /* defined above; if not punycode_success, then output_length,    */
144
 
  /* output, and case_flags might contain garbage.  On success, the */
145
 
  /* decoder will never need to write an output_length greater than */
146
 
  /* input_length, because of how the encoding is defined.          */
147
 
 
148
 
#ifdef __cplusplus
149
 
}
150
 
#endif
151
 
#endif                          /* _PUNYCODE_H */