annotate src/libguess/guess.c @ 3343:f5a413804217 trunk

cue:// should get accepted before. Contact me if it breaks cue:// support somehow.
author Christian Birchinger <joker@netswarm.net>
date Sun, 12 Aug 2007 21:57:53 +0200
parents ce2d24746c09
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2313
3149d4b1a9a9 [svn] - objective-make autodepend fixes
nenolod
parents:
diff changeset
1 #include "libguess.h"
3201
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
2
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
3 typedef struct _guess_impl {
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
4 struct _guess_impl *next;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
5 const char *name;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
6 const char *(*impl)(const char *buf, int len);
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
7 } guess_impl;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
8
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
9 static guess_impl *guess_impl_list = NULL;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
10
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
11 void guess_impl_register(const char *lang,
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
12 const char *(*impl)(const char *buf, int len))
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
13 {
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
14 guess_impl *iptr = calloc(sizeof(guess_impl), 1);
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
15
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
16 iptr->name = lang;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
17 iptr->impl = impl;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
18 iptr->next = guess_impl_list;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
19
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
20 guess_impl_list = iptr;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
21 }
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
22
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
23 void guess_init(void)
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
24 {
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
25 /* check if already initialized */
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
26 if (guess_impl_list != NULL)
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
27 return;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
28
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
29 guess_impl_register(GUESS_REGION_JP, guess_jp);
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
30 guess_impl_register(GUESS_REGION_TW, guess_tw);
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
31 guess_impl_register(GUESS_REGION_CN, guess_cn);
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
32 guess_impl_register(GUESS_REGION_KR, guess_kr);
3202
e9f66c3905ec Migrate relevant libRCD code to libguess.
William Pitcock <nenolod@atheme-project.org>
parents: 3201
diff changeset
33 guess_impl_register(GUESS_REGION_RU, guess_ru);
3206
6bcfc6561711 Implement support for Arabic and Turkish.
William Pitcock <nenolod@atheme-project.org>
parents: 3202
diff changeset
34 guess_impl_register(GUESS_REGION_AR, guess_ar);
6bcfc6561711 Implement support for Arabic and Turkish.
William Pitcock <nenolod@atheme-project.org>
parents: 3202
diff changeset
35 guess_impl_register(GUESS_REGION_TR, guess_tr);
3215
ce2d24746c09 Add support for greek and hebrew character set detection.
William Pitcock <nenolod@atheme-project.org>
parents: 3213
diff changeset
36 guess_impl_register(GUESS_REGION_GR, guess_gr);
ce2d24746c09 Add support for greek and hebrew character set detection.
William Pitcock <nenolod@atheme-project.org>
parents: 3213
diff changeset
37 guess_impl_register(GUESS_REGION_HW, guess_hw);
3201
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
38 }
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
39
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
40 const char *guess_encoding(const char *inbuf, int buflen, const char *lang)
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
41 {
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
42 guess_impl *iter;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
43
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
44 guess_init();
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
45
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
46 for (iter = guess_impl_list; iter != NULL; iter = iter->next)
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
47 {
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
48 if (!strcasecmp(lang, iter->name))
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
49 return iter->impl(inbuf, buflen);
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
50 }
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
51
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
52 /* TODO: try other languages as fallback? */
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
53
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
54 return NULL;
e1470a536417 Allow libguess to be extended for other languages using a common API.
William Pitcock <nenolod@atheme-project.org>
parents: 2599
diff changeset
55 }