tree-sitter-markdown-updated 0.1.0

Markdown grammar for tree-sitter
Documentation
#include "./block_context.h"

namespace tree_sitter_markdown {

bool BlockContext::has_fst_ctn() const { return has_fst_ctn_; }
Symbol BlockContext::sym() const { return sym_; }
LexedLength BlockContext::len() const { return len_; }
LexedColumn BlockContext::ind() const { return ind_; }
ParseState BlockContext::pst() const { TREE_SITTER_MARKDOWN_ASSERT(pst_ != PST_INVALID); return pst_; }

void BlockContext::mrk_has_fst_ctn() { has_fst_ctn_ = true; }

BlockContext::BlockContext(): has_fst_ctn_(false), sym_(SYM_TXT), len_(LEXED_LENGTH_MAX), ind_(LEXED_COLUMN_MAX), pst_(PST_INVALID) {}
BlockContext::BlockContext(const Symbol sym, const LexedLength len, const LexedColumn ind): has_fst_ctn_(false), sym_(sym), len_(len), ind_(ind), pst_(blk_sym_pst(sym)) {}

unsigned BlockContext::serialize(unsigned char *buffer) const {
  TREE_SITTER_MARKDOWN_ASSERT(is_blk_sym(sym_));
  TREE_SITTER_MARKDOWN_ASSERT(sym_ <= 0b1111111);
  TREE_SITTER_MARKDOWN_ASSERT(len_ <= 0b11111111);
  TREE_SITTER_MARKDOWN_ASSERT(ind_ <= 0b11111111);
  buffer[0] = (sym_ << 1) | has_fst_ctn_;
  buffer[1] = len_;
  buffer[2] = ind_;
  return 3;
}
unsigned BlockContext::deserialize(const unsigned char *buffer) {
  has_fst_ctn_ = buffer[0] & 1;
  sym_ = static_cast<Symbol>(buffer[0] >> 1);
  len_ = buffer[1];
  ind_ = buffer[2];
  pst_ = blk_sym_pst(sym_);
  return 3;
}

bool BlockContextStack::empty() const { return stk_.empty(); }
BlockContext &BlockContextStack::back() { return stk_.back(); }
const BlockContext &BlockContextStack::back() const { return stk_.back(); }
BlockContextStack::ConstIterator BlockContextStack::begin() const { return stk_.begin(); }
BlockContextStack::ConstIterator BlockContextStack::end() const { return stk_.end(); }
BlockContextStack::ConstReverseIterator BlockContextStack::rbegin() const { return stk_.rbegin(); }
BlockContextStack::ConstReverseIterator BlockContextStack::rend() const { return stk_.rend(); }

void BlockContextStack::mrk_has_fst_ctn() {
  ReverseIterator itr = stk_.rbegin();
  ReverseIterator end = stk_.rend();
  for (; itr != end; itr++) {
    if (itr->has_fst_ctn()) break;
    itr->mrk_has_fst_ctn();
  }
}

void BlockContextStack::clear() { stk_.clear(); }
unsigned BlockContextStack::serialize(unsigned char *buffer) const {
  size_t i = 0;
  buffer[i++] = stk_.size();
  ConstIterator itr = stk_.begin();
  ConstIterator end = stk_.end();
  for (; itr != end; itr++) {
    i += itr->serialize(&buffer[i]);
  }
  return i;
}
unsigned BlockContextStack::deserialize(const unsigned char *buffer) {
  size_t i = 0;
  stk_.resize(buffer[i++]);
  Iterator itr = stk_.begin();
  Iterator end = stk_.end();
  for (; itr != end; itr++) {
    i += itr->deserialize(&buffer[i]);
  }
  return i;
}

void BlockContextStack::push(const BlockContext &ctx) {
  stk_.push_back(ctx);
}
void BlockContextStack::pop() {
  TREE_SITTER_MARKDOWN_ASSERT(!empty());
  stk_.pop_back();
}

}