TextEncodingPlugin.pas 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. {
  2. File: TextEncodingPlugin.p
  3. Contains: Required interface for Text Encoding Converter-Plugins
  4. Version: Technology: Mac OS 8
  5. Release: Universal Interfaces 3.4.2
  6. Copyright: © 1996-2002 by Apple Computer, Inc., all rights reserved.
  7. Bugs?: For bug reports, consult the following page on
  8. the World Wide Web:
  9. http://www.freepascal.org/bugs.html
  10. }
  11. {
  12. Modified for use with Free Pascal
  13. Version 200
  14. Please report any bugs to <[email protected]>
  15. }
  16. {$mode macpas}
  17. {$packenum 1}
  18. {$macro on}
  19. {$inline on}
  20. {$CALLING MWPASCAL}
  21. unit TextEncodingPlugin;
  22. interface
  23. {$setc UNIVERSAL_INTERFACES_VERSION := $0342}
  24. {$setc GAP_INTERFACES_VERSION := $0200}
  25. {$ifc not defined USE_CFSTR_CONSTANT_MACROS}
  26. {$setc USE_CFSTR_CONSTANT_MACROS := TRUE}
  27. {$endc}
  28. {$ifc defined CPUPOWERPC and defined CPUI386}
  29. {$error Conflicting initial definitions for CPUPOWERPC and CPUI386}
  30. {$endc}
  31. {$ifc defined FPC_BIG_ENDIAN and defined FPC_LITTLE_ENDIAN}
  32. {$error Conflicting initial definitions for FPC_BIG_ENDIAN and FPC_LITTLE_ENDIAN}
  33. {$endc}
  34. {$ifc not defined __ppc__ and defined CPUPOWERPC}
  35. {$setc __ppc__ := 1}
  36. {$elsec}
  37. {$setc __ppc__ := 0}
  38. {$endc}
  39. {$ifc not defined __i386__ and defined CPUI386}
  40. {$setc __i386__ := 1}
  41. {$elsec}
  42. {$setc __i386__ := 0}
  43. {$endc}
  44. {$ifc defined __ppc__ and __ppc__ and defined __i386__ and __i386__}
  45. {$error Conflicting definitions for __ppc__ and __i386__}
  46. {$endc}
  47. {$ifc defined __ppc__ and __ppc__}
  48. {$setc TARGET_CPU_PPC := TRUE}
  49. {$setc TARGET_CPU_X86 := FALSE}
  50. {$elifc defined __i386__ and __i386__}
  51. {$setc TARGET_CPU_PPC := FALSE}
  52. {$setc TARGET_CPU_X86 := TRUE}
  53. {$elsec}
  54. {$error Neither __ppc__ nor __i386__ is defined.}
  55. {$endc}
  56. {$setc TARGET_CPU_PPC_64 := FALSE}
  57. {$ifc defined FPC_BIG_ENDIAN}
  58. {$setc TARGET_RT_BIG_ENDIAN := TRUE}
  59. {$setc TARGET_RT_LITTLE_ENDIAN := FALSE}
  60. {$elifc defined FPC_LITTLE_ENDIAN}
  61. {$setc TARGET_RT_BIG_ENDIAN := FALSE}
  62. {$setc TARGET_RT_LITTLE_ENDIAN := TRUE}
  63. {$elsec}
  64. {$error Neither FPC_BIG_ENDIAN nor FPC_LITTLE_ENDIAN are defined.}
  65. {$endc}
  66. {$setc ACCESSOR_CALLS_ARE_FUNCTIONS := TRUE}
  67. {$setc CALL_NOT_IN_CARBON := FALSE}
  68. {$setc OLDROUTINENAMES := FALSE}
  69. {$setc OPAQUE_TOOLBOX_STRUCTS := TRUE}
  70. {$setc OPAQUE_UPP_TYPES := TRUE}
  71. {$setc OTCARBONAPPLICATION := TRUE}
  72. {$setc OTKERNEL := FALSE}
  73. {$setc PM_USE_SESSION_APIS := TRUE}
  74. {$setc TARGET_API_MAC_CARBON := TRUE}
  75. {$setc TARGET_API_MAC_OS8 := FALSE}
  76. {$setc TARGET_API_MAC_OSX := TRUE}
  77. {$setc TARGET_CARBON := TRUE}
  78. {$setc TARGET_CPU_68K := FALSE}
  79. {$setc TARGET_CPU_MIPS := FALSE}
  80. {$setc TARGET_CPU_SPARC := FALSE}
  81. {$setc TARGET_OS_MAC := TRUE}
  82. {$setc TARGET_OS_UNIX := FALSE}
  83. {$setc TARGET_OS_WIN32 := FALSE}
  84. {$setc TARGET_RT_MAC_68881 := FALSE}
  85. {$setc TARGET_RT_MAC_CFM := FALSE}
  86. {$setc TARGET_RT_MAC_MACHO := TRUE}
  87. {$setc TYPED_FUNCTION_POINTERS := TRUE}
  88. {$setc TYPE_BOOL := FALSE}
  89. {$setc TYPE_EXTENDED := FALSE}
  90. {$setc TYPE_LONGLONG := TRUE}
  91. uses MacTypes,TextCommon,TextEncodingConverter;
  92. {$ALIGN MAC68K}
  93. {
  94. ####################################################################################
  95. Constants
  96. ####################################################################################
  97. }
  98. {
  99. ####################################################################################
  100. Structs
  101. ####################################################################################
  102. }
  103. type
  104. TECBufferContextRecPtr = ^TECBufferContextRec;
  105. TECBufferContextRec = record
  106. textInputBuffer: TextPtr;
  107. textInputBufferEnd: TextPtr;
  108. textOutputBuffer: TextPtr;
  109. textOutputBufferEnd: TextPtr;
  110. encodingInputBuffer: TextEncodingRunPtr;
  111. encodingInputBufferEnd: TextEncodingRunPtr;
  112. encodingOutputBuffer: TextEncodingRunPtr;
  113. encodingOutputBufferEnd: TextEncodingRunPtr;
  114. end;
  115. TECPluginStateRecPtr = ^TECPluginStateRec;
  116. TECPluginStateRec = record
  117. state1: SInt8;
  118. state2: SInt8;
  119. state3: SInt8;
  120. state4: SInt8;
  121. longState1: UInt32;
  122. longState2: UInt32;
  123. longState3: UInt32;
  124. longState4: UInt32;
  125. end;
  126. TECConverterContextRecPtr = ^TECConverterContextRec;
  127. TECConverterContextRec = record
  128. { public - manipulated externally and by plugin }
  129. pluginRec: Ptr;
  130. sourceEncoding: TextEncoding;
  131. destEncoding: TextEncoding;
  132. reserved1: UInt32;
  133. reserved2: UInt32;
  134. bufferContext: TECBufferContextRec;
  135. { private - manipulated only within Plugin }
  136. contextRefCon: UInt32;
  137. conversionProc: ProcPtr;
  138. flushProc: ProcPtr;
  139. clearContextInfoProc: ProcPtr;
  140. options1: UInt32;
  141. options2: UInt32;
  142. pluginState: TECPluginStateRec;
  143. end;
  144. TECSnifferContextRecPtr = ^TECSnifferContextRec;
  145. TECSnifferContextRec = record
  146. { public - manipulated externally }
  147. pluginRec: Ptr;
  148. encoding: TextEncoding;
  149. maxErrors: ItemCount;
  150. maxFeatures: ItemCount;
  151. textInputBuffer: TextPtr;
  152. textInputBufferEnd: TextPtr;
  153. numFeatures: ItemCount;
  154. numErrors: ItemCount;
  155. { private - manipulated only within Plugin }
  156. contextRefCon: UInt32;
  157. sniffProc: ProcPtr;
  158. clearContextInfoProc: ProcPtr;
  159. pluginState: TECPluginStateRec;
  160. end;
  161. {
  162. ####################################################################################
  163. Functional Messages
  164. ####################################################################################
  165. }
  166. {$ifc TYPED_FUNCTION_POINTERS}
  167. TECPluginNewEncodingConverterPtr = function(var newEncodingConverter: TECObjectRef; var plugContext: TECConverterContextRec; inputEncoding: TextEncoding; outputEncoding: TextEncoding): OSStatus;
  168. {$elsec}
  169. TECPluginNewEncodingConverterPtr = ProcPtr;
  170. {$endc}
  171. {$ifc TYPED_FUNCTION_POINTERS}
  172. TECPluginClearContextInfoPtr = function(encodingConverter: TECObjectRef; var plugContext: TECConverterContextRec): OSStatus;
  173. {$elsec}
  174. TECPluginClearContextInfoPtr = ProcPtr;
  175. {$endc}
  176. {$ifc TYPED_FUNCTION_POINTERS}
  177. TECPluginConvertTextEncodingPtr = function(encodingConverter: TECObjectRef; var plugContext: TECConverterContextRec): OSStatus;
  178. {$elsec}
  179. TECPluginConvertTextEncodingPtr = ProcPtr;
  180. {$endc}
  181. {$ifc TYPED_FUNCTION_POINTERS}
  182. TECPluginFlushConversionPtr = function(encodingConverter: TECObjectRef; var plugContext: TECConverterContextRec): OSStatus;
  183. {$elsec}
  184. TECPluginFlushConversionPtr = ProcPtr;
  185. {$endc}
  186. {$ifc TYPED_FUNCTION_POINTERS}
  187. TECPluginDisposeEncodingConverterPtr = function(newEncodingConverter: TECObjectRef; var plugContext: TECConverterContextRec): OSStatus;
  188. {$elsec}
  189. TECPluginDisposeEncodingConverterPtr = ProcPtr;
  190. {$endc}
  191. {$ifc TYPED_FUNCTION_POINTERS}
  192. TECPluginNewEncodingSnifferPtr = function(var encodingSniffer: TECSnifferObjectRef; var snifContext: TECSnifferContextRec; inputEncoding: TextEncoding): OSStatus;
  193. {$elsec}
  194. TECPluginNewEncodingSnifferPtr = ProcPtr;
  195. {$endc}
  196. {$ifc TYPED_FUNCTION_POINTERS}
  197. TECPluginClearSnifferContextInfoPtr = function(encodingSniffer: TECSnifferObjectRef; var snifContext: TECSnifferContextRec): OSStatus;
  198. {$elsec}
  199. TECPluginClearSnifferContextInfoPtr = ProcPtr;
  200. {$endc}
  201. {$ifc TYPED_FUNCTION_POINTERS}
  202. TECPluginSniffTextEncodingPtr = function(encodingSniffer: TECSnifferObjectRef; var snifContext: TECSnifferContextRec): OSStatus;
  203. {$elsec}
  204. TECPluginSniffTextEncodingPtr = ProcPtr;
  205. {$endc}
  206. {$ifc TYPED_FUNCTION_POINTERS}
  207. TECPluginDisposeEncodingSnifferPtr = function(encodingSniffer: TECSnifferObjectRef; var snifContext: TECSnifferContextRec): OSStatus;
  208. {$elsec}
  209. TECPluginDisposeEncodingSnifferPtr = ProcPtr;
  210. {$endc}
  211. {$ifc TYPED_FUNCTION_POINTERS}
  212. TECPluginGetCountAvailableTextEncodingsPtr = function(availableEncodings: TextEncodingPtr; maxAvailableEncodings: ItemCount; var actualAvailableEncodings: ItemCount): OSStatus;
  213. {$elsec}
  214. TECPluginGetCountAvailableTextEncodingsPtr = ProcPtr;
  215. {$endc}
  216. {$ifc TYPED_FUNCTION_POINTERS}
  217. TECPluginGetCountAvailableTextEncodingPairsPtr = function(availableEncodings: TECConversionInfoPtr; maxAvailableEncodings: ItemCount; var actualAvailableEncodings: ItemCount): OSStatus;
  218. {$elsec}
  219. TECPluginGetCountAvailableTextEncodingPairsPtr = ProcPtr;
  220. {$endc}
  221. {$ifc TYPED_FUNCTION_POINTERS}
  222. TECPluginGetCountDestinationTextEncodingsPtr = function(inputEncoding: TextEncoding; destinationEncodings: TextEncodingPtr; maxDestinationEncodings: ItemCount; var actualDestinationEncodings: ItemCount): OSStatus;
  223. {$elsec}
  224. TECPluginGetCountDestinationTextEncodingsPtr = ProcPtr;
  225. {$endc}
  226. {$ifc TYPED_FUNCTION_POINTERS}
  227. TECPluginGetCountSubTextEncodingsPtr = function(inputEncoding: TextEncoding; subEncodings: TextEncodingPtr; maxSubEncodings: ItemCount; var actualSubEncodings: ItemCount): OSStatus;
  228. {$elsec}
  229. TECPluginGetCountSubTextEncodingsPtr = ProcPtr;
  230. {$endc}
  231. {$ifc TYPED_FUNCTION_POINTERS}
  232. TECPluginGetCountAvailableSniffersPtr = function(availableEncodings: TextEncodingPtr; maxAvailableEncodings: ItemCount; var actualAvailableEncodings: ItemCount): OSStatus;
  233. {$elsec}
  234. TECPluginGetCountAvailableSniffersPtr = ProcPtr;
  235. {$endc}
  236. {$ifc TYPED_FUNCTION_POINTERS}
  237. TECPluginGetTextEncodingInternetNamePtr = function(textEncoding_: TextEncoding; var encodingName: Str255): OSStatus;
  238. {$elsec}
  239. TECPluginGetTextEncodingInternetNamePtr = ProcPtr;
  240. {$endc}
  241. {$ifc TYPED_FUNCTION_POINTERS}
  242. TECPluginGetTextEncodingFromInternetNamePtr = function(var textEncoding_: TextEncoding; encodingName: Str255): OSStatus;
  243. {$elsec}
  244. TECPluginGetTextEncodingFromInternetNamePtr = ProcPtr;
  245. {$endc}
  246. {$ifc TYPED_FUNCTION_POINTERS}
  247. TECPluginGetCountWebEncodingsPtr = function(availableEncodings: TextEncodingPtr; maxAvailableEncodings: ItemCount; var actualAvailableEncodings: ItemCount): OSStatus;
  248. {$elsec}
  249. TECPluginGetCountWebEncodingsPtr = ProcPtr;
  250. {$endc}
  251. {$ifc TYPED_FUNCTION_POINTERS}
  252. TECPluginGetCountMailEncodingsPtr = function(availableEncodings: TextEncodingPtr; maxAvailableEncodings: ItemCount; var actualAvailableEncodings: ItemCount): OSStatus;
  253. {$elsec}
  254. TECPluginGetCountMailEncodingsPtr = ProcPtr;
  255. {$endc}
  256. {
  257. ####################################################################################
  258. Dispatch Table Definition
  259. ####################################################################################
  260. }
  261. const
  262. kTECPluginDispatchTableVersion1 = $00010000; { 1.0 through 1.0.3 releases }
  263. kTECPluginDispatchTableVersion1_1 = $00010001; { 1.1 releases }
  264. kTECPluginDispatchTableVersion1_2 = $00010002; { 1.2 releases }
  265. kTECPluginDispatchTableCurrentVersion = $00010002;
  266. type
  267. TECPluginDispatchTablePtr = ^TECPluginDispatchTable;
  268. TECPluginDispatchTable = record
  269. version: TECPluginVersion;
  270. compatibleVersion: TECPluginVersion;
  271. PluginID: TECPluginSignature;
  272. PluginNewEncodingConverter: TECPluginNewEncodingConverterPtr;
  273. PluginClearContextInfo: TECPluginClearContextInfoPtr;
  274. PluginConvertTextEncoding: TECPluginConvertTextEncodingPtr;
  275. PluginFlushConversion: TECPluginFlushConversionPtr;
  276. PluginDisposeEncodingConverter: TECPluginDisposeEncodingConverterPtr;
  277. PluginNewEncodingSniffer: TECPluginNewEncodingSnifferPtr;
  278. PluginClearSnifferContextInfo: TECPluginClearSnifferContextInfoPtr;
  279. PluginSniffTextEncoding: TECPluginSniffTextEncodingPtr;
  280. PluginDisposeEncodingSniffer: TECPluginDisposeEncodingSnifferPtr;
  281. PluginGetCountAvailableTextEncodings: TECPluginGetCountAvailableTextEncodingsPtr;
  282. PluginGetCountAvailableTextEncodingPairs: TECPluginGetCountAvailableTextEncodingPairsPtr;
  283. PluginGetCountDestinationTextEncodings: TECPluginGetCountDestinationTextEncodingsPtr;
  284. PluginGetCountSubTextEncodings: TECPluginGetCountSubTextEncodingsPtr;
  285. PluginGetCountAvailableSniffers: TECPluginGetCountAvailableSniffersPtr;
  286. PluginGetCountWebTextEncodings: TECPluginGetCountWebEncodingsPtr;
  287. PluginGetCountMailTextEncodings: TECPluginGetCountMailEncodingsPtr;
  288. PluginGetTextEncodingInternetName: TECPluginGetTextEncodingInternetNamePtr;
  289. PluginGetTextEncodingFromInternetName: TECPluginGetTextEncodingFromInternetNamePtr;
  290. end;
  291. {$ALIGN MAC68K}
  292. end.