fltk  1.3.5-source
About: FLTK (Fast Light Tool Kit) is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, and MacOS X.
  Fossies Dox: fltk-1.3.5-source.tar.bz2  ("inofficial" and yet experimental doxygen-generated source code documentation)  

fl_encoding_mac_roman.cxx
Go to the documentation of this file.
1 //
2 // "$Id$"
3 //
4 // Convert Mac Roman encoded text to the local encoding.
5 //
6 // Copyright 1998-2010 by Bill Spitzak and others.
7 //
8 // This library is free software. Distribution and use rights are outlined in
9 // the file "COPYING" which should have been included with this file. If this
10 // file is missing or damaged, see the license at:
11 //
12 // http://www.fltk.org/COPYING.php
13 //
14 // Please report all bugs and problems on the following page:
15 //
16 // http://www.fltk.org/str.php
17 //
18 
19 #include <FL/fl_draw.H>
20 #include <FL/Enumerations.H>
21 #include <stdlib.h>
22 #include "flstring.h"
23 
24 // These function assume a western code page. If you need to support
25 // scripts that are not part of this code page, you might want to
26 // take a look at FLTK2, which uses utf8 for text encoding.
27 //
28 // By keeping these conversion tables in their own module, they will not
29 // be statically linked (by a smart linker) unless actually used.
30 //
31 // On Mac OS X, nothing need to be converted. We simply return the
32 // original pointer.
33 //
34 // MSWindows and X11 render text in ISO or Latin-1 for western settings. The
35 // lookup tables below will convert all common character codes and replace
36 // unknown characters with an upsidedown question mark.
37 
38 #ifdef __APPLE__
39 
40 const char *fl_mac_roman_to_local(const char *t, int)
41 {
42  return t;
43 }
44 
45 const char *fl_local_to_mac_roman(const char *t, int)
46 {
47  return t;
48 }
49 
50 #else
51 
52 // This table converts MSWindows-1252/Latin 1 into MacRoman encoding
53 static uchar latin2roman[128] = {
54 0xdb, 0xc0, 0xe2, 0xc4, 0xe3, 0xc9, 0xa0, 0xe0, 0xf6, 0xe4, 0xc0, 0xdc, 0xce, 0xc0, 0xc0, 0xc0,
55 0xc0, 0xd4, 0xd5, 0xd2, 0xd3, 0xa5, 0xd0, 0xd1, 0xf7, 0xaa, 0xc0, 0xdd, 0xcf, 0xc0, 0xc0, 0xd9,
56 0xca, 0xc1, 0xa2, 0xa3, 0xc0, 0xb4, 0xc0, 0xa4, 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0xc0, 0xa8, 0xf8,
57 0xa1, 0xb1, 0xc0, 0xc0, 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0xc0, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0,
58 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec,
59 0xc0, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xc0, 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0xc0, 0xc0, 0xa7,
60 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95,
61 0xc0, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xc0, 0xc0, 0xd8
62 };
63 
64 // This table converts MacRoman into MSWindows-1252/Latin 1
65 static uchar roman2latin[128] = {
66 0xc4, 0xc5, 0xc7, 0xc9, 0xd1, 0xd6, 0xdc, 0xe1, 0xe0, 0xe2, 0xe4, 0xe3, 0xe5, 0xe7, 0xe9, 0xe8,
67 0xea, 0xeb, 0xed, 0xec, 0xee, 0xef, 0xf1, 0xf3, 0xf2, 0xf4, 0xf6, 0xf5, 0xfa, 0xf9, 0xfb, 0xfc,
68 0x86, 0xb0, 0xa2, 0xa3, 0xa7, 0x95, 0xb6, 0xdf, 0xae, 0xa9, 0x99, 0xb4, 0xa8, 0xbf, 0xc6, 0xd8,
69 0xbf, 0xb1, 0xbf, 0xbf, 0xa5, 0xb5, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xaa, 0xba, 0xbf, 0xe6, 0xf8,
70 0xbf, 0xa1, 0xac, 0xbf, 0x83, 0xbf, 0xbf, 0xab, 0xbb, 0x85, 0xa0, 0xc0, 0xc3, 0xd5, 0x8c, 0x9c,
71 0x96, 0x97, 0x93, 0x94, 0x91, 0x92, 0xf7, 0xbf, 0xff, 0x9f, 0xbf, 0x80, 0x8b, 0x9b, 0xbf, 0xbf,
72 0x87, 0xb7, 0x82, 0x84, 0x89, 0xc2, 0xca, 0xc1, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0xd3, 0xd4,
73 0xbf, 0xd2, 0xda, 0xdb, 0xd9, 0xbf, 0x88, 0x98, 0xaf, 0xbf, 0xbf, 0xbf, 0xb8, 0xbf, 0xbf, 0xbf
74 };
75 
76 static char *buf = 0;
77 static int n_buf = 0;
78 
79 const char *fl_local_to_mac_roman(const char *t, int n)
80 {
81  if (n==-1) n = (int) strlen(t);
82  if (n<=n_buf) {
83  n_buf = (n + 257) & 0x7fffff00;
84  if (buf) free(buf);
85  buf = (char*)malloc(n_buf);
86  }
87  const uchar *src = (const uchar*)t;
88  uchar *dst = (uchar*)buf;
89  for ( ; n>0; n--) {
90  uchar c = *src;
91  if (c>127)
92  *dst = latin2roman[c-128];
93  else
94  *dst = c;
95  }
96  //*dst = 0; // this would be wrong!
97  return buf;
98 }
99 
100 const char *fl_mac_roman_to_local(const char *t, int n)
101 {
102  if (n==-1) n = (int) strlen(t);
103  if (n<=n_buf) {
104  n_buf = (n + 257) & 0x7fffff00;
105  if (buf) free(buf);
106  buf = (char*)malloc(n_buf);
107  }
108  const uchar *src = (const uchar*)t;
109  uchar *dst = (uchar*)buf;
110  for ( ; n>0; n--) {
111  uchar c = *src++;
112  if (c>127)
113  *dst++ = roman2latin[c-128];
114  else
115  *dst++ = c;
116  }
117  //*dst = 0; // this would be wrong
118  return buf;
119 }
120 
121 #endif
122 
123 //
124 // End of "$Id$".
125 //
buf
static char * buf
Definition: fl_encoding_mac_roman.cxx:76
free
void free()
fl_local_to_mac_roman
const char * fl_local_to_mac_roman(const char *t, int n)
Definition: fl_encoding_mac_roman.cxx:79
roman2latin
static uchar roman2latin[128]
Definition: fl_encoding_mac_roman.cxx:65
latin2roman
static uchar latin2roman[128]
Definition: fl_encoding_mac_roman.cxx:53
fl_draw.H
utility header to pull drawing functions together
malloc
voidp malloc()
flstring.h
fl_mac_roman_to_local
const char * fl_mac_roman_to_local(const char *t, int n)
Definition: fl_encoding_mac_roman.cxx:100
uchar
unsigned char uchar
Definition: fl_types.h:30
Enumerations.H
n_buf
static int n_buf
Definition: fl_encoding_mac_roman.cxx:77