aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Rumney2007-05-31 16:20:30 +0000
committerJason Rumney2007-05-31 16:20:30 +0000
commit20399669b9fac32faec7994b9caf2026e3e2440a (patch)
tree6c3919ba9f075041ae8d0a52cfff7279387ff1d3 /src
parent01dbeb0bc865e054df7abf81ae065e93b4d83452 (diff)
downloademacs-20399669b9fac32faec7994b9caf2026e3e2440a.tar.gz
emacs-20399669b9fac32faec7994b9caf2026e3e2440a.zip
* w32font.c (QCsubranges): New symbol.
(w32font_open, w32font_has_char): Get subranges from subproperty of extra. (w32_enumfont_pattern_entity): Set subranges as subproperty of extra. (syms_of_w32font): Define :subranges symbol. Reformat according to GNU standards.
Diffstat (limited to 'src')
-rw-r--r--src/w32font.c171
1 files changed, 115 insertions, 56 deletions
diff --git a/src/w32font.c b/src/w32font.c
index 8d323ae4cad..9e603e3d632 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -92,7 +92,9 @@ memq_no_quit (elt, list)
92/* w32 implementation of get_cache for font backend. 92/* w32 implementation of get_cache for font backend.
93 Return a cache of font-entities on FRAME. The cache must be a 93 Return a cache of font-entities on FRAME. The cache must be a
94 cons whose cdr part is the actual cache area. */ 94 cons whose cdr part is the actual cache area. */
95static Lisp_Object w32font_get_cache (Lisp_Object frame) 95static Lisp_Object
96w32font_get_cache (frame)
97 Lisp_Object frame;
96{ 98{
97 struct w32_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (frame)); 99 struct w32_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (frame));
98 100
@@ -103,7 +105,9 @@ static Lisp_Object w32font_get_cache (Lisp_Object frame)
103 List fonts exactly matching with FONT_SPEC on FRAME. The value 105 List fonts exactly matching with FONT_SPEC on FRAME. The value
104 is a vector of font-entities. This is the sole API that 106 is a vector of font-entities. This is the sole API that
105 allocates font-entities. */ 107 allocates font-entities. */
106static Lisp_Object w32font_list (Lisp_Object frame, Lisp_Object font_spec) 108static Lisp_Object
109w32font_list (frame, font_spec)
110 Lisp_Object frame, font_spec;
107{ 111{
108 Lisp_Object list = Qnil; 112 Lisp_Object list = Qnil;
109 LOGFONT font_match_pattern; 113 LOGFONT font_match_pattern;
@@ -139,7 +143,9 @@ static Lisp_Object w32font_list (Lisp_Object frame, Lisp_Object font_spec)
139 Return a font entity most closely matching with FONT_SPEC on 143 Return a font entity most closely matching with FONT_SPEC on
140 FRAME. The closeness is detemined by the font backend, thus 144 FRAME. The closeness is detemined by the font backend, thus
141 `face-font-selection-order' is ignored here. */ 145 `face-font-selection-order' is ignored here. */
142static Lisp_Object w32font_match (Lisp_Object frame, Lisp_Object font_spec) 146static Lisp_Object
147w32font_match (frame, font_spec)
148 Lisp_Object frame, font_spec;
143{ 149{
144 Lisp_Object list = Qnil; 150 Lisp_Object list = Qnil;
145 LOGFONT font_match_pattern; 151 LOGFONT font_match_pattern;
@@ -165,7 +171,9 @@ static Lisp_Object w32font_match (Lisp_Object frame, Lisp_Object font_spec)
165/* w32 implementation of list_family for font backend. 171/* w32 implementation of list_family for font backend.
166 List available families. The value is a list of family names 172 List available families. The value is a list of family names
167 (symbols). */ 173 (symbols). */
168static Lisp_Object w32font_list_family (Lisp_Object frame) 174static Lisp_Object
175w32font_list_family (frame)
176 Lisp_Object frame;
169{ 177{
170 Lisp_Object list = Qnil; 178 Lisp_Object list = Qnil;
171 LOGFONT font_match_pattern; 179 LOGFONT font_match_pattern;
@@ -187,8 +195,11 @@ static Lisp_Object w32font_list_family (Lisp_Object frame)
187/* w32 implementation of open for font backend. 195/* w32 implementation of open for font backend.
188 Open a font specified by FONT_ENTITY on frame F. 196 Open a font specified by FONT_ENTITY on frame F.
189 If the font is scalable, open it with PIXEL_SIZE. */ 197 If the font is scalable, open it with PIXEL_SIZE. */
190static struct font* w32font_open (FRAME_PTR f, Lisp_Object font_entity, 198static struct font *
191 int pixel_size) 199w32font_open (f, font_entity, pixel_size)
200 FRAME_PTR f;
201 Lisp_Object font_entity;
202 int pixel_size;
192{ 203{
193 int len, size; 204 int len, size;
194 LOGFONT logfont; 205 LOGFONT logfont;
@@ -291,7 +302,10 @@ static struct font* w32font_open (FRAME_PTR f, Lisp_Object font_entity,
291 302
292/* w32 implementation of close for font_backend. 303/* w32 implementation of close for font_backend.
293 Close FONT on frame F. */ 304 Close FONT on frame F. */
294static void w32font_close (FRAME_PTR f, struct font *font) 305static void
306w32font_close (f, font)
307 FRAME_PTR f;
308 struct font *font;
295{ 309{
296 if (font->font.font) 310 if (font->font.font)
297 { 311 {
@@ -311,7 +325,10 @@ static void w32font_close (FRAME_PTR f, struct font *font)
311 If FONT_ENTITY has a glyph for character C (Unicode code point), 325 If FONT_ENTITY has a glyph for character C (Unicode code point),
312 return 1. If not, return 0. If a font must be opened to check 326 return 1. If not, return 0. If a font must be opened to check
313 it, return -1. */ 327 it, return -1. */
314static int w32font_has_char (Lisp_Object entity, int c) 328static int
329w32font_has_char (entity, c)
330 Lisp_Object entity;
331 int c;
315{ 332{
316 Lisp_Object val, extra; 333 Lisp_Object val, extra;
317 DWORD *ranges; 334 DWORD *ranges;
@@ -345,7 +362,10 @@ static int w32font_has_char (Lisp_Object entity, int c)
345/* w32 implementation of encode_char for font backend. 362/* w32 implementation of encode_char for font backend.
346 Return a glyph code of FONT for characer C (Unicode code point). 363 Return a glyph code of FONT for characer C (Unicode code point).
347 If FONT doesn't have such a glyph, return FONT_INVALID_CODE. */ 364 If FONT doesn't have such a glyph, return FONT_INVALID_CODE. */
348static unsigned w32font_encode_char (struct font *font, int c) 365static unsigned
366w32font_encode_char (font, c)
367 struct font *font;
368 int c;
349{ 369{
350 if (get_glyph_indices_fn) 370 if (get_glyph_indices_fn)
351 { 371 {
@@ -381,9 +401,12 @@ static unsigned w32font_encode_char (struct font *font, int c)
381 of METRICS. The glyphs are specified by their glyph codes in 401 of METRICS. The glyphs are specified by their glyph codes in
382 CODE (length NGLYPHS). Apparently medtrics can be NULL, in this 402 CODE (length NGLYPHS). Apparently medtrics can be NULL, in this
383 case just return the overall width. */ 403 case just return the overall width. */
384static int w32font_text_extents (struct font *font, 404static int
385 unsigned *code, int nglyphs, 405w32font_text_extents (font, code, nglyphs, metrics)
386 struct font_metrics *metrics) 406 struct font *font;
407 unsigned *code;
408 int nglyphs;
409 struct font_metrics *metrics;
387{ 410{
388 int i; 411 int i;
389 HFONT old_font; 412 HFONT old_font;
@@ -469,8 +492,10 @@ static int w32font_text_extents (struct font *font,
469 position of frame F with S->FACE and S->GC. If WITH_BACKGROUND 492 position of frame F with S->FACE and S->GC. If WITH_BACKGROUND
470 is nonzero, fill the background in advance. It is assured that 493 is nonzero, fill the background in advance. It is assured that
471 WITH_BACKGROUND is zero when (FROM > 0 || TO < S->nchars). */ 494 WITH_BACKGROUND is zero when (FROM > 0 || TO < S->nchars). */
472static int w32font_draw (struct glyph_string *s, int from, int to, 495static int
473 int x, int y, int with_background) 496w32font_draw (s, from, to, x, y, with_background)
497 struct glyph_string *s;
498 int from, to, x, y, with_background;
474{ 499{
475 /* TODO: Do we need to specify ETO_GLYPH_INDEX or is char2b always utf-16? */ 500 /* TODO: Do we need to specify ETO_GLYPH_INDEX or is char2b always utf-16? */
476 UINT options = 0; 501 UINT options = 0;
@@ -489,7 +514,8 @@ static int w32font_draw (struct glyph_string *s, int from, int to,
489/* w32 implementation of free_entity for font backend. 514/* w32 implementation of free_entity for font backend.
490 Optional (if FONT_EXTRA_INDEX is not Lisp_Save_Value). 515 Optional (if FONT_EXTRA_INDEX is not Lisp_Save_Value).
491 Free FONT_EXTRA_INDEX field of FONT_ENTITY. 516 Free FONT_EXTRA_INDEX field of FONT_ENTITY.
492static void w32font_free_entity (Lisp_Object entity); 517static void
518w32font_free_entity (Lisp_Object entity);
493 */ 519 */
494 520
495/* w32 implementation of prepare_face for font backend. 521/* w32 implementation of prepare_face for font backend.
@@ -497,51 +523,58 @@ static void w32font_free_entity (Lisp_Object entity);
497 Prepare FACE for displaying characters by FONT on frame F by 523 Prepare FACE for displaying characters by FONT on frame F by
498 storing some data in FACE->extra. If successful, return 0. 524 storing some data in FACE->extra. If successful, return 0.
499 Otherwise, return -1. 525 Otherwise, return -1.
500static int w32font_prepare_face (FRAME_PTR f, struct face *face); 526static int
527w32font_prepare_face (FRAME_PTR f, struct face *face);
501 */ 528 */
502/* w32 implementation of done_face for font backend. 529/* w32 implementation of done_face for font backend.
503 Optional. 530 Optional.
504 Done FACE for displaying characters by FACE->font on frame F. 531 Done FACE for displaying characters by FACE->font on frame F.
505static void w32font_done_face (FRAME_PTR f, struct face *face); */ 532static void
533w32font_done_face (FRAME_PTR f, struct face *face); */
506 534
507/* w32 implementation of get_bitmap for font backend. 535/* w32 implementation of get_bitmap for font backend.
508 Optional. 536 Optional.
509 Store bitmap data for glyph-code CODE of FONT in BITMAP. It is 537 Store bitmap data for glyph-code CODE of FONT in BITMAP. It is
510 intended that this method is callled from the other font-driver 538 intended that this method is callled from the other font-driver
511 for actual drawing. 539 for actual drawing.
512static int w32font_get_bitmap (struct font *font, unsigned code, 540static int
513 struct font_bitmap *bitmap, 541w32font_get_bitmap (struct font *font, unsigned code,
514 int bits_per_pixel); 542 struct font_bitmap *bitmap, int bits_per_pixel);
515 */ 543 */
516/* w32 implementation of free_bitmap for font backend. 544/* w32 implementation of free_bitmap for font backend.
517 Optional. 545 Optional.
518 Free bitmap data in BITMAP. 546 Free bitmap data in BITMAP.
519static void w32font_free_bitmap (struct font *font, struct font_bitmap *bitmap); 547static void
548w32font_free_bitmap (struct font *font, struct font_bitmap *bitmap);
520 */ 549 */
521/* w32 implementation of get_outline for font backend. 550/* w32 implementation of get_outline for font backend.
522 Optional. 551 Optional.
523 Return an outline data for glyph-code CODE of FONT. The format 552 Return an outline data for glyph-code CODE of FONT. The format
524 of the outline data depends on the font-driver. 553 of the outline data depends on the font-driver.
525static void* w32font_get_outline (struct font *font, unsigned code); 554static void *
555w32font_get_outline (struct font *font, unsigned code);
526 */ 556 */
527/* w32 implementation of free_outline for font backend. 557/* w32 implementation of free_outline for font backend.
528 Optional. 558 Optional.
529 Free OUTLINE (that is obtained by the above method). 559 Free OUTLINE (that is obtained by the above method).
530static void w32font_free_outline (struct font *font, void *outline); 560static void
561w32font_free_outline (struct font *font, void *outline);
531 */ 562 */
532/* w32 implementation of anchor_point for font backend. 563/* w32 implementation of anchor_point for font backend.
533 Optional. 564 Optional.
534 Get coordinates of the INDEXth anchor point of the glyph whose 565 Get coordinates of the INDEXth anchor point of the glyph whose
535 code is CODE. Store the coordinates in *X and *Y. Return 0 if 566 code is CODE. Store the coordinates in *X and *Y. Return 0 if
536 the operations was successfull. Otherwise return -1. 567 the operations was successfull. Otherwise return -1.
537static int w32font_anchor_point (struct font *font, unsigned code, 568static int
569w32font_anchor_point (struct font *font, unsigned code,
538 int index, int *x, int *y); 570 int index, int *x, int *y);
539 */ 571 */
540/* w32 implementation of otf_capability for font backend. 572/* w32 implementation of otf_capability for font backend.
541 Optional. 573 Optional.
542 Return a list describing which scripts/languages FONT 574 Return a list describing which scripts/languages FONT
543 supports by which GSUB/GPOS features of OpenType tables. 575 supports by which GSUB/GPOS features of OpenType tables.
544static Lisp_Object w32font_otf_capability (struct font *font); 576static Lisp_Object
577w32font_otf_capability (struct font *font);
545 */ 578 */
546/* w32 implementation of otf_drive for font backend. 579/* w32 implementation of otf_drive for font backend.
547 Optional. 580 Optional.
@@ -559,18 +592,21 @@ static Lisp_Object w32font_otf_capability (struct font *font);
559 Return the number of output codes. If none of the features are 592 Return the number of output codes. If none of the features are
560 applicable to the input data, return 0. If GSTRING-OUT is too 593 applicable to the input data, return 0. If GSTRING-OUT is too
561 short, return -1. 594 short, return -1.
562static int w32font_otf_drive (struct font *font, Lisp_Object features, 595static int
563 Lisp_Object gstring_in, int from, int to, 596w32font_otf_drive (struct font *font, Lisp_Object features,
564 Lisp_Object gstring_out, int idx, 597 Lisp_Object gstring_in, int from, int to,
565 int alternate_subst); 598 Lisp_Object gstring_out, int idx,
599 int alternate_subst);
566 */ 600 */
567 601
568/* Callback function for EnumFontFamiliesEx. 602/* Callback function for EnumFontFamiliesEx.
569 * Adds the name of a font to a Lisp list (passed in as the lParam arg). */ 603 * Adds the name of a font to a Lisp list (passed in as the lParam arg). */
570static int CALLBACK add_font_name_to_list (ENUMLOGFONTEX *logical_font, 604static int CALLBACK
571 NEWTEXTMETRICEX *physical_font, 605add_font_name_to_list (logical_font, physical_font, font_type, list_object)
572 DWORD font_type, 606 ENUMLOGFONTEX *logical_font;
573 LPARAM list_object) 607 NEWTEXTMETRICEX *physical_font;
608 DWORD font_type;
609 LPARAM list_object;
574{ 610{
575 Lisp_Object* list = (Lisp_Object *) list_object; 611 Lisp_Object* list = (Lisp_Object *) list_object;
576 Lisp_Object family = intern_downcase (logical_font->elfLogFont.lfFaceName, 612 Lisp_Object family = intern_downcase (logical_font->elfLogFont.lfFaceName,
@@ -582,9 +618,11 @@ static int CALLBACK add_font_name_to_list (ENUMLOGFONTEX *logical_font,
582} 618}
583 619
584/* Convert an enumerated Windows font to an Emacs font entity. */ 620/* Convert an enumerated Windows font to an Emacs font entity. */
585Lisp_Object w32_enumfont_pattern_entity (ENUMLOGFONTEX *logical_font, 621static Lisp_Object
586 NEWTEXTMETRICEX *physical_font, 622w32_enumfont_pattern_entity (logical_font, physical_font, font_type)
587 DWORD font_type) 623 ENUMLOGFONTEX *logical_font;
624 NEWTEXTMETRICEX *physical_font;
625 DWORD font_type;
588{ 626{
589 Lisp_Object entity, tem; 627 Lisp_Object entity, tem;
590 LOGFONT *lf = (LOGFONT*) logical_font; 628 LOGFONT *lf = (LOGFONT*) logical_font;
@@ -640,10 +678,12 @@ Lisp_Object w32_enumfont_pattern_entity (ENUMLOGFONTEX *logical_font,
640 678
641/* Callback function for EnumFontFamiliesEx. 679/* Callback function for EnumFontFamiliesEx.
642 * Adds the name of a font to a Lisp list (passed in as the lParam arg). */ 680 * Adds the name of a font to a Lisp list (passed in as the lParam arg). */
643static int CALLBACK add_font_entity_to_list (ENUMLOGFONTEX *logical_font, 681static int CALLBACK
644 NEWTEXTMETRICEX *physical_font, 682add_font_entity_to_list (logical_font, physical_font, font_type, list_object)
645 DWORD font_type, 683 ENUMLOGFONTEX *logical_font;
646 LPARAM list_object) 684 NEWTEXTMETRICEX *physical_font;
685 DWORD font_type;
686 LPARAM list_object;
647{ 687{
648 Lisp_Object *list = (Lisp_Object *) list_object; 688 Lisp_Object *list = (Lisp_Object *) list_object;
649 Lisp_Object entity = w32_enumfont_pattern_entity (logical_font, 689 Lisp_Object entity = w32_enumfont_pattern_entity (logical_font,
@@ -657,17 +697,21 @@ static int CALLBACK add_font_entity_to_list (ENUMLOGFONTEX *logical_font,
657/* Callback function for EnumFontFamiliesEx. 697/* Callback function for EnumFontFamiliesEx.
658 * Adds the name of a font to a Lisp list (passed in as the lParam arg), 698 * Adds the name of a font to a Lisp list (passed in as the lParam arg),
659 * then terminate the search. */ 699 * then terminate the search. */
660static int CALLBACK add_one_font_entity_to_list (ENUMLOGFONTEX *logical_font, 700static int CALLBACK
661 NEWTEXTMETRICEX *physical_font, 701add_one_font_entity_to_list (logical_font, physical_font, font_type, list)
662 DWORD font_type, 702 ENUMLOGFONTEX *logical_font;
663 LPARAM list_object) 703 NEWTEXTMETRICEX *physical_font;
704 DWORD font_type;
705 LPARAM list;
664{ 706{
665 add_font_entity_to_list (logical_font, physical_font, font_type, list_object); 707 add_font_entity_to_list (logical_font, physical_font, font_type, list);
666 return 0; 708 return 0;
667} 709}
668 710
669/* Convert a Lisp font registry (symbol) to a windows charset. */ 711/* Convert a Lisp font registry (symbol) to a windows charset. */
670static LONG registry_to_w32_charset (Lisp_Object charset) 712static LONG
713registry_to_w32_charset (charset)
714 Lisp_Object charset;
671{ 715{
672 if (EQ (charset, Qiso10646_1) || EQ (charset, Qunicode_bmp) 716 if (EQ (charset, Qiso10646_1) || EQ (charset, Qunicode_bmp)
673 || EQ (charset, Qunicode_sip)) 717 || EQ (charset, Qunicode_sip))
@@ -682,7 +726,9 @@ static LONG registry_to_w32_charset (Lisp_Object charset)
682 return DEFAULT_CHARSET; 726 return DEFAULT_CHARSET;
683} 727}
684 728
685static Lisp_Object w32_registry (LONG w32_charset) 729static Lisp_Object
730w32_registry (w32_charset)
731 LONG w32_charset;
686{ 732{
687 if (w32_charset == ANSI_CHARSET) 733 if (w32_charset == ANSI_CHARSET)
688 return Qiso8859_1; 734 return Qiso8859_1;
@@ -693,7 +739,10 @@ static Lisp_Object w32_registry (LONG w32_charset)
693 } 739 }
694} 740}
695 741
696static void set_fonts_frame (Lisp_Object fontlist, Lisp_Object frame) 742static void
743set_fonts_frame (fontlist, frame)
744 Lisp_Object fontlist;
745 Lisp_Object frame;
697{ 746{
698 if (VECTORP (fontlist)) 747 if (VECTORP (fontlist))
699 ASET (fontlist, FONT_FRAME_INDEX, frame); 748 ASET (fontlist, FONT_FRAME_INDEX, frame);
@@ -709,7 +758,11 @@ static void set_fonts_frame (Lisp_Object fontlist, Lisp_Object frame)
709} 758}
710 759
711/* Fill in all the available details of LOGFONT from FONT_SPEC. */ 760/* Fill in all the available details of LOGFONT from FONT_SPEC. */
712static void fill_in_logfont (FRAME_PTR f, LOGFONT *logfont, Lisp_Object font_spec) 761static void
762fill_in_logfont (f, logfont, font_spec)
763 FRAME_PTR f;
764 LOGFONT *logfont;
765 Lisp_Object font_spec;
713{ 766{
714 Lisp_Object val, tmp, extra; 767 Lisp_Object val, tmp, extra;
715 int dpi = FRAME_W32_DISPLAY_INFO (f)->resy; 768 int dpi = FRAME_W32_DISPLAY_INFO (f)->resy;
@@ -777,9 +830,11 @@ static void fill_in_logfont (FRAME_PTR f, LOGFONT *logfont, Lisp_Object font_spe
777 830
778} 831}
779 832
780static void list_all_matching_fonts (Lisp_Object frame, 833static void
781 LOGFONT *font_match_pattern, 834list_all_matching_fonts (frame, font_match_pattern, list)
782 Lisp_Object* list) 835 Lisp_Object frame;
836 LOGFONT *font_match_pattern;
837 Lisp_Object* list;
783{ 838{
784 HDC dc; 839 HDC dc;
785 Lisp_Object families = w32font_list_family (frame); 840 Lisp_Object families = w32font_list_family (frame);
@@ -808,7 +863,9 @@ static void list_all_matching_fonts (Lisp_Object frame,
808 release_frame_dc (f, dc); 863 release_frame_dc (f, dc);
809} 864}
810 865
811static int unicode_range_for_char (unsigned c) 866static int
867unicode_range_for_char (c)
868 unsigned c;
812{ 869{
813 /* Is there really no Windows API function for this?!!! */ 870 /* Is there really no Windows API function for this?!!! */
814 if (c < 0x80) 871 if (c < 0x80)
@@ -1097,7 +1154,8 @@ struct font_driver w32font_driver =
1097 1154
1098/* Initialize the font subsystem for the environment on which 1155/* Initialize the font subsystem for the environment on which
1099 Emacs is running. */ 1156 Emacs is running. */
1100void w32font_initialize () 1157void
1158w32font_initialize ()
1101{ 1159{
1102 /* Load functions that might not exist on older versions of Windows. */ 1160 /* Load functions that might not exist on older versions of Windows. */
1103 HANDLE gdi = LoadLibrary ("gdi32.dll"); 1161 HANDLE gdi = LoadLibrary ("gdi32.dll");
@@ -1110,7 +1168,8 @@ void w32font_initialize ()
1110 1168
1111/* Initialize state that does not change between invocations. This is only 1169/* Initialize state that does not change between invocations. This is only
1112 called when Emacs is dumped. */ 1170 called when Emacs is dumped. */
1113void syms_of_w32font () 1171void
1172syms_of_w32font ()
1114{ 1173{
1115 DEFSYM (Qw32, "w32"); 1174 DEFSYM (Qw32, "w32");
1116 DEFSYM (Qdecorative, "decorative"); 1175 DEFSYM (Qdecorative, "decorative");
@@ -1119,7 +1178,7 @@ void syms_of_w32font ()
1119 DEFSYM (Qscript, "script"); 1178 DEFSYM (Qscript, "script");
1120 DEFSYM (Qswiss, "swiss"); 1179 DEFSYM (Qswiss, "swiss");
1121 DEFSYM (Qunknown, "unknown"); 1180 DEFSYM (Qunknown, "unknown");
1122 DEFSYM (QCsubranges, ":unicode-subranges"); 1181 DEFSYM (QCsubranges, ":subranges");
1123 w32font_driver.type = Qw32; 1182 w32font_driver.type = Qw32;
1124 register_font_driver (&w32font_driver, NULL); 1183 register_font_driver (&w32font_driver, NULL);
1125} 1184}