From 193f150ac3a87fad164b3911bb69280b0728f6f1 Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Fri, 15 Jan 2016 21:56:41 +0100 Subject: cvs update --- src/usr.bin/calendar/calendars/calendar.uk | 44 +++++++++++++++++++++ src/usr.bin/rs/utf8.c | 61 ++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 src/usr.bin/calendar/calendars/calendar.uk create mode 100644 src/usr.bin/rs/utf8.c (limited to 'src') diff --git a/src/usr.bin/calendar/calendars/calendar.uk b/src/usr.bin/calendar/calendars/calendar.uk new file mode 100644 index 0000000..4a36295 --- /dev/null +++ b/src/usr.bin/calendar/calendars/calendar.uk @@ -0,0 +1,44 @@ +/* + * United Kingdom (UK) calendar + * + * $OpenBSD: calendar.uk,v 1.1 2016/01/14 20:08:01 jmc Exp $ + */ + +#ifndef _calendar_uk_ +#define _calendar_uk_ + +01/01 New Year's Day +01/02 Bank holiday in Scotland +01/25 Burns' Night in Scotland +02/14 Saint Valentine's Day +03/01 Saint David's Day in Wales +03/17 Saint Patrick's Day (also a bank holiday across Ireland) +03/20* Vernal Equinox +03/SunLast Daylight Saving Time begins; clocks move forward (last Sunday of March) +04/01 April Fools' Day +04/23 Saint George's Day in England +Easter-21 Mothering Sunday (Sunday 3 weeks before Easter Sunday) +Easter-2 Good Friday (bank holiday) +Easter+1 Easter Monday (bank holiday - except Scotland) +05/MonFirst Early May bank holiday +05/MonThird* Victoria Day in Scotland (Monday on or immediately before 24th May) +05/MonLast Spring Bank Holiday +06/SunThird Father's Day (3rd Sunday of June) +06/21* Summer Solstice +07/11 Eleventh Night in Northern Ireland +07/12 Battle of the Boyne/Orangemen's Day/The Twelfth - a bank holiday in Northern Ireland +08/MonFirst Summer bank holiday in Scotland +08/MonLast Summer bank holiday in England, Wales and Northern Ireland +09/22* Autumnal Equinox +10/SunLast Daylight Saving Time ends; clocks move back (last Sunday in October) +10/31 Halloween +11/05 Guy Fawkes Night +11/11 Remembrance Day +11/SunSecond Remembrance Sunday +12/21* Winter Solstice +12/24 Christmas Eve +12/25 Christmas Day +12/26 Boxing Day +12/31 Hogmanay/New Year's Eve + +#endif /* !_calendar_uk_ */ diff --git a/src/usr.bin/rs/utf8.c b/src/usr.bin/rs/utf8.c new file mode 100644 index 0000000..c779d74 --- /dev/null +++ b/src/usr.bin/rs/utf8.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2015 Ingo Schwarze + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include +#include + +int +mbsavis(char** outp, const char *mbs) +{ + const char *src; /* Iterate mbs. */ + char *dst; /* Iterate *outp. */ + wchar_t wc; + int total_width; /* Display width of the whole string. */ + int width; /* Display width of a single Unicode char. */ + int len; /* Length in bytes of UTF-8 encoded string. */ + + len = strlen(mbs); + if ((*outp = malloc(len + 1)) == NULL) + err(1, NULL); + + if (MB_CUR_MAX == 1) { + memcpy(*outp, mbs, len + 1); + return len; + } + + src = mbs; + dst = *outp; + total_width = 0; + while (*src != '\0') { + if ((len = mbtowc(&wc, src, MB_CUR_MAX)) == -1) { + total_width++; + *dst++ = '?'; + src++; + } else if ((width = wcwidth(wc)) == -1) { + total_width++; + *dst++ = '?'; + src += len; + } else { + total_width += width; + while (len-- > 0) + *dst++ = *src++; + } + } + *dst = '\0'; + return total_width; +} -- cgit 1.4.1