about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-01-15 21:56:41 +0100
committerChristian Neukirchen <chneukirchen@gmail.com>2016-01-15 21:56:41 +0100
commit193f150ac3a87fad164b3911bb69280b0728f6f1 (patch)
tree822f28f8950430e2f43d76439e6bee8e6dde71ac /src
parent3c57c4d0031b7206ced8f313e3efa02dbcf88f78 (diff)
downloadoutils-193f150ac3a87fad164b3911bb69280b0728f6f1.tar.gz
outils-193f150ac3a87fad164b3911bb69280b0728f6f1.tar.xz
outils-193f150ac3a87fad164b3911bb69280b0728f6f1.zip
cvs update
Diffstat (limited to 'src')
-rw-r--r--src/usr.bin/calendar/calendars/calendar.uk44
-rw-r--r--src/usr.bin/rs/utf8.c61
2 files changed, 105 insertions, 0 deletions
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 <schwarze@openbsd.org>
+ *
+ * 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 <err.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+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;
+}