From 045df4c64891be3a25c202d951d144a597a0a67c Mon Sep 17 00:00:00 2001 From: Rijn Buve Date: Fri, 19 Sep 2014 11:25:17 +0200 Subject: [PATCH 1/3] Create gh-pages branch via GitHub --- images/body-bg.png | Bin 0 -> 2401 bytes images/highlight-bg.jpg | Bin 0 -> 30991 bytes images/hr.png | Bin 0 -> 130 bytes images/octocat-icon.png | Bin 0 -> 477 bytes images/tar-gz-icon.png | Bin 0 -> 741 bytes images/zip-icon.png | Bin 0 -> 735 bytes index.html | 76 +++++++ javascripts/main.js | 1 + params.json | 1 + stylesheets/print.css | 226 +++++++++++++++++++++ stylesheets/pygment_trac.css | 69 +++++++ stylesheets/stylesheet.css | 371 +++++++++++++++++++++++++++++++++++ 12 files changed, 744 insertions(+) create mode 100644 images/body-bg.png create mode 100644 images/highlight-bg.jpg create mode 100644 images/hr.png create mode 100644 images/octocat-icon.png create mode 100644 images/tar-gz-icon.png create mode 100644 images/zip-icon.png create mode 100644 index.html create mode 100644 javascripts/main.js create mode 100644 params.json create mode 100644 stylesheets/print.css create mode 100644 stylesheets/pygment_trac.css create mode 100644 stylesheets/stylesheet.css diff --git a/images/body-bg.png b/images/body-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8c4c29f9d71310d144ba68e133079c675e2107 GIT binary patch literal 2401 zcmV-n37+bLPlS%+v!#u--LcbYXf5`IdU3Z=&?|eqw|86j0^qmtLBONioAbPB?U74Y{%aYiZW$>$US6z~ zA~(Nn4lVE0ran+n^V|3wEp{K@NCnUHv?bYm2hyXkO*4e>n0elM3PX&qL+xnOwl^@Y z_*n3_@xjP;Pz&FlS90;wBt#<^dP&Y!*l{6q)x#j<-R2FBaDH6r@=XhtOuvoquZsJR zL;m}!zgKQ>Hv0m0*(^1vIG260#?(q_Q9JTD29!|qwRo?dlQAlYLYX!>jQjSr`IUMJ3?>I`0<+8qJCO}3*hcd#_J z^a>vwKyCF>M=U-pq;KaO&mO?YHq^ zdRreh_T>?Mv-P4JY;(~|>Nz1DbO98m?T8FG7}C$Rk2V_;ks zLdLaPs?+W2G_AUw+byY^LaBD3pBd*0vs$1TdperT$f1_%(i9z>jOkaKs4kj%W}K!p z+bKxO1c|88th5bWQ)S_HcdNQ@WNDfKk_pf4<(E?Aypr;b`ZiM&wf20&|=0+$NWPW*jv$0ZW)3PY+@E^%soI>Jpxnk>R#w*>N+_^UOF1 z+^SJbPr6#^qH-6SR%>qq#hqzont?I3Nl}BL2fDuHu2AlQw0EW-KvrsYkS7-o7tNr^mL;6)kKbSRgI@YZ>liSP*e6o#+%)3 zXz7`8q%1WxS9nS@O^8d*<#wdWEml?hRUKCiof#{xL9p>1jW(t$Bj#ci&y17o70VFT zjx|lmm>DH@uN$<4TpHQ)Ctm;aO4j}J ztXz+~Vv5R|&D@%HZJ10C#`ZJgOxcW4*^ns#ZVW_e;3Ar;@smZzpthxnYJ8KJ$}{7< zDm3*|j^s%@)avP-OhMBl zo6Tm*?a>U}XU4()y!$XSKXObD9rukrE6KOI35~)uLsn)- zjBXZ_Fo780nQ>bjcA~wXet63{Sn>&uNbbIPn zuN>mSKRSITwXduQQ{tI%UO6UT)~sj7d3Eu={PbtW zc{L1ZcAdGgn--}VWvJ?#n^+g_OeD#CK5#g%mi1ZPe)-&-wM2g?GXMH^zt9KIj3d2h zm?}TiFr8P^x&k`T8&AAMOlDw5==+J_d1XYrlQS>Oj`M1Ze@Frr$JT9qD0b(S8&YCI zcb*yNRl)o6WfWv}?mIIk?-FZbb@ zasHt>A3BlmH0Lwp{5_JO?b#{X?udV+XugdkJTuO#{^!NQy=&pl=S8FaLq&t-ys{SG z4c=eam*>@)ZF*#TOE5NC!(l&Z~J{ zk-D4hVVD+8LxHHtEqyx^JQh2>_0f7e#@f_WgEMYrs^)UL6W_QgWkFTCr0fR5c6wi$FD%seX z{Sk}yyhQl~{%ry&K;jPr3`PE))H zJ-*B2omYGNyHJIzwUDpQ&v{jPzl+rCnQ>mF#|o?OAV&PjWZwBt`*v&s006@-B-*mu}ka{yTmTBOY9Q6#4fQ*>=L`gF0o7O(vn?bm)NBPz02Dp Thhtn800000NkvXXu0mjf`O(CF literal 0 HcmV?d00001 diff --git a/images/highlight-bg.jpg b/images/highlight-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..355e089b2d7d7a6f78caa818e302c8a15c6c0e3c GIT binary patch literal 30991 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 literal 0 HcmV?d00001 diff --git a/images/hr.png b/images/hr.png new file mode 100644 index 0000000000000000000000000000000000000000..d32f689cf418b2dd5a51e8f2e0cc4cd766b005d8 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0y~yV44eLGjgy1Nwep7mjEeGPZ!6K3dXgQ4EY!oc$iNA zm+x)f{mkaBMZoMSKF>-XX{yi8)Qy=W>S;Lf(!7SX_bosCeiE+of5M`gpV@!ZeqG)j hx4CwjdCS&Z#vS6S%%1PBw*d`h@O1TaS?83{1ORq0FmnI^ literal 0 HcmV?d00001 diff --git a/images/octocat-icon.png b/images/octocat-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..24066080022de71de4da557be1ada8dfa64640fe GIT binary patch literal 477 zcmV<30V4j1P)S zzb=p-IVx`CFFMVW+ucAVM_vZz0tV_i#9?ABU%EYaO;2gFa0RqS9`cUjJE}(7@Xn>35rz&O*;i%QPngjr-P0Xs zq=5~YaVFJAW29%1fh=SS>T++g4k=Te*+Ub}IsEq4aUS(Jc%&hd-_&RDP;DBwoQyZY z7r@?dT{`0|-od-bKo&9ub$QEf9WMUvcmLvnDwYtRR1=?TKlY@Mg-k(R-n2`D!k^E} zdFFAERBK+MNn_SV%k#)Wrl2mrvr~gBKc1EG*WSxAR^^uGk%de_UEa7u1K0Pb*ZA|p zOHxK*k9{2vghuf&h0WKP5KErz8kBtNE8*$xd?};+r6}&FFn<}N`XmiXXM8UH*mXe) z#Z{^6`2~gg71eChpzO<|LZ0kAD}`cQeH1D+YZPl{RJB!u^63W!JkfSqsf!kwUx>PDO;(ILQF8Y z=86)`taYs6-V)tNuz`Erdx}SIpHQlxU=xQZFb4O=`mDjT6qU!@pc;SKh{vH+OulOQP^DNfkK3^L|E!4i%~2rRF(e$ X&uf9dMkn>&00000NkvXXu0mjf-Fsw* literal 0 HcmV?d00001 diff --git a/images/zip-icon.png b/images/zip-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..732aced6031d4a3537060217be59f437df1db1a1 GIT binary patch literal 735 zcmV<50wDc~P)$_YSV*+6bjOe>}69>8`}hB`O47DrWab4qnSx2gKx9c zG_}MmX%dQBM4FmrVrlj;DyXmXUtAbGXO4k$m>+ZI-0%MXGn+f~V4rD;6r3uVYssVH zV;+!2z|1~TyTc^tbeM7duK2#Gwp^aA=-^5v)hsfQW##@)`GO9Infj?Yb4nF>%|FK-G6wXk`=@&S>kaWP|gCfkSXZPn|2#e@cU&M z&pa(uYRiq6G-ht{Igc!43i|T9y9~Jc>qRMl@4ceptK8>2vXCk0%NutZ;QIOeI)8n9 zS;;EwajfHkkVqb;(D@n@qN!nr0mVQ1ig~&_Psu8OEsFao)L+J^F2R738IOxUcU@FM zab@xbenlaEMb+C4DE;=NfG0c8DWMqe9tx3oE$=h!bqiH)GoWnxQ9e)HKcm$}izEdU z2*|e1q`hhe$Q^G$`J{L(j^E4CYN22ytn*~|{_MTSl4gJ^w%VZLW4n{bnzFQNDOiG) zLw4zG)^%wH=w_S^+~cjMdGyXnt#S&IcrWWry_Zp0tPQI0%SIY9w2CN5a+K^A>rAy* zqN2?f`*@PmqO7Wb2;oSYi8DP)YWB>h&j)d5wrd=PI`g;ldJOsh=!Hv9M5A{tq{DilQfu RAf^BS002ovPDHLkV1nhyXGZ`4 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..06106cc --- /dev/null +++ b/index.html @@ -0,0 +1,76 @@ + + + + + + + + + + + mapcode-cpp by rijnb + + + +
+
+ +
+

