~ubuntu-branches/ubuntu/quantal/xarchiver/quantal

« back to all changes in this revision

Viewing changes to src/xdgmime/xdgmimeint.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2008-11-07 14:54:00 UTC
  • mfrom: (1.1.7 upstream) (2.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20081107145400-z0j3jmgads8coae2
Tags: 0.5.1-1
MergingĀ upstreamĀ versionĀ 0.5.1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- mode: C; c-file-style: "gnu" -*- */
 
2
/* xdgmimeint.c: Internal defines and functions.
 
3
 *
 
4
 * More info can be found at http://www.freedesktop.org/standards/
 
5
 *
 
6
 * Copyright (C) 2003  Red Hat, Inc.
 
7
 * Copyright (C) 2003  Jonathan Blandford <jrb@alum.mit.edu>
 
8
 *
 
9
 * Licensed under the Academic Free License version 2.0
 
10
 * Or under the following terms:
 
11
 *
 
12
 * This library is free software; you can redistribute it and/or
 
13
 * modify it under the terms of the GNU Lesser General Public
 
14
 * License as published by the Free Software Foundation; either
 
15
 * version 2 of the License, or (at your option) any later version.
 
16
 *
 
17
 * This library is distributed in the hope that it will be useful,
 
18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
20
 * Lesser General Public License for more details.
 
21
 *
 
22
 * You should have received a copy of the GNU Lesser General Public
 
23
 * License along with this library; if not, write to the
 
24
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 
25
 * Boston, MA 02111-1307, USA.
 
26
 */
 
27
 
 
28
#ifdef HAVE_CONFIG_H
 
29
#include <config.h>
 
30
#endif
 
31
 
 
32
#include "xdgmimeint.h"
 
33
#include <ctype.h>
 
34
#include <string.h>
 
35
 
 
36
#ifndef FALSE
 
37
#define FALSE   (0)
 
38
#endif
 
39
 
 
40
#ifndef TRUE
 
41
#define TRUE    (!FALSE)
 
42
#endif
 
43
 
 
44
static const char _xdg_utf8_skip_data[256] = {
 
45
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 
46
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 
47
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 
48
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 
49
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 
50
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 
51
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
 
52
  3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1
 
53
};
 
54
 
 
55
const char * const _xdg_utf8_skip = _xdg_utf8_skip_data;
 
56
 
 
57
 
 
58
 
 
59
/* Returns the number of unprocessed characters. */
 
60
xdg_unichar_t
 
61
_xdg_utf8_to_ucs4(const char *source)
 
62
{
 
63
  xdg_unichar_t ucs32;
 
64
  if( ! ( *source & 0x80 ) )
 
65
    {
 
66
      ucs32 = *source;
 
67
    }
 
68
  else
 
69
    {
 
70
      int bytelength = 0;
 
71
      xdg_unichar_t result;
 
72
      if ( ! (*source & 0x40) )
 
73
        {
 
74
          ucs32 = *source;
 
75
        }
 
76
      else
 
77
        {
 
78
          if ( ! (*source & 0x20) )
 
79
            {
 
80
              result = *source++ & 0x1F;
 
81
              bytelength = 2;
 
82
            }
 
83
          else if ( ! (*source & 0x10) )
 
84
            {
 
85
              result = *source++ & 0x0F;
 
86
              bytelength = 3;
 
87
            }
 
88
          else if ( ! (*source & 0x08) )
 
89
            {
 
90
              result = *source++ & 0x07;
 
91
              bytelength = 4;
 
92
            }
 
93
          else if ( ! (*source & 0x04) )
 
94
            {
 
95
              result = *source++ & 0x03;
 
96
              bytelength = 5;
 
97
            }
 
98
          else if ( ! (*source & 0x02) )
 
99
            {
 
100
              result = *source++ & 0x01;
 
101
              bytelength = 6;
 
102
            }
 
103
          else
 
104
            {
 
105
              result = *source++;
 
106
              bytelength = 1;
 
107
            }
 
108
 
 
109
          for ( bytelength --; bytelength > 0; bytelength -- )
 
110
            {
 
111
              result <<= 6;
 
112
              result |= *source++ & 0x3F;
 
113
            }
 
114
          ucs32 = result;
 
115
        }
 
116
    }
 
117
  return ucs32;
 
118
}
 
119
 
 
120
 
 
121
/* hullo.  this is great code.  don't rewrite it */
 
122
 
 
123
xdg_unichar_t
 
124
_xdg_ucs4_to_lower (xdg_unichar_t source)
 
125
{
 
126
  /* FIXME: Do a real to_upper sometime */
 
127
  /* CaseFolding-3.2.0.txt has a table of rules. */
 
128
  if ((source & 0xFF) == source)
 
129
    return (xdg_unichar_t) tolower ((unsigned char) source);
 
130
  return source;
 
131
}
 
132
 
 
133
int
 
134
_xdg_utf8_validate (const char *source)
 
135
{
 
136
  /* FIXME: actually write */
 
137
  return TRUE;
 
138
}
 
139
 
 
140
const char *
 
141
_xdg_get_base_name (const char *file_name)
 
142
{
 
143
  const char *base_name;
 
144
 
 
145
  if (file_name == NULL)
 
146
    return NULL;
 
147
 
 
148
  base_name = strrchr (file_name, '/');
 
149
 
 
150
  if (base_name == NULL)
 
151
    return file_name;
 
152
  else
 
153
    return base_name + 1;
 
154
}