punycode (empty) → 0.0.1.0
raw patch · 79 files changed
+893/−0 lines, 79 filesdep +basedep +bytestringdep +parsecsetup-changedbinary-added
Dependencies added: base, bytestring, parsec, text, text-icu
Files
- .git/COMMIT_EDITMSG +13/−0
- .git/HEAD +1/−0
- .git/config +11/−0
- .git/description +1/−0
- .git/hooks/applypatch-msg.sample +15/−0
- .git/hooks/commit-msg.sample +24/−0
- .git/hooks/post-commit.sample +8/−0
- .git/hooks/post-receive.sample +15/−0
- .git/hooks/post-update.sample +8/−0
- .git/hooks/pre-applypatch.sample +14/−0
- .git/hooks/pre-commit.sample +46/−0
- .git/hooks/pre-rebase.sample +169/−0
- .git/hooks/prepare-commit-msg.sample +36/−0
- .git/hooks/update.sample +128/−0
- .git/index binary
- .git/info/exclude +6/−0
- .git/logs/HEAD +12/−0
- .git/logs/refs/heads/master +12/−0
- .git/logs/refs/remotes/origin/master +12/−0
- .git/objects/01/63dcbb5a184f54262f50a3596a181f586f3aa5 binary
- .git/objects/02/9db06c06e1114f3cf89e750eadc5ba087f07b2 +2/−0
- .git/objects/06/08637f3a9663403bcf5aa5fbb912293817c7df +1/−0
- .git/objects/0d/568849e909c947e83f21120b4603a34461459d +3/−0
- .git/objects/0d/f8fa07e84fe3fed2a2aec504a82fe3c062829b binary
- .git/objects/13/0df5810ba24bd068a65b15c75743e8734c2472 binary
- .git/objects/18/a76a36c99a177df4fa1d4edfa3254f21198b3e binary
- .git/objects/27/ffeecc508bb39739af2def53d22f9db96f7233 binary
- .git/objects/2a/76dd32a10dac62fab910b5d4e1c29001a13ba4 binary
- .git/objects/2b/7f6a6b20f86b7d4c8f6773320bb129f1fbfa78 binary
- .git/objects/35/653898400ef0f128dc9f629abaeb1704c6b7c4 binary
- .git/objects/39/255027b23d0c3728f63493a0169b16e9db3de9 binary
- .git/objects/3d/2f3f6f30b28b332f278e720594b388883a25e1 binary
- .git/objects/3f/bb0e281a38c4ef74db799ff0adf2279f97782a binary
- .git/objects/46/ad3d63640865c60723d6d4e0c6b9c8cddc8871 binary
- .git/objects/53/eba928bca75be4bf30ed746f8677fa80597829 +2/−0
- .git/objects/5b/ff51646c0ee8c33c07478a0f1933a3cbea6bd8 +2/−0
- .git/objects/5c/1c69bbf6b0e2183b189cfd51cfdb89661eb69e binary
- .git/objects/62/cad6920027644a32e8791f6c043b635e74eb20 binary
- .git/objects/6a/5da3c83e102878b6a5d504c5b9cd272a0408b2 binary
- .git/objects/74/1d6a4f06115b0ea1d047c8cf2ec08785395bd0 binary
- .git/objects/78/05a40b998fdfba12625f5ad8bf8fcfbeb439f4 binary
- .git/objects/7b/772f5040ca692e15127ab20087d8dc08122d46 binary
- .git/objects/7b/8db4acfd92fea8939354f9e07091635a6540d4 binary
- .git/objects/7d/cad7423ffee1641921b3ec7cb7c8bd9efe950c binary
- .git/objects/7f/c85a942ed2e07e912b8cc1f8e803e53d693718 binary
- .git/objects/84/99ea1219f0dc85651bd99eeba130f757b35311 binary
- .git/objects/85/12c51cba7ca3ee75b665f16d7bd67c94754713 +1/−0
- .git/objects/87/03890913fdb53e96d74639df2085cfff491422 binary
- .git/objects/87/b967ef95d00f5e64258d720281208bb1d323f7 binary
- .git/objects/8b/f24ce8f6c08355ad229ed9049f3f69176fdd04 binary
- .git/objects/8f/6a06e70e51dcb660d55f99392342cc5fcac890 binary
- .git/objects/9b/fa009ea8720edb4754ff445a88b0f089b7049b binary
- .git/objects/a8/0a5d5dbf4c95464f25275e3f1e24b97e827530 binary
- .git/objects/b0/d07da498268c45494abecd22354f48ba5cb97e binary
- .git/objects/b5/823f3a2b78cac7f13dc982e8ce6321e5e2a6dd binary
- .git/objects/c7/87e0f52ea535f9601401e5cfc3a0884d97466f binary
- .git/objects/cc/51b671ec803d0df005bc534ec5f704d200a6a5 binary
- .git/objects/d0/898a171ae32850864a60a47264aa45f451b544 binary
- .git/objects/d4/a955a7c342d457f00ae7191982120dd60228ce binary
- .git/objects/df/8539007d0f3099536b78dbe30dd697ac711b81 binary
- .git/objects/e8/ef27dbba9992f80d9271a60892aadc63c9ef36 binary
- .git/objects/eb/aab0733f361ac8dcbd89fa042713114c919092 binary
- .git/objects/ef/c092828d08e8d6a576db0ef0fd0af7203031ab binary
- .git/objects/f1/830f88eccad143bc84b219633c85d8503efb27 binary
- .git/objects/f1/85e80639824829958ad776ea7849477768ced1 binary
- .git/objects/f3/f5940b48982e8e840339162bda5d49ec434155 binary
- .git/objects/f4/00d41f95c560a27d3a5035d6bcd94a807aee9c binary
- .git/objects/f5/1e9243591607b228887c501811a8d68a36fbf4 binary
- .git/objects/f5/daa3932cab2c8ee9bc73a6475a20c8ff20960b binary
- .git/objects/fb/f918c9e7d1bc84f134134dbd8f2000c10d4e1c binary
- .git/objects/fd/ea5be35e03f22dce0423511443ffad7221107e +2/−0
- .git/objects/fe/658ec2983d9b15c4ba1b0fb8d98535ce085d38 binary
- .git/refs/heads/master +1/−0
- .git/refs/remotes/origin/master +1/−0
- Data/Text/Punycode.hs +238/−0
- LICENSE +28/−0
- README +14/−0
- Setup.hs +3/−0
- punycode.cabal +64/−0
@@ -0,0 +1,13 @@+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/
@@ -0,0 +1,1 @@+ref: refs/heads/master
@@ -0,0 +1,11 @@+[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
@@ -0,0 +1,1 @@+Unnamed repository; edit this file 'description' to name the repository.
@@ -0,0 +1,15 @@+#!/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+"$@"}+:
@@ -0,0 +1,24 @@+#!/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+}
@@ -0,0 +1,8 @@+#!/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
@@ -0,0 +1,15 @@+#!/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
@@ -0,0 +1,8 @@+#!/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
@@ -0,0 +1,14 @@+#!/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+"$@"}+:
@@ -0,0 +1,46 @@+#!/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 --
@@ -0,0 +1,169 @@+#!/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".
@@ -0,0 +1,36 @@+#!/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"
@@ -0,0 +1,128 @@+#!/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
binary file changed (absent → 416 bytes)
@@ -0,0 +1,6 @@+# 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]+# *~
@@ -0,0 +1,12 @@+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
@@ -0,0 +1,12 @@+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
@@ -0,0 +1,12 @@+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
binary file changed (absent → 175 bytes)
@@ -0,0 +1,2 @@+x¥KNÄ0DYç½Eí_âH±SøÓ»íÑÛã`YO¥Ò«À¥äJ§ÑÀYt&èÑNÒÈÝJ¤öÇNvF Ë·kTÞÙ TÀ]ïÖaRNOnóÑ.î>NnðÁ>[îj§+¯¹&~ÿâzýckàòBáa1BÂ3JÄeÒ):èKçBPrátõB} 2nþ~é0oA¤AaPÁÑýÀ¬ÆgîðÈ·x\q+.¿wAgO
@@ -0,0 +1,1 @@+x¥Kn!³æ½5`Ó E×±r>Ý2IÑßßdãx[O¯Ty´V'Òosgì1ÃH´I>g-=Z>Úâ%íÕwîëH\tÉ x¨²GdÁ´ ¢%I$¯â}^Ç_£Ãe¯·ÉýÆ>kqþý÷É>òh'Ðyá ¢Zt N~A¡¾cajÛþ¸ü8ëêóº· rïùªåNYM
@@ -0,0 +1,3 @@+x¥P;nÄ LÍ)^hÆW¢ÔÉ)ðãµy`9{û°M.fÑü4ÈÛh;>µBFÍÖ)Â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à
binary file changed (absent → 801 bytes)
binary file changed (absent → 176 bytes)
binary file changed (absent → 2789 bytes)
binary file changed (absent → 184 bytes)
binary file changed (absent → 46 bytes)
binary file changed (absent → 189 bytes)
binary file changed (absent → 121 bytes)
binary file changed (absent → 831 bytes)
binary file changed (absent → 56 bytes)
binary file changed (absent → 56 bytes)
binary file changed (absent → 46 bytes)
@@ -0,0 +1,2 @@+x¥ÍM+Â0@a×9Åìæ§5 ¢`7o mH#^ßàܾÅ÷|&® \ÕBQ#ÝDk¼iÑÉ.(gPÐÞ}°Úm±sDÖ÷ªC.pÎ . çJi¦;N19=mãó´F¡í¤VÚÂ%¢Xê2®ô!8qe7Â×7×nýñtí!òHâQ×FF
@@ -0,0 +1,2 @@+x¥K+Â0@]ç³d2ùt"®õi3±UHÇ·+/àò½Åã u§d»C[D@ò8!']çS1'¹#4htìÕ;.R`rÙ `;aIkÂÞz4ÑXëµu!©¸µ±.p«îË´6)«8O%×ë³×Ï:_@ìÈ0Á QívmòGBåé# Ú(°nyè·úN:Ob
binary file changed (absent → 203 bytes)
binary file changed (absent → 785 bytes)
binary file changed (absent → 46 bytes)
binary file changed (absent → 185 bytes)
binary file changed (absent → 46 bytes)
binary file changed (absent → 46 bytes)
binary file changed (absent → 404 bytes)
binary file changed (absent → 46 bytes)
binary file changed (absent → 184 bytes)
binary file changed (absent → 56 bytes)
@@ -0,0 +1,1 @@+x¥ÁJ1D=ç+ú¾*´L@dÁèWtnwv7É2Éü¿AÀKAUAñ*ÖרíCßÁ8æg½Þ¡'1eÆdø¼gÕ6.´ÕE'HÞZ|Ñ¢ÌD³à'c<..¢½êµÀ×¶¶Î¥q×µH=k¹üeϱæ7P{·àÀ6Z«ÐÎÿPfJ©ÆÙó¸@}å~»xe*OûínóZò;ºB<QùævoZßCS?O<eë
binary file changed (absent → 56 bytes)
binary file changed (absent → 184 bytes)
binary file changed (absent → 2515 bytes)
binary file changed (absent → 169 bytes)
binary file changed (absent → 2547 bytes)
binary file changed (absent → 184 bytes)
binary file changed (absent → 827 bytes)
binary file changed (absent → 788 bytes)
binary file changed (absent → 56 bytes)
binary file changed (absent → 184 bytes)
binary file changed (absent → 46 bytes)
binary file changed (absent → 82 bytes)
binary file changed (absent → 306 bytes)
binary file changed (absent → 60 bytes)
binary file changed (absent → 185 bytes)
binary file changed (absent → 184 bytes)
binary file changed (absent → 56 bytes)
binary file changed (absent → 167 bytes)
binary file changed (absent → 56 bytes)
binary file changed (absent → 51 bytes)
binary file changed (absent → 2787 bytes)
binary file changed (absent → 1720 bytes)
binary file changed (absent → 154 bytes)
@@ -0,0 +1,2 @@+xuSËn0í¯8»ÎC@ª4,*RW|@Ll2Ö=Óªé¿÷Úb û¾Î=Üs]ÖºD]§ÍûZà3ló(Nfó³W58îD+¢(âÂaF ο(%ë°Ýâ»2âE´Þ+¨ ÿIT¬¯ÍY¬_ós(Å)åW"*Y'Xo¸¸"ÓȰ£·©ÒFØ),rvº½8!gÞýñæM<Óx¬×¸ou_÷w¸ør#~ÏFj ËMl)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î:_°Óò·pBz9hÌON2¯ÖèÉýxWÑTï:¾=[pgï'8R{µ|(§ÿsO&Ü(¶8>}¦Ü<ó¶µ=JZF¯âyd³¸Hô6¼Ýod'ÇíuMÇ
binary file changed (absent → 73 bytes)
@@ -0,0 +1,1 @@+5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e
@@ -0,0 +1,1 @@+5c1c69bbf6b0e2183b189cfd51cfdb89661eb69e
@@ -0,0 +1,238 @@+-- |+-- 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++toDigitValue i | i >= 0 && i <= 25 = chr $ 97 + i+ | i >= 26 && i <= 35 = intToDigit $ i - 26
@@ -0,0 +1,28 @@+Copyright © 2010-2011, Jon Kristensen.++All rights reserved.++Redistribution and use in source and binary forms, with or without modification,+are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright notice, this+ list of conditions and the following disclaimer.++ * 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.++ * 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.++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+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.
@@ -0,0 +1,14 @@+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.
@@ -0,0 +1,3 @@+import Distribution.Simple++main = defaultMain
@@ -0,0 +1,64 @@+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:++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:++Source-Repository head+ Type: git+ -- Module:+ Location: git://github.com/jonkri/punycode.git+ -- Subdir:++Source-Repository this+ Type: git+ -- Module:+ Location: git://github.com/jonkri/punycode.git+ Tag: 0.0.1.0+ -- Subdir: