Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Peter Oliver
fontconfig
Commits
4e21e6f6
Commit
4e21e6f6
authored
Sep 01, 2006
by
Keith Packard
Browse files
Match 'ultra' on word boundaries to detect ultra bold fonts. (bug 2511)
Added FcStrContainsWord to detect strings on word boundaries.
parent
2a5ea800
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/fcfreetype.c
View file @
4e21e6f6
...
...
@@ -935,8 +935,18 @@ FcStringContainsConst (const FcChar8 *string,
int
i
;
for
(
i
=
0
;
i
<
nc
;
i
++
)
if
(
FcStrContainsIgnoreBlanksAndCase
(
string
,
c
[
i
].
name
))
return
c
[
i
].
value
;
{
if
(
c
[
i
].
name
[
0
]
==
'<'
)
{
if
(
FcStrContainsWord
(
string
,
c
[
i
].
name
+
1
))
return
c
[
i
].
value
;
}
else
{
if
(
FcStrContainsIgnoreBlanksAndCase
(
string
,
c
[
i
].
name
))
return
c
[
i
].
value
;
}
}
return
-
1
;
}
...
...
@@ -958,6 +968,8 @@ static const FcStringConst weightConsts[] = {
{
(
FC8
)
"superbold"
,
FC_WEIGHT_EXTRABOLD
},
{
(
FC8
)
"ultrabold"
,
FC_WEIGHT_ULTRABOLD
},
{
(
FC8
)
"bold"
,
FC_WEIGHT_BOLD
},
{
(
FC8
)
"<ultra"
,
FC_WEIGHT_ULTRABOLD
},
/* only if a word */
{
(
FC8
)
"bold"
,
FC_WEIGHT_BOLD
},
{
(
FC8
)
"black"
,
FC_WEIGHT_BLACK
},
{
(
FC8
)
"heavy"
,
FC_WEIGHT_HEAVY
},
};
...
...
src/fcint.h
View file @
4e21e6f6
...
...
@@ -1046,6 +1046,9 @@ FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
const
FcChar8
*
FcStrContainsIgnoreCase
(
const
FcChar8
*
s1
,
const
FcChar8
*
s2
);
const
FcChar8
*
FcStrContainsWord
(
const
FcChar8
*
s1
,
const
FcChar8
*
s2
);
FcBool
FcStrUsesHome
(
const
FcChar8
*
s
);
...
...
src/fcstr.c
View file @
4e21e6f6
...
...
@@ -320,6 +320,26 @@ FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
return
0
;
}
static
FcBool
FcCharIsPunct
(
const
FcChar8
c
)
{
if
(
c
<
'0'
)
return
FcTrue
;
if
(
c
<=
'9'
)
return
FcFalse
;
if
(
c
<
'A'
)
return
FcTrue
;
if
(
c
<=
'Z'
)
return
FcFalse
;
if
(
c
<
'a'
)
return
FcTrue
;
if
(
c
<=
'z'
)
return
FcFalse
;
if
(
c
<=
'~'
)
return
FcTrue
;
return
FcFalse
;
}
/*
* Is the head of s1 equal to s2?
*/
...
...
@@ -344,7 +364,7 @@ FcStrIsAtIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
}
/*
* Does s1 contain an instance of s2 (ignoring
blanks and
case)?
* Does s1 contain an instance of s2 (ignoring case)?
*/
const
FcChar8
*
...
...
@@ -359,6 +379,34 @@ FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
return
0
;
}
/*
* Does s1 contain an instance of s2 on a word boundary (ignoring case)?
*/
const
FcChar8
*
FcStrContainsWord
(
const
FcChar8
*
s1
,
const
FcChar8
*
s2
)
{
FcBool
wordStart
=
FcTrue
;
int
s1len
=
strlen
((
char
*
)
s1
);
int
s2len
=
strlen
((
char
*
)
s2
);
while
(
s1len
>=
s2len
)
{
if
(
wordStart
&&
FcStrIsAtIgnoreCase
(
s1
,
s2
)
&&
(
s1len
==
s2len
||
FcCharIsPunct
(
s1
[
s2len
])))
{
return
s1
;
}
wordStart
=
FcFalse
;
if
(
FcCharIsPunct
(
*
s1
))
wordStart
=
FcTrue
;
s1
++
;
s1len
--
;
}
return
0
;
}
const
FcChar8
*
FcStrStrIgnoreCase
(
const
FcChar8
*
s1
,
const
FcChar8
*
s2
)
{
...
...
Write
Preview
Supports
Markdown
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