4 * Copyright (c) 2009 Joshua Elsasser <josh@elsasser.org>
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
15 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
16 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 #include <sys/types.h>
26 attributes_tostring(int attr
)
34 len
= xsnprintf(buf
, sizeof buf
, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
35 (attr
& GRID_ATTR_CHARSET
) ? "acs," : "",
36 (attr
& GRID_ATTR_BRIGHT
) ? "bright," : "",
37 (attr
& GRID_ATTR_DIM
) ? "dim," : "",
38 (attr
& GRID_ATTR_UNDERSCORE
) ? "underscore," : "",
39 (attr
& GRID_ATTR_BLINK
)? "blink," : "",
40 (attr
& GRID_ATTR_REVERSE
) ? "reverse," : "",
41 (attr
& GRID_ATTR_HIDDEN
) ? "hidden," : "",
42 (attr
& GRID_ATTR_ITALICS
) ? "italics," : "",
43 (attr
& GRID_ATTR_STRIKETHROUGH
) ? "strikethrough," : "",
44 (attr
& GRID_ATTR_UNDERSCORE_2
) ? "double-underscore," : "",
45 (attr
& GRID_ATTR_UNDERSCORE_3
) ? "curly-underscore," : "",
46 (attr
& GRID_ATTR_UNDERSCORE_4
) ? "dotted-underscore," : "",
47 (attr
& GRID_ATTR_UNDERSCORE_5
) ? "dashed-underscore," : "",
48 (attr
& GRID_ATTR_OVERLINE
) ? "overline," : "");
56 attributes_fromstring(const char *str
)
58 const char delimiters
[] = " ,|";
66 { "acs", GRID_ATTR_CHARSET
},
67 { "bright", GRID_ATTR_BRIGHT
},
68 { "bold", GRID_ATTR_BRIGHT
},
69 { "dim", GRID_ATTR_DIM
},
70 { "underscore", GRID_ATTR_UNDERSCORE
},
71 { "blink", GRID_ATTR_BLINK
},
72 { "reverse", GRID_ATTR_REVERSE
},
73 { "hidden", GRID_ATTR_HIDDEN
},
74 { "italics", GRID_ATTR_ITALICS
},
75 { "strikethrough", GRID_ATTR_STRIKETHROUGH
},
76 { "double-underscore", GRID_ATTR_UNDERSCORE_2
},
77 { "curly-underscore", GRID_ATTR_UNDERSCORE_3
},
78 { "dotted-underscore", GRID_ATTR_UNDERSCORE_4
},
79 { "dashed-underscore", GRID_ATTR_UNDERSCORE_5
},
80 { "overline", GRID_ATTR_OVERLINE
}
83 if (*str
== '\0' || strcspn(str
, delimiters
) == 0)
85 if (strchr(delimiters
, str
[strlen(str
) - 1]) != NULL
)
88 if (strcasecmp(str
, "default") == 0 || strcasecmp(str
, "none") == 0)
93 end
= strcspn(str
, delimiters
);
94 for (i
= 0; i
< nitems(table
); i
++) {
95 if (end
!= strlen(table
[i
].name
))
97 if (strncasecmp(str
, table
[i
].name
, end
) == 0) {
98 attr
|= table
[i
].attr
;
102 if (i
== nitems(table
))
104 str
+= end
+ strspn(str
+ end
, delimiters
);
105 } while (*str
!= '\0');