Define Parakeet::Segment attributes
This commit is contained in:
parent
bb096e54ac
commit
63d3136465
|
|
@ -157,4 +157,11 @@ typedef struct {
|
|||
} \
|
||||
} while (0)
|
||||
|
||||
#define GetParakeetSegment(obj, rwps) do { \
|
||||
TypedData_Get_Struct((obj), ruby_whisper_parakeet_segment, &ruby_whisper_parakeet_segment_type, (rwps)); \
|
||||
if (!(rwps)->context) { \
|
||||
rb_raise(rb_eRuntimeError, "Not initialized"); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,6 +1,26 @@
|
|||
#include "ruby_whisper.h"
|
||||
|
||||
#define ITERATE_ATTRS(ITERATOR) \
|
||||
ITERATOR(start_time, t0, TIME) \
|
||||
ITERATOR(end_time, t1, TIME) \
|
||||
ITERATOR(text, text, STRING)
|
||||
|
||||
#define VAL_FROM_TIME(v) (LONG2NUM((v) * 10))
|
||||
#define VAL_FROM_STRING(v) (rb_str_new2(v))
|
||||
#define READER(type) VAL_FROM_##type
|
||||
#define DEF_ATTR(rb_name, c_name, type) \
|
||||
static VALUE \
|
||||
ruby_whisper_parakeet_get_##rb_name(VALUE self) \
|
||||
{ \
|
||||
ruby_whisper_parakeet_segment *rwps; \
|
||||
GetParakeetSegment(self, rwps); \
|
||||
ruby_whisper_parakeet_context *rwpc; \
|
||||
GetParakeetContext(rwps->context, rwpc); \
|
||||
return READER(type)(parakeet_full_get_segment_##c_name(rwpc->context, rwps->index)); \
|
||||
}
|
||||
|
||||
extern VALUE cParakeetSegment;
|
||||
extern const rb_data_type_t ruby_whisper_parakeet_context_type;
|
||||
|
||||
static void
|
||||
rb_whisper_parakeet_segment_mark(void *p)
|
||||
|
|
@ -50,10 +70,25 @@ ruby_whisper_parakeet_segment_init(VALUE context, int index)
|
|||
return segment;
|
||||
}
|
||||
|
||||
ITERATE_ATTRS(DEF_ATTR)
|
||||
|
||||
void
|
||||
init_ruby_whisper_parakeet_segment(VALUE *mParakeet)
|
||||
{
|
||||
cParakeetSegment = rb_define_class_under(*mParakeet, "Segment", rb_cObject);
|
||||
|
||||
rb_define_alloc_func(cParakeetSegment, ruby_whisper_parakeet_segment_s_allocate);
|
||||
|
||||
#define REGISTER_ATTR(rb_name, c_name, type) \
|
||||
rb_define_method(cParakeetSegment, #rb_name, ruby_whisper_parakeet_get_##rb_name, 0);
|
||||
|
||||
ITERATE_ATTRS(REGISTER_ATTR)
|
||||
|
||||
#undef REGISTER_ATTR
|
||||
}
|
||||
|
||||
#undef DEF_ATTR
|
||||
#undef READER
|
||||
#undef VAL_FROM_STRING
|
||||
#undef VAL_FROM_TIME
|
||||
#undef ITERATE_ATTRS
|
||||
|
|
|
|||
|
|
@ -7,8 +7,14 @@ class TestParakeetSegment < TestBase
|
|||
end
|
||||
|
||||
def test_segment
|
||||
whole_text = ""
|
||||
@parakeet.each_segment do |segment|
|
||||
assert_instance_of Parakeet::Segment, segment
|
||||
assert_kind_of Integer, segment.start_time
|
||||
assert segment.end_time >= segment.start_time
|
||||
assert_kind_of String, segment.text
|
||||
whole_text << segment.text
|
||||
end
|
||||
assert_match(/ask not what your country can do for you, ask what you can do for your country/, whole_text)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue