packages feed

punycode 0.0.1.0 → 0.5

raw patch · 84 files changed

+362/−881 lines, 84 filesdep +HUnitdep +QuickCheckdep +cerealdep −parsecdep −textdep −text-icudep ~basesetup-changednew-uploader

Dependencies added: HUnit, QuickCheck, cereal, mtl

Dependencies removed: parsec, text, text-icu

Dependency ranges changed: base

Files

− .git/COMMIT_EDITMSG
@@ -1,13 +0,0 @@-we want our encode function to return the input for non-international labels-# Please enter the commit message for your changes. Lines starting-# with '#' will be ignored, and an empty message aborts the commit.-# On branch master-# Changes to be committed:-#   (use "git reset HEAD <file>..." to unstage)-#-#	modified:   Data/Text/Punycode.hs-#-# Untracked files:-#   (use "git add <file>..." to include in what will be committed)-#-#	dist/
− .git/HEAD
@@ -1,1 +0,0 @@-ref: refs/heads/master
− .git/config
@@ -1,11 +0,0 @@-[core]-	repositoryformatversion = 0-	filemode = true-	bare = false-	logallrefupdates = true-[remote "origin"]-	url = git@github.com:jonkri/punycode.git-	fetch = +refs/heads/*:refs/remotes/origin/*-[branch "master"]-	remote = origin-	merge = refs/heads/master
− .git/description
@@ -1,1 +0,0 @@-Unnamed repository; edit this file 'description' to name the repository.
− .git/hooks/applypatch-msg.sample
@@ -1,15 +0,0 @@-#!/bin/sh-#-# An example hook script to check the commit log message taken by-# applypatch from an e-mail message.-#-# The hook should exit with non-zero status after issuing an-# appropriate message if it wants to stop the commit.  The hook is-# allowed to edit the commit message file.-#-# To enable this hook, rename this file to "applypatch-msg".--. git-sh-setup-test -x "$GIT_DIR/hooks/commit-msg" &&-	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}-:
− .git/hooks/commit-msg.sample
@@ -1,24 +0,0 @@-#!/bin/sh-#-# An example hook script to check the commit log message.-# Called by "git commit" with one argument, the name of the file-# that has the commit message.  The hook should exit with non-zero-# status after issuing an appropriate message if it wants to stop the-# commit.  The hook is allowed to edit the commit message file.-#-# To enable this hook, rename this file to "commit-msg".--# Uncomment the below to add a Signed-off-by line to the message.-# Doing this in a hook is a bad idea in general, but the prepare-commit-msg-# hook is more suited to it.-#-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"--# This example catches duplicate Signed-off-by lines.--test "" = "$(grep '^Signed-off-by: ' "$1" |-	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {-	echo >&2 Duplicate Signed-off-by lines.-	exit 1-}
− .git/hooks/post-commit.sample
@@ -1,8 +0,0 @@-#!/bin/sh-#-# An example hook script that is called after a successful-# commit is made.-#-# To enable this hook, rename this file to "post-commit".--: Nothing
− .git/hooks/post-receive.sample
@@ -1,15 +0,0 @@-#!/bin/sh-#-# An example hook script for the "post-receive" event.-#-# The "post-receive" script is run after receive-pack has accepted a pack-# and the repository has been updated.  It is passed arguments in through-# stdin in the form-#  <oldrev> <newrev> <refname>-# For example:-#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master-#-# see contrib/hooks/ for a sample, or uncomment the next line and-# rename the file to "post-receive".--#. /usr/share/git-core/contrib/hooks/post-receive-email
− .git/hooks/post-update.sample
@@ -1,8 +0,0 @@-#!/bin/sh-#-# An example hook script to prepare a packed repository for use over-# dumb transports.-#-# To enable this hook, rename this file to "post-update".--exec git update-server-info
− .git/hooks/pre-applypatch.sample
@@ -1,14 +0,0 @@-#!/bin/sh-#-# An example hook script to verify what is about to be committed-# by applypatch from an e-mail message.-#-# The hook should exit with non-zero status after issuing an-# appropriate message if it wants to stop the commit.-#-# To enable this hook, rename this file to "pre-applypatch".--. git-sh-setup-test -x "$GIT_DIR/hooks/pre-commit" &&-	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}-:
− .git/hooks/pre-commit.sample
@@ -1,46 +0,0 @@-#!/bin/sh-#-# An example hook script to verify what is about to be committed.-# Called by "git commit" with no arguments.  The hook should-# exit with non-zero status after issuing an appropriate message if-# it wants to stop the commit.-#-# To enable this hook, rename this file to "pre-commit".--if git rev-parse --verify HEAD >/dev/null 2>&1-then-	against=HEAD-else-	# Initial commit: diff against an empty tree object-	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904-fi--# If you want to allow non-ascii filenames set this variable to true.-allownonascii=$(git config hooks.allownonascii)--# Cross platform projects tend to avoid non-ascii filenames; prevent-# them from being added to the repository. We exploit the fact that the-# printable range starts at the space character and ends with tilde.-if [ "$allownonascii" != "true" ] &&-	# Note that the use of brackets around a tr range is ok here, (it's-	# even required, for portability to Solaris 10's /usr/bin/tr), since-	# the square bracket bytes happen to fall in the designated range.-	test "$(git diff --cached --name-only --diff-filter=A -z $against |-	  LC_ALL=C tr -d '[ -~]\0')"-then-	echo "Error: Attempt to add a non-ascii file name."-	echo-	echo "This can cause problems if you want to work"-	echo "with people on other platforms."-	echo-	echo "To be portable it is advisable to rename the file ..."-	echo-	echo "If you know what you are doing you can disable this"-	echo "check using:"-	echo-	echo "  git config hooks.allownonascii true"-	echo-	exit 1-fi--exec git diff-index --check --cached $against --
− .git/hooks/pre-rebase.sample
@@ -1,169 +0,0 @@-#!/bin/sh-#-# Copyright (c) 2006, 2008 Junio C Hamano-#-# The "pre-rebase" hook is run just before "git rebase" starts doing-# its job, and can prevent the command from running by exiting with-# non-zero status.-#-# The hook is called with the following parameters:-#-# $1 -- the upstream the series was forked from.-# $2 -- the branch being rebased (or empty when rebasing the current branch).-#-# This sample shows how to prevent topic branches that are already-# merged to 'next' branch from getting rebased, because allowing it-# would result in rebasing already published history.--publish=next-basebranch="$1"-if test "$#" = 2-then-	topic="refs/heads/$2"-else-	topic=`git symbolic-ref HEAD` ||-	exit 0 ;# we do not interrupt rebasing detached HEAD-fi--case "$topic" in-refs/heads/??/*)-	;;-*)-	exit 0 ;# we do not interrupt others.-	;;-esac--# Now we are dealing with a topic branch being rebased-# on top of master.  Is it OK to rebase it?--# Does the topic really exist?-git show-ref -q "$topic" || {-	echo >&2 "No such branch $topic"-	exit 1-}--# Is topic fully merged to master?-not_in_master=`git rev-list --pretty=oneline ^master "$topic"`-if test -z "$not_in_master"-then-	echo >&2 "$topic is fully merged to master; better remove it."-	exit 1 ;# we could allow it, but there is no point.-fi--# Is topic ever merged to next?  If so you should not be rebasing it.-only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`-only_next_2=`git rev-list ^master           ${publish} | sort`-if test "$only_next_1" = "$only_next_2"-then-	not_in_topic=`git rev-list "^$topic" master`-	if test -z "$not_in_topic"-	then-		echo >&2 "$topic is already up-to-date with master"-		exit 1 ;# we could allow it, but there is no point.-	else-		exit 0-	fi-else-	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`-	/usr/bin/perl -e '-		my $topic = $ARGV[0];-		my $msg = "* $topic has commits already merged to public branch:\n";-		my (%not_in_next) = map {-			/^([0-9a-f]+) /;-			($1 => 1);-		} split(/\n/, $ARGV[1]);-		for my $elem (map {-				/^([0-9a-f]+) (.*)$/;-				[$1 => $2];-			} split(/\n/, $ARGV[2])) {-			if (!exists $not_in_next{$elem->[0]}) {-				if ($msg) {-					print STDERR $msg;-					undef $msg;-				}-				print STDERR " $elem->[1]\n";-			}-		}-	' "$topic" "$not_in_next" "$not_in_master"-	exit 1-fi--exit 0--################################################################--This sample hook safeguards topic branches that have been-published from being rewound.--The workflow assumed here is:-- * Once a topic branch forks from "master", "master" is never-   merged into it again (either directly or indirectly).-- * Once a topic branch is fully cooked and merged into "master",-   it is deleted.  If you need to build on top of it to correct-   earlier mistakes, a new topic branch is created by forking at-   the tip of the "master".  This is not strictly necessary, but-   it makes it easier to keep your history simple.-- * Whenever you need to test or publish your changes to topic-   branches, merge them into "next" branch.--The script, being an example, hardcodes the publish branch name-to be "next", but it is trivial to make it configurable via-$GIT_DIR/config mechanism.--With this workflow, you would want to know:--(1) ... if a topic branch has ever been merged to "next".  Young-    topic branches can have stupid mistakes you would rather-    clean up before publishing, and things that have not been-    merged into other branches can be easily rebased without-    affecting other people.  But once it is published, you would-    not want to rewind it.--(2) ... if a topic branch has been fully merged to "master".-    Then you can delete it.  More importantly, you should not-    build on top of it -- other people may already want to-    change things related to the topic as patches against your-    "master", so if you need further changes, it is better to-    fork the topic (perhaps with the same name) afresh from the-    tip of "master".--Let's look at this example:--		   o---o---o---o---o---o---o---o---o---o "next"-		  /       /           /           /-		 /   a---a---b A     /           /-		/   /               /           /-	       /   /   c---c---c---c B         /-	      /   /   /             \         /-	     /   /   /   b---b C     \       /-	    /   /   /   /             \     /-    ---o---o---o---o---o---o---o---o---o---o---o "master"---A, B and C are topic branches.-- * A has one fix since it was merged up to "next".-- * B has finished.  It has been fully merged up to "master" and "next",-   and is ready to be deleted.-- * C has not merged to "next" at all.--We would want to allow C to be rebased, refuse A, and encourage-B to be deleted.--To compute (1):--	git rev-list ^master ^topic next-	git rev-list ^master        next--	if these match, topic has not merged in next at all.--To compute (2):--	git rev-list master..topic--	if this is empty, it is fully merged to "master".
− .git/hooks/prepare-commit-msg.sample
@@ -1,36 +0,0 @@-#!/bin/sh-#-# An example hook script to prepare the commit log message.-# Called by "git commit" with the name of the file that has the-# commit message, followed by the description of the commit-# message's source.  The hook's purpose is to edit the commit-# message file.  If the hook fails with a non-zero status,-# the commit is aborted.-#-# To enable this hook, rename this file to "prepare-commit-msg".--# This hook includes three examples.  The first comments out the-# "Conflicts:" part of a merge commit.-#-# The second includes the output of "git diff --name-status -r"-# into the message, just before the "git status" output.  It is-# commented because it doesn't cope with --amend or with squashed-# commits.-#-# The third example adds a Signed-off-by line to the message, that can-# still be edited.  This is rarely a good idea.--case "$2,$3" in-  merge,)-    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;--# ,|template,)-#   /usr/bin/perl -i.bak -pe '-#      print "\n" . `git diff --cached --name-status -r`-#	 if /^#/ && $first++ == 0' "$1" ;;--  *) ;;-esac--# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
− .git/hooks/update.sample
@@ -1,128 +0,0 @@-#!/bin/sh-#-# An example hook script to blocks unannotated tags from entering.-# Called by "git receive-pack" with arguments: refname sha1-old sha1-new-#-# To enable this hook, rename this file to "update".-#-# Config-# -------# hooks.allowunannotated-#   This boolean sets whether unannotated tags will be allowed into the-#   repository.  By default they won't be.-# hooks.allowdeletetag-#   This boolean sets whether deleting tags will be allowed in the-#   repository.  By default they won't be.-# hooks.allowmodifytag-#   This boolean sets whether a tag may be modified after creation. By default-#   it won't be.-# hooks.allowdeletebranch-#   This boolean sets whether deleting branches will be allowed in the-#   repository.  By default they won't be.-# hooks.denycreatebranch-#   This boolean sets whether remotely creating branches will be denied-#   in the repository.  By default this is allowed.-#--# --- Command line-refname="$1"-oldrev="$2"-newrev="$3"--# --- Safety check-if [ -z "$GIT_DIR" ]; then-	echo "Don't run this script from the command line." >&2-	echo " (if you want, you could supply GIT_DIR then run" >&2-	echo "  $0 <ref> <oldrev> <newrev>)" >&2-	exit 1-fi--if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then-	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2-	exit 1-fi--# --- Config-allowunannotated=$(git config --bool hooks.allowunannotated)-allowdeletebranch=$(git config --bool hooks.allowdeletebranch)-denycreatebranch=$(git config --bool hooks.denycreatebranch)-allowdeletetag=$(git config --bool hooks.allowdeletetag)-allowmodifytag=$(git config --bool hooks.allowmodifytag)--# check for no description-projectdesc=$(sed -e '1q' "$GIT_DIR/description")-case "$projectdesc" in-"Unnamed repository"* | "")-	echo "*** Project description file hasn't been set" >&2-	exit 1-	;;-esac--# --- Check types-# if $newrev is 0000...0000, it's a commit to delete a ref.-zero="0000000000000000000000000000000000000000"-if [ "$newrev" = "$zero" ]; then-	newrev_type=delete-else-	newrev_type=$(git cat-file -t $newrev)-fi--case "$refname","$newrev_type" in-	refs/tags/*,commit)-		# un-annotated tag-		short_refname=${refname##refs/tags/}-		if [ "$allowunannotated" != "true" ]; then-			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2-			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2-			exit 1-		fi-		;;-	refs/tags/*,delete)-		# delete tag-		if [ "$allowdeletetag" != "true" ]; then-			echo "*** Deleting a tag is not allowed in this repository" >&2-			exit 1-		fi-		;;-	refs/tags/*,tag)-		# annotated tag-		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1-		then-			echo "*** Tag '$refname' already exists." >&2-			echo "*** Modifying a tag is not allowed in this repository." >&2-			exit 1-		fi-		;;-	refs/heads/*,commit)-		# branch-		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then-			echo "*** Creating a branch is not allowed in this repository" >&2-			exit 1-		fi-		;;-	refs/heads/*,delete)-		# delete branch-		if [ "$allowdeletebranch" != "true" ]; then-			echo "*** Deleting a branch is not allowed in this repository" >&2-			exit 1-		fi-		;;-	refs/remotes/*,commit)-		# tracking branch-		;;-	refs/remotes/*,delete)-		# delete tracking branch-		if [ "$allowdeletebranch" != "true" ]; then-			echo "*** Deleting a tracking branch is not allowed in this repository" >&2-			exit 1-		fi-		;;-	*)-		# Anything else (is there anything else?)-		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2-		exit 1-		;;-esac--# --- Finished-exit 0
− .git/index

binary file changed (416 → absent bytes)

− .git/info/exclude
@@ -1,6 +0,0 @@-# git ls-files --others --exclude-from=.git/info/exclude-# Lines that start with '#' are comments.-# For a project mostly in C, the following would be a good set of-# exclude patterns (uncomment them if you want to use them):-# *.[oa]-# *~
− .git/logs/HEAD
@@ -1,12 +0,0 @@-0000000000000000000000000000000000000000 53eba928bca75be4bf30ed746f8677fa80597829 Jon Kristensen <info@jonkristensen.com> 1309724349 +0200	commit (initial): initial commit with README file-53eba928bca75be4bf30ed746f8677fa80597829 0163dcbb5a184f54262f50a3596a181f586f3aa5 Jon Kristensen <info@jonkristensen.com> 1309724429 +0200	commit: added LICENSE file-0163dcbb5a184f54262f50a3596a181f586f3aa5 f185e80639824829958ad776ea7849477768ced1 Jon Kristensen <info@jonkristensen.com> 1309724680 +0200	commit: added Cabal file-f185e80639824829958ad776ea7849477768ced1 8f6a06e70e51dcb660d55f99392342cc5fcac890 Jon Kristensen <info@jonkristensen.com> 1309724712 +0200	commit: added Setup.hs file-8f6a06e70e51dcb660d55f99392342cc5fcac890 2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 Jon Kristensen <info@jonkristensen.com> 1309724820 +0200	commit: added Punycode module and updated the Cabal file-2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 0608637f3a9663403bcf5aa5fbb912293817c7df Jon Kristensen <info@jonkristensen.com> 1309781060 +0200	commit: Made an implementation of the adapt function-0608637f3a9663403bcf5aa5fbb912293817c7df 8512c51cba7ca3ee75b665f16d7bd67c94754713 Jon Kristensen <info@jonkristensen.com> 1309783508 +0200	commit: some Haddock documentation, some clean-up, some minor Cabal changes, some stubs-8512c51cba7ca3ee75b665f16d7bd67c94754713 0d568849e909c947e83f21120b4603a34461459d Jon Kristensen <info@jonkristensen.com> 1309809242 +0200	commit: prototyped the encode function. it seems to mostly work-0d568849e909c947e83f21120b4603a34461459d 5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 Jon Kristensen <info@jonkristensen.com> 1309852382 +0200	commit: fixed the suffix bug-5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 029db06c06e1114f3cf89e750eadc5ba087f07b2 Jon Kristensen <info@jonkristensen.com> 1309855512 +0200	commit: some minor changes. if no more bugs are detected today or tomorrow, this will be 0.0.1.0-029db06c06e1114f3cf89e750eadc5ba087f07b2 130df5810ba24bd068a65b15c75743e8734c2472 Jon Kristensen <info@jonkristensen.com> 1309855699 +0200	commit: updated the README file-130df5810ba24bd068a65b15c75743e8734c2472 5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e Jon Kristensen <info@jonkristensen.com> 1309864002 +0200	commit: we want our encode function to return the input for non-international labels
− .git/logs/refs/heads/master
@@ -1,12 +0,0 @@-0000000000000000000000000000000000000000 53eba928bca75be4bf30ed746f8677fa80597829 Jon Kristensen <info@jonkristensen.com> 1309724349 +0200	commit (initial): initial commit with README file-53eba928bca75be4bf30ed746f8677fa80597829 0163dcbb5a184f54262f50a3596a181f586f3aa5 Jon Kristensen <info@jonkristensen.com> 1309724429 +0200	commit: added LICENSE file-0163dcbb5a184f54262f50a3596a181f586f3aa5 f185e80639824829958ad776ea7849477768ced1 Jon Kristensen <info@jonkristensen.com> 1309724680 +0200	commit: added Cabal file-f185e80639824829958ad776ea7849477768ced1 8f6a06e70e51dcb660d55f99392342cc5fcac890 Jon Kristensen <info@jonkristensen.com> 1309724712 +0200	commit: added Setup.hs file-8f6a06e70e51dcb660d55f99392342cc5fcac890 2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 Jon Kristensen <info@jonkristensen.com> 1309724820 +0200	commit: added Punycode module and updated the Cabal file-2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 0608637f3a9663403bcf5aa5fbb912293817c7df Jon Kristensen <info@jonkristensen.com> 1309781060 +0200	commit: Made an implementation of the adapt function-0608637f3a9663403bcf5aa5fbb912293817c7df 8512c51cba7ca3ee75b665f16d7bd67c94754713 Jon Kristensen <info@jonkristensen.com> 1309783508 +0200	commit: some Haddock documentation, some clean-up, some minor Cabal changes, some stubs-8512c51cba7ca3ee75b665f16d7bd67c94754713 0d568849e909c947e83f21120b4603a34461459d Jon Kristensen <info@jonkristensen.com> 1309809242 +0200	commit: prototyped the encode function. it seems to mostly work-0d568849e909c947e83f21120b4603a34461459d 5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 Jon Kristensen <info@jonkristensen.com> 1309852382 +0200	commit: fixed the suffix bug-5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 029db06c06e1114f3cf89e750eadc5ba087f07b2 Jon Kristensen <info@jonkristensen.com> 1309855512 +0200	commit: some minor changes. if no more bugs are detected today or tomorrow, this will be 0.0.1.0-029db06c06e1114f3cf89e750eadc5ba087f07b2 130df5810ba24bd068a65b15c75743e8734c2472 Jon Kristensen <info@jonkristensen.com> 1309855699 +0200	commit: updated the README file-130df5810ba24bd068a65b15c75743e8734c2472 5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e Jon Kristensen <info@jonkristensen.com> 1309864002 +0200	commit: we want our encode function to return the input for non-international labels
− .git/logs/refs/remotes/origin/master
@@ -1,12 +0,0 @@-0000000000000000000000000000000000000000 53eba928bca75be4bf30ed746f8677fa80597829 Jon Kristensen <info@jonkristensen.com> 1309724379 +0200	update by push-53eba928bca75be4bf30ed746f8677fa80597829 0163dcbb5a184f54262f50a3596a181f586f3aa5 Jon Kristensen <info@jonkristensen.com> 1309724441 +0200	update by push-0163dcbb5a184f54262f50a3596a181f586f3aa5 f185e80639824829958ad776ea7849477768ced1 Jon Kristensen <info@jonkristensen.com> 1309724700 +0200	update by push-f185e80639824829958ad776ea7849477768ced1 8f6a06e70e51dcb660d55f99392342cc5fcac890 Jon Kristensen <info@jonkristensen.com> 1309724731 +0200	update by push-8f6a06e70e51dcb660d55f99392342cc5fcac890 2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 Jon Kristensen <info@jonkristensen.com> 1309724839 +0200	update by push-2b7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 0608637f3a9663403bcf5aa5fbb912293817c7df Jon Kristensen <info@jonkristensen.com> 1309781092 +0200	update by push-0608637f3a9663403bcf5aa5fbb912293817c7df 8512c51cba7ca3ee75b665f16d7bd67c94754713 Jon Kristensen <info@jonkristensen.com> 1309783544 +0200	update by push-8512c51cba7ca3ee75b665f16d7bd67c94754713 0d568849e909c947e83f21120b4603a34461459d Jon Kristensen <info@jonkristensen.com> 1309809371 +0200	update by push-0d568849e909c947e83f21120b4603a34461459d 5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 Jon Kristensen <info@jonkristensen.com> 1309852413 +0200	update by push-5bff51646c0ee8c33c07478a0f1933a3cbea6bd8 029db06c06e1114f3cf89e750eadc5ba087f07b2 Jon Kristensen <info@jonkristensen.com> 1309855556 +0200	update by push-029db06c06e1114f3cf89e750eadc5ba087f07b2 130df5810ba24bd068a65b15c75743e8734c2472 Jon Kristensen <info@jonkristensen.com> 1309855715 +0200	update by push-130df5810ba24bd068a65b15c75743e8734c2472 5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e Jon Kristensen <info@jonkristensen.com> 1309864034 +0200	update by push
− .git/objects/01/63dcbb5a184f54262f50a3596a181f586f3aa5

binary file changed (175 → absent bytes)

− .git/objects/02/9db06c06e1114f3cf89e750eadc5ba087f07b2
@@ -1,2 +0,0 @@-x¥KNÄ0DYç½Eí_âH±†SøÓž˜»‘íшÛã`YO¥Ò«À¥äJ˜§ÑˆÀYt&šè“‡Ñ›NÒÈݐJ‚¤öÇNvF…Ë·kTŸ’›ÞÙ TÀ]ïÖa‡RNOnóÑ.î>NnðÁ>[îƒj§-¯¹&~ÿâzýckàòBáa1BÂ3JÄeÒ):èKçBPrátõB}…œ 2nþ~é0oA¤AaP„ÁÑýÀ¬žÆgîðÈ·x\q+.¿wAgO
− .git/objects/06/08637f3a9663403bcf5aa5fbb912293817c7df
@@ -1,1 +0,0 @@-x¥ŽKn!³æ½5`Ó E–×±r>Ý2I€Ñßßdãx[O¯Ty´V'Òosg’ì1ÃH´I>g-ž=Z>Úâ‚%íÕwîë˜H\tÉ x—¨²Gd­Á”´	¢%I$¯â}^Ç_£Ãe¯·ÉýÆ>k—qþý÷É>òh'Ðyá
¢Zt…N~A¡¾caˆjÛþ¸­ü8ëê󺆷	rïùŸªåNYM
− .git/objects/0d/568849e909c947e83f21120b4603a34461459d
@@ -1,3 +0,0 @@-x¥P;nÄ LÍ)^ŸhƀWŠ¢ÔÉ)ð㓵y`9{û°M.fŠÑü4Èۖh;>µBˆFÍÖ)ÂIê C”ÒÌhôHh¢“c¤ôÖ±ûB¹ÁdÔÐ-8{‡^93[k¢²ÁÍÁ:¼ŽÎŒNi᏶pÎðYRm”+exM9òû7çÛwAÞÞ@iyäux–½St¶mô±nÜî;heä@Œ-q¾@?¢mÃÆµ­w8¹Ü„x¨çãR…¾M™@Y
ç’pôG¥-NJ%@=bL?/àLë-+ó
|ë…àKáSüJyà
− .git/objects/0d/f8fa07e84fe3fed2a2aec504a82fe3c062829b

binary file changed (801 → absent bytes)

− .git/objects/13/0df5810ba24bd068a65b15c75743e8734c2472

binary file changed (176 → absent bytes)

− .git/objects/18/a76a36c99a177df4fa1d4edfa3254f21198b3e

binary file changed (2789 → absent bytes)

− .git/objects/27/ffeecc508bb39739af2def53d22f9db96f7233

binary file changed (184 → absent bytes)

− .git/objects/2a/76dd32a10dac62fab910b5d4e1c29001a13ba4

binary file changed (46 → absent bytes)

− .git/objects/2b/7f6a6b20f86b7d4c8f6773320bb129f1fbfa78

binary file changed (189 → absent bytes)

− .git/objects/35/653898400ef0f128dc9f629abaeb1704c6b7c4

binary file changed (121 → absent bytes)

− .git/objects/39/255027b23d0c3728f63493a0169b16e9db3de9

binary file changed (831 → absent bytes)

− .git/objects/3d/2f3f6f30b28b332f278e720594b388883a25e1

binary file changed (56 → absent bytes)

− .git/objects/3f/bb0e281a38c4ef74db799ff0adf2279f97782a

binary file changed (56 → absent bytes)

− .git/objects/46/ad3d63640865c60723d6d4e0c6b9c8cddc8871

binary file changed (46 → absent bytes)

− .git/objects/53/eba928bca75be4bf30ed746f8677fa80597829
@@ -1,2 +0,0 @@-x¥ÍM-Â0@a×9Åì™æ§5 ¢`7Šo“	mH#^߂àܾÅ÷|ž&® \ÕBQ#ÝDk¼iÑÉ.(gP™ÐÞ}°Úm±sDÖ÷ªC.pÎ	.…çJi¦;N19=mãó´‡F¡í¤VÚÂ%¢Xê2®ô!8qe7Âׂ7×nýñtí!òHâQ×FF
− .git/objects/5b/ff51646c0ee8c33c07478a0f1933a3cbea6bd8
@@ -1,2 +0,0 @@-x¥ŽK-Â0@]ç³d2ùt"®õi3±UšH›‚Ç·+/àò½Åã
už§d»C[D@ò€˜8!']çS’1'Œ¹#4htìÕ;.R`ržÙ	†`;a“IkÂÞz4ÑXëµu!©¸µ±.p«îË´6)«8O%×볖×ϝ†:_@ìÈ0Á	QívmòGBåé#	Ú(°ny跇úN:Ob
− .git/objects/5c/1c69bbf6b0e2183b189cfd51cfdb89661eb69e

binary file changed (203 → absent bytes)

− .git/objects/62/cad6920027644a32e8791f6c043b635e74eb20

binary file changed (785 → absent bytes)

− .git/objects/6a/5da3c83e102878b6a5d504c5b9cd272a0408b2

binary file changed (46 → absent bytes)

− .git/objects/74/1d6a4f06115b0ea1d047c8cf2ec08785395bd0

binary file changed (185 → absent bytes)

− .git/objects/78/05a40b998fdfba12625f5ad8bf8fcfbeb439f4

binary file changed (46 → absent bytes)

− .git/objects/7b/772f5040ca692e15127ab20087d8dc08122d46

binary file changed (46 → absent bytes)

− .git/objects/7b/8db4acfd92fea8939354f9e07091635a6540d4

binary file changed (404 → absent bytes)

− .git/objects/7d/cad7423ffee1641921b3ec7cb7c8bd9efe950c

binary file changed (46 → absent bytes)

− .git/objects/7f/c85a942ed2e07e912b8cc1f8e803e53d693718

binary file changed (184 → absent bytes)

− .git/objects/84/99ea1219f0dc85651bd99eeba130f757b35311

binary file changed (56 → absent bytes)

− .git/objects/85/12c51cba7ca3ee75b665f16d7bd67c94754713
@@ -1,1 +0,0 @@-x¥ÁJ1D=ç+ú¾*™´“L@dÁ‹èWt’nwv7É2Éü¿AÀKAUAñ*֜רíCߘÁ8æg½„€Þ¡'1‰eÆdŒø¼gՍ6.´Õ‹E'HÞZ|Ñ¢ÌD³„à'c<.“‹.‰¢½ŸêŸµÀ×¶¶Î¥q×µH=žk¹üeϱæ7˜P{·àÀ€ƒ6Z«‘ÐÎÿ˜P­f†J©ÆÙó¸@}­å~»xe*OûínóZò;ºB<QùævoZßCS?O<eë
− .git/objects/87/03890913fdb53e96d74639df2085cfff491422

binary file changed (56 → absent bytes)

− .git/objects/87/b967ef95d00f5e64258d720281208bb1d323f7

binary file changed (184 → absent bytes)

− .git/objects/8b/f24ce8f6c08355ad229ed9049f3f69176fdd04

binary file changed (2515 → absent bytes)

− .git/objects/8f/6a06e70e51dcb660d55f99392342cc5fcac890

binary file changed (169 → absent bytes)

− .git/objects/9b/fa009ea8720edb4754ff445a88b0f089b7049b

binary file changed (2547 → absent bytes)

− .git/objects/a8/0a5d5dbf4c95464f25275e3f1e24b97e827530

binary file changed (184 → absent bytes)

− .git/objects/b0/d07da498268c45494abecd22354f48ba5cb97e

binary file changed (827 → absent bytes)

− .git/objects/b5/823f3a2b78cac7f13dc982e8ce6321e5e2a6dd

binary file changed (788 → absent bytes)

− .git/objects/c7/87e0f52ea535f9601401e5cfc3a0884d97466f

binary file changed (56 → absent bytes)

− .git/objects/cc/51b671ec803d0df005bc534ec5f704d200a6a5

binary file changed (184 → absent bytes)

− .git/objects/d0/898a171ae32850864a60a47264aa45f451b544

binary file changed (46 → absent bytes)

− .git/objects/d4/a955a7c342d457f00ae7191982120dd60228ce

binary file changed (82 → absent bytes)

− .git/objects/df/8539007d0f3099536b78dbe30dd697ac711b81

binary file changed (306 → absent bytes)

− .git/objects/e8/ef27dbba9992f80d9271a60892aadc63c9ef36

binary file changed (60 → absent bytes)

− .git/objects/eb/aab0733f361ac8dcbd89fa042713114c919092

binary file changed (185 → absent bytes)

− .git/objects/ef/c092828d08e8d6a576db0ef0fd0af7203031ab

binary file changed (184 → absent bytes)

− .git/objects/f1/830f88eccad143bc84b219633c85d8503efb27

binary file changed (56 → absent bytes)

− .git/objects/f1/85e80639824829958ad776ea7849477768ced1

binary file changed (167 → absent bytes)

− .git/objects/f3/f5940b48982e8e840339162bda5d49ec434155

binary file changed (56 → absent bytes)

− .git/objects/f4/00d41f95c560a27d3a5035d6bcd94a807aee9c

binary file changed (51 → absent bytes)

− .git/objects/f5/1e9243591607b228887c501811a8d68a36fbf4

binary file changed (2787 → absent bytes)

− .git/objects/f5/daa3932cab2c8ee9bc73a6475a20c8ff20960b

binary file changed (1720 → absent bytes)

− .git/objects/fb/f918c9e7d1bc84f134134dbd8f2000c10d4e1c

binary file changed (154 → absent bytes)

− .git/objects/fd/ea5be35e03f22dce0423511443ffad7221107e
@@ -1,2 +0,0 @@-xuSËnœ0횯8»ÎC@ª4‰,’*RW­š|@Ll2ր=әªé¿÷Úb”	û¾Î=Üs]ÖºD–]§ŸÍûZà3ló(Nfó³Wž58îD+¢(âƒaF Î¿(%ë°Ýâ»2âE´Þ+¨ ÿIT¬¯ÍY¬_ós(€Å)åW"*Y'Xo¸¸Œ"ÓȰ£·©ÒFØ),rvœŠº½8†!gޕýñ憜M<Ӕx¬×¸ouƒ_÷w¸ør#~ÏFj…ËM–l)nSª^y'ãì`b.jÃVªoZ*Ó­*ÙvÆÈF¸¡¬0ù`vB¡®ŒfàO.ÃR±ø€¨iç“rŸñ>¸„g5±IÞÒ÷Ô,õæq'i=|çı›ÿvÖ	>ÓÉN‰ÃÉÁ5Jñ"•/ĬfaªmºÇ¶ƒ÷Åý¥¦o•‹Æ3-”žYŽŸç1üÚVÉ$‰"7ú@G¬oƵµ×[­ëÀ5æsÚºŠÕZ‚/Ürú71î:_°Óò’·pBz9žhÌON2¯ÖèɉýxWÑTï:¾=­€[pg'8R{µ|(˜§”ÿsO&Ü(¶8>}¦Ü<󚶵=JZF¯ây™‹d³¸ƒHôœ6¼Ýˆod'ÇíuMÇ
− .git/objects/fe/658ec2983d9b15c4ba1b0fb8d98535ce085d38

binary file changed (73 → absent bytes)

− .git/refs/heads/master
@@ -1,1 +0,0 @@-5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e
− .git/refs/remotes/origin/master
@@ -1,1 +0,0 @@-5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e
Data/Text/Punycode.hs view
@@ -1,238 +1,4 @@--- |--- Module:      $Header$--- Description: Encoding function for Punycode--- Copyright:   Copyright © 2011 Jon Kristensen--- License:     BSD3------ Maintainer:  jon.kristensen@pontarius.org--- Stability:   unstable--- Portability: portable------ Uniquely and reversibly transform a Unicode string into an ASCII string.--- 0.0.2.0 will support going the other way - from ASCII to Unicode.----- TODO: Assmuption: All code points less than initial_n (128) are basic code--- points; code points are unsigned.---module Data.Text.Punycode (encode) where---import Data.Text (Text)--import Data.Char (chr, intToDigit, isAlphaNum, isAscii, ord, toUpper)---base :: Int--base = 36---tmin :: Int--tmin = 1---tmax :: Int--tmax = 26---skew :: Int--skew = 38---damp :: Int--damp = 700---initial_bias :: Int--initial_bias = 72---initial_n :: Int--initial_n = 128 -- The first character after the ASCII characters----- decode will implement the following pseudo code from Section 6.2 of RFC 3492:------ let n = initial_n--- let i = 0--- let bias = initial_bias--- let output = an empty string indexed from 0--- consume all code points before the last delimiter (if there is one)---   and copy them to output, fail on any non-basic code point--- if more than zero code points were consumed then consume one more---   (which will be the last delimiter)--- while the input is not exhausted do begin---   let oldi = i---   let w = 1---   for k = base to infinity in steps of base do begin---     consume a code point, or fail if there was none to consume---     let digit = the code point's digit-value, fail if it has none---     let i = i + digit * w, fail on overflow---     let t = tmin if k <= bias {+ tmin}, or---             tmax if k >= bias + tmax, or k - bias otherwise---     if digit < t then break---     let w = w * (base - t), fail on overflow---   end---   let bias = adapt(i - oldi, length(output) + 1, test oldi is 0?)---   let n = n + i div (length(output) + 1), fail on overflow---   let i = i mod (length(output) + 1)---   {if n is a basic code point then fail}---   insert n into output at position i---   increment i--- end----- |--- Encodes a Unicode label to a Punycode-encoded ASCII string. The encoding does--- not prepend the IDNA @\"xn--\"@ prefix. The output is lower-cased.---- TODO: Support for mixed cases (see Appendix A in the RFC)---- encode implements the following pseudo code from Section 6.3 of RFC 3492:------ let n = initial_n--- let delta = 0--- let bias = initial_bias--- let h = b = the number of basic code points in the input--- copy them to the output in order, followed by a delimiter if b > 0--- {if the input contains a non-basic code point < n then fail}--- while h < length(input) do begin---   let m = the minimum {non-basic} code point >= n in the input---   let delta = delta + (m - n) * (h + 1), fail on overflow---   let n = m---   for each code point c in the input (in order) do begin---     if c < n {or c is basic} then increment delta, fail on overflow---     if c == n then begin---       let q = delta---       for k = base to infinity in steps of base do begin---         let t = tmin if k <= bias {+ tmin}, or---                 tmax if k >= bias + tmax, or k - bias otherwise---         if q < t then break---         output the code point for digit t + ((q - t) mod (base - t))---         let q = (q - t) div (base - t)---       end---       output the code point for digit q---       let bias = adapt(delta, h + 1, test h equals b?)---       let delta = 0---       increment h---     end---   end---   increment delta and n--- end--encode :: String -> Maybe String--encode i = let n = initial_n-               delta = 0-               bias = initial_bias-               h = b-               output = if (length $ basic_codepoints) == 0-                        then ""-                        else basic_codepoints ++ ['-']-           -- TODO: Fail for non-basic code point < n-           in if b == length i then Just i else loop output n delta bias h-    where--        b :: Int-        b = length basic_codepoints--        basic_codepoints :: String-        basic_codepoints = filter isAsciiAlphaNum i--        -- while h < length(input)-        loop :: String -> Int -> Int -> Int -> Int -> Maybe String-        loop output n delta bias h-            | h < (length i) = let m = minimum $ filter (>= n) $ map ord i-                                   delta' = delta + (m - n) * (h + 1) -- TODO: Overflow?-                                   n' = m-                                   (output', delta'', h') = loop' i output n' delta' bias h-                               in loop output' (n' + 1) (delta'' + 1) bias h'-            | otherwise = Just output--        -- for each code point-        loop' :: String -> String -> Int -> Int -> Int -> Int -> (String, Int, Int)-        loop' [] output _ delta _ h = (output, delta, h)-        loop' (c:cs) output n delta bias h-            | ord c < n = loop' cs output n delta bias h-            | ord c == n = let q = delta-                               (output', q') = loop'' base output bias q-                               -- TODO: output'' seems to add an unnecessary-                               -- character... I'll investigate this more-                               -- tomorrow-                               output'' = output' ++ [toDigitValue q']-                           in loop' cs output'' n 0 (adapt delta (h + 1) (h == b)) (h + 1)--        -- for k = base...-        loop'' :: Int -> String -> Int -> Int -> (String, Int)-        loop'' k output bias q-            | q < t = (output, q)-            | otherwise = let output' = output ++ [toDigitValue (t + ((q - t) `mod` (base - t)))]-                              q' = (q - t) `div` (base - t)-                          in loop'' (k + base) output' bias q'-            where-                t = if k <= bias + tmin then tmin else if k >= bias + tmax then tmax else k - bias-                          -- TODO: ^^^^----- Returns true if the Char is ASCII, alpha-numeric, or a hyphen.---- TODO: Ugly function--isAsciiAlphaNum :: Char -> Bool--isAsciiAlphaNum '-' = True--isAsciiAlphaNum c = isAscii c && isAlphaNum c----- adapt implements the following pseudo code from Section 6.1 of RFC 3492:------ function adapt(delta,numpoints,firsttime):---   if firsttime then let delta = delta div damp---   else let delta = delta div 2---   let delta = delta + (delta div numpoints)---   let k = 0---   while delta > ((base - tmin) * tmax) div 2 do begin---     let delta = delta div (base - tmin)---     let k = k + base---   end---   return k + (((base - tmin + 1) * delta) div (delta + skew))--adapt :: Int -> Int -> Bool -> Int--adapt d n f = loop 0 d'-    where--        d' :: Int-        d' = if f then d `div` damp else d `div` 2 + d `div` n--        loop :: Int -> Int -> Int-        loop k d''-            | d'' > ((base - tmin) * tmax) `div` 2 = loop (k + base)-                (d'' `div` (base - tmin))-            | otherwise = k + ((base - tmin + 1) * d'') `div` (d'' + skew)----- Maps a character to its Punycode digit value; 0-25 for characters, 26-35 for--- digits.---- toDigitValue :: Char -> Int------ toDigitValue c | c `elem` ['0'..'9'] = digitToInt c + 30---                | toUpper c `elem` ['A'..'Z'] = ord (toUpper c) - 65----- The 0-25 digits are mapped to 'a'-'z', 26-35 to '0'-'9'.--toDigitValue :: Int -> Char+module Data.Text.Punycode (encode, decode) where -toDigitValue i | i >= 0 && i <= 25 = chr $ 97 + i-               | i >= 26 && i <= 35 = intToDigit $ i - 26+import Data.Text.Punycode.Encode (encode)+import Data.Text.Punycode.Decode (decode)
+ Data/Text/Punycode/Decode.hs view
@@ -0,0 +1,54 @@+module Data.Text.Punycode.Decode (decode) where++import qualified Data.ByteString as BS+import           Data.Char+import           Data.Serialize hiding (decode)+import           Data.Word++import           Data.Text.Punycode.Shared++-- | Decode a string into its unicode form+decode :: BS.ByteString -> String+decode input = let Right out = runGet (inner2 initial_n 0 initial_bias before) after in out+  where (before, after)+          | BS.any f input = (init $ map (chr . fromIntegral) $ BS.unpack b1, a1)+          | otherwise = ("", input)+        f = (== (fromIntegral $ ord '-'))+        (b1, a1) = BS.breakEnd f input++inner2 :: Int -> Int -> Int -> String -> Get String+inner2 n oldi bias output = do+  b <- isEmpty+  helper b+  where helper False = do+          i <- inner base 1 oldi bias+          helper' i+          where helper' i = inner2 n' (i' + 1) bias' output'+                  where bias' = adapt (i - oldi) (length output + 1) (oldi == 0)+                        n' = n + i `div` (length output + 1)+                        i' = i `mod` (length output + 1)+                        output' = insertInto output n' i'+        helper True = return output++inner :: Int -> Int -> Int -> Int -> Get Int+inner k w i bias = do+  word8 <- getWord8+  helper $ word8ToDigit word8+  where helper digit+          | digit < t = return i'+          | otherwise = inner (k + base) w' i' bias+          where w' = w * (base - t)+                i' = i + digit * w+                t+                  | k <= bias + tmin = tmin+                  | k >= bias + tmax = tmax+                  | otherwise = k - bias++insertInto :: String -> Int -> Int -> String+insertInto input n i = take i input ++ [chr n] ++ drop i input++word8ToDigit :: Word8 -> Int+word8ToDigit = helper . fromIntegral+  where helper word8+          | word8 >= ord 'a' && word8 <= ord 'z' = word8 - (ord 'a')+          | otherwise = 26 + word8 - (ord '0')
+ Data/Text/Punycode/Encode.hs view
@@ -0,0 +1,87 @@+{-# LANGUAGE FlexibleContexts #-}++module Data.Text.Punycode.Encode (encode) where++import           Control.Monad.State hiding (state)+import           Control.Monad.Writer+import qualified Data.ByteString as BS+import           Data.Char+import           Data.Word++import           Data.Text.Punycode.Shared++data PunycodeState = PunycodeState { n :: Int+                                   , delta :: Int+                                   , bias :: Int+                                   , h :: Int+                                   }++-- | Encode a string into its ascii form+encode :: String -> BS.ByteString+encode input = execWriter $ initialWriter input++initialWriter :: MonadWriter BS.ByteString m => String -> m ()+initialWriter input = do+  tell basics+  when (b > 0) $ tell $ BS.singleton $ fromIntegral $ ord '-'+  evalStateT (inner3 (map ord input) b) $ PunycodeState { n = initial_n+                                                             , delta = 0+                                                             , bias = initial_bias+                                                             , h = b+                                                             }+  where basics = BS.pack $ map (fromIntegral . ord) $ filter isBasic input+        b = BS.length basics++inner3 :: (MonadState PunycodeState m, MonadWriter BS.ByteString m) => [Int] -> Int -> m ()+inner3 input b = do+  state <- get+  helper state+  where helper state+          | h' < length input = do+            put $ state {n = m, delta = delta'}+            mapM_ (inner2 b) input+            state' <- get+            put $ state' {delta = (delta state') + 1, n = (n state') + 1}+            inner3 input b+          | otherwise = return ()+          where m = minimum $ filter (>= n') input+                n' = n state+                h' = h state+                delta' = (delta state) + (m - n') * (h' + 1)++inner2 :: (MonadState PunycodeState m, MonadWriter BS.ByteString m) => Int -> Int -> m ()+inner2 b c = do+  state <- get+  helper state+  where helper state+          | c == n' = do+            q <- inner delta' base bias'+            tell $ BS.singleton $ baseToAscii q+            put $ state {bias = adapt delta' (h' + 1) (h' == b), delta = 0, h = (h state) + 1}+          | otherwise = put $ state {delta = delta'}+          where delta' = (delta state) + d+                  where d+                          | c < n' = 1+                          | otherwise = 0+                n' = n state+                bias' = bias state+                h' = h state++inner :: (MonadWriter BS.ByteString m) => Int -> Int -> Int -> m Int+inner q k bias'+  | q < t = return q+  | otherwise = do+    tell $ BS.singleton $ baseToAscii $ t + ((q - t) `mod` (base - t))+    inner ((q - t) `div` (base - t)) (k + base) bias'+  where t+          | k <= bias' + tmin = tmin+          | k >= bias' + tmax = tmax+          | otherwise = k - bias'++isBasic :: Char -> Bool+isBasic = (< initial_n) . ord++baseToAscii :: Int -> Word8+baseToAscii i+  | i < 26 = fromIntegral $ i + (ord 'a')+  | otherwise = fromIntegral $ (i - 26) + (ord '0')
+ Data/Text/Punycode/Shared.hs view
@@ -0,0 +1,32 @@+module Data.Text.Punycode.Shared where++base :: Int+base = 36++tmin :: Int+tmin = 1++tmax :: Int+tmax = 26++skew :: Int+skew = 38++damp :: Int+damp = 700++initial_bias :: Int+initial_bias = 72++initial_n :: Int+initial_n = 128++adapt :: Int -> Int -> Bool -> Int+adapt delta numpoints firsttime = helper+  where helper = loop 0 $ delta' + (delta' `div` numpoints)+          where delta'+                  | firsttime = delta `div` damp+                  | otherwise = delta `div` 2+        loop k delta'+          | delta' > ((base - tmin) * tmax) `div` 2 = loop (k + base) $ delta' `div` (base - tmin)+          | otherwise = k + (((base - tmin + 1) * delta') `div` (delta' + skew))
LICENSE view
@@ -1,28 +1,25 @@-Copyright © 2010-2011, Jon Kristensen.--All rights reserved.+The following license covers this documentation, and the source code, except+where otherwise indicated. -Redistribution and use in source and binary forms, with or without modification,-are permitted provided that the following conditions are met:+Copyright 2012, Myles C. Maxfield. All rights reserved. -  * Redistributions of source code must retain the above copyright notice, this-    list of conditions and the following disclaimer.+Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met: -  * Redistributions in binary form must reproduce the above copyright notice,-    this list of conditions and the following disclaimer in the documentation-    and/or other materials provided with the distribution.+* Redistributions of source code must retain the above copyright notice, this+  list of conditions and the following disclaimer. -  * The names of the punycode project's contributors may not be used to endorse-    or promote products derived from this software without specific prior-    written permission.+* Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE-DISCLAIMED. IN NO EVENT SHALL JON KRISTENSEN BE LIABLE FOR ANY DIRECT, INDIRECT,-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY EXPRESS OR+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO+EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,+OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
− README
@@ -1,14 +0,0 @@-The goal of this Haskell library is to support unique and reversible-transformations of Unicode strings to ASCII strings, and the other way around.-It will be an implementation of RFC 3492: Punycode: A Bootstring encoding of-Unicode for Internationalized Domain Names in Applications (IDNA).--The current version, 0.0.1.0, supports encoding a Unicode string to an ASCII-string. Note however that the code is currently prototyped and untested.--0.0.2.0 will add support for the ASCII to Unicode transformation.--Copyright © 2011, Jon Kristensen.-All rights reserved.--This library is licensed under a BSD-3 license. See LICENSE for details.
− Setup.hs
@@ -1,3 +0,0 @@-import Distribution.Simple--main = defaultMain
+ Setup.lhs view
@@ -0,0 +1,4 @@+#! /usr/bin/env runhaskell++> import Distribution.Simple+> main = defaultMain
+ Test/Main.hs view
@@ -0,0 +1,130 @@+import qualified Data.ByteString as BS+import           Data.Char+import           System.Exit+import           Test.HUnit+import           Test.QuickCheck++import Data.Text.Punycode++tests = [( [0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643, 0x0644,+            0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A, 0x061F]+         , "egbpdaj6bu4bxfgehfvwxn"+         , "A"+         ),+         ( [0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587]+         , "ihqwcrb4cv8a8dqg056pqjye"+         , "B"+         ),+         ( [0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587]+         , "ihqwctvzc91f659drss3x8bo0yb"+         , "C"+         ),+         ( [0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073, 0x0074,+            0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076, 0x00ED, 0x010D,+            0x0065, 0x0073, 0x006B, 0x0079]+         , "Proprostnemluvesky-uyb24dma41a"+         , "D"+         ),+         ( [0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5, 0x05D8,+            0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9, 0x05DD, 0x05E2,+            0x05D1, 0x05E8, 0x05D9, 0x05EA]+         , "4dbcagdahymbxekheh6e0a7fei0b"+         , "E"+         ),+         ( [0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928, 0x094D,+            0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902, 0x0928, 0x0939,+            0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938, 0x0915, 0x0924, 0x0947,+            0x0939, 0x0948, 0x0902]+         , "i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd"+         , "F"+         ),+         ( [0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E, 0x3092,+            0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044, 0x306E, 0x304B]+         , "n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa"+         , "G"+         ),+         ( [0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,+            0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74,+            0xC5BC, 0xB9C8, 0xB098, 0xC88B, 0xC744, 0xAE4C]+         , "989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c"+         , "H"+         ),+         ( [0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435, 0x043E,+            0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432, 0x043E, 0x0440,+            0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443, 0x0441, 0x0441, 0x043A,+            0x0438]+         , "b1abfaaepdrnnbgefbaDotcwatmq2g4l"+         , "I"+         ),+         ( [0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F, 0x0070,+            0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069, 0x006D, 0x0070,+            0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074, 0x0065, 0x0068, 0x0061,+            0x0062, 0x006C, 0x0061, 0x0072, 0x0065, 0x006E, 0x0045, 0x0073, 0x0070,+            0x0061, 0x00F1, 0x006F, 0x006C]+         , "PorqunopuedensimplementehablarenEspaol-fmd56a"+         , "J"+         ),+         ( [0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD, 0x006B,+            0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3, 0x0063, 0x0068,+            0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069, 0x1EBF, 0x006E, 0x0067,+            0x0056, 0x0069, 0x1EC7, 0x0074]+         , "TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g"+         , "K"+         ),+         ( [0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F]+         , "3B-ww4c5e180e575a65lsy2b"+         , "L"+         ),+         ( [0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069, 0x0074,+            0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052, 0x002D, 0x004D,+            0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053]+         , "-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n"+         , "M"+         ),+         ( [0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E, 0x006F,+            0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061, 0x0079, 0x002D,+            0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834, 0x6240]+         , "Hello-Another-Way--fc4qua05auwb3674vfr0b"+         , "N"+         ),+         ( [0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032]+         , "2-u9tlzr9756bt3uc0v"+         , "O"+         ),+         ( [0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069, 0x3059,+            0x308B, 0x0035, 0x79D2, 0x524D]+         , "MajiKoi5-783gue6qz075azm5e"+         , "P"+         ),+         ( [0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0]+         , "de-jg4avhby1noc0d"+         , "Q"+         ),+         ( [0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067]+         , "d9juau41awczczp"+         , "R"+         ),+         ( [0x002D, 0x003E, 0x0020, 0x0024, 0x0031, 0x002E, 0x0030, 0x0030, 0x0020,+            0x003C, 0x002D]+         , "-> $1.00 <--"+         , "S"+         )+        ]++hunittests = TestList [encodeTests, decodeTests]+  where encodeTests = TestList $ map f tests+          where f (decoded, encoded, testname) = TestCase (assertEqual testname+                  (BS.pack $ map (fromIntegral . ord . toLower) encoded)+                  (encode $ map (toLower . chr) decoded))+        decodeTests = TestList $ map f tests+          where f (decoded, encoded, testname) = TestCase (assertEqual testname+                  (map (toLower . chr) decoded)+                  (decode $ BS.pack $ map (fromIntegral . ord . toLower) encoded))++main :: IO ()+main = do+  result <- quickCheckResult (\ s -> decode (encode s) == s)+  counts <- runTestTT hunittests+  case (errors counts, failures counts, result) of+    (0, 0, Success {}) -> exitSuccess+    _ -> exitFailure
punycode.cabal view
@@ -1,64 +1,38 @@-Name:               punycode-Version:            0.0.1.0-Cabal-Version:      >= 1.6-Build-Type:         Simple-License:            BSD3-License-File:       LICENSE-Copyright:          Copyright © 2011, Jon Kristensen-Author:             Jon Kristensen-Maintainer:         jon.kristensen@pontarius.org-Stability:          alpha--- Homepage:-Bug-Reports:        mailto:jon.kristensen@pontarius.org--- Package-URL:-Synopsis:           Punycode encoder-Description:        Punicode library to uniquely and reversibly transform a-                    Unicode string into an ASCII string. This is a partial-                    implementation of RFC 3492: Punycode: A Bootstring encoding-                    of Unicode for Internationalized Domain Names in-                    Applications (IDNA). 0.0.2.0 will ship with support for-                    Punycode decoding. The code is currently prototyped and-                    untested.-Category:           Network-Tested-With:        GHC ==7.0.2--- Data-Files:--- Data-Dir:--- Extra-Source-Files:--- Extra-Tmp-Files:+name:            punycode+version:         0.5+license:         BSD3+license-file:    LICENSE+author:          Myles C. Maxfield <myles.maxfield@gmail.com>+maintainer:      Myles C. Maxfield <myles.maxfield@gmail.com>+synopsis:        Encode unicode strings to ascii forms according to RFC 3492+description:     Encode unicode strings to ascii forms according to RFC 3492. It is written in pure Haskell, as opposed to gnuidn's Data.Text.IDN.Punycode+category:        Text, Web+stability:       Experimental+cabal-version:   >= 1.8+build-type:      Simple+homepage:        https://github.com/litherum/punycode -Library-  Exposed-Modules:   Data.Text.Punycode-  Exposed:           True-  Build-Depends:     base >= 2 && < 5, parsec, text, bytestring, text-icu-  -- Other-Modules:-  -- HS-Source-Dirs:-  -- Extensions:-  -- Build-Tools:-  -- Buildable:-  -- GHC-Options:-  -- GHC-Prof-Options:-  -- Hugs-Options:-  -- NHC98-Options:-  -- Includes:-  -- Install-Includes:-  -- Include-Dirs:-  -- C-Sources:-  -- Extra-Libraries:-  -- Extra-Lib-Dirs:-  -- CC-Options:-  -- LD-Options:-  -- Pkgconfig-Depends:-  -- Frameworks:+library+    build-depends: base         >= 4       && < 5+                 , bytestring+                 , cereal+                 , mtl+    exposed-modules: Data.Text.Punycode+    other-modules:   Data.Text.Punycode.Encode+                   , Data.Text.Punycode.Decode+                   , Data.Text.Punycode.Shared+    ghc-options:     -Wall -Source-Repository head-  Type:     git-  -- Module:-  Location: git://github.com/jonkri/punycode.git-  -- Subdir:+Test-Suite test-punycode+    type: exitcode-stdio-1.0+    main-is: Test/Main.hs+    build-depends: base >= 4 && < 5+                 , bytestring+                 , cereal+                 , mtl+                 , HUnit+                 , QuickCheck -Source-Repository this-  Type:     git-  -- Module:-  Location: git://github.com/jonkri/punycode.git-  Tag:      0.0.1.0-  -- Subdir:+source-repository head+  type:     git+  location: git://github.com/litherum/punycode.git