Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
7bf4db87
Commit
7bf4db87
authored
Sep 09, 2010
by
Aric Stewart
Committed by
Alexandre Julliard
Sep 13, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
usp10: Check font for required features and report error if missing.
parent
29d2c5a2
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
79 additions
and
25 deletions
+79
-25
shape.c
dlls/usp10/shape.c
+74
-24
usp10.c
dlls/usp10/usp10.c
+4
-1
usp10_internal.h
dlls/usp10/usp10_internal.h
+1
-0
No files found.
dlls/usp10/shape.c
View file @
7bf4db87
...
@@ -273,6 +273,15 @@ static OPENTYPE_FEATURE_RECORD arabic_features[] =
...
@@ -273,6 +273,15 @@ static OPENTYPE_FEATURE_RECORD arabic_features[] =
{
0x7465736d
/*mset*/
,
1
},
{
0x7465736d
/*mset*/
,
1
},
};
};
static
const
char
*
required_arabic_features
[]
=
{
"fina"
,
"init"
,
"medi"
,
"rlig"
,
NULL
};
static
OPENTYPE_FEATURE_RECORD
hebrew_features
[]
=
static
OPENTYPE_FEATURE_RECORD
hebrew_features
[]
=
{
{
{
0x67696c64
/*dlig*/
,
1
},
{
0x67696c64
/*dlig*/
,
1
},
...
@@ -286,6 +295,18 @@ static OPENTYPE_FEATURE_RECORD syriac_features[] =
...
@@ -286,6 +295,18 @@ static OPENTYPE_FEATURE_RECORD syriac_features[] =
{
0x67696c64
/*dlig*/
,
1
},
{
0x67696c64
/*dlig*/
,
1
},
};
};
static
const
char
*
required_syriac_features
[]
=
{
"fina"
,
"fin2"
,
"fin3"
,
"init"
,
"medi"
,
"med2"
,
"rlig"
,
NULL
};
static
OPENTYPE_FEATURE_RECORD
sinhala_features
[]
=
static
OPENTYPE_FEATURE_RECORD
sinhala_features
[]
=
{
{
/* Base forms */
/* Base forms */
...
@@ -310,8 +331,15 @@ static OPENTYPE_FEATURE_RECORD thai_features[] =
...
@@ -310,8 +331,15 @@ static OPENTYPE_FEATURE_RECORD thai_features[] =
{
0x706d6363
/*ccmp*/
,
1
},
{
0x706d6363
/*ccmp*/
,
1
},
};
};
static
const
char
*
required_lao_features
[]
=
{
"ccmp"
,
NULL
};
typedef
struct
ScriptShapeDataTag
{
typedef
struct
ScriptShapeDataTag
{
TEXTRANGE_PROPERTIES
defaultTextRange
;
TEXTRANGE_PROPERTIES
defaultTextRange
;
const
char
**
requiredFeatures
;
CHAR
otTag
[
5
];
CHAR
otTag
[
5
];
ContextualShapingProc
contextProc
;
ContextualShapingProc
contextProc
;
}
ScriptShapeData
;
}
ScriptShapeData
;
...
@@ -319,30 +347,30 @@ typedef struct ScriptShapeDataTag {
...
@@ -319,30 +347,30 @@ typedef struct ScriptShapeDataTag {
/* in order of scripts */
/* in order of scripts */
static
const
ScriptShapeData
ShapingData
[]
=
static
const
ScriptShapeData
ShapingData
[]
=
{
{
{{
standard_features
,
2
},
""
,
NULL
},
{{
standard_features
,
2
},
NULL
,
""
,
NULL
},
{{
standard_features
,
2
},
"latn"
,
NULL
},
{{
standard_features
,
2
},
NULL
,
"latn"
,
NULL
},
{{
standard_features
,
2
},
"latn"
,
NULL
},
{{
standard_features
,
2
},
NULL
,
"latn"
,
NULL
},
{{
standard_features
,
2
},
"latn"
,
NULL
},
{{
standard_features
,
2
},
NULL
,
"latn"
,
NULL
},
{{
standard_features
,
2
},
""
,
NULL
},
{{
standard_features
,
2
},
NULL
,
""
,
NULL
},
{{
standard_features
,
2
},
"latn"
,
NULL
},
{{
standard_features
,
2
},
NULL
,
"latn"
,
NULL
},
{{
arabic_features
,
6
},
"arab"
,
ContextualShape_Arabic
},
{{
arabic_features
,
6
},
required_arabic_features
,
"arab"
,
ContextualShape_Arabic
},
{{
arabic_features
,
6
},
"arab"
,
ContextualShape_Arabic
},
{{
arabic_features
,
6
},
required_arabic_features
,
"arab"
,
ContextualShape_Arabic
},
{{
hebrew_features
,
1
},
"hebr"
,
NULL
},
{{
hebrew_features
,
1
},
NULL
,
"hebr"
,
NULL
},
{{
syriac_features
,
4
},
"syrc"
,
ContextualShape_Syriac
},
{{
syriac_features
,
4
},
required_syriac_features
,
"syrc"
,
ContextualShape_Syriac
},
{{
arabic_features
,
6
},
"arab"
,
ContextualShape_Arabic
},
{{
arabic_features
,
6
},
required_arabic_features
,
"arab"
,
ContextualShape_Arabic
},
{{
NULL
,
0
},
"thaa"
,
NULL
},
{{
NULL
,
0
},
NULL
,
"thaa"
,
NULL
},
{{
standard_features
,
2
},
"grek"
,
NULL
},
{{
standard_features
,
2
},
NULL
,
"grek"
,
NULL
},
{{
standard_features
,
2
},
"cyrl"
,
NULL
},
{{
standard_features
,
2
},
NULL
,
"cyrl"
,
NULL
},
{{
standard_features
,
2
},
"armn"
,
NULL
},
{{
standard_features
,
2
},
NULL
,
"armn"
,
NULL
},
{{
standard_features
,
2
},
"geor"
,
NULL
},
{{
standard_features
,
2
},
NULL
,
"geor"
,
NULL
},
{{
sinhala_features
,
7
},
"sinh"
,
NULL
},
{{
sinhala_features
,
7
},
NULL
,
"sinh"
,
NULL
},
{{
tibetan_features
,
2
},
"tibt"
,
NULL
},
{{
tibetan_features
,
2
},
NULL
,
"tibt"
,
NULL
},
{{
tibetan_features
,
2
},
"tibt"
,
NULL
},
{{
tibetan_features
,
2
},
NULL
,
"tibt"
,
NULL
},
{{
tibetan_features
,
2
},
"phag"
,
ContextualShape_Phags_pa
},
{{
tibetan_features
,
2
},
NULL
,
"phag"
,
ContextualShape_Phags_pa
},
{{
thai_features
,
1
},
"thai"
,
NULL
},
{{
thai_features
,
1
},
NULL
,
"thai"
,
NULL
},
{{
thai_features
,
1
},
"thai"
,
NULL
},
{{
thai_features
,
1
},
NULL
,
"thai"
,
NULL
},
{{
thai_features
,
1
},
"lao"
,
NULL
},
{{
thai_features
,
1
},
required_lao_features
,
"lao"
,
NULL
},
{{
thai_features
,
1
},
"lao"
,
NULL
},
{{
thai_features
,
1
},
required_lao_features
,
"lao"
,
NULL
},
};
};
static
INT
GSUB_is_glyph_covered
(
LPCVOID
table
,
UINT
glyph
)
static
INT
GSUB_is_glyph_covered
(
LPCVOID
table
,
UINT
glyph
)
...
@@ -1308,3 +1336,25 @@ rpRangeProperties = &ShapingData[psa->eScript].defaultTextRange;
...
@@ -1308,3 +1336,25 @@ rpRangeProperties = &ShapingData[psa->eScript].defaultTextRange;
SHAPE_ApplyOpenTypeFeatures
(
hdc
,
psc
,
psa
,
pwOutGlyphs
,
pcGlyphs
,
cMaxGlyphs
,
cChars
,
rpRangeProperties
,
pwLogClust
);
SHAPE_ApplyOpenTypeFeatures
(
hdc
,
psc
,
psa
,
pwOutGlyphs
,
pcGlyphs
,
cMaxGlyphs
,
cChars
,
rpRangeProperties
,
pwLogClust
);
}
}
HRESULT
SHAPE_CheckFontForRequiredFeatures
(
HDC
hdc
,
ScriptCache
*
psc
,
SCRIPT_ANALYSIS
*
psa
)
{
const
GSUB_Feature
*
feature
;
int
i
;
if
(
!
ShapingData
[
psa
->
eScript
].
requiredFeatures
)
return
S_OK
;
if
(
!
psc
->
GSUB_Table
)
psc
->
GSUB_Table
=
load_gsub_table
(
hdc
);
i
=
0
;
while
(
ShapingData
[
psa
->
eScript
].
requiredFeatures
[
i
])
{
feature
=
load_GSUB_feature
(
hdc
,
psa
,
psc
,
ShapingData
[
psa
->
eScript
].
requiredFeatures
[
i
]);
if
(
!
feature
)
return
USP_E_SCRIPT_NOT_IN_FONT
;
i
++
;
}
return
S_OK
;
}
dlls/usp10/usp10.c
View file @
7bf4db87
...
@@ -1290,7 +1290,10 @@ HRESULT WINAPI ScriptShape(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcChars,
...
@@ -1290,7 +1290,10 @@ HRESULT WINAPI ScriptShape(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcChars,
if
(
!
psa
->
fNoGlyphIndex
)
if
(
!
psa
->
fNoGlyphIndex
)
{
{
WCHAR
*
rChars
=
heap_alloc
(
sizeof
(
WCHAR
)
*
cChars
);
WCHAR
*
rChars
;
if
((
hr
=
SHAPE_CheckFontForRequiredFeatures
(
hdc
,
(
ScriptCache
*
)
*
psc
,
psa
))
!=
S_OK
)
return
hr
;
rChars
=
heap_alloc
(
sizeof
(
WCHAR
)
*
cChars
);
if
(
!
rChars
)
return
E_OUTOFMEMORY
;
if
(
!
rChars
)
return
E_OUTOFMEMORY
;
for
(
i
=
0
;
i
<
cChars
;
i
++
)
for
(
i
=
0
;
i
<
cChars
;
i
++
)
{
{
...
...
dlls/usp10/usp10_internal.h
View file @
7bf4db87
...
@@ -75,3 +75,4 @@ INT BIDI_ReorderV2lLevel(int level, int *pIndexs, const BYTE* plevel, int cch, B
...
@@ -75,3 +75,4 @@ INT BIDI_ReorderV2lLevel(int level, int *pIndexs, const BYTE* plevel, int cch, B
INT
BIDI_ReorderL2vLevel
(
int
level
,
int
*
pIndexs
,
const
BYTE
*
plevel
,
int
cch
,
BOOL
fReverse
);
INT
BIDI_ReorderL2vLevel
(
int
level
,
int
*
pIndexs
,
const
BYTE
*
plevel
,
int
cch
,
BOOL
fReverse
);
void
SHAPE_ContextualShaping
(
HDC
hdc
,
ScriptCache
*
psc
,
SCRIPT_ANALYSIS
*
psa
,
WCHAR
*
pwcChars
,
INT
cChars
,
WORD
*
pwOutGlyphs
,
INT
*
pcGlyphs
,
INT
cMaxGlyphs
,
WORD
*
pwLogClust
);
void
SHAPE_ContextualShaping
(
HDC
hdc
,
ScriptCache
*
psc
,
SCRIPT_ANALYSIS
*
psa
,
WCHAR
*
pwcChars
,
INT
cChars
,
WORD
*
pwOutGlyphs
,
INT
*
pcGlyphs
,
INT
cMaxGlyphs
,
WORD
*
pwLogClust
);
void
SHAPE_ApplyDefaultOpentypeFeatures
(
HDC
hdc
,
ScriptCache
*
psc
,
SCRIPT_ANALYSIS
*
psa
,
WORD
*
pwOutGlyphs
,
INT
*
pcGlyphs
,
INT
cMaxGlyphs
,
INT
cChars
,
WORD
*
pwLogClust
);
void
SHAPE_ApplyDefaultOpentypeFeatures
(
HDC
hdc
,
ScriptCache
*
psc
,
SCRIPT_ANALYSIS
*
psa
,
WORD
*
pwOutGlyphs
,
INT
*
pcGlyphs
,
INT
cMaxGlyphs
,
INT
cChars
,
WORD
*
pwLogClust
);
HRESULT
SHAPE_CheckFontForRequiredFeatures
(
HDC
hdc
,
ScriptCache
*
psc
,
SCRIPT_ANALYSIS
*
psa
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment