':param new_block_delim_fn: T/F function to determine whether a given line
is the start of a new block.
:type new_block_delim_fn: function
:param block_filter_fn: function that determines if a block is valid and
will be provided.
Optional: defaults to `None` (no filtering)
:type block_filter_fn: function'

def __init__(self, source, new_block_delim_fn=None, block_filter_fn=None, **kwargs):

    (filter_fn, limit, offset) = (kwargs.pop('filter_fn', None), kwargs.pop('limit', None), kwargs.pop('offset', 0))
    line_provider = FilteredLineDataProvider(source, **kwargs)
    super(BlockDataProvider, self).__init__(line_provider, filter_fn=filter_fn, limit=limit, offset=offset)
    self.new_block_delim_fn = new_block_delim_fn
    self.block_filter_fn = block_filter_fn
    self.init_new_block()
