1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-04 08:47:11 +00:00

Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs

This commit is contained in:
Eli Zaretskii 2023-10-21 14:34:28 +03:00
commit 2fb4108ab7
3 changed files with 52 additions and 27 deletions

View File

@ -743,10 +743,13 @@ The argument @var{lexical} specifies the scoping rule for local
variables (@pxref{Variable Scoping}). If it is omitted or @code{nil},
that means to evaluate @var{form} using the default dynamic scoping
rule. If it is @code{t}, that means to use the lexical scoping rule.
The value of @var{lexical} can also be a non-empty alist specifying a
The value of @var{lexical} can also be a non-empty list specifying a
particular @dfn{lexical environment} for lexical bindings; however,
this feature is only useful for specialized purposes, such as in Emacs
Lisp debuggers. @xref{Lexical Binding}.
Lisp debuggers. Each member of the list is either a cons cell which
represents a lexical symbol-value pair, or a symbol representing a
dynamically bound variable.
Since @code{eval} is a function, the argument expression that appears
in a call to @code{eval} is evaluated twice: once as preparation before

View File

@ -1186,17 +1186,6 @@ wants the current value of a variable, it looks first in the lexical
environment; if the variable is not specified in there, it looks in
the symbol's value cell, where the dynamic value is stored.
(Internally, the lexical environment is a list whose members are
usually cons cells that are symbol-value pairs, but some of its
members can be symbols rather than cons cells. A symbol in the list
means the lexical environment declared that symbol's variable as
locally considered to be dynamically bound. This list can be passed
as the second argument to the @code{eval} function, in order to
specify a lexical environment in which to evaluate a form.
@xref{Eval}. Most Emacs Lisp programs, however, should not interact
directly with lexical environments in this way; only specialized
programs like debuggers.)
@cindex closures, example of using
Lexical bindings have indefinite extent. Even after a binding
construct has finished executing, its lexical environment can be

View File

@ -12297,18 +12297,47 @@ sfnt_interpret_compound_glyph (struct sfnt_glyph *glyph,
/* Unicode Variation Sequence (UVS) support.
Unicode defines a mechanism by which a two-codepoint sequence
consisting of a ``base character'' and ``variation selector'' is
able to produce a glyph that is a variant of the glyph that would
conventionally have been mapped to the ``base character''.
Unicode defines a mechanism by which two-codepoint sequences
comprising a ``base character'' and ``variation selector'' combine
to produce a glyph besides that which is mapped to the ``base
character'' itself.
TrueType describes variation selector sequences through a type of
character mapping table that is given the format 14. The character
mapping table consists of an array of variation selectors, each of
which have a corresponding ``default UVS table'', which describes
ranges of ``base characters'' having no special variant glyphs, and
a ``non-default UVS table'', which is a map of ``base characters''
to their corresponding variant glyphs. */
TrueType stores variation selector sequences inside a special type
of character mapping table that is given the format 14. The
character mapping table consists of an array of variation
selectors, each of which is assigned a ``default UVS table''
recording ranges of ``base characters'' absent special variant
glyphs, and a ``non-default UVS table'', linking ``base
characters'' to their respective variant glyphs.
Unicode variation selectors occupy the range formed between 0xfe00
and 0xfe0f, along with that from 0xe0100 to 0xe01ef, within the
Unicode codespace. When a variation selector is encountered as
text is being examined for display with a particular font, that
font's character mapping table is indexed by it, yielding a default
and non-default UVS table. If the base character (which is
directly behind the variation selector) is subsequently located
within the default UVS table, then the glyph represented by this
union of base character and variation selector is that designated
by the base character within any UCS-4 or BMP character mapping
table in the font. Since this glyph is at variance with that
derived from the base character only when the character set of the
character mapping table otherwise consulted is not UCS-4 or BMP,
the distinction between those two glyphs is largely notional.
Should the nondefault UVS table hold the base character, then the
glyph is conversely that enumerated in said table, whose indexing
is facilitated by sfnt_variation_glyph_for_char. And if the base
character isn't present within either table or the tables for the
variation selector are absent in the first place, then the two
codepoints constituting the sequence are immiscible and therefore
the sequence cannot apply to the font.
The approach taken by Emacs character composition routines is
diametric to the approach illustrated above: in place of searching
for variation glyphs each time a variation selector character is
encountered, these routines ascertain which glyphs are linked to
each base character that they have adjudged subject to variation in
advance. See sfntfont_get_variation_glyphs. */
/* Read a default UVS table from the font file FD, at the specified
OFFSET. Value is the default UVS table upon success, else
@ -12843,9 +12872,13 @@ sfnt_read_table (int fd, struct sfnt_offset_subtable *subtable,
/* Glyph variations. Instead of defining separate fonts for each
combination of weight, width and slant (bold, condensed, italic,
etc), some fonts specify a list of ``variation axes'', each of
which determines one delta to apply to each point in every
glyph.
etc), some fonts specify a list of ``variation axes'', which are
options that accept values consisting of numbers on scales
governing deltas applied to select points in their glyphs.
Particular styles within the font are then supplied as sets of
values on these scales to which their respective axes are set,
termed ``instances''.
This optional information is specified in the `fvar' (font
variation), `gvar' (glyph variation) and `cvar' (CVT variation)