19#ifndef TESSERACT_CCMAIN_PARAGRAPHS_INTERNAL_H_
20#define TESSERACT_CCMAIN_PARAGRAPHS_INTERNAL_H_
40void RightWordAttributes(
const UNICHARSET *unicharset,
const WERD_CHOICE *werd,
const std::string &utf8,
41 bool *is_list,
bool *starts_idea,
bool *ends_idea);
45void LeftWordAttributes(
const UNICHARSET *unicharset,
const WERD_CHOICE *werd,
const std::string &utf8,
46 bool *is_list,
bool *starts_idea,
bool *ends_idea);
186 std::vector<LineHypothesis> hypotheses_;
196 std::vector<ParagraphModel *> &
models() {
199 const std::vector<ParagraphModel *> &
models()
const {
221 std::vector<ParagraphModel *> *models_;
222 std::vector<ParagraphModel *> models_we_added_;
225bool ValidFirstLine(
const std::vector<RowScratchRegisters> *rows,
int row,
226 const ParagraphModel *model);
227bool ValidBodyLine(
const std::vector<RowScratchRegisters> *rows,
int row,
228 const ParagraphModel *model);
229bool CrownCompatible(
const std::vector<RowScratchRegisters> *rows,
int a,
int b,
230 const ParagraphModel *model);
255 void CalculateOpenModels(
int row_start,
int row_end);
258 return open_models_[row - row_start_ + 1];
262 std::vector<RowScratchRegisters> *rows_;
274 std::vector<SetOfModels> open_models_;
281 int end,
int percentile);
284int InterwordSpace(
const std::vector<RowScratchRegisters> &rows,
int row_start,
int row_end);
296bool RowsFitModel(
const std::vector<RowScratchRegisters> *rows,
int start,
int end,
IntAfterTypedTestSuiteP after
IntBeforeRegisterTypedTestSuiteP before
bool StrongModel(const ParagraphModel *model)
std::vector< const ParagraphModel * > SetOfModels
int InterwordSpace(const std::vector< RowScratchRegisters > &rows, int row_start, int row_end)
bool FirstWordWouldHaveFit(const RowScratchRegisters &before, const RowScratchRegisters &after, tesseract::ParagraphJustification justification)
bool RowsFitModel(const std::vector< RowScratchRegisters > *rows, int start, int end, const ParagraphModel *model)
void RecomputeMarginsAndClearHypotheses(std::vector< RowScratchRegisters > *rows, int start, int end, int percentile)
bool ValidBodyLine(const std::vector< RowScratchRegisters > *rows, int row, const ParagraphModel *model)
void RightWordAttributes(const UNICHARSET *unicharset, const WERD_CHOICE *werd, const std::string &utf8, bool *is_list, bool *starts_idea, bool *ends_idea)
void CanonicalizeDetectionResults(std::vector< PARA * > *row_owners, PARA_LIST *paragraphs)
const ParagraphModel * kCrownLeft
const ParagraphModel * kCrownRight
void LeftWordAttributes(const UNICHARSET *unicharset, const WERD_CHOICE *werd, const std::string &utf8, bool *is_list, bool *starts_idea, bool *ends_idea)
bool CrownCompatible(const std::vector< RowScratchRegisters > *rows, int a, int b, const ParagraphModel *model)
bool ValidFirstLine(const std::vector< RowScratchRegisters > *rows, int row, const ParagraphModel *model)
bool AsciiLikelyListItem(const std::string &word)
bool operator==(const LineHypothesis &other) const
const ParagraphModel * model
LineHypothesis(LineType line_type, const ParagraphModel *m)
LineHypothesis(const LineHypothesis &other)=default
LineHypothesis & operator=(const LineHypothesis &other)=default
int AlignsideIndent(tesseract::ParagraphJustification just) const
void StartHypotheses(SetOfModels *models) const
const ParagraphModel * UniqueStartHypothesis() const
void NonNullHypotheses(SetOfModels *models) const
void AddBodyLine(const ParagraphModel *model)
void StrongHypotheses(SetOfModels *models) const
LineType GetLineType() const
static void AppendDebugHeaderFields(std::vector< std::string > &header)
void AppendDebugInfo(const ParagraphTheory &theory, std::vector< std::string > &dbg) const
int OffsideIndent(tesseract::ParagraphJustification just) const
void DiscardNonMatchingHypotheses(const SetOfModels &models)
void AddStartLine(const ParagraphModel *model)
const ParagraphModel * UniqueBodyHypothesis() const
void Init(const RowInfo &row)
void NonCenteredModels(SetOfModels *models)
const std::vector< ParagraphModel * > & models() const
std::vector< ParagraphModel * > & models()
ParagraphTheory(std::vector< ParagraphModel * > *models)
const ParagraphModel * Fits(const std::vector< RowScratchRegisters > *rows, int start, int end) const
void DiscardUnusedModels(const SetOfModels &used_models)
int IndexOf(const ParagraphModel *model) const
const ParagraphModel * AddModel(const ParagraphModel &model)
ParagraphModelSmearer(std::vector< RowScratchRegisters > *rows, int row_start, int row_end, ParagraphTheory *theory)