Tesseract  3.02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ocrrow.h
Go to the documentation of this file.
1 /**********************************************************************
2  * File: ocrrow.h (Formerly row.h)
3  * Description: Code for the ROW class.
4  * Author: Ray Smith
5  * Created: Tue Oct 08 15:58:04 BST 1991
6  *
7  * (C) Copyright 1991, Hewlett-Packard Ltd.
8  ** Licensed under the Apache License, Version 2.0 (the "License");
9  ** you may not use this file except in compliance with the License.
10  ** You may obtain a copy of the License at
11  ** http://www.apache.org/licenses/LICENSE-2.0
12  ** Unless required by applicable law or agreed to in writing, software
13  ** distributed under the License is distributed on an "AS IS" BASIS,
14  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  ** See the License for the specific language governing permissions and
16  ** limitations under the License.
17  *
18  **********************************************************************/
19 
20 #ifndef OCRROW_H
21 #define OCRROW_H
22 
23 #include <stdio.h>
24 
25 #include "quspline.h"
26 #include "werd.h"
27 
28 class TO_ROW;
29 
30 class PARA;
31 
32 class ROW:public ELIST_LINK
33 {
34  friend void tweak_row_baseline(ROW *, double, double);
35  public:
36  ROW() {
37  } //empty constructor
38  ROW( //constructor
39  inT32 spline_size, //no of segments
40  inT32 *xstarts, //segment boundaries
41  double *coeffs, //coefficients //ascender size
42  float x_height,
43  float ascenders,
44  float descenders, //descender size
45  inT16 kern, //char gap
46  inT16 space); //word gap
47  ROW( //constructor
48  TO_ROW *row, //textord row
49  inT16 kern, //char gap
50  inT16 space); //word gap
51 
52  WERD_LIST *word_list() { //get words
53  return &words;
54  }
55 
56  float base_line( //compute baseline
57  float xpos) const { //at the position
58  //get spline value
59  return (float) baseline.y (xpos);
60  }
61  float x_height() const { //return x height
62  return xheight;
63  }
64  void set_x_height(float new_xheight) { // set x height
65  xheight = new_xheight;
66  }
67  inT32 kern() const { //return kerning
68  return kerning;
69  }
70  float body_size() const { //return body size
71  return bodysize;
72  }
73  void set_body_size(float new_size) { // set body size
74  bodysize = new_size;
75  }
76  inT32 space() const { //return spacing
77  return spacing;
78  }
79  float ascenders() const { //return size
80  return ascrise;
81  }
82  float descenders() const { //return size
83  return descdrop;
84  }
85  TBOX bounding_box() const { //return bounding box
86  return bound_box;
87  }
88 
90  lmargin_ = lmargin;
91  }
93  rmargin_ = rmargin;
94  }
95  inT16 lmargin() const {
96  return lmargin_;
97  }
98  inT16 rmargin() const {
99  return rmargin_;
100  }
101 
102  void set_has_drop_cap(bool has) {
103  has_drop_cap_ = has;
104  }
105  bool has_drop_cap() const {
106  return has_drop_cap_;
107  }
108 
109  void set_para(PARA *p) {
110  para_ = p;
111  }
112  PARA *para() const {
113  return para_;
114  }
115 
116  void recalc_bounding_box(); //recalculate BB
117 
118  void move( // reposition row
119  const ICOORD vec); // by vector
120 
121  void print( //print
122  FILE *fp); //file to print on
123 
124  #ifndef GRAPHICS_DISABLED
125  void plot( //draw one
126  ScrollView* window, //window to draw in
127  ScrollView::Color colour); //uniform colour
128  void plot( //draw one
129  ScrollView* window); //in rainbow colours
130 
131  void plot_baseline( //draw the baseline
132  ScrollView* window, //window to draw in
133  ScrollView::Color colour) { //colour to draw
134  //draw it
135  baseline.plot (window, colour);
136  }
137  #endif // GRAPHICS_DISABLED
138  ROW& operator= (const ROW & source);
139 
140  private:
141  inT32 kerning; //inter char gap
142  inT32 spacing; //inter word gap
143  TBOX bound_box; //bounding box
144  float xheight; //height of line
145  float ascrise; //size of ascenders
146  float descdrop; //-size of descenders
147  float bodysize; //CJK character size. (equals to
148  //xheight+ascrise by default)
149  WERD_LIST words; //words
150  QSPLINE baseline; //baseline spline
151 
152  // These get set after blocks have been determined.
153  bool has_drop_cap_;
154  inT16 lmargin_; // Distance to left polyblock margin.
155  inT16 rmargin_; // Distance to right polyblock margin.
156 
157  // This gets set during paragraph analysis.
158  PARA *para_; // Paragraph of which this row is part.
159 };
160 
161 ELISTIZEH (ROW)
162 #endif