#include <stdio.h>
#include <string.h>
#include <kate/kate.h>
static int get_packet(ogg_sync_state *oy,ogg_stream_state *os,int *init,ogg_packet *op)
{
char *buffer;
size_t bytes;
ogg_page og;
if (*init && ogg_stream_packetout(os,op)) return 0;
buffer=ogg_sync_buffer(oy,4096);
bytes=fread(buffer,1,4096,stdin);
if (bytes==0) return 1;
ogg_sync_wrote(oy,bytes);
while (ogg_sync_pageout(oy,&og)>0) {
if (ogg_page_bos(&og)) {
ogg_stream_init(os,ogg_page_serialno(&og));
*init=1;
}
ogg_stream_pagein(os,&og);
}
return get_packet(oy,os,init,op);
}
int main()
{
ogg_sync_state oy;
ogg_stream_state os;
int init=0;
ogg_packet op;
kate_state k;
const kate_event *ev;
kate_packet kp;
ogg_sync_init(&oy);
int ret=kate_high_decode_init(&k);
while (1) {
if (get_packet(&oy,&os,&init,&op)) break;
kate_packet_wrap(&kp,op.bytes,op.packet);
if (kate_high_decode_packetin(&k,&kp,&ev)>0) break;
if (ev) {
printf("Kate stream has text: %s\n",ev->text);
}
}
ogg_stream_clear(&os);
ogg_sync_clear(&oy);
kate_high_decode_clear(&k);
return 0;
}