mapcode-cpp

+

Mapcode Library for C/C++

+
+ +
+ Download .zip + Download .tar.gz + View on GitHub +
+ +
+ +
+

+Welcome to GitHub Pages.

+ +

This automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:

+ +
$ cd your_repo_root/repo_name
+$ git fetch origin
+$ git checkout gh-pages
+
+ +

If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.

+ +

+Designer Templates

+ +

We've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.

+ +

+Rather Drive Stick?

+ +

If you prefer to not use the automatic generator, push a branch named gh-pages to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.

+ +

+Authors and Contributors

+ +

You can @mention a GitHub username to generate a link to their profile. The resulting <a> element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.

+ +

+Support or Contact

+ +

Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.

+
+ + + + +
+
+ + \ No newline at end of file diff --git a/javascripts/main.js b/javascripts/main.js new file mode 100644 index 0000000..d8135d3 --- /dev/null +++ b/javascripts/main.js @@ -0,0 +1 @@ +console.log('This would be the main JS file.'); diff --git a/params.json b/params.json new file mode 100644 index 0000000..0842fbc --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"name":"mapcode-cpp","tagline":"Mapcode Library for C/C++","body":"### Welcome to GitHub Pages.\r\nThis automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:\r\n\r\n```\r\n$ cd your_repo_root/repo_name\r\n$ git fetch origin\r\n$ git checkout gh-pages\r\n```\r\n\r\nIf you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.\r\n\r\n### Designer Templates\r\nWe've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.\r\n\r\n### Rather Drive Stick?\r\nIf you prefer to not use the automatic generator, push a branch named `gh-pages` to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.\r\n\r\n### Authors and Contributors\r\nYou can @mention a GitHub username to generate a link to their profile. The resulting `` element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.\r\n\r\n### Support or Contact\r\nHaving trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/stylesheets/print.css b/stylesheets/print.css new file mode 100644 index 0000000..541695b --- /dev/null +++ b/stylesheets/print.css @@ -0,0 +1,226 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +body { + font-size: 13px; + line-height: 1.5; + font-family: 'Helvetica Neue', Helvetica, Arial, serif; + color: #000; +} + +a { + color: #d5000d; + font-weight: bold; +} + +header { + padding-top: 35px; + padding-bottom: 10px; +} + +header h1 { + font-weight: bold; + letter-spacing: -1px; + font-size: 48px; + color: #303030; + line-height: 1.2; +} + +header h2 { + letter-spacing: -1px; + font-size: 24px; + color: #aaa; + font-weight: normal; + line-height: 1.3; +} +#downloads { + display: none; +} +#main_content { + padding-top: 20px; +} + +code, pre { + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal; + color: #222; + margin-bottom: 30px; + font-size: 12px; +} + +code { + padding: 0 3px; +} + +pre { + border: solid 1px #ddd; + padding: 20px; + overflow: auto; +} +pre code { + padding: 0; +} + +ul, ol, dl { + margin-bottom: 20px; +} + + +/* COMMON STYLES */ + +table { + width: 100%; + border: 1px solid #ebebeb; +} + +th { + font-weight: 500; +} + +td { + border: 1px solid #ebebeb; + text-align: center; + font-weight: 300; +} + +form { + background: #f2f2f2; + padding: 20px; + +} + + +/* GENERAL ELEMENT TYPE STYLES */ + +h1 { + font-size: 2.8em; +} + +h2 { + font-size: 22px; + font-weight: bold; + color: #303030; + margin-bottom: 8px; +} + +h3 { + color: #d5000d; + font-size: 18px; + font-weight: bold; + margin-bottom: 8px; +} + +h4 { + font-size: 16px; + color: #303030; + font-weight: bold; +} + +h5 { + font-size: 1em; + color: #303030; +} + +h6 { + font-size: .8em; + color: #303030; +} + +p { + font-weight: 300; + margin-bottom: 20px; +} + +a { + text-decoration: none; +} + +p a { + font-weight: 400; +} + +blockquote { + font-size: 1.6em; + border-left: 10px solid #e9e9e9; + margin-bottom: 20px; + padding: 0 0 0 30px; +} + +ul li { + list-style: disc inside; + padding-left: 20px; +} + +ol li { + list-style: decimal inside; + padding-left: 3px; +} + +dl dd { + font-style: italic; + font-weight: 100; +} + +footer { + margin-top: 40px; + padding-top: 20px; + padding-bottom: 30px; + font-size: 13px; + color: #aaa; +} + +footer a { + color: #666; +} + +/* MISC */ +.clearfix:after { + clear: both; + content: '.'; + display: block; + visibility: hidden; + height: 0; +} + +.clearfix {display: inline-block;} +* html .clearfix {height: 1%;} +.clearfix {display: block;} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css new file mode 100644 index 0000000..c6a6452 --- /dev/null +++ b/stylesheets/pygment_trac.css @@ -0,0 +1,69 @@ +.highlight { background: #ffffff; } +.highlight .c { color: #999988; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { font-weight: bold } /* Keyword */ +.highlight .o { font-weight: bold } /* Operator */ +.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ +.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #999999 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { font-weight: bold } /* Keyword.Constant */ +.highlight .kd { font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #009999 } /* Literal.Number */ +.highlight .s { color: #d14 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086B3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .ni { color: #800080 } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nn { color: #555555 } /* Name.Namespace */ +.highlight .nt { color: #000080 } /* Name.Tag */ +.highlight .nv { color: #008080 } /* Name.Variable */ +.highlight .ow { font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sb { color: #d14 } /* Literal.String.Backtick */ +.highlight .sc { color: #d14 } /* Literal.String.Char */ +.highlight .sd { color: #d14 } /* Literal.String.Doc */ +.highlight .s2 { color: #d14 } /* Literal.String.Double */ +.highlight .se { color: #d14 } /* Literal.String.Escape */ +.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ +.highlight .si { color: #d14 } /* Literal.String.Interpol */ +.highlight .sx { color: #d14 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #d14 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #008080 } /* Name.Variable.Class */ +.highlight .vg { color: #008080 } /* Name.Variable.Global */ +.highlight .vi { color: #008080 } /* Name.Variable.Instance */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ + +.type-csharp .highlight .k { color: #0000FF } +.type-csharp .highlight .kt { color: #0000FF } +.type-csharp .highlight .nf { color: #000000; font-weight: normal } +.type-csharp .highlight .nc { color: #2B91AF } +.type-csharp .highlight .nn { color: #000000 } +.type-csharp .highlight .s { color: #A31515 } +.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css new file mode 100644 index 0000000..020ad6d --- /dev/null +++ b/stylesheets/stylesheet.css @@ -0,0 +1,371 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* LAYOUT STYLES */ +body { + font-size: 1em; + line-height: 1.5; + background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat; + font-family: 'Helvetica Neue', Helvetica, Arial, serif; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); + color: #6d6d6d; +} + +a { + color: #d5000d; +} +a:hover { + color: #c5000c; +} + +header { + padding-top: 35px; + padding-bottom: 25px; +} + +header h1 { + font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif; font-weight: 900; + letter-spacing: -1px; + font-size: 48px; + color: #303030; + line-height: 1.2; +} + +header h2 { + letter-spacing: -1px; + font-size: 24px; + color: #aaa; + font-weight: normal; + line-height: 1.3; +} + +#container { + background: transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat; + min-height: 595px; +} + +.inner { + width: 620px; + margin: 0 auto; +} + +#container .inner img { + max-width: 100%; +} + +#downloads { + margin-bottom: 40px; +} + +a.button { + -moz-border-radius: 30px; + -webkit-border-radius: 30px; + border-radius: 30px; + border-top: solid 1px #cbcbcb; + border-left: solid 1px #b7b7b7; + border-right: solid 1px #b7b7b7; + border-bottom: solid 1px #b3b3b3; + color: #303030; + line-height: 25px; + font-weight: bold; + font-size: 15px; + padding: 12px 8px 12px 8px; + display: block; + float: left; + width: 179px; + margin-right: 14px; + background: #fdfdfd; /* Old browsers */ + background: -moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* IE10+ */ + background: linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */ + -webkit-box-shadow: 10px 10px 5px #888; + -moz-box-shadow: 10px 10px 5px #888; + box-shadow: 0px 1px 5px #e8e8e8; +} +a.button:hover { + border-top: solid 1px #b7b7b7; + border-left: solid 1px #b3b3b3; + border-right: solid 1px #b3b3b3; + border-bottom: solid 1px #b3b3b3; + background: #fafafa; /* Old browsers */ + background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f6f6f6)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* IE10+ */ + background: linear-gradient(top, #fdfdfd 0%,#f6f6f6, 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */ +} + +a.button span { + padding-left: 50px; + display: block; + height: 23px; +} + +#download-zip span { + background: transparent url(../images/zip-icon.png) 12px 50% no-repeat; +} +#download-tar-gz span { + background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat; +} +#view-on-github span { + background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat; +} +#view-on-github { + margin-right: 0; +} + +code, pre { + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal; + color: #222; + margin-bottom: 30px; + font-size: 14px; +} + +code { + background-color: #f2f2f2; + border: solid 1px #ddd; + padding: 0 3px; +} + +pre { + padding: 20px; + background: #303030; + color: #f2f2f2; + text-shadow: none; + overflow: auto; +} +pre code { + color: #f2f2f2; + background-color: #303030; + border: none; + padding: 0; +} + +ul, ol, dl { + margin-bottom: 20px; +} + + +/* COMMON STYLES */ + +hr { + height: 1px; + line-height: 1px; + margin-top: 1em; + padding-bottom: 1em; + border: none; + background: transparent url('../images/hr.png') 50% 0 no-repeat; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +table { + width: 100%; + border: 1px solid #ebebeb; +} + +th { + font-weight: 500; +} + +td { + border: 1px solid #ebebeb; + text-align: center; + font-weight: 300; +} + +form { + background: #f2f2f2; + padding: 20px; + +} + + +/* GENERAL ELEMENT TYPE STYLES */ + +h1 { + font-size: 32px; +} + +h2 { + font-size: 22px; + font-weight: bold; + color: #303030; + margin-bottom: 8px; +} + +h3 { + color: #d5000d; + font-size: 18px; + font-weight: bold; + margin-bottom: 8px; +} + +h4 { + font-size: 16px; + color: #303030; + font-weight: bold; +} + +h5 { + font-size: 1em; + color: #303030; +} + +h6 { + font-size: .8em; + color: #303030; +} + +p { + font-weight: 300; + margin-bottom: 20px; +} + +a { + text-decoration: none; +} + +p a { + font-weight: 400; +} + +blockquote { + font-size: 1.6em; + border-left: 10px solid #e9e9e9; + margin-bottom: 20px; + padding: 0 0 0 30px; +} + +ul li { + list-style: disc inside; + padding-left: 20px; +} + +ol li { + list-style: decimal inside; + padding-left: 3px; +} + +dl dt { + color: #303030; +} + +footer { + background: transparent url('../images/hr.png') 0 0 no-repeat; + margin-top: 40px; + padding-top: 20px; + padding-bottom: 30px; + font-size: 13px; + color: #aaa; +} + +footer a { + color: #666; +} +footer a:hover { + color: #444; +} + +/* MISC */ +.clearfix:after { + clear: both; + content: '.'; + display: block; + visibility: hidden; + height: 0; +} + +.clearfix {display: inline-block;} +* html .clearfix {height: 1%;} +.clearfix {display: block;} + +/* #Media Queries +================================================== */ + +/* Smaller than standard 960 (devices and browsers) */ +@media only screen and (max-width: 959px) {} + +/* Tablet Portrait size to standard 960 (devices and browsers) */ +@media only screen and (min-width: 768px) and (max-width: 959px) {} + +/* All Mobile Sizes (devices and browser) */ +@media only screen and (max-width: 767px) { + header { + padding-top: 10px; + padding-bottom: 10px; + } + #downloads { + margin-bottom: 25px; + } + #download-zip, #download-tar-gz { + display: none; + } + .inner { + width: 94%; + margin: 0 auto; + } +} + +/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ +@media only screen and (min-width: 480px) and (max-width: 767px) {} + +/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ +@media only screen and (max-width: 479px) {} From e66f1c45dcd5095d07495c0a0faa73319d3f1173 Mon Sep 17 00:00:00 2001 From: Rijn Buve Date: Fri, 19 Sep 2014 12:21:41 +0200 Subject: [PATCH 2/3] Added page --- index.html | 1484 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1483 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 06106cc..15455e0 100644 --- a/index.html +++ b/index.html @@ -64,6 +64,1488 @@

Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.

