/* font.c -- "Font" primitives.
-Copyright (C) 2006-2015 Free Software Foundation, Inc.
+Copyright (C) 2006-2016 Free Software Foundation, Inc.
Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H13PRO009
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
#include "composite.h"
#include "fontset.h"
#include "font.h"
+#include "termhooks.h"
#ifdef HAVE_WINDOW_SYSTEM
#include TERM_HEADER
p1 = strchr (p0, '-');
if (! p1)
{
- AUTO_STRING (extra, ("*-*" + (len && p0[len - 1] == '*')));
+ AUTO_STRING (extra, (&"*-*"[len && p0[len - 1] == '*']));
registry = concat2 (registry, extra);
}
registry = Fdowncase (registry);
pcdr = spec->props + FONT_EXTRA_INDEX;
for (tail = AREF (font, FONT_EXTRA_INDEX); CONSP (tail); tail = XCDR (tail))
if (!EQ (XCAR (XCAR (tail)), QCfont_entity))
- *pcdr = Fcons (XCAR (tail), Qnil), pcdr = xcdr_addr (*pcdr);
+ {
+ *pcdr = Fcons (Fcons (XCAR (XCAR (tail)), CDR (XCAR (tail))), Qnil);
+ pcdr = xcdr_addr (*pcdr);
+ }
XSETFONT (new_spec, spec);
return new_spec;
representing the OpenType features supported by the font by this form:
((SCRIPT (LANGSYS FEATURE ...) ...) ...)
SCRIPT, LANGSYS, and FEATURE are all symbols representing OpenType
-Layout tags. */)
+Layout tags.
+
+In addition to the keys listed abobe, the following keys are reserved
+for the specific meanings as below:
+
+The value of :combining-capability is non-nil if the font-backend of
+FONT supports rendering of combining characters for non-OTF fonts. */)
(Lisp_Object font, Lisp_Object key)
{
int idx;
if (idx >= 0 && idx < FONT_EXTRA_INDEX)
return AREF (font, idx);
val = Fassq (key, AREF (font, FONT_EXTRA_INDEX));
- if (NILP (val) && EQ (key, QCotf) && FONT_OBJECT_P (font))
+ if (NILP (val) && FONT_OBJECT_P (font))
{
struct font *fontp = XFONT_OBJECT (font);
- if (fontp->driver->otf_capability)
- val = fontp->driver->otf_capability (fontp);
- else
- val = Fcons (Qnil, Qnil);
+ if (EQ (key, QCotf))
+ {
+ if (fontp->driver->otf_capability)
+ val = fontp->driver->otf_capability (fontp);
+ else
+ val = Fcons (Qnil, Qnil);
+ }
+ else if (EQ (key, QCcombining_capability))
+ {
+ if (fontp->driver->combining_capability)
+ val = fontp->driver->combining_capability (fontp);
+ }
}
else
val = Fcdr (val);
pixels.
CAPABILITY is a list whose first element is a symbol representing the
-font format \(x, opentype, truetype, type1, pcf, or bdf) and the
+font format (x, opentype, truetype, type1, pcf, or bdf) and the
remaining elements describe the details of the font capability.
If the font is OpenType font, the form of the list is
- \(opentype GSUB GPOS)
+ (opentype GSUB GPOS)
where GSUB shows which "GSUB" features the font supports, and GPOS
shows which "GPOS" features the font supports. Both GSUB and GPOS are
lists of the format:
- \((SCRIPT (LANGSYS FEATURE ...) ...) ...)
+ ((SCRIPT (LANGSYS FEATURE ...) ...) ...)
If the font is not OpenType font, currently the length of the form is
one.
as follows:
If the font is OpenType font, the form of the list is
- \(opentype GSUB GPOS)
+ (opentype GSUB GPOS)
where GSUB shows which "GSUB" features the font supports, and GPOS
shows which "GPOS" features the font supports. Both GSUB and GPOS are
lists of the form:
- \((SCRIPT (LANGSYS FEATURE ...) ...) ...)
+ ((SCRIPT (LANGSYS FEATURE ...) ...) ...)
where
SCRIPT is a symbol representing OpenType script tag.
DEFSYM (QCscalable, ":scalable");
DEFSYM (QCavgwidth, ":avgwidth");
DEFSYM (QCfont_entity, ":font-entity");
+ DEFSYM (QCcombining_capability, ":combining-capability");
/* Symbols representing values of font spacing property. */
DEFSYM (Qc, "c");
DEFSYM (Qja, "ja");
DEFSYM (Qko, "ko");
- DEFSYM (QCuser_spec, "user-spec");
+ DEFSYM (QCuser_spec, ":user-spec");
staticpro (&scratch_font_spec);
scratch_font_spec = Ffont_spec (0, NULL);