InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
IMojikumiTable.h
1 //========================================================================================
2 //
3 // $File$
4 //
5 // Owner: nmccully
6 //
7 // $Author$
8 //
9 // $DateTime$
10 //
11 // $Revision$
12 //
13 // $Change$
14 //
15 // Copyright 1997-2010 Adobe Systems Incorporated. All rights reserved.
16 //
17 // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance
18 // with the terms of the Adobe license agreement accompanying it. If you have received
19 // this file from a source other than Adobe, then your use, modification, or
20 // distribution of it requires the prior written permission of Adobe.
21 //
22 //========================================================================================
23 
24 #ifndef __IMojikumiTable__
25 #define __IMojikumiTable__
26 
27 
28 #include "IPMUnknown.h"
29 #include "CTextEnum.h"
30 #include "CJKID.h"
31 
32 class IKinsokuTable;
33 class IPMFont;
34 
35 typedef int16 MojikumiClass;
36 
37 
39  public:
40  typedef base_type data_type;
41 
42  enum { kNumOfMojikumiPriority = 10 };
43 
44  MojikumiElement() : fMinimum(0.0), fDesired(0.0), fMaximum(0.0), fPriority(0), fAkiDoesntFloat(kFalse)
45  {}
46 
47  bool16 operator==(const MojikumiElement& other) const
48  { return (fMinimum == other.fMinimum && fDesired == other.fDesired &&
49  fMaximum == other.fMaximum && fPriority == other.fPriority &&
50  fAkiDoesntFloat == other.fAkiDoesntFloat); }
51  bool16 operator!=(const MojikumiElement& other) const
52  { return !(*this == other); }
53 
54  MojikumiElement& operator*=(PMReal scale)
55  { fMinimum *= scale; fMaximum *= scale; fDesired *= scale; return *this; }
56  MojikumiElement& operator+=(PMReal indent)
57  { fMinimum += indent; fMaximum += indent; fDesired += indent; return *this; }
58 
59  void Clear()
60  { fMinimum = 0.0, fDesired = 0.0, fMaximum = 0.0, fPriority = 0, fAkiDoesntFloat = kFalse; }
61 
62  void Set(PMReal min, PMReal des, PMReal max, int16 pri = 0, bool16 alt = kFalse)
63  { fMinimum = min, fDesired = des, fMaximum = max, fPriority = pri, fAkiDoesntFloat = alt; }
64 
65  PMReal Minimum() const { return fMinimum; }
66  PMReal Desired() const { return fDesired; }
67  PMReal Maximum() const { return fMaximum; }
68  int16 Priority() const { return fPriority; }
69  bool16 IsAkiDoesntFloat() const { return fAkiDoesntFloat; }
70 
71  PMReal& Minimum() { return fMinimum; }
72  PMReal& Desired() { return fDesired; }
73  PMReal& Maximum() { return fMaximum; }
74 
75  int16& Priority() { return fPriority; }
76  bool16& IsAkiDoesntFloat() { return fAkiDoesntFloat; }
77 
78  private:
79  PMReal fMinimum;
80  PMReal fDesired;
81  PMReal fMaximum;
82  int16 fPriority;
83  bool16 fAkiDoesntFloat;
84 };
85 
86 
88 {
89  public:
90  typedef base_type data_type;
91  MojikumiBaseSpacing() : fMojikumiClass(0) {}
92  MojikumiElement fBefore;
93  MojikumiElement fAfter;
94  MojikumiClass fMojikumiClass;
95 };
96 
100 {
101  public:
102  typedef base_type data_type;
103  MojikumiOverrideSpacing() : fBaseClass(0), fSideClass(0), fIsAfter(kFalse)
104  {}
105  MojikumiOverrideSpacing(const MojikumiElement& o) : MojikumiElement(o), fBaseClass(0), fSideClass(0), fIsAfter(kFalse)
106  {}
107 
108  void Set(MojikumiClass base, MojikumiClass side, bool16 after,
109  PMReal min, PMReal des, PMReal max, int16 pri = 0, bool16 alt = kFalse)
110  { MojikumiElement::Set(min, des, max, pri, alt); fBaseClass = base; fSideClass = side; fIsAfter = after; }
111 
112  MojikumiClass BaseClass() const { return fBaseClass; }
113  MojikumiClass SideClass() const { return fSideClass; }
114  bool16 IsAfter() const { return fIsAfter; }
115 
116  MojikumiClass& BaseClass() { return fBaseClass; }
117  MojikumiClass& SideClass() { return fSideClass; }
118  bool16& IsAfter() { return fIsAfter; }
119 
120  private:
121  MojikumiClass fBaseClass;
122  MojikumiClass fSideClass;
123  bool16 fIsAfter;
124 };
125 
126 
127 #define USE_KATAKANA_CLASS
128 
129 // We changed the following name of character classes.
130 // kJIS_Kana -> kJIS_Hiragana
131 // kJIS_EndOfLine -> kJIS_EdgeOfLine
132 // kJIS_EndOfParagraph -> kJIS_TopOfParagraph
133 //
134 // And we added some JIS character classes
135 
139 enum { kJIS_Unknown = 0,
140  // JISx4051 character class
141  kJIS_OpenParen = 1, // Open parenthesis
142  kJIS_CloseParen = 2, // Close parenthesis
143  kJIS_Kinsoku = 3, // Can't-begin-line characters
144  kJIS_EndPunctuation = 4, // End punctuation
145  kJIS_MiddlePunctuation = 5, // Middle punctuation
146  kJIS_Period = 6, // Period
147  kJIS_NotSeparate = 7, // Can't-be-separated characters
148  kJIS_BeforeNumber = 8, // Symbols proceding numbers
149  kJIS_AfterNumber = 9, // Symbols following numbers
150  kJIS_FullSpace = 10, // Double byte space
151  kJIS_Hiragana = 11, // Hiragana
152  kJIS_OtherJ = 12, // Other Japanese characters
153  kJIS_WithSubscript = 13, // Soejitsuki
154  kJIS_WithRubi = 14, // Parent characters of rubi
155  kJIS_NumGroup = 15, // Rensuuji - a group of numbers.
156  kJIS_Symbol = 16, //
157  kJIS_RomanSpace = 17, // Roman space
158  kJIS_RomanChar = 18, // Roman characters
159  kJIS_WarichuOpenParen = 19, // Open parenthesis for Warichu
160  kJIS_WarichuCloseParen = 20, // Close parenthesis for Warichu
161 
162  // Added the following classes for K2J
163  kJIS_Comma = 21,
164 
165  kJIS_EdgeOfLine = 22, // Edge of line -- top or end
166  kJIS_TopOfParagraph = 23, // Top of paragraph
167 
168  // Added two classes for K2J
169  kJIS_FullNumber = 24, // Double byte number
170  kJIS_RomanNumber = 25, // Single byte number
171 
172  // Extension class
173  kJIS_CornerOpenBracket = 26,
174  kJIS_RoundOpenParen = 27,
175  kJIS_CornerCloseBracket = 28,
176  kJIS_RoundCloseParen = 29,
177  kJIS_RomanComma = 30,
178  kJIS_RomanPeriod = 31,
179  kJIS_Colon = 32,
180 
181  kJIS_Katakana = 33,
182 
183  kJIS_RomanOpenParen = 34, // CID-mojikumi -- treat as kJIS_RomanChar otherwise
184  kJIS_RomanCloseParen = 35, // CID-mojikumi -- treat as kJIS_RomanChar otherwise
185 
186  kJIS_NumOfClasses = 36 // number of classes
187  };
188 
189 enum {
190  kMojikumi_Desired, // Desired ratio of Mojikumi spacing
191  kMojikumi_Minimum, // Minimum ratio of Mojikumi spacing
192  kMojikumi_Maximum, // Maximum ratio of Mojikumi spacing
193  kMojikumi_Priority // Priority for Justification
194  };
195 
198 enum {
199  kDefaultMojikumiSet_None = 0,
200  kDefaultMojikumiSet_01,
201  kDefaultMojikumiSet_02,
202  kDefaultMojikumiSet_03,
203  kDefaultMojikumiSet_04,
204  kDefaultMojikumiSet_05,
205  kDefaultMojikumiSet_06,
206  kDefaultMojikumiSet_07,
207  kDefaultMojikumiSet_08,
208  kDefaultMojikumiSet_09,
209  kDefaultMojikumiSet_10,
210  kDefaultMojikumiSet_11,
211  kDefaultMojikumiSet_12,
212  kDefaultMojikumiSet_13,
213  kDefaultMojikumiSet_14,
214  kDefaultMojikumiSet_15, // Trad Chinese
215  kDefaultMojikumiSet_16, // Simp Chinese
216 
217  kDefaultMojikumiSet_Nums
218 };
219 
223 {
224  public:
225  enum { kDefaultIID = IID_IMOJIKUMITABLE };
226 
227  typedef enum {
228  kYakumonoSpacing_None = 0,
229  // Min Des Max
230  kYakumonoSpacing_FixedHalf, // 0.0, 0.0, 0.0
231  kYakumonoSpacing_HalfToFull, // 0.0, 0.0, 0.5
232  kYakumonoSpacing_FullToHalf, // 0.0, 0.5, 0.5
233  kYakumonoSpacing_FixedFull, // 0.5, 0.5, 0.5
234 
235  kYakumonoSpacing_HalfOrFull, // 0.0, 0.0, 0.5 (not range)
236  kYakumonoSpacing_FullOrHalf // 0.0, 0.5, 0.5 (not range)
237  } YakumonoSpacingSet;
238 
239  typedef enum {
240  kYakumono_None,
241  kYakumono_Okoshi,
242  kYakumono_Uke,
243  kYakumono_Middle
244  } YakumonoKind;
245 
246 
249  virtual void GetBeforeSpacingWidth(MojikumiClass target, MojikumiClass previousClass,
250  PMReal charWidth, MojikumiElement *element,
251  bool16 isVertical) const = 0;
252 
255  virtual void GetAfterSpacingWidth(MojikumiClass target, MojikumiClass afterClass,
256  PMReal charWidth, MojikumiElement *element,
257  bool16 isVertical) const = 0;
258 
261  virtual bool16 GetBeforeSpacingRules(MojikumiClass target, MojikumiClass previousClass,
262  MojikumiElement *element) const = 0;
263 
266  virtual bool16 GetAfterSpacingRules(MojikumiClass target, MojikumiClass afterClass,
267  MojikumiElement *element) const = 0;
268 
271  virtual bool16 SetBeforeSpacingRules(MojikumiClass target, MojikumiClass previousClass,
272  const MojikumiElement &element) = 0;
273 
276  virtual bool16 SetAfterSpacingRules(MojikumiClass target, MojikumiClass afterClass,
277  const MojikumiElement &element) = 0;
278 
279  virtual bool16 GetBaseClassSpacingRules(int32 index, MojikumiClass *target, MojikumiBaseSpacing *element) const = 0;
280  virtual bool16 GetOverrideSpacingRules(int32 index, MojikumiOverrideSpacing *element) const = 0;
281  virtual int32 GetNumOfOverrideSpacingRules() const = 0;
282 
285  virtual void CopyMojikumiData(const IMojikumiTable *from) = 0;
286 
289  virtual int32 GetNumOfCharacterClasses() const = 0;
290 
293  virtual MojikumiClass GetCharacterClass(UTF32TextChar code, bool16 isVertical, const IKinsokuTable *kinsokuTable = nil, Text::GlyphID glyph = kInvalidGlyphID, const IPMFont * font = nil, bool16 * usedCID = nil) const = 0;
294 
297  virtual bool16 HasTsumeTable() const = 0;
298 
316  virtual bool16 GetTsumeValue(UTF32TextChar chr, PMReal *before, PMReal *after, bool16 isVertical, Text::GlyphID glyph = kInvalidGlyphID, const IPMFont * font = nil) const = 0;
317 
320  virtual UID GetTsumeTableUID() const = 0;
321 
324  virtual void SetTsumeTableUID(UID tsumeUID) = 0;
325 
328  virtual UID GetMojikumiClassListUID() const = 0;
329 
332  virtual void SetMojikumiClassListUID(UID classListUID) = 0;
333 
336  virtual void SetSpacingAtEdgeOfLine(YakumonoSpacingSet lineEndComma = kYakumonoSpacing_None,
337  YakumonoSpacingSet lineEndPeriod = kYakumonoSpacing_None,
338  YakumonoSpacingSet lineEndParen = kYakumonoSpacing_None,
339  YakumonoSpacingSet lineEndMidPunc = kYakumonoSpacing_None,
340  YakumonoSpacingSet lineTopParen = kYakumonoSpacing_None,
341  YakumonoSpacingSet paraTopParen = kYakumonoSpacing_None,
342  int32 jisage = 0, bool16 ignoreParenJisage = kFalse ) = 0;
343 
346  virtual bool16 GetEditability() const = 0;
347 
350  virtual int32 GetDefaultDoubleByteClassIndex() const = 0;
351  virtual int32 GetDefaultSingleByteClassIndex() const = 0;
352  virtual int32 GetBeginParagraphClassIndex() const = 0;
353  virtual int32 GetEdgeOfLineClassIndex() const = 0;
354 
355  virtual int16 GetBasedOn() const = 0;
356  virtual void SetBasedOn(int16 which) = 0;
357 };
358 
359 #endif
360  // __IMojikumiTable__
361 
362