+
+
+ +

C library to convert between +mapcodes and latitude/longitude

+ +

 

+ +

Version 1.40

+ +

Copyright ©2003-2014 by The Mapcode Foundation

+ +

 

+ +

 

+ +

1. Converting a coordinate into a mapcode

+ +

 

+ +

int encodeLatLonToMapcodes(

+ +

char**            results, +

+ +

double            lat, +

+ +

double            lon,

+ +

int       territoryCode,

+ +

int       extraDigits)

+ +

 

+ +

find +all possible mapcodes in a given territory (or in ALL territories)

+ +

input:

+ +
    +
  • lat: latitude in degrees -90.0 to 90.0
  • +
  • lon: longitude in degrees -180.0 to 180.0
  • +
  • territoryCode: territory code (an integer, pass 0 to encode in ALL possible territories, + or a positive value to encode only in a particular territory)
  • +
  • extraDigits: number of extra "digits" to add to the generated + mapcode. The preferred default is 0. Other valid values are 1 and 2. see + section 2.2 below.
  • +
+ +

output:

+ +
    +
  • return value: the number of results
  • +
  • results: elements are made + to point to strings (2 strings per result!) representing the mapcodes of + the given latitude/longitude in the specified territory. Note that these + pointers are overwritten by the next call to encodeLatLonToMapcodes.
  • +
      +
    • Of each pair of strings, the first string specifies the official printable territory + abbreviation (e.g. Ã’NLDÓ for The Netherlands, Ã’US-CAÓ for the state of + California in the United States of America)
    • +
    • The second string is + a mapcode (a string between 5 and 10 chars with a dot in it)
    • +
    +
