11512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod/*
21512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * Copyright (C) 1998-2004  David Turner and Werner Lemberg
31512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * Copyright (C) 2006  Behdad Esfahbod
41512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod *
51512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * This is part of HarfBuzz, an OpenType Layout engine library.
61512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod *
71512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * Permission is hereby granted, without written agreement and without
81512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this
91512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * software and its documentation for any purpose, provided that the
101512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * above copyright notice and the following two paragraphs appear in
111512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * all copies of this software.
121512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod *
131512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
141512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
151512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
161512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
171512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * DAMAGE.
181512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod *
191512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
201512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
211512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
221512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
231512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
241512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod */
251512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
261512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#ifndef HARFBUZZ_STREAM_PRIVATE_H
271512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define HARFBUZZ_STREAM_PRIVATE_H
281512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
291512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#include "harfbuzz-impl.h"
301512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#include "harfbuzz-stream.h"
311512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
321512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_BEGIN_HEADER
331512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
341512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL void
351512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_close_stream( HB_Stream stream );
361512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
371512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL HB_Int
381512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_stream_pos( HB_Stream stream );
391512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
401512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL HB_Error
411512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_stream_seek( HB_Stream stream,
421512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod                 HB_UInt   pos );
431512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
441512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL HB_Error
451512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_stream_frame_enter( HB_Stream stream,
461512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod                        HB_UInt   size );
471512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
481512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_INTERNAL void
491512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod_hb_stream_frame_exit( HB_Stream stream );
501512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
511512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod/* convenience macros */
521512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
531512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  SET_ERR(c)   ( (error = (c)) != 0 )
541512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
551512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  GOTO_Table(tag) (0)
561512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  FILE_Pos()      _hb_stream_pos( stream )
571512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  FILE_Seek(pos)  SET_ERR( _hb_stream_seek( stream, pos ) )
581512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  ACCESS_Frame(size)  SET_ERR( _hb_stream_frame_enter( stream, size ) )
591512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  FORGET_Frame()      _hb_stream_frame_exit( stream )
601512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
611512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  GET_Byte()      (*stream->cursor++)
621512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  GET_Short()     (stream->cursor += 2, (HB_Short)( \
631512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod				(*(((HB_Byte*)stream->cursor)-2) << 8) | \
641512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod				 *(((HB_Byte*)stream->cursor)-1) \
651512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			 ))
661512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  GET_Long()      (stream->cursor += 4, (HB_Int)( \
671512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod				(*(((HB_Byte*)stream->cursor)-4) << 24) | \
681512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod				(*(((HB_Byte*)stream->cursor)-3) << 16) | \
691512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod				(*(((HB_Byte*)stream->cursor)-2) << 8) | \
701512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod				 *(((HB_Byte*)stream->cursor)-1) \
711512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod			 ))
721512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
731512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
741512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  GET_Char()      ((HB_Char)GET_Byte())
751512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  GET_UShort()    ((HB_UShort)GET_Short())
761512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  GET_ULong()     ((HB_UInt)GET_Long())
771512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#define  GET_Tag4()      GET_ULong()
781512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
791512a7357513b72e2a07dda706a176bb23d694e9Behdad EsfahbodHB_END_HEADER
801512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod
811512a7357513b72e2a07dda706a176bb23d694e9Behdad Esfahbod#endif /* HARFBUZZ_STREAM_PRIVATE_H */
82