diff --git a/README.md b/README.md index 6876bfb..2e8212b 100644 --- a/README.md +++ b/README.md @@ -5,22 +5,22 @@ A static web site generator is an application that takes plain text files and co - [Awesome Static Web Site Generators](#awesome-static-web-site-generators) - [Blogs](#blogs) - - [Wikis](#wikis) - [Frameworks](#frameworks) + - [Wikis](#wikis) - [Helpful Tools and Services](#helpful-tools-and-services) - [Deploy](#deploy) - [Web Hosts](#web-hosts) -- [Static Web Site Generators in Other Awesome Lists](#static-web-site-generators-in-other-awesome-lists) - [Other Lists of Static Web Site Geneartors](#other-lists-of-static-web-site-generators) - [Related Awesome](#related-awesome) +- [Static Web Site Generators in Other Awesome Lists](#static-web-site-generators-in-other-awesome-lists) ### Blogs -* [Jekyll](https://github.com/jekyll/jekyll) - Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. - `#Ruby` -* [Pelican](https://github.com/getpelican/pelican) - Uses Markdown or ReST for content and Jinja 2 for themes. - `#Python` -* [Hyde](https://github.com/hyde/hyde) - `#Python` -* [Octopress](https://github.com/imathis/octopress) - Similar to Jekyll but where everything you need is already setup. - `#Ruby` `#Jekyll` * [Hexo](https://github.com/hexojs/hexo) - A fast, simple & powerful blog framework. - `#JavaScript` `#Node.js` +* [Hyde](https://github.com/hyde/hyde) - `#Python` +* [Jekyll](https://github.com/jekyll/jekyll) - Jekyll is a simple, blog-aware, static site generator perfect for personal, project, or organization sites. - `#Ruby` +* [Octopress](https://github.com/imathis/octopress) - Similar to Jekyll but where everything you need is already setup. - `#Ruby` `#Jekyll` +* [Pelican](https://github.com/getpelican/pelican) - Uses Markdown or ReST for content and Jinja 2 for themes. - `#Python` * [Spress](https://github.com/spress/Spress/) - `#PHP` * [Static](https://github.com/nakkaya/static) - Supports org-mode and markdown. - `#Clojure` @@ -30,24 +30,24 @@ A static web site generator is an application that takes plain text files and co ### Frameworks -* [Flask-Frozen](https://github.com/SimonSapin/Frozen-Flask) - Freezes a Flask application into a set of static files. - `#Python` `#Flask` -* [MiddleMan](https://github.com/middleman/middleman) - Middleman is a static site generator using all the shortcuts and tools in modern web development. - `#Ruby` -* [Metalsmith](https://github.com/segmentio/metalsmith) - An extremely simple, pluggable static site generator. - `#JavaScript` `#Node.js` * [DocPad](https://github.com/docpad/docpad) - `#JavaScript` `#CoffeeScript` `#Node.js` +* [Flask-Frozen](https://github.com/SimonSapin/Frozen-Flask) - Freezes a Flask application into a set of static files. - `#Python` `#Flask` * [Hugo](https://github.com/spf13/hugo) - It is optimized for speed, easy use and configurability. - `#Go` +* [LambdaPad](https://github.com/gar1t/lambdapad) - `#Erlang` +* [Metalsmith](https://github.com/segmentio/metalsmith) - An extremely simple, pluggable static site generator. - `#JavaScript` `#Node.js` +* [MiddleMan](https://github.com/middleman/middleman) - Middleman is a static site generator using all the shortcuts and tools in modern web development. - `#Ruby` +* [nanoc](https://github.com/nanoc/nanoc) - Felxiable support for small personal to large corporate web sites. - `#Ruby` +* [Sculpin](https://github.com/sculpin/sculpin) - `#PHP` +* [Sitegen](https://github.com/leafo/sitegen) - `#Lua` `#MoonScript` * [Tags](https://github.com/braceio/tags) - `#Python` * [Wintersmith](https://github.com/jnordberg/wintersmith) - `#JavaScript` `#Node.js` * [yst](https://github.com/jgm/yst) - Powered by YAML. - `#Haskell` -* [nanoc](https://github.com/nanoc/nanoc) - Felxiable support for small personal to large corporate web sites. - `#Ruby` -* [LambdaPad](https://github.com/gar1t/lambdapad) - `#Erlang` -* [Sculpin](https://github.com/sculpin/sculpin) - `#PHP` -* [Sitegen](https://github.com/leafo/sitegen) - `#Lua` `#MoonScript` Helpful Tools and Services -------------------------- -* [Brace Forms](https://forms.brace.io/) - Adds functional forms to your static web sites. * [Brace Charts](http://charts.brace.io/) - Creats svg based charts for your static web sites. +* [Brace Forms](https://forms.brace.io/) - Adds functional forms to your static web sites. * [git-annex](http://git-annex.branchable.com/tips/setup_a_public_repository_on_a_web_site/) - Configure git-annex for a public repository for a static web site. ### Deploy @@ -63,20 +63,20 @@ Helpful Tools and Services Static Web Site Generators in Other Awesome Lists ------------------------------------------------- -* [vinta/awesome-python - Static Site Generators](https://github.com/vinta/awesome-python#static-site-generator) -* [ziadoz/awesome-php - Static Site Generators](https://github.com/ziadoz/awesome-php#static-site-generators) -* [sindresorhus/awesome-nodejs - Static Site Generators](https://github.com/sindresorhus/awesome-nodejs#static-site-generators) -* [markets/awesome-ruby - Static Site Generators](https://github.com/markets/awesome-ruby#static-site-generation) -* [Sdogruyol/awesome-ruby - Static Page Generation](https://github.com/Sdogruyol/awesome-ruby#static-page-generation) +* [forhappy/awesome-lua - Static Site Generator](https://github.com/forhappy/awesome-lua#static-site-generator) * [h4cc/awesome-elixir - Static Page Generation](https://github.com/h4cc/awesome-elixir#static-page-generation) * [kdabir/awesome-groovy - Static Web](https://github.com/kdabir/awesome-groovy#static-web) -* [forhappy/awesome-lua - Static Site Generator](https://github.com/forhappy/awesome-lua#static-site-generator) +* [markets/awesome-ruby - Static Site Generators](https://github.com/markets/awesome-ruby#static-site-generation) +* [Sdogruyol/awesome-ruby - Static Page Generation](https://github.com/Sdogruyol/awesome-ruby#static-page-generation) +* [sindresorhus/awesome-nodejs - Static Site Generators](https://github.com/sindresorhus/awesome-nodejs#static-site-generators) +* [vinta/awesome-python - Static Site Generators](https://github.com/vinta/awesome-python#static-site-generator) +* [ziadoz/awesome-php - Static Site Generators](https://github.com/ziadoz/awesome-php#static-site-generators) Other Lists of Static Web Site Geneartors ----------------------------------------- -* [StaticGen](https://www.staticgen.com/) * [Static Site Generators](http://staticsitegenerators.net/) +* [StaticGen](https://www.staticgen.com/) Related Awesome --------------- @@ -84,7 +84,7 @@ Related Awesome Awesome lists that help you with your new static web site. * [Awesome Bootstrap](https://github.com/therebelrobot/awesome-bootstrap) - A curated list of free Bootstrap themes. +* [Awesome HTML5](https://github.com/diegocard/awesome-html5) +* [Awesome Images](https://github.com/heyalexej/awesome-images) - A curated list of amazingly awesome free (stock) photo resources. * [Creative Commons Media](https://github.com/shime/creative-commons-media) - A curated list of resources that provide media licensed under Creative Commons licenses. * [Frontend Development](https://github.com/dypsilon/frontend-dev-bookmarks) -* [Awesome Images](https://github.com/heyalexej/awesome-images) - A curated list of amazingly awesome free (stock) photo resources. -* [Awesome HTML5](https://github.com/diegocard/awesome-html5) diff --git a/sort.py b/sort.py new file mode 100644 index 0000000..6a4f9e0 --- /dev/null +++ b/sort.py @@ -0,0 +1,52 @@ +# coding: utf-8 + +""" +FROM: + +The approach taken is explained below. I decided to do it simply. +Initially I was considering parsing the data into some sort of +structure and then generating an appropriate README. I am still +considering doing it - but for now this should work. The only issue +I see is that it only sorts the entries at the lowest level, and that +the order of the top-level contents do not match the order of the actual +entries. + +This could be extended by having nested blocks, sorting them recursively +and flattening the end structure into a list of lines. Revision 2 maybe ^.^. +""" + + +def main(): + # First, we load the current README into memory as an array of lines + with open('README.md', 'r') as read_me_file: + read_me = read_me_file.readlines() + + # Then we cluster the lines together as blocks + # Each block represents a collection of lines that should be sorted + # This was done by assuming only links ([...](...)) are meant to be sorted + # Clustering is done by indentation + blocks = [] + last_indent = None + for line in read_me: + s_line = line.lstrip() + indent = len(line) - len(s_line) + + if any([s_line.startswith(s) for s in ['* [', '- [']]): + if indent == last_indent: + blocks[-1].append(line) + else: + blocks.append([line]) + last_indent = indent + else: + blocks.append([line]) + last_indent = None + + with open('README.md', 'w+') as sorted_file: + # Then all of the blocks are sorted individually + blocks = [''.join(sorted(block, key=lambda s: s.lower())) for block in blocks] + # And the result is written back to README.md + sorted_file.write(''.join(blocks)) + + +if __name__ == "__main__": + main()