+ +
+
+ +

 

+ +

int encodeLatLonToSingleMapcode(

+ +

char*  result, +

+ +

double            lat, +

+ +

double            lon,

+ +

int       territoryCode,

+ +

int       extraDigits)

+ +

 

+ +

 

+ +

find +ONE possible mapcode in a given territory (or in ALL territories)

+ +

input:

+ +
    +
  • lat: latitude in degrees -90.0 to 90.0
  • +
  • lon: longitude in degrees -180.0 to 180.0
  • +
  • territoryCode: territory code (an integer, pass 0 to encode in ALL possible + territories, or a positive value to encode only in a particular territory)
  • +
  • extraDigits: number of extra "digits" to add to the generated + mapcode. The preferred default is 0. Other valid values are 1 and 2. see + section 2.2 below.
  • +
+ +

output:

+ +
    +
  • return value: positive if a mapcode was found
  • +
  • result: a string representing the full mapcode found, including + territory code; the caller must allocate the memory for the result string + (contrary to encodeLatLonToMapcodes!); make sure + there is room for the worst-case result (which is a string of char[24]).
  • +
+ +

 

+ +

Example code:

+ +

 

+ +

  +double lat = 52.376514;

+ +

  +double lon =  4.908542;

+ +

  const +char* countryabbr = "NLD";

+ +

 

+ +

  char* +r[MAX_NR_OF_MAPCODE RESULTS]; // Strings allocated by library!

+ +

  int +tc = convertTerritoryNameToCode(countryabbr, 0);

+ +

  int +nrresults = encodeLatLonToMapcodes(r, lat, lon, tc, 0);

+ +

  if +(nrresults > 0)

+ +

    +printf("%0.6f,%0.6f has mapcode %s %s\n", lat, lon, r[1], r[0]);

+ +

  else

+ +

    +printf("No results\n");

+ +

 

+ +

Output:

+ +

 

+ +

52.376514,4.908542 +has mapcode NLD 49.4V

+ +

 

+ +

Thus, convertTerritoryNameToCode is used to determine the +territory code tc +for ÒNLDÓ. Then encodeLatLonToMapcodes is used to +determine the mapcode for the coordinate 52.376514,4.908542. The first one of +those (if any) is printed.

+ +

 

+ +

Note that there may +be more than one result, even for a single territory.

+ +
+
+ +

When you only want +ONE result, you could also write:

+ +

 

+ +

  +double lat = 52.376514;

+ +

  +double lon =  4.908542;

+ +

  const +char* countryabbr = "NLD";

+ +

 

+ +

  char +result[MAX_MAPCODE_RESULT_LEN]; // String allocated by caller!

+ +

  int +tc = convertTerritoryNameToCode(countryabbr, 0);

+ +

  int +nrresults = encodeLatLonToSingleMapcode(result, lat, lon, tc, 0);

+ +

  if +(nrresults > 0)

+ +

    +printf("%0.6f,%0.6f has mapcode %s\n", lat, lon, result);

+ +

  else

+ +

    +printf("No results\n");

+ +

 

+ +

You can also generate +all possible mapcodes, irrespective of territory, by passing territoryCode=0:

+ +

 

+ +

  int +i;

+ +

  +double lat = 52.376514;

+ +

  +double lon =  4.908542;

+ +

 

+ +

  char +*r[MAX_NR_OF_MAPCODE_RESULTS];

+ +

  int +nrresults = encodeLatLonToMapcodes(r, lat, lon, 0, 0);

+ +

 

+ +

  printf("%d +mapcodes for %0.6f,%0.6f:\n", nrresults, lat, lon);

+ +

  for (i += 0; i < nrresults; i++) {

+ +

 

+ +

    +// show context (unless it is international)

+ +

    +if (strcmp(r[(i * 2)  +1], "AAA") +!=0 )

+ +

      printf("%s +",r[(i * 2) + 1]);

+ +

 

+ +

    // show mapcode

+ +

    +printf("%s\n", r[i * 2] );

+ +

  }

+ +

 

+ +

Output:

+ +

 

+ +

5 possible +mapcodes for 52.376514,4.908542:

+ +

NLD 49.4V

+ +

NLD G9.VWG

+ +

NLD DL6.H9L

+ +

NLD P25Z.N3Z

+ +

VHXGB.1J9J

+ +

 

+ +

Note that encodeLatLonToMapcodes(r, lat, lon, 0, +e) is guaranteed to return at least one result if lat, lon is in range (i.e. on Earth). +Again, the elements of r are made to +point to territory abbrevations and mapcodes in those +territories. Within territories the shortest mapcode code is listed first. The +territories are listed in no particular order, except that the international +code is always the last code in the list.

+ +

 

+ +
+
+ +

2. Converting a mapcode into a coordinate

+ +

 

+ +

int decodeMapcodeToLatLon(

+ +

            double*          lat, +

+ +

            double*          lon,

+ +

            const +char*    mapcode,

+ +

            int                   territoryCode)

+ +

 

+ +

input:

+ +
    +
  • mapcode: a Ã’free-formÓ user input, which may be recognized if it is of + the form
  • +
      +
        +
      • [xxx[-yyy]] PPP.QQQ [-RR]
      • +
          +
        • xxx is a country code (2 or 3 characters)
        • +
        • yyy is an + state code (2 or 3 characters)
        • +
        • PPP : mapcode prefix (between 2 and 5 characters)
        • +
        • QQQ: mapcode postfix (between 2 and 4 characters)
        • +
        • RR: high-precision addendum (one or two characters)
        • +
        +
      +
    +
  • territoryCode: territory (or 0), to help disambiguate the user input if that + proves necessary; If you pass 0, the mapcode may fail to decode, or (if it + is ambiguous) will be disambiguated randomly.
  • +
      +
    • Examples:
    • +
        +
      • user input Ã’US-CA XX.XXÓ needs no disambiguation and returns + a location in California
      • +
      • user input Ã’IN XX.XXÓ can be decoded without a tc, but it is unpredictable whether it decodes to a + location in Indiana, USA or in the Ingushetia, Russia.
      • +
      • user input Ã’XX.XXÓ is impossible to decode unless a valid tc is provided
      • +
      +
    +
+ +

output:

+ +
    +
  • returns nonzero in case of error. Otherwise, lat and lon are filled with the decoded + coordinates.
  • +
+ +

 

+ +

Example code:

+ +

 

+ +

  const +char* userinput = "NLD 49.4V";

+ +

  +double lat, lon;

+ +

  int +err = decodeMapcodeToLatLon(&lat, &lon, userinput, 0);

+ +

  if +(err)

+ +

    +printf("\"%s\" is not a valid mapcode\n", +userinput);

+ +

  else

+ +

    +printf("\"%s\" represents %0.6f,%0.6f\n", userinput, +lat, lon);

+ +

 

+ +

Output:

+ +

 

+ +

  "NLD 49.4V" +represents 52.376514,4.908542

+ +

 

+ +

Note that the above +piece of code will only ÒaccidentallyÓ handle ambiguous partial mapcodes correctly. For example,

+ +

userinput=ÓIN +VY.HVÓ

+ +

will either be interpreted as an abbreviation +of ÒUS-IN VY.HVÓ or of ÒRU-IN VY.HVÓ, +and thus either produce a coordinate +in Indiana, USA, or in Ingushetia, +Russia.

+ +

Passing a Òdefault +contextÓ improves the chances of ambiguous user input to be interpreted Òas the +user intendedÓ. Thus, if one builds a system that is mostly going to be used in +the USA, the following hard-codes that preference (i.e. Òwhen in doubt, assume +the ÒUSAÓ):

+ +

 

+ +

  int +defaultcontext = convertTerritoryNameTCode("USA",0);

+ +

  const +char* userinput = "IN VY.HV";

+ +

  +double lat, lon;

+ +

  int +err = convertMapcodeToLatLon(&lat, &lon, userinput,

+ +

              defaultcontext);

+ +

  if +(err)

+ +

    +printf("\"%s\" is not a valid mapcode\n", +userinput);

+ +

  else

+ +

    +printf("\"%s\" represents %0.6f,%0.6f\n", userinput, +lat, lon);

+ +

 

+ +

Output:

+ +

 

+ +

  "IN VY.HV" +represents 39.727950,-86.118444

+ +

 

+ +

A more sophisticated +system could of course make much better assumptions, for example based on the +GPS coordinate of the user, or the current cursor position on a world map that +is being displayed to the user.

+ +

 

+ +

In an interactive +system, the best way to handle +ambiguity is probably to always use the most recent successful, explicitly stated context as default.

+ +

For example, suppose +you remembered the previous correctly interpreted +user input:

+ +

 

+ +

  const +char* previous_successful_input = "RU-IN DK.CN0";

+ +

 

+ +

then the following code +snippet will correctly interpret the completely abbreviated mapcode Ò49.4VÓ as +being in the same state (i.e. RU-IN):

+ +

 

+ +

  int +previouscontext = convertTerritoryNameToCode(

+ +

              +            previous_successful_input,0);

+ +

  const +char* userinput = "D6.58";

+ +

  int +err = decodeMapcodeToLatLon(&lat, &lon, userinput,

+ +

              +previouscontext);

+ +

 

+ +

Output:

+ +

 

+ +

  "D6.58" +represents 43.259275,44.771980

+ +

 

+ +

which is in  Ingushetia Republic. And in fact, had we +written

+ +

 

+ +

  userinput=Ã’AL +D6.58Ó

+ +

 

+ +

this would generate +the output

+ +

 

+ +

  "AL D6.58" +represents 51.958335,85.975322

+ +

 

+ +

which is in the +Russian republic of Altai: because of the context RU-IN, the territory has been +interpreted as RU-AL, instead of the equally likely US-AL (Alabama, USA) or BR-AL +(Alagoas, Brazil).

+ +
+
+ +

Here is an example +that decodes consecutive user inputs, some of them wildly ambiguous. With the +exception of the very first input, all are probably interpreted as the user +intended:

+ +

 

+ +

  int +previouscontext = -1; // no initial context

+ +

 

+ +

  const +char* userinput[] = {

+ +

    +"49.4V",

+ +

    "US-IN 49.4V",

+ +

    "49.4V",

+ +

    "AL 49.4V",

+ +

    "RU-IN 49.4V",

+ +

    "AL 49.4V",

+ +

    "NLD XXX.YYY",

+ +

    "49.4V",

+ +

    "CCCCC.CCCC",

+ +

    "49.4V",

+ +

    +NULL

+ +

  };

+ +

 

+ +

  int +i;

+ +

  for +(i = 0; userinput[i] != 0; i++) {

+ +

    +double lat, lon;

+ +

    +int err = decodeMapcodeToLatLon(&lat, &lon, userinput[i],

+ +

                +previouscontext);

+ +

    +if (err)

+ +

      +printf("\"%s\" is not a valid mapcode\n", +userinput[i]);

+ +

    +else {

+ +

      int newcontext = +convertTerritoryNameToCode(userinput[i], 0);

+ +

      if +(newcontext>1 && (newcontext < MAX_MAPCODE_TERRITORY_CODES))

+ +

        +previouscontext = newcontext;       

+ +

      +printf("%12s represents %0.6f,%0.6f\n", userinput[i], lat, lon);

+ +

    +}

+ +

  }

+ +

 

+ +

Output:

+ +

 

+ +

"49.4V" is not a valid mapcode

+ +

 US-IN 49.4V represents +39.783750,-86.198832

+ +

       +49.4V represents 39.783750,-86.198832

+ +

    AL 49.4V +represents 33.532750,-86.836184

+ +

 RU-IN 49.4V represents +43.249285,44.741353

