Function: make-char

make-char is a function defined in charset.c.

Signature

(make-char CHARSET &optional CODE1 CODE2 CODE3 CODE4)

Documentation

Return a character of CHARSET whose position codes are CODEn.

CODE1 through CODE4 are optional, but if you don't supply sufficient position codes, it is assumed that the minimum code in each dimension is specified.

Probably introduced at or before Emacs version 20.1.

Source Code

// Defined in /usr/src/emacs/src/charset.c
{
  int id, dimension;
  struct charset *charsetp;
  unsigned code;
  int c;

  CHECK_CHARSET_GET_ID (charset, id);
  charsetp = CHARSET_FROM_ID (id);

  dimension = CHARSET_DIMENSION (charsetp);
  if (NILP (code1))
    code = (CHARSET_ASCII_COMPATIBLE_P (charsetp)
	    ? 0 : CHARSET_MIN_CODE (charsetp));
  else
    {
      CHECK_FIXNAT (code1);
      if (XFIXNAT (code1) >= 0x100)
	args_out_of_range (make_fixnum (0xFF), code1);
      code = XFIXNAT (code1);

      if (dimension > 1)
	{
	  code <<= 8;
	  if (NILP (code2))
	    code |= charsetp->code_space[(dimension - 2) * 4];
	  else
	    {
	      CHECK_FIXNAT (code2);
	      if (XFIXNAT (code2) >= 0x100)
		args_out_of_range (make_fixnum (0xFF), code2);
	      code |= XFIXNAT (code2);
	    }

	  if (dimension > 2)
	    {
	      code <<= 8;
	      if (NILP (code3))
		code |= charsetp->code_space[(dimension - 3) * 4];
	      else
		{
		  CHECK_FIXNAT (code3);
		  if (XFIXNAT (code3) >= 0x100)
		    args_out_of_range (make_fixnum (0xFF), code3);
		  code |= XFIXNAT (code3);
		}

	      if (dimension > 3)
		{
		  code <<= 8;
		  if (NILP (code4))
		    code |= charsetp->code_space[0];
		  else
		    {
		      CHECK_FIXNAT (code4);
		      if (XFIXNAT (code4) >= 0x100)
			args_out_of_range (make_fixnum (0xFF), code4);
		      code |= XFIXNAT (code4);
		    }
		}
	    }
	}
    }

  if (CHARSET_ISO_FINAL (charsetp) >= 0)
    code &= 0x7F7F7F7F;
  c = DECODE_CHAR (charsetp, code);
  if (c < 0)
    error ("Invalid code(s)");
  return make_fixnum (c);
}