ftgzip.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /****************************************************************************
  2. *
  3. * ftgzip.h
  4. *
  5. * Gzip-compressed stream support.
  6. *
  7. * Copyright (C) 2002-2023 by
  8. * David Turner, Robert Wilhelm, and Werner Lemberg.
  9. *
  10. * This file is part of the FreeType project, and may only be used,
  11. * modified, and distributed under the terms of the FreeType project
  12. * license, LICENSE.TXT. By continuing to use, modify, or distribute
  13. * this file you indicate that you have read the license and
  14. * understand and accept it fully.
  15. *
  16. */
  17. #ifndef FTGZIP_H_
  18. #define FTGZIP_H_
  19. #include <freetype/freetype.h>
  20. #ifdef FREETYPE_H
  21. #error "freetype.h of FreeType 1 has been loaded!"
  22. #error "Please fix the directory search order for header files"
  23. #error "so that freetype.h of FreeType 2 is found first."
  24. #endif
  25. FT_BEGIN_HEADER
  26. /**************************************************************************
  27. *
  28. * @section:
  29. * gzip
  30. *
  31. * @title:
  32. * GZIP Streams
  33. *
  34. * @abstract:
  35. * Using gzip-compressed font files.
  36. *
  37. * @description:
  38. * In certain builds of the library, gzip compression recognition is
  39. * automatically handled when calling @FT_New_Face or @FT_Open_Face.
  40. * This means that if no font driver is capable of handling the raw
  41. * compressed file, the library will try to open a gzipped stream from it
  42. * and re-open the face with it.
  43. *
  44. * The stream implementation is very basic and resets the decompression
  45. * process each time seeking backwards is needed within the stream,
  46. * which significantly undermines the performance.
  47. *
  48. * This section contains the declaration of Gzip-specific functions.
  49. *
  50. */
  51. /**************************************************************************
  52. *
  53. * @function:
  54. * FT_Stream_OpenGzip
  55. *
  56. * @description:
  57. * Open a new stream to parse gzip-compressed font files. This is mainly
  58. * used to support the compressed `*.pcf.gz` fonts that come with
  59. * XFree86.
  60. *
  61. * @input:
  62. * stream ::
  63. * The target embedding stream.
  64. *
  65. * source ::
  66. * The source stream.
  67. *
  68. * @return:
  69. * FreeType error code. 0~means success.
  70. *
  71. * @note:
  72. * The source stream must be opened _before_ calling this function.
  73. *
  74. * Calling the internal function `FT_Stream_Close` on the new stream will
  75. * **not** call `FT_Stream_Close` on the source stream. None of the
  76. * stream objects will be released to the heap.
  77. *
  78. * This function may return `FT_Err_Unimplemented_Feature` if your build
  79. * of FreeType was not compiled with zlib support.
  80. */
  81. FT_EXPORT( FT_Error )
  82. FT_Stream_OpenGzip( FT_Stream stream,
  83. FT_Stream source );
  84. /**************************************************************************
  85. *
  86. * @function:
  87. * FT_Gzip_Uncompress
  88. *
  89. * @description:
  90. * Decompress a zipped input buffer into an output buffer. This function
  91. * is modeled after zlib's `uncompress` function.
  92. *
  93. * @input:
  94. * memory ::
  95. * A FreeType memory handle.
  96. *
  97. * input ::
  98. * The input buffer.
  99. *
  100. * input_len ::
  101. * The length of the input buffer.
  102. *
  103. * @output:
  104. * output ::
  105. * The output buffer.
  106. *
  107. * @inout:
  108. * output_len ::
  109. * Before calling the function, this is the total size of the output
  110. * buffer, which must be large enough to hold the entire uncompressed
  111. * data (so the size of the uncompressed data must be known in
  112. * advance). After calling the function, `output_len` is the size of
  113. * the used data in `output`.
  114. *
  115. * @return:
  116. * FreeType error code. 0~means success.
  117. *
  118. * @note:
  119. * This function may return `FT_Err_Unimplemented_Feature` if your build
  120. * of FreeType was not compiled with zlib support.
  121. *
  122. * @since:
  123. * 2.5.1
  124. */
  125. FT_EXPORT( FT_Error )
  126. FT_Gzip_Uncompress( FT_Memory memory,
  127. FT_Byte* output,
  128. FT_ULong* output_len,
  129. const FT_Byte* input,
  130. FT_ULong input_len );
  131. /* */
  132. FT_END_HEADER
  133. #endif /* FTGZIP_H_ */
  134. /* END */