+ +

    AL 49.4V +represents 51.927091,85.910319

+ +

 NLD XXX.YYY represents +51.204536,5.541607

+ +

       +49.4V represents 52.376514,4.908542

+ +

  CCCCC.CCCC represents +-16.326209,-48.016851

+ +

       +49.4V represents 52.376514,4.908542

+ +

 

+ +
+
+ +

Explanation:

+ +

 

+ +

"49.4V" is not a valid mapcode

+ +

Since there is no +previous context, this ambiguous mapcode can simply not be interpreted. For +this reason, it may be a good idea to choose a better default context than previouscontext=-1 (e.g. based on the userÕs GPS position). +

+ +

 

+ +

US-IN 49.4V represents 39.783750,-86.198832

+ +

A complete and +unambiguous mapcode, it results in a coordinate in Indiana, USA.

+ +

 

+ +

49.4V represents 39.783750,-86.198832

+ +

Since the previous +input was in Indiana, this incomplete mapcode is encoded in the same context.

+ +

 

+ +

AL 49.4V represents 33.532750,-86.836184

+ +

Since the previous +input was in the Indiana, USA, the context ÒALÓ is interpreted as another state +in the USA, and thus results in a coordinate in Alabama (rather than, say, the +state of Alagoas in Brazil).

+ +

 

+ +

RU-IN 49.4V represents 43.249285,44.741353

+ +

A complete and +unambiguous mapcode, it results in a coordinate in Ingushetia, Russia.

+ +

 

+ +

AL 49.4V represents 51.927091,85.910319

+ +

Unlike two inputs +back, AL 49.4V is now interpreted in Russia (the Altai Republic) rather than in +the USA (Alabama), since the most recent context was Russian.

+ +

 

+ +

NLD XXX.YYY represents 51.204536,5.541607

+ +

A complete and +unambiguous mapcode, it results in a coordinate in The Netherlands.

+ +

 

+ +

49.4V represents 52.376514,4.908542

+ +

Since the previous +input was in The Netherlands, this time 49.4V is interpreted in The Netherlands +as well.

+ +

 

+ +

CCCCC.CCCC represents -16.326209,-48.016851

+ +

A complete and +unambiguous international mapcode. +Although it decodes to a coordinate somewhere in Brazil, the mapcode does not explicitly specify Brazil as a context. +Therefore, the context for future inputs will remain ÒThe NetherlandsÓ.

+ +

 

+ +

49.4V represents 52.376514,4.908542

+ +

Since the most recent +explicit context was in The +Netherlands, this ambiguous mapcode is now also interpreted in The Netherlands.

+ +
+
+ +

2.1 Recognizing an input as a mapcode

+ +

 

+ +

Sometimes you may wish to allow a user to +input something in a Ã’generalÓ search box – an address, a coordinate, a +mapcode, or something else.

+ +

The following routine is very  efficient and lightweight, and recognizes +a user input that is intended as a +mapcode. For example:

+ +

            Ã’NLD +503.XE2Ó

+ +

is intended as a mapcode (although it +happens to be invalid), while

+ +

            Ã’St. +Jacobs Street 45, LondonÓ

+ +

Is not. Since anything that looks like a +mapcode is very unlikely to represent +anything else, we would recommend to handle (i.e. decode) anything that looks like a mapcode as a mapcode. If it +fails to decode, you could still try to interpret as something else, but as has +been said: it is very unlikely it does +represent something else.

+ +

 

+ +

 

+ +

int compareWithMapcodeFormat(

+ +

            const +char*    string ,

+ +

            int                   includesTerritory)

+ +

 

+ +

input:

+ +
    +
  • check: a Ã’free-formÓ user input
  • +
  • includesTerritory: an integer: if you pass 1, full mapcodes (including optional + territory context) will be recognized, i.e. inputs of the form
    +             [whitespace] + [xxx[-yyy]] [whitespace] PPP.QQQ [-RR] + [whitespace]
    + If you pass 0, only ÒproperÓ mapcodes will be recognized:
    +             + [whitespace] PPP.QQQ [-RR] [whitespace]
  • +
+ +

output:

+ +
    +
  • returns 0 if the string looks like a full/proper mapcode
  • +
  • return negative in case of error (the special value -999 is + returned if the string looks like a partial + mapcode, i.e. might become a valid mapcode if some more characters + were added).
  • +
+ +

 

+ +
+
+ +

2.2 Extra precision

+ +

 

+ +

Mapcodes are intended for easy, daily use. +They were therefore made short, and no more precise than is necessary to be +useful at the Ã’humanÓ scale: accurate to within 5 meters – or put another +way: inaccurate by up to 5 meters. On average, inaccurate by 2.5 meters. An inaccuracy, by the way, +both in latitude and longitude.

+ +

 

+ +

For special applications – e.g. for +internal storage of original latitude/longitude pairs – mapcode was +extended to allow one or two extra letters. One letter extra decreases the +worst-case inaccuracy to about 1 meter, two letters decreases it to about 20 +centimeters.

+ +

 

+ +

As an example, consider coordinate 52.376496, +4.908583. When encoded, it yields mapcode NLD +49.4V. This mapcode decodes back into +52.376514, 4.908542, a coordinate which is 2.83 meters off to the west, and 1.94 +meters too far north (in combination, the mapcode is 3.44 meters away from the +original coordinate).

+ +

When we encode the same coordinate with an +extra digit, we get NLD 49.4V-R, a +mapcode that decodes into 52.376491, +4.908574, only 96 centimeters off. With two extra digits, we get a mapcode that +is about 13 centimeters off.

+ +

 

+ +

Mapcode:           decodes +into:                           error +vs original coordinate:

+ +

49.4V                 52.376514, +4.908542              3.44 +meter

+ +

49.4V-R             52.376491, +4.908574              0.96 +meter

+ +

49.4V-R5           52.376497, +4.908584              0.13 +meter

+ +

 

+ +

Note that this is just an example. Had we +encoded 52.376514, 4.908542, the mapcode 49.4V +would be 100% precise. It is not the actual error, but the maximum error that is reduced by adding extra letters to a mapcode.

+ +

 

+ +

PLEASE +NOTE: the above may make it seem that it is a good +idea to always add extra letters. This would defeat the core purpose of the +mapcode system, which is to be accurate enough +for daily, human-scale use. The high-precision extension was made for very +special applications only. What it may also be useful for is for internal storage, e.g. when your +original coordinates are that precise, you could consider storing the precise +mapcodes in your database in high-precision format. We still recommend that you +display normal mapcodes (i.e. without +the extension) to the end-users of +your system!

+ +

 

+ +
+
+ +

3. Routines related to territories

+ +

 

+ +

The mapcode system is based on an official +code table, which in turn is based on the ISO 3166 standards.

+ +

For efficiency, these codes need to be +converted into internal Òterritory codesÓ. For these, the following three +support routines are relevant:

+ +

 

+ +

int convertTerritoryNameToCode(

+ +

            const +char*    isoName,

+ +

            int                   parentTerritoryCode)

+ +

 

+ +
    +
  • isoName:       a + 2- or 3-letter Ã’ISO standardÓ code of a country or a state, or a + combination of country and state separated by a hyphen or space.
    + Examples: ÒUSAÓ, ÒCAÓ, ÒUS-CAÓ, ÒUSA-CAÓ, ÒUS CAÓ
  • +
  • parentTerritoryCode: optional territory code to help the routine choose when the + abbreviation is ambiguous, which can happen if the abbreviation is of a + state and the stateÕs country is omitted. For example, Ã’ALÓ might mean + either Ã’US-ALÓ or Ã’BR-ALÓ.
  • +
  • Returns: the territory code (1-999), or negative if not no match was found.
  • +
+ +

 

+ +

const +char* convertTerritoryCodeToIsoName(

+ +

            int       territoryCode,

+ +

            int       format) +

+ +

 

+ +
    +
  • territoryCode – a territory code (1-999)
  • +
  • format – specifies the format of the return value:
  • +
      +
    • 0 – return in unambiguous full format: Ã’XXXÓ for a country, + Ã’XX-YYÓ for a state
    • +
    • 1 – short format: Ã’XXXÓ or Ã’XXÓ; especially when a 2 + letter (state) code is returned, although always unique within its country, + it may not be unique in the world
    • +
    +
  • Returns: a pointer to a string (which will be overwritten by the next + call to convertTerritoryCodeToIsoName). + Returns an empty string if territoryCode or format + is illegal).
  • +
+ +

 

+ +

int getCountryOrParentCountry(int territoryCode)

+ +

 

+ +
    +
  • territoryCode – territory code (1-999)
  • +
  • returns:
  • +
      +
    • -1: if tc is invalid,
    • +
    • the parent country of tc if tc is a valid state code
    • +
    • tc: if tc is a valid country code
    • +
    +
+ +
+
+ +

4. Routines related to Unicode and/or foreign alphabets

+ +

 

+ +

const +char* decodeToRoman(const UWORD* string);

+ +

 

+ +

Mapcodes may be specified in other +alphabets. This routine converts a 16-bit user input (i.e. a string of 16-bit +Unicode characters) into a roman equivalent – which can then be offered +to mc2coord;

+ +

 

+ +

Note that the return pointer will be +overwritten by the next call to decode_to_roman.

+ +

 

+ +

const +UWORD* encodeToAlphabet(

+ +

            const +char*    mapcode,

+ +

            int                   alphabet); +

+ +

 

+ +

This routine converts a normal +(roman-alphabet) mapcode into a Unicode string in the specified alphabet. For +example, it can converty

+ +

PQ.RS to नप.भम (hindi alphabet)

+ +

PQ.RS to РФ.ЯЦ (Russian +alphabet)

+ +

 

+ +

Note that the return pointer will be +overwritten by the next call to encode_to_alphabet.

+ +

 

+ +

At the date of writing, the following 4 +alphabets have been approved for official use, the others have not yet +officially been approved.

+ +

0 = roman,

+ +

2 = cyrillic,

+ +

4 = hindi,

+ +

12 = gurmukhi

+ +

 

+ +

Version history

+ +

1.25 initial release to +the public domain

+ +

1.26 added alias OD +("Odisha") for indian +state OR ("Orissa")

+ +

1.27 improved (faster) +implementation of the function isInArea

+ +

1.28 bug fix for the +needless generation of 7-letter alternatives

+ +

            +to short mapcodes in large states in India

+ +

1.29 also generate +country-wide alternative mapcodes for states

+ +

1.30 updated the +documentation and extended it with examples and suggestions

+ +

1.31 added lookslikemapcode();

+ +

1.32 added coord2mc1();fixed +1.29 so no country-wide alternative is produced
+            +in edge cases; prevent FIJI failing to decode at exactly 180 degrees;

+ +

1.33 fix to not remove +valid results just across the edge of a territory;

+ +

improved interface readability and renamed methods to more +readable forms.

+ +

1.40 added extraDigits parameter so that high-precision mapcodes can +be generated

+ +
+
+ + +
mapcode-cpp is maintained by rijnb
This page was generated by GitHub Pages. Tactile theme by Jason Long. @@ -73,4 +1555,4 @@

- \ No newline at end of file + From 8b0a7c43f692d7dcf7024a4f78eb63bd7cf61139 Mon Sep 17 00:00:00 2001 From: Rijn Buve Date: Fri, 19 Sep 2014 12:24:30 +0200 Subject: [PATCH 3/3] Replaced with Word file --- index.html | 934 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 819 insertions(+), 115 deletions(-) diff --git a/index.html b/index.html index 15455e0..07138cb 100644 --- a/index.html +++ b/index.html @@ -1,70 +1,784 @@ - - - - - - - - - - - mapcode-cpp by rijnb - + + + + + + + + + + +C library to convert between mapcodes and latitude/longitude + + + + + + + + - -
-
- -
-

mapcode-cpp

-

Mapcode Library for C/C++

-
- -
- Download .zip - Download .tar.gz - View on GitHub -
- -
- -
-

-Welcome to GitHub Pages.

- -

This automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:

- -
$ cd your_repo_root/repo_name
-$ git fetch origin
-$ git checkout gh-pages
-
- -

If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.

- -

-Designer Templates

- -

We've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.

- -

-Rather Drive Stick?

- -

If you prefer to not use the automatic generator, push a branch named gh-pages to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.

- -

-Authors and Contributors

- -

You can @mention a GitHub username to generate a link to their profile. The resulting <a> element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.

- -

-Support or Contact

- -

Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.

-
- -

Version 1.40

Copyright ©2003-2014 by The Mapcode Foundation

+normal'>Copyright ©2003-2014 by The Mapcode Foundation

 

@@ -161,7 +875,7 @@

1. Converting a coordinate into a mapcode

  • Of each pair of strings, the first string specifies the official printable territory - abbreviation (e.g. Ã’NLDÓ for The Netherlands, Ã’US-CAÓ for the state of + abbreviation (e.g. ÒNLDÓ for The Netherlands, ÒUS-CAÓ for the state of California in the United States of America)
  • The second string is @@ -316,7 +1030,7 @@

    1. Converting a coordinate into a mapcode

    Thus, convertTerritoryNameToCode is used to determine the territory code tc -for Ã’NLDÓ. Then encodeLatLonToMapcodes is used to +for ÒNLDÓ. Then encodeLatLonToMapcodes is used to determine the mapcode for the coordinate 52.376514,4.908542. The first one of those (if any) is printed.

    @@ -539,7 +1253,7 @@

    2. Converting a mapcode into a coordinate

    • mapcode: a Ã’free-formÓ user input, which may be recognized if it is of + lang=EN-US>a Òfree-formÓ user input, which may be recognized if it is of the form
        • @@ -573,14 +1287,14 @@

          2. Converting a mapcode into a coordinate

          lang=EN-US>
          • user input Ã’US-CA XX.XXÓ needs no disambiguation and returns + lang=EN-US>user input ÒUS-CA XX.XXÓ needs no disambiguation and returns a location in California
          • user input Ã’IN XX.XXÓ can be decoded without a user input ÒIN XX.XXÓ can be decoded without a tc, but it is unpredictable whether it decodes to a location in Indiana, USA or in the Ingushetia, Russia.
          • user input Ã’XX.XXÓ is impossible to decode unless a valid user input ÒXX.XXÓ is impossible to decode unless a valid tc is provided
        @@ -647,26 +1361,26 @@

        2. Converting a mapcode into a coordinate

        color:navy'> 

        Note that the above -piece of code will only ÒaccidentallyÓ handle ambiguous partial mapcodes correctly. For example,

        userinput=ÓIN -VY.HVÓ

        +style='mso-bidi-font-weight:normal'>=ÓIN +VY.HVÓ

        will either be interpreted as an abbreviation -of Ã’US-IN VY.HVÓ or of Ã’RU-IN VY.HVÓ, +of ÒUS-IN VY.HVÓ or of ÒRU-IN VY.HVÓ, and thus either produce a coordinate in Indiana, USA, or in Ingushetia, Russia.

        -

        Passing a Òdefault -contextÓ improves the chances of ambiguous user input to be interpreted Òas the -user intendedÓ. Thus, if one builds a system that is mostly going to be used in -the USA, the following hard-codes that preference (i.e. Òwhen in doubt, assume -the ÒUSAÓ):

        +

        Passing a Òdefault +contextÓ improves the chances of ambiguous user input to be interpreted Òas the +user intendedÓ. Thus, if one builds a system that is mostly going to be used in +the USA, the following hard-codes that preference (i.e. Òwhen in doubt, assume +the ÒUSAÓ):

         

        @@ -747,7 +1461,7 @@

        2. Converting a mapcode into a coordinate

        color:navy;mso-no-proof:yes'> 

        then the following code -snippet will correctly interpret the completely abbreviated mapcode Ã’49.4VÓ as +snippet will correctly interpret the completely abbreviated mapcode Ò49.4VÓ as being in the same state (i.e. RU-IN):

         

          userinput=Ã’AL -D6.58Ó

        +color:navy'>  userinput=ÒAL +D6.58Ó

         

        @@ -1027,7 +1741,7 @@

        2. Converting a mapcode into a coordinate

        Since there is no previous context, this ambiguous mapcode can simply not be interpreted. For this reason, it may be a good idea to choose a better default context than previouscontext=-1 (e.g. based on the userÕs GPS position). +class=SpellE>previouscontext=-1 (e.g. based on the userÕs GPS position).

         

        @@ -1052,7 +1766,7 @@

        2. Converting a mapcode into a coordinate

        color:#0033CC'>AL 49.4V represents 33.532750,-86.836184

        Since the previous -input was in the Indiana, USA, the context Ã’ALÓ is interpreted as another state +input was in the Indiana, USA, the context ÒALÓ is interpreted as another state in the USA, and thus results in a coordinate in Alabama (rather than, say, the state of Alagoas in Brazil).

        @@ -1099,7 +1813,7 @@

        2. Converting a mapcode into a coordinate

        unambiguous international mapcode. Although it decodes to a coordinate somewhere in Brazil, the mapcode does not explicitly specify Brazil as a context. -Therefore, the context for future inputs will remain ÒThe NetherlandsÓ.

        +Therefore, the context for future inputs will remain ÒThe NetherlandsÓ.

         

        @@ -1121,7 +1835,7 @@

        2.1 Recognizing an input as a mapcode

         

        Sometimes you may wish to allow a user to -input something in a Ã’generalÓ search box – an address, a coordinate, a +input something in a ÒgeneralÓ search box – an address, a coordinate, a mapcode, or something else.

        The following routine is 2.1 Recognizing an input as a mapcode

  • a user input that is intended as a mapcode. For example:

    -

                Ã’NLD -503.XE2Ó

    +

                ÒNLD +503.XE2Ó

    is intended as a mapcode (although it happens to be invalid), while

    -

                Ã’St. -Jacobs Street 45, LondonÓ

    +

                ÒSt. +Jacobs Street 45, LondonÓ

    Is not. Since anything that looks like a mapcode is very unlikely to represent @@ -1172,7 +1886,7 @@

    2.1 Recognizing an input as a mapcode

    • check: a Ã’free-formÓ user input
    • + lang=EN-US>a Òfree-formÓ user input
    • includesTerritory:2.1 Recognizing an input as a mapcode

                [whitespace] [xxx[-yyy]] [whitespace] PPP.QQQ [-RR] [whitespace]
    - If you pass 0, only ÒproperÓ mapcodes will be recognized:
    + If you pass 0, only ÒproperÓ mapcodes will be recognized:
                [whitespace] PPP.QQQ [-RR] [whitespace] @@ -1213,7 +1927,7 @@

    2.2 Extra precision

    Mapcodes are intended for easy, daily use. They were therefore made short, and no more precise than is necessary to be -useful at the Ã’humanÓ scale: accurate to within 5 meters – or put another +useful at the ÒhumanÓ scale: accurate to within 5 meters – or put another way: inaccurate by up to 5 meters. On average, inaccurate by 2.5 meters. An inaccuracy, by the way, @@ -1302,7 +2016,7 @@

    3. Routines related to territories

    code table, which in turn is based on the ISO 3166 standards.

    For efficiency, these codes need to be -converted into internal Ã’territory codesÓ. For these, the following three +converted into internal Òterritory codesÓ. For these, the following three support routines are relevant:

     

    @@ -1328,16 +2042,16 @@

    3. Routines related to territories

    class=SpellE>isoName:       a - 2- or 3-letter Ã’ISO standardÓ code of a country or a state, or a + 2- or 3-letter ÒISO standardÓ code of a country or a state, or a combination of country and state separated by a hyphen or space.
    - Examples: ÒUSAÓ, ÒCAÓ, ÒUS-CAÓ, ÒUSA-CAÓ, ÒUS CAÓ
    + Examples: ÒUSAÓ, ÒCAÓ, ÒUS-CAÓ, ÒUSA-CAÓ, ÒUS CAÓ
  • parentTerritoryCode: optional territory code to help the routine choose when the abbreviation is ambiguous, which can happen if the abbreviation is of a - state and the stateÕs country is omitted. For example, Ã’ALÓ might mean - either Ã’US-ALÓ or Ã’BR-ALÓ.
  • + state and the stateÕs country is omitted. For example, ÒALÓ might mean + either ÒUS-ALÓ or ÒBR-ALÓ.
  • Returns: the territory code (1-999), or negative if not no match was found.
  • @@ -1369,10 +2083,10 @@

    3. Routines related to territories

    lang=EN-US>– specifies the format of the return value:
    • 0 – return in unambiguous full format: Ã’XXXÓ for a country, - Ã’XX-YYÓ for a state
    • + lang=EN-US>0 – return in unambiguous full format: ÒXXXÓ for a country, + ÒXX-YYÓ for a state
    • 1 – short format: Ã’XXXÓ or Ã’XXÓ; especially when a 2 + lang=EN-US>1 – short format: ÒXXXÓ or ÒXXÓ; especially when a 2 letter (state) code is returned, although always unique within its country, it may not be unique in the world
    @@ -1542,17 +2256,7 @@

    Version history

    be generated

    - - - - + - - - -