Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
ce0fbe4f
Commit
ce0fbe4f
authored
Sep 02, 2015
by
Erich E. Hoover
Committed by
Alexandre Julliard
Sep 15, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wineps.drv: Add support for PostScript Format 1 glyph names.
In order to generate a searchable PDF from a PostScript document the glyph names must follow Adobe's convention.
parent
ecac39c1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
318 additions
and
3 deletions
+318
-3
download.c
dlls/wineps.drv/download.c
+318
-3
No files found.
dlls/wineps.drv/download.c
View file @
ce0fbe4f
...
...
@@ -30,6 +30,8 @@
#include "winnls.h"
#include "psdrv.h"
#include "data/agl.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
psdrv
);
...
...
@@ -359,11 +361,324 @@ BOOL PSDRV_WriteSetDownloadFont(PHYSDEV dev, BOOL vertical)
return
TRUE
;
}
static
void
get_standard_glyph_name
(
WORD
index
,
char
*
name
)
{
static
const
GLYPHNAME
nonbreakingspace
=
{
-
1
,
"nonbreakingspace"
};
static
const
GLYPHNAME
nonmarkingreturn
=
{
-
1
,
"nonmarkingreturn"
};
static
const
GLYPHNAME
notdef
=
{
-
1
,
".notdef"
};
static
const
GLYPHNAME
null
=
{
-
1
,
".null"
};
/* These PostScript Format 1 glyph names are stored by glyph index, do not reorder them. */
static
const
GLYPHNAME
*
glyph_table
[]
=
{
&
notdef
,
&
null
,
&
nonmarkingreturn
,
GN_space
,
GN_exclam
,
GN_quotedbl
,
GN_numbersign
,
GN_dollar
,
GN_percent
,
GN_ampersand
,
GN_quotesingle
,
GN_parenleft
,
GN_parenright
,
GN_asterisk
,
GN_plus
,
GN_comma
,
GN_hyphen
,
GN_period
,
GN_slash
,
GN_zero
,
GN_one
,
GN_two
,
GN_three
,
GN_four
,
GN_five
,
GN_six
,
GN_seven
,
GN_eight
,
GN_nine
,
GN_colon
,
GN_semicolon
,
GN_less
,
GN_equal
,
GN_greater
,
GN_question
,
GN_at
,
GN_A
,
GN_B
,
GN_C
,
GN_D
,
GN_E
,
GN_F
,
GN_G
,
GN_H
,
GN_I
,
GN_J
,
GN_K
,
GN_L
,
GN_M
,
GN_N
,
GN_O
,
GN_P
,
GN_Q
,
GN_R
,
GN_S
,
GN_T
,
GN_U
,
GN_V
,
GN_W
,
GN_X
,
GN_Y
,
GN_Z
,
GN_bracketleft
,
GN_backslash
,
GN_bracketright
,
GN_asciicircum
,
GN_underscore
,
GN_grave
,
GN_a
,
GN_b
,
GN_c
,
GN_d
,
GN_e
,
GN_f
,
GN_g
,
GN_h
,
GN_i
,
GN_j
,
GN_k
,
GN_l
,
GN_m
,
GN_n
,
GN_o
,
GN_p
,
GN_q
,
GN_r
,
GN_s
,
GN_t
,
GN_u
,
GN_v
,
GN_w
,
GN_x
,
GN_y
,
GN_z
,
GN_braceleft
,
GN_bar
,
GN_braceright
,
GN_asciitilde
,
GN_Adieresis
,
GN_Aring
,
GN_Ccedilla
,
GN_Eacute
,
GN_Ntilde
,
GN_Odieresis
,
GN_Udieresis
,
GN_aacute
,
GN_agrave
,
GN_acircumflex
,
GN_adieresis
,
GN_atilde
,
GN_aring
,
GN_ccedilla
,
GN_eacute
,
GN_egrave
,
GN_ecircumflex
,
GN_edieresis
,
GN_iacute
,
GN_igrave
,
GN_icircumflex
,
GN_idieresis
,
GN_ntilde
,
GN_oacute
,
GN_ograve
,
GN_ocircumflex
,
GN_odieresis
,
GN_otilde
,
GN_uacute
,
GN_ugrave
,
GN_ucircumflex
,
GN_udieresis
,
GN_dagger
,
GN_degree
,
GN_cent
,
GN_sterling
,
GN_section
,
GN_bullet
,
GN_paragraph
,
GN_germandbls
,
GN_registered
,
GN_copyright
,
GN_trademark
,
GN_acute
,
GN_dieresis
,
GN_notequal
,
GN_AE
,
GN_Oslash
,
GN_infinity
,
GN_plusminus
,
GN_lessequal
,
GN_greaterequal
,
GN_yen
,
GN_mu
,
GN_partialdiff
,
GN_summation
,
GN_product
,
GN_pi
,
GN_integral
,
GN_ordfeminine
,
GN_ordmasculine
,
GN_Omega
,
GN_ae
,
GN_oslash
,
GN_questiondown
,
GN_exclamdown
,
GN_logicalnot
,
GN_radical
,
GN_florin
,
GN_approxequal
,
GN_Delta
,
GN_guillemotleft
,
GN_guillemotright
,
GN_ellipsis
,
&
nonbreakingspace
,
GN_Agrave
,
GN_Atilde
,
GN_Otilde
,
GN_OE
,
GN_oe
,
GN_endash
,
GN_emdash
,
GN_quotedblleft
,
GN_quotedblright
,
GN_quoteleft
,
GN_quoteright
,
GN_divide
,
GN_lozenge
,
GN_ydieresis
,
GN_Ydieresis
,
GN_fraction
,
GN_currency
,
GN_guilsinglleft
,
GN_guilsinglright
,
GN_fi
,
GN_fl
,
GN_daggerdbl
,
GN_periodcentered
,
GN_quotesinglbase
,
GN_quotedblbase
,
GN_perthousand
,
GN_Acircumflex
,
GN_Ecircumflex
,
GN_Aacute
,
GN_Edieresis
,
GN_Egrave
,
GN_Iacute
,
GN_Icircumflex
,
GN_Idieresis
,
GN_Igrave
,
GN_Oacute
,
GN_Ocircumflex
,
GN_apple
,
GN_Ograve
,
GN_Uacute
,
GN_Ucircumflex
,
GN_Ugrave
,
GN_dotlessi
,
GN_circumflex
,
GN_tilde
,
GN_macron
,
GN_breve
,
GN_dotaccent
,
GN_ring
,
GN_cedilla
,
GN_hungarumlaut
,
GN_ogonek
,
GN_caron
,
GN_Lslash
,
GN_lslash
,
GN_Scaron
,
GN_scaron
,
GN_Zcaron
,
GN_zcaron
,
GN_brokenbar
,
GN_Eth
,
GN_eth
,
GN_Yacute
,
GN_yacute
,
GN_Thorn
,
GN_thorn
,
GN_minus
,
GN_multiply
,
GN_onesuperior
,
GN_twosuperior
,
GN_threesuperior
,
GN_onehalf
,
GN_onequarter
,
GN_threequarters
,
GN_franc
,
GN_Gbreve
,
GN_gbreve
,
GN_Idotaccent
,
GN_Scedilla
,
GN_scedilla
,
GN_Cacute
,
GN_cacute
,
GN_Ccaron
,
GN_ccaron
,
GN_dcroat
};
snprintf
(
name
,
MAX_G_NAME
+
1
,
"%s"
,
glyph_table
[
index
]
->
sz
);
}
void
get_glyph_name
(
HDC
hdc
,
WORD
index
,
char
*
name
)
{
/* FIXME */
sprintf
(
name
,
"g%04x"
,
index
);
return
;
struct
{
DWORD
format
;
DWORD
italicAngle
;
SHORT
underlinePosition
;
SHORT
underlineThickness
;
DWORD
isFixedPitch
;
DWORD
minMemType42
;
DWORD
maxMemType42
;
DWORD
minMemType1
;
DWORD
maxMemType1
;
}
*
post_header
;
BYTE
*
post
=
NULL
;
DWORD
size
;
/* set a fallback name that is just 'g<index>' */
snprintf
(
name
,
MAX_G_NAME
+
1
,
"g%04x"
,
index
);
/* attempt to obtain the glyph name from the 'post' table */
size
=
GetFontData
(
hdc
,
MS_MAKE_TAG
(
'p'
,
'o'
,
's'
,
't'
),
0
,
NULL
,
0
);
if
(
size
<
sizeof
(
*
post_header
)
||
size
==
GDI_ERROR
)
return
;
post
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
if
(
!
post
)
return
;
size
=
GetFontData
(
hdc
,
MS_MAKE_TAG
(
'p'
,
'o'
,
's'
,
't'
),
0
,
post
,
size
);
if
(
size
<
sizeof
(
*
post_header
)
||
size
==
GDI_ERROR
)
goto
cleanup
;
post_header
=
(
typeof
(
post_header
))(
post
);
/* note: only interested in the format for obtaining glyph names */
post_header
->
format
=
GET_BE_DWORD
(
&
post_header
->
format
);
/* now that we know the format of the 'post' table we can get the glyph name */
if
(
post_header
->
format
==
MAKELONG
(
0
,
1
))
{
if
(
index
<
258
)
get_standard_glyph_name
(
index
,
name
);
else
WARN
(
"Font uses PostScript Format 1, but non-standard glyph (%d) requested.
\n
"
,
index
);
}
else
FIXME
(
"PostScript Format %d.%d glyph names are currently unsupported.
\n
"
,
HIWORD
(
post_header
->
format
),
LOWORD
(
post_header
->
format
));
cleanup:
HeapFree
(
GetProcessHeap
(),
0
,
post
);
}
/****************************************************************************
...
...
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