<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Little Fighter Empire - Forums - Programming]]></title>
		<link>https://lf-empire.de/forum/</link>
		<description><![CDATA[Little Fighter Empire - Forums - https://lf-empire.de/forum]]></description>
		<pubDate>Tue, 26 May 2026 15:06:46 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[VioletScript]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=11294</link>
			<pubDate>Tue, 03 Jan 2023 20:00:28 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=5443">Hydroper</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=11294</guid>
			<description><![CDATA[Hey, a long time I've been off this forum! Happy new year! I'm coming to announce a project I started in 2017, a scripting language that is an EcmaScript dialect.<br />
<br />
The compiler is not yet ready, sadly. But I want to show the available overview and reference for the language: <br />
<br />
<a href="https://violetscript.github.io" target="_blank" rel="noopener" class="mycode_url">website</a><br />
<br />
Here are particular features I like:<br />
<br />
<a href="https://violetscript.github.io/docs/language_reference/types/enumeration_types.html" target="_blank" rel="noopener" class="mycode_url">enumerations</a><br />
<a href="https://violetscript.github.io/docs/language_reference/types/record_types.html" target="_blank" rel="noopener" class="mycode_url">record types</a><br />
<a href="https://violetscript.github.io/docs/language_reference/exp/markup.html" target="_blank" rel="noopener" class="mycode_url">markup</a>]]></description>
			<content:encoded><![CDATA[Hey, a long time I've been off this forum! Happy new year! I'm coming to announce a project I started in 2017, a scripting language that is an EcmaScript dialect.<br />
<br />
The compiler is not yet ready, sadly. But I want to show the available overview and reference for the language: <br />
<br />
<a href="https://violetscript.github.io" target="_blank" rel="noopener" class="mycode_url">website</a><br />
<br />
Here are particular features I like:<br />
<br />
<a href="https://violetscript.github.io/docs/language_reference/types/enumeration_types.html" target="_blank" rel="noopener" class="mycode_url">enumerations</a><br />
<a href="https://violetscript.github.io/docs/language_reference/types/record_types.html" target="_blank" rel="noopener" class="mycode_url">record types</a><br />
<a href="https://violetscript.github.io/docs/language_reference/exp/markup.html" target="_blank" rel="noopener" class="mycode_url">markup</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Fixing Grammar]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=11073</link>
			<pubDate>Sat, 13 Jun 2020 01:50:38 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=1603">LutiChris</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=11073</guid>
			<description><![CDATA[My Goal is to take the words in the dictionary &amp; attribute them to x amount of groups. Each of the groups has its own words &amp; sub-groups based on a shared characteristic<br />
<br />
The problem that I'm having is when a specific group is chosen &amp; the contents (i.e. the other sub-groups) are chosen the output reveals poor grammar. I have to manually adjust the word so it fits correctly and this is annoying. Is there a way I can get proper grammar structure from a randomly generated combination of words? Is it possible to organize these words in a proper sentence based on "Parts of Speech" (i.e Adjectives, Adverbs, Conjunctions, Determiners, Nouns, Prepositions, Pronouns &amp; Verbs)<br />
<br />
Here's an Example:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>BAD SENTENCE STRUCTURE<br />
Group 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group 8<br />
I AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extremist (noun)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Annoy (verb)<br />
<br />
<br />
GOOD SENTENCE STRUCTURE<br />
Group 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group 8<br />
I AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extremely (adjective)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Annoying (adjective)</code></div></div><br />
"I AM + Annoying (adj) + Extremely (adj)" wouldn't make much sense unless it was<br />
"I AM + Annoying (adj) + Extremists (plural noun)" <br />
<br />
These were some neat ideas I found on youtube regarding Predictive Text<br />
<div class="tborder spoiler"><div class="spoiler_header">Videos <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Click to View)';this.parentNode.className = 'spoiler_header';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Click to Hide)';;this.parentNode.className += ' spoiler_header_cornered';}">(Click to View)</a></div><div class="spoiler_body" style="display: none;">
Some of the parts aren't included because I didn't find them to be particularly interesting but they're up on the guys channel.<br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/nzWwWXdeweg" frameborder="0" allowfullscreen></iframe><br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/bFrjlRDyWQM" frameborder="0" allowfullscreen></iframe><br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/5Vf-p7FiQqY" frameborder="0" allowfullscreen></iframe><br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/s509p6inP0E" frameborder="0" allowfullscreen></iframe></div></div>
Any suggestions?]]></description>
			<content:encoded><![CDATA[My Goal is to take the words in the dictionary &amp; attribute them to x amount of groups. Each of the groups has its own words &amp; sub-groups based on a shared characteristic<br />
<br />
The problem that I'm having is when a specific group is chosen &amp; the contents (i.e. the other sub-groups) are chosen the output reveals poor grammar. I have to manually adjust the word so it fits correctly and this is annoying. Is there a way I can get proper grammar structure from a randomly generated combination of words? Is it possible to organize these words in a proper sentence based on "Parts of Speech" (i.e Adjectives, Adverbs, Conjunctions, Determiners, Nouns, Prepositions, Pronouns &amp; Verbs)<br />
<br />
Here's an Example:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>BAD SENTENCE STRUCTURE<br />
Group 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group 8<br />
I AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extremist (noun)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Annoy (verb)<br />
<br />
<br />
GOOD SENTENCE STRUCTURE<br />
Group 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group 8<br />
I AM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extremely (adjective)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Annoying (adjective)</code></div></div><br />
"I AM + Annoying (adj) + Extremely (adj)" wouldn't make much sense unless it was<br />
"I AM + Annoying (adj) + Extremists (plural noun)" <br />
<br />
These were some neat ideas I found on youtube regarding Predictive Text<br />
<div class="tborder spoiler"><div class="spoiler_header">Videos <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Click to View)';this.parentNode.className = 'spoiler_header';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Click to Hide)';;this.parentNode.className += ' spoiler_header_cornered';}">(Click to View)</a></div><div class="spoiler_body" style="display: none;">
Some of the parts aren't included because I didn't find them to be particularly interesting but they're up on the guys channel.<br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/nzWwWXdeweg" frameborder="0" allowfullscreen></iframe><br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/bFrjlRDyWQM" frameborder="0" allowfullscreen></iframe><br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/5Vf-p7FiQqY" frameborder="0" allowfullscreen></iframe><br />
<iframe width="560" height="315" src="https://www.youtube.com/embed/s509p6inP0E" frameborder="0" allowfullscreen></iframe></div></div>
Any suggestions?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[LF on Linux]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10943</link>
			<pubDate>Mon, 19 Nov 2018 05:42:43 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=6294">JohnGURPS</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10943</guid>
			<description><![CDATA[I use Lubuntu, a Ubuntu-based Linux OS. Would anyone know where I can find a version of the guide and 4 games which work for me?]]></description>
			<content:encoded><![CDATA[I use Lubuntu, a Ubuntu-based Linux OS. Would anyone know where I can find a version of the guide and 4 games which work for me?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Magica - A template for integrated online game platform]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10857</link>
			<pubDate>Thu, 24 May 2018 16:16:35 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=4488">rewlf2</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10857</guid>
			<description><![CDATA[Hello.<br />
<br />
I recently decided to work slowly (I mean really slowly) on making an incremental online game that features 2D acolytes using spells to go adventuring, and I chose Phaser.io for the platform.<br />
<br />
After some amount of tackling I made a simple but rigid template that uses Websocket and reads MySQL database. This can be used to develop offline game (if you leave out MySQL) or literally any 2D game you can imagine. However the more complex logic including keystrokes, mouse actions and physics are not implemented. I focused on the tricky Text fields and Sockets, if someone wants to develop a game out of it, he/she should find it more straightforward to do.<br />
<br />
Mind that Magica is built upon ES6 Javascript and requires Node.js installed in your computer to properly build and run.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/rewlf2/magica_phaser_template" target="_blank" rel="noopener" class="mycode_url">https://github.com/rewlf2/magica_phaser_template</a></span><br />
<br />
<img src="https://i.imgur.com/62YqvLk.png" alt="[Image: 62YqvLk.png]" class="mycode_img" /><br />
<br />
If you wish to develop a game starting from this template, feel free to contact me by Discord and I suggest you go learn about how <a href="http://phaser.io" target="_blank" rel="noopener" class="mycode_url">Phaser.io</a> works and also read about how WebSocket works.<br />
<br />
For websockets, <a href="http://www.gojasonyang.com/" target="_blank" rel="noopener" class="mycode_url">http://www.gojasonyang.com/</a> is definitely a great help.]]></description>
			<content:encoded><![CDATA[Hello.<br />
<br />
I recently decided to work slowly (I mean really slowly) on making an incremental online game that features 2D acolytes using spells to go adventuring, and I chose Phaser.io for the platform.<br />
<br />
After some amount of tackling I made a simple but rigid template that uses Websocket and reads MySQL database. This can be used to develop offline game (if you leave out MySQL) or literally any 2D game you can imagine. However the more complex logic including keystrokes, mouse actions and physics are not implemented. I focused on the tricky Text fields and Sockets, if someone wants to develop a game out of it, he/she should find it more straightforward to do.<br />
<br />
Mind that Magica is built upon ES6 Javascript and requires Node.js installed in your computer to properly build and run.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/rewlf2/magica_phaser_template" target="_blank" rel="noopener" class="mycode_url">https://github.com/rewlf2/magica_phaser_template</a></span><br />
<br />
<img src="https://i.imgur.com/62YqvLk.png" alt="[Image: 62YqvLk.png]" class="mycode_img" /><br />
<br />
If you wish to develop a game starting from this template, feel free to contact me by Discord and I suggest you go learn about how <a href="http://phaser.io" target="_blank" rel="noopener" class="mycode_url">Phaser.io</a> works and also read about how WebSocket works.<br />
<br />
For websockets, <a href="http://www.gojasonyang.com/" target="_blank" rel="noopener" class="mycode_url">http://www.gojasonyang.com/</a> is definitely a great help.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[C# (C sharp)]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10779</link>
			<pubDate>Fri, 01 Dec 2017 18:07:45 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=5612">Hate</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10779</guid>
			<description><![CDATA[We have started Oriented Objects programming this semester, and I need help getting started on C#.<br />
<br />
1- how to build a constructor that builds an object of a class that has constant attributes. (pls write code)<br />
2- is there any good C# compilers (other than visual studio) out there? heard there's a plugin for Eclipse to do that. please tell me how to install it.<br />
3- Anything to tell me.<br />
4-thanks.<br />
<br />
<br />
<br />
<br />
Also, Hi everyone!]]></description>
			<content:encoded><![CDATA[We have started Oriented Objects programming this semester, and I need help getting started on C#.<br />
<br />
1- how to build a constructor that builds an object of a class that has constant attributes. (pls write code)<br />
2- is there any good C# compilers (other than visual studio) out there? heard there's a plugin for Eclipse to do that. please tell me how to install it.<br />
3- Anything to tell me.<br />
4-thanks.<br />
<br />
<br />
<br />
<br />
Also, Hi everyone!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Help in simple file input output program]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10584</link>
			<pubDate>Thu, 08 Dec 2016 14:43:33 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=4523">InPhiKnight</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10584</guid>
			<description><![CDATA[The program adds, display, edit aand deletes records from a binary file.<br />
Well the compiler shuts down as soon as I run the program <a href="https://www.sendspace.com/file/nfy3h9" target="_blank" rel="noopener" class="mycode_url">https://www.sendspace.com/file/nfy3h9</a><br />
<br />
Can someone tell me why it ain't working and fix the error?  Need for school assignment. Yelp! asap]]></description>
			<content:encoded><![CDATA[The program adds, display, edit aand deletes records from a binary file.<br />
Well the compiler shuts down as soon as I run the program <a href="https://www.sendspace.com/file/nfy3h9" target="_blank" rel="noopener" class="mycode_url">https://www.sendspace.com/file/nfy3h9</a><br />
<br />
Can someone tell me why it ain't working and fix the error?  Need for school assignment. Yelp! asap]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Arya - Roguelite Platformer basis]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10532</link>
			<pubDate>Wed, 21 Sep 2016 22:10:40 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=1084">Gad</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10532</guid>
			<description><![CDATA[-- content removed --]]></description>
			<content:encoded><![CDATA[-- content removed --]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[kairu's junkyard]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10525</link>
			<pubDate>Tue, 13 Sep 2016 08:40:14 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=5884">kairunotabi</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10525</guid>
			<description><![CDATA[deleted]]></description>
			<content:encoded><![CDATA[deleted]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Batch Processing Images: Conversion between RGB and Indexed]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10521</link>
			<pubDate>Sat, 10 Sep 2016 14:50:20 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=4900">NightmareX1337</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10521</guid>
			<description><![CDATA[So I had to convert a lot of files from RGB to Indexed pixel format (in order to make them compressed) and doing this by hand is way too tedious. I gathered some python scripts and made few trivial yet useful plugins for Gimp 2 out of it.<br />
In order to use them you need to save these into a file (ex: "batch-convert-indexed.py") and then copy it to Gimp's plugin directory. Plugin path will probably vary between systems but it should be similar to "C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins" or so.<br />
The last one is a standalone script for erasing color space information on bmp files, it may come in handy at times -since LF2 can't read sprites if color space info is present, sigh...<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align">
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Screenshots</span></span><br />
<img src="http://i51.photobucket.com/albums/f358/NightmareX1337/2016-09-10%2015_27_58-Greenshot_zpsdcnzuyrc.png" alt="[Image: 2016-09-10%2015_27_58-Greenshot_zpsdcnzuyrc.png]" class="mycode_img" /><br />
<img src="http://i51.photobucket.com/albums/f358/NightmareX1337/2016-09-10%2015_25_56-python-fu-batch_convert_indexed_zps6tfdiwgg.png" alt="[Image: 2016-09-10%2015_25_56-python-fu-batch_co...fdiwgg.png]" class="mycode_img" /></div>
<br />
<br />
<span style="color: #ff0000;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Warning</span></span></span><br />
Gimp automatically creates best color palette for images but it may change absolute black areas' color code of some images (particularly pixel based transparent images) which makes LF2 render sprites including black areas. It's highy recommended to <span style="font-weight: bold;" class="mycode_b">back up your sprite folder before proceeding</span>.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">batch-convert-indexed.py</span><br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;PYTHON-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="python" style="font-family&#58;monospace;"><span style="color&#58; #808080; font-style&#58; italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #dc143c;">math</span>, <span style="color&#58; #dc143c;">glob</span>, <span style="color&#58; #dc143c;">struct</span>
<span style="color&#58; #ff7700;font-weight&#58;bold;">from</span> gimpfu <span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #66cc66;">*</span>
&nbsp;
<span style="color&#58; #dc143c;">gettext</span>&#46;<span style="color&#58; black;">install</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;gimp20-python&quot;</span>, gimp&#46;<span style="color&#58; black;">locale&#95;directory</span>, <span style="color&#58; #008000;">unicode</span>=<span style="color&#58; #008000;">True</span><span style="color&#58; black;">&#41;</span>
&nbsp;
V4&#95;HEADER&#95;SIZE = <span style="color&#58; #ff4500;">108</span>
COLOR&#95;INFO&#95;SIZE = <span style="color&#58; #ff4500;">68</span>
HEADER&#95;OFF = <span style="color&#58; #ff4500;">14</span>
DATA&#95;OFF&#95;FIELD = <span style="color&#58; #ff4500;">10</span>
SIZE&#95;OFF = <span style="color&#58; #ff4500;">2</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, new&#95;bmp&#95;name=<span style="color&#58; #008000;">None</span><span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> new&#95;bmp&#95;name <span style="color&#58; #ff7700;font-weight&#58;bold;">is</span> <span style="color&#58; #008000;">None</span>&#58;
		new&#95;bmp&#95;name = old&#95;bmp&#95;name
	data = bytearray<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;rb&quot;</span><span style="color&#58; black;">&#41;</span>&#46;<span style="color&#58; black;">read</span><span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	header&#95;size = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span>
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> header&#95;size == <span style="color&#58; #ff4500;">108</span>&#58;
		<span style="color&#58; #808080; font-style&#58; italic;"># Remove 68	 - the size for the extra data-chunk from both headers</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, V4&#95;HEADER&#95;SIZE - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,
			<span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span> - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #808080; font-style&#58; italic;"># Offset image data&#58;</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size - COLOR&#95;INFO&#95;SIZE&#58;<span style="color&#58; black;">&#93;</span> = data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size&#58;<span style="color&#58; black;">&#93;</span>
		data<span style="color&#58; black;">&#91;</span>SIZE&#95;OFF&#58; SIZE&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, <span style="color&#58; #008000;">len</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	with <span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>new&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;wb&quot;</span><span style="color&#58; black;">&#41;</span> as output&#95;file&#58;
		output&#95;file&#46;<span style="color&#58; black;">write</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> batch&#95;convert&#95;indexed<span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">for</span> <span style="color&#58; #008000;">file</span> <span style="color&#58; #ff7700;font-weight&#58;bold;">in</span> <span style="color&#58; #dc143c;">glob</span>&#46;<span style="color&#58; #dc143c;">glob</span><span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
		image = <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;file&#95;load</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span>, RUN&#95;NONINTERACTIVE<span style="color&#58; black;">&#41;</span>
		drawable = <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;get&#95;active&#95;layer</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;base&#95;type</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span> <span style="color&#58; #66cc66;">!</span>= INDEXED&#58;
			<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;convert&#95;indexed</span><span style="color&#58; black;">&#40;</span>image, NO&#95;DITHER, MAKE&#95;PALETTE, <span style="color&#58; #ff4500;">256</span>, <span style="color&#58; #008000;">False</span>, <span style="color&#58; #008000;">True</span>, <span style="color&#58; #483d8b;">&quot;&quot;</span><span style="color&#58; black;">&#41;</span>
			<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;file&#95;save</span><span style="color&#58; black;">&#40;</span>image, drawable, <span style="color&#58; #008000;">file</span>, <span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;delete</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
		strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
&nbsp;
register<span style="color&#58; black;">&#40;</span>
        <span style="color&#58; #483d8b;">&quot;batch&#95;convert&#95;indexed&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;Batch process files and convert to indexed color palette&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;Batch process files and convert to indexed color palette&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;2016&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;&lt;Toolbox&gt;/LF2 Tools/Batch Convert &#95;Indexed&#46;&#46;&#46;&quot;</span>,
        <span style="color&#58; #008000;">None</span>,
        <span style="color&#58; black;">&#91;</span>
                <span style="color&#58; black;">&#40;</span>PF&#95;STRING, <span style="color&#58; #483d8b;">&quot;pattern&quot;</span>, <span style="color&#58; #483d8b;">&quot;File Glob&quot;</span>, <span style="color&#58; #483d8b;">&quot;*&#46;bmp&quot;</span><span style="color&#58; black;">&#41;</span>
        <span style="color&#58; black;">&#93;</span>,
        <span style="color&#58; black;">&#91;</span><span style="color&#58; black;">&#93;</span>,
        batch&#95;convert&#95;indexed<span style="color&#58; black;">&#41;</span>
&nbsp;
main<span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<span style="font-weight: bold;" class="mycode_b">batch-convert-rgb.py</span><br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;PYTHON-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="python" style="font-family&#58;monospace;"><span style="color&#58; #808080; font-style&#58; italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #dc143c;">math</span>, <span style="color&#58; #dc143c;">glob</span>, <span style="color&#58; #dc143c;">struct</span>
<span style="color&#58; #ff7700;font-weight&#58;bold;">from</span> gimpfu <span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #66cc66;">*</span>
&nbsp;
<span style="color&#58; #dc143c;">gettext</span>&#46;<span style="color&#58; black;">install</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;gimp20-python&quot;</span>, gimp&#46;<span style="color&#58; black;">locale&#95;directory</span>, <span style="color&#58; #008000;">unicode</span>=<span style="color&#58; #008000;">True</span><span style="color&#58; black;">&#41;</span>
&nbsp;
V4&#95;HEADER&#95;SIZE = <span style="color&#58; #ff4500;">108</span>
COLOR&#95;INFO&#95;SIZE = <span style="color&#58; #ff4500;">68</span>
HEADER&#95;OFF = <span style="color&#58; #ff4500;">14</span>
DATA&#95;OFF&#95;FIELD = <span style="color&#58; #ff4500;">10</span>
SIZE&#95;OFF = <span style="color&#58; #ff4500;">2</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, new&#95;bmp&#95;name=<span style="color&#58; #008000;">None</span><span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> new&#95;bmp&#95;name <span style="color&#58; #ff7700;font-weight&#58;bold;">is</span> <span style="color&#58; #008000;">None</span>&#58;
		new&#95;bmp&#95;name = old&#95;bmp&#95;name
	data = bytearray<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;rb&quot;</span><span style="color&#58; black;">&#41;</span>&#46;<span style="color&#58; black;">read</span><span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	header&#95;size = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span>
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> header&#95;size == <span style="color&#58; #ff4500;">108</span>&#58;
		<span style="color&#58; #808080; font-style&#58; italic;"># Remove 68	 - the size for the extra data-chunk from both headers</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, V4&#95;HEADER&#95;SIZE - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,
			<span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span> - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #808080; font-style&#58; italic;"># Offset image data&#58;</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size - COLOR&#95;INFO&#95;SIZE&#58;<span style="color&#58; black;">&#93;</span> = data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size&#58;<span style="color&#58; black;">&#93;</span>
		data<span style="color&#58; black;">&#91;</span>SIZE&#95;OFF&#58; SIZE&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, <span style="color&#58; #008000;">len</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	with <span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>new&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;wb&quot;</span><span style="color&#58; black;">&#41;</span> as output&#95;file&#58;
		output&#95;file&#46;<span style="color&#58; black;">write</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> batch&#95;convert&#95;rgb<span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">for</span> <span style="color&#58; #008000;">file</span> <span style="color&#58; #ff7700;font-weight&#58;bold;">in</span> <span style="color&#58; #dc143c;">glob</span>&#46;<span style="color&#58; #dc143c;">glob</span><span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
		image = <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;file&#95;load</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span>, RUN&#95;NONINTERACTIVE<span style="color&#58; black;">&#41;</span>
		drawable = <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;get&#95;active&#95;layer</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;base&#95;type</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span> <span style="color&#58; #66cc66;">!</span>= RGB&#58;
			<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;convert&#95;rgb</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
			<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;file&#95;save</span><span style="color&#58; black;">&#40;</span>image, drawable, <span style="color&#58; #008000;">file</span>, <span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;delete</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
		strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
&nbsp;
register<span style="color&#58; black;">&#40;</span>
		<span style="color&#58; #483d8b;">&quot;batch&#95;convert&#95;rgb&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;Batch process files and convert to RGB color palette&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;Batch process files and convert to RGB color palette&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;2016&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;&lt;Toolbox&gt;/LF2 Tools/Batch Convert &#95;RGB&#46;&#46;&#46;&quot;</span>,
		<span style="color&#58; #008000;">None</span>,
		<span style="color&#58; black;">&#91;</span>
				<span style="color&#58; black;">&#40;</span>PF&#95;STRING, <span style="color&#58; #483d8b;">&quot;pattern&quot;</span>, <span style="color&#58; #483d8b;">&quot;File Glob&quot;</span>, <span style="color&#58; #483d8b;">&quot;*&#46;bmp&quot;</span><span style="color&#58; black;">&#41;</span>
		<span style="color&#58; black;">&#93;</span>,
		<span style="color&#58; black;">&#91;</span><span style="color&#58; black;">&#93;</span>,
		batch&#95;convert&#95;rgb<span style="color&#58; black;">&#41;</span>
&nbsp;
main<span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<span style="font-weight: bold;" class="mycode_b">batch-strip-color-space-info.py</span><br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;PYTHON-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="python" style="font-family&#58;monospace;"><span style="color&#58; #808080; font-style&#58; italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #dc143c;">math</span>, <span style="color&#58; #dc143c;">glob</span>, <span style="color&#58; #dc143c;">struct</span>
<span style="color&#58; #ff7700;font-weight&#58;bold;">from</span> gimpfu <span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #66cc66;">*</span>
&nbsp;
<span style="color&#58; #dc143c;">gettext</span>&#46;<span style="color&#58; black;">install</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;gimp20-python&quot;</span>, gimp&#46;<span style="color&#58; black;">locale&#95;directory</span>, <span style="color&#58; #008000;">unicode</span>=<span style="color&#58; #008000;">True</span><span style="color&#58; black;">&#41;</span>
&nbsp;
V4&#95;HEADER&#95;SIZE = <span style="color&#58; #ff4500;">108</span>
COLOR&#95;INFO&#95;SIZE = <span style="color&#58; #ff4500;">68</span>
HEADER&#95;OFF = <span style="color&#58; #ff4500;">14</span>
DATA&#95;OFF&#95;FIELD = <span style="color&#58; #ff4500;">10</span>
SIZE&#95;OFF = <span style="color&#58; #ff4500;">2</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, new&#95;bmp&#95;name=<span style="color&#58; #008000;">None</span><span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> new&#95;bmp&#95;name <span style="color&#58; #ff7700;font-weight&#58;bold;">is</span> <span style="color&#58; #008000;">None</span>&#58;
		new&#95;bmp&#95;name = old&#95;bmp&#95;name
	data = bytearray<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;rb&quot;</span><span style="color&#58; black;">&#41;</span>&#46;<span style="color&#58; black;">read</span><span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	header&#95;size = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span>
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> header&#95;size == <span style="color&#58; #ff4500;">108</span>&#58;
		<span style="color&#58; #808080; font-style&#58; italic;"># Remove 68	 - the size for the extra data-chunk from both headers</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, V4&#95;HEADER&#95;SIZE - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,
			<span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span> - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #808080; font-style&#58; italic;"># Offset image data&#58;</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size - COLOR&#95;INFO&#95;SIZE&#58;<span style="color&#58; black;">&#93;</span> = data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size&#58;<span style="color&#58; black;">&#93;</span>
		data<span style="color&#58; black;">&#91;</span>SIZE&#95;OFF&#58; SIZE&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, <span style="color&#58; #008000;">len</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	with <span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>new&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;wb&quot;</span><span style="color&#58; black;">&#41;</span> as output&#95;file&#58;
		output&#95;file&#46;<span style="color&#58; black;">write</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> batch&#95;strip&#95;color&#95;space&#95;info<span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">for</span> <span style="color&#58; #008000;">file</span> <span style="color&#58; #ff7700;font-weight&#58;bold;">in</span> <span style="color&#58; #dc143c;">glob</span>&#46;<span style="color&#58; #dc143c;">glob</span><span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
		strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
&nbsp;
register<span style="color&#58; black;">&#40;</span>
        <span style="color&#58; #483d8b;">&quot;batch&#95;strip&#95;color&#95;space&#95;info&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;Batch process files and strip color space informations&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;Batch process files and strip color space informations&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;2016&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;&lt;Toolbox&gt;/LF2 Tools/Batch &#95;Strip Color Space Info&#46;&#46;&#46;&quot;</span>,
        <span style="color&#58; #008000;">None</span>,
        <span style="color&#58; black;">&#91;</span>
                <span style="color&#58; black;">&#40;</span>PF&#95;STRING, <span style="color&#58; #483d8b;">&quot;pattern&quot;</span>, <span style="color&#58; #483d8b;">&quot;File Glob&quot;</span>, <span style="color&#58; #483d8b;">&quot;*&#46;bmp&quot;</span><span style="color&#58; black;">&#41;</span>
        <span style="color&#58; black;">&#93;</span>,
        <span style="color&#58; black;">&#91;</span><span style="color&#58; black;">&#93;</span>,
        batch&#95;strip&#95;color&#95;space&#95;info<span style="color&#58; black;">&#41;</span>
&nbsp;
main<span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br />
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br />
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br />
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />
SOFTWARE.]]></description>
			<content:encoded><![CDATA[So I had to convert a lot of files from RGB to Indexed pixel format (in order to make them compressed) and doing this by hand is way too tedious. I gathered some python scripts and made few trivial yet useful plugins for Gimp 2 out of it.<br />
In order to use them you need to save these into a file (ex: "batch-convert-indexed.py") and then copy it to Gimp's plugin directory. Plugin path will probably vary between systems but it should be similar to "C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins" or so.<br />
The last one is a standalone script for erasing color space information on bmp files, it may come in handy at times -since LF2 can't read sprites if color space info is present, sigh...<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align">
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Screenshots</span></span><br />
<img src="http://i51.photobucket.com/albums/f358/NightmareX1337/2016-09-10%2015_27_58-Greenshot_zpsdcnzuyrc.png" alt="[Image: 2016-09-10%2015_27_58-Greenshot_zpsdcnzuyrc.png]" class="mycode_img" /><br />
<img src="http://i51.photobucket.com/albums/f358/NightmareX1337/2016-09-10%2015_25_56-python-fu-batch_convert_indexed_zps6tfdiwgg.png" alt="[Image: 2016-09-10%2015_25_56-python-fu-batch_co...fdiwgg.png]" class="mycode_img" /></div>
<br />
<br />
<span style="color: #ff0000;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Warning</span></span></span><br />
Gimp automatically creates best color palette for images but it may change absolute black areas' color code of some images (particularly pixel based transparent images) which makes LF2 render sprites including black areas. It's highy recommended to <span style="font-weight: bold;" class="mycode_b">back up your sprite folder before proceeding</span>.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">batch-convert-indexed.py</span><br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;PYTHON-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="python" style="font-family&#58;monospace;"><span style="color&#58; #808080; font-style&#58; italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #dc143c;">math</span>, <span style="color&#58; #dc143c;">glob</span>, <span style="color&#58; #dc143c;">struct</span>
<span style="color&#58; #ff7700;font-weight&#58;bold;">from</span> gimpfu <span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #66cc66;">*</span>
&nbsp;
<span style="color&#58; #dc143c;">gettext</span>&#46;<span style="color&#58; black;">install</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;gimp20-python&quot;</span>, gimp&#46;<span style="color&#58; black;">locale&#95;directory</span>, <span style="color&#58; #008000;">unicode</span>=<span style="color&#58; #008000;">True</span><span style="color&#58; black;">&#41;</span>
&nbsp;
V4&#95;HEADER&#95;SIZE = <span style="color&#58; #ff4500;">108</span>
COLOR&#95;INFO&#95;SIZE = <span style="color&#58; #ff4500;">68</span>
HEADER&#95;OFF = <span style="color&#58; #ff4500;">14</span>
DATA&#95;OFF&#95;FIELD = <span style="color&#58; #ff4500;">10</span>
SIZE&#95;OFF = <span style="color&#58; #ff4500;">2</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, new&#95;bmp&#95;name=<span style="color&#58; #008000;">None</span><span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> new&#95;bmp&#95;name <span style="color&#58; #ff7700;font-weight&#58;bold;">is</span> <span style="color&#58; #008000;">None</span>&#58;
		new&#95;bmp&#95;name = old&#95;bmp&#95;name
	data = bytearray<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;rb&quot;</span><span style="color&#58; black;">&#41;</span>&#46;<span style="color&#58; black;">read</span><span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	header&#95;size = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span>
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> header&#95;size == <span style="color&#58; #ff4500;">108</span>&#58;
		<span style="color&#58; #808080; font-style&#58; italic;"># Remove 68	 - the size for the extra data-chunk from both headers</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, V4&#95;HEADER&#95;SIZE - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,
			<span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span> - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #808080; font-style&#58; italic;"># Offset image data&#58;</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size - COLOR&#95;INFO&#95;SIZE&#58;<span style="color&#58; black;">&#93;</span> = data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size&#58;<span style="color&#58; black;">&#93;</span>
		data<span style="color&#58; black;">&#91;</span>SIZE&#95;OFF&#58; SIZE&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, <span style="color&#58; #008000;">len</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	with <span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>new&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;wb&quot;</span><span style="color&#58; black;">&#41;</span> as output&#95;file&#58;
		output&#95;file&#46;<span style="color&#58; black;">write</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> batch&#95;convert&#95;indexed<span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">for</span> <span style="color&#58; #008000;">file</span> <span style="color&#58; #ff7700;font-weight&#58;bold;">in</span> <span style="color&#58; #dc143c;">glob</span>&#46;<span style="color&#58; #dc143c;">glob</span><span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
		image = <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;file&#95;load</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span>, RUN&#95;NONINTERACTIVE<span style="color&#58; black;">&#41;</span>
		drawable = <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;get&#95;active&#95;layer</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;base&#95;type</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span> <span style="color&#58; #66cc66;">!</span>= INDEXED&#58;
			<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;convert&#95;indexed</span><span style="color&#58; black;">&#40;</span>image, NO&#95;DITHER, MAKE&#95;PALETTE, <span style="color&#58; #ff4500;">256</span>, <span style="color&#58; #008000;">False</span>, <span style="color&#58; #008000;">True</span>, <span style="color&#58; #483d8b;">&quot;&quot;</span><span style="color&#58; black;">&#41;</span>
			<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;file&#95;save</span><span style="color&#58; black;">&#40;</span>image, drawable, <span style="color&#58; #008000;">file</span>, <span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;delete</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
		strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
&nbsp;
register<span style="color&#58; black;">&#40;</span>
        <span style="color&#58; #483d8b;">&quot;batch&#95;convert&#95;indexed&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;Batch process files and convert to indexed color palette&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;Batch process files and convert to indexed color palette&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;2016&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;&lt;Toolbox&gt;/LF2 Tools/Batch Convert &#95;Indexed&#46;&#46;&#46;&quot;</span>,
        <span style="color&#58; #008000;">None</span>,
        <span style="color&#58; black;">&#91;</span>
                <span style="color&#58; black;">&#40;</span>PF&#95;STRING, <span style="color&#58; #483d8b;">&quot;pattern&quot;</span>, <span style="color&#58; #483d8b;">&quot;File Glob&quot;</span>, <span style="color&#58; #483d8b;">&quot;*&#46;bmp&quot;</span><span style="color&#58; black;">&#41;</span>
        <span style="color&#58; black;">&#93;</span>,
        <span style="color&#58; black;">&#91;</span><span style="color&#58; black;">&#93;</span>,
        batch&#95;convert&#95;indexed<span style="color&#58; black;">&#41;</span>
&nbsp;
main<span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<span style="font-weight: bold;" class="mycode_b">batch-convert-rgb.py</span><br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;PYTHON-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="python" style="font-family&#58;monospace;"><span style="color&#58; #808080; font-style&#58; italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #dc143c;">math</span>, <span style="color&#58; #dc143c;">glob</span>, <span style="color&#58; #dc143c;">struct</span>
<span style="color&#58; #ff7700;font-weight&#58;bold;">from</span> gimpfu <span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #66cc66;">*</span>
&nbsp;
<span style="color&#58; #dc143c;">gettext</span>&#46;<span style="color&#58; black;">install</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;gimp20-python&quot;</span>, gimp&#46;<span style="color&#58; black;">locale&#95;directory</span>, <span style="color&#58; #008000;">unicode</span>=<span style="color&#58; #008000;">True</span><span style="color&#58; black;">&#41;</span>
&nbsp;
V4&#95;HEADER&#95;SIZE = <span style="color&#58; #ff4500;">108</span>
COLOR&#95;INFO&#95;SIZE = <span style="color&#58; #ff4500;">68</span>
HEADER&#95;OFF = <span style="color&#58; #ff4500;">14</span>
DATA&#95;OFF&#95;FIELD = <span style="color&#58; #ff4500;">10</span>
SIZE&#95;OFF = <span style="color&#58; #ff4500;">2</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, new&#95;bmp&#95;name=<span style="color&#58; #008000;">None</span><span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> new&#95;bmp&#95;name <span style="color&#58; #ff7700;font-weight&#58;bold;">is</span> <span style="color&#58; #008000;">None</span>&#58;
		new&#95;bmp&#95;name = old&#95;bmp&#95;name
	data = bytearray<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;rb&quot;</span><span style="color&#58; black;">&#41;</span>&#46;<span style="color&#58; black;">read</span><span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	header&#95;size = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span>
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> header&#95;size == <span style="color&#58; #ff4500;">108</span>&#58;
		<span style="color&#58; #808080; font-style&#58; italic;"># Remove 68	 - the size for the extra data-chunk from both headers</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, V4&#95;HEADER&#95;SIZE - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,
			<span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span> - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #808080; font-style&#58; italic;"># Offset image data&#58;</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size - COLOR&#95;INFO&#95;SIZE&#58;<span style="color&#58; black;">&#93;</span> = data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size&#58;<span style="color&#58; black;">&#93;</span>
		data<span style="color&#58; black;">&#91;</span>SIZE&#95;OFF&#58; SIZE&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, <span style="color&#58; #008000;">len</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	with <span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>new&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;wb&quot;</span><span style="color&#58; black;">&#41;</span> as output&#95;file&#58;
		output&#95;file&#46;<span style="color&#58; black;">write</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> batch&#95;convert&#95;rgb<span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">for</span> <span style="color&#58; #008000;">file</span> <span style="color&#58; #ff7700;font-weight&#58;bold;">in</span> <span style="color&#58; #dc143c;">glob</span>&#46;<span style="color&#58; #dc143c;">glob</span><span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
		image = <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;file&#95;load</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span>, RUN&#95;NONINTERACTIVE<span style="color&#58; black;">&#41;</span>
		drawable = <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;get&#95;active&#95;layer</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> <span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;base&#95;type</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span> <span style="color&#58; #66cc66;">!</span>= RGB&#58;
			<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;convert&#95;rgb</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
			<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;file&#95;save</span><span style="color&#58; black;">&#40;</span>image, drawable, <span style="color&#58; #008000;">file</span>, <span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #dc143c;">pdb</span>&#46;<span style="color&#58; black;">gimp&#95;image&#95;delete</span><span style="color&#58; black;">&#40;</span>image<span style="color&#58; black;">&#41;</span>
		strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
&nbsp;
register<span style="color&#58; black;">&#40;</span>
		<span style="color&#58; #483d8b;">&quot;batch&#95;convert&#95;rgb&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;Batch process files and convert to RGB color palette&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;Batch process files and convert to RGB color palette&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;2016&quot;</span>,
		<span style="color&#58; #483d8b;">&quot;&lt;Toolbox&gt;/LF2 Tools/Batch Convert &#95;RGB&#46;&#46;&#46;&quot;</span>,
		<span style="color&#58; #008000;">None</span>,
		<span style="color&#58; black;">&#91;</span>
				<span style="color&#58; black;">&#40;</span>PF&#95;STRING, <span style="color&#58; #483d8b;">&quot;pattern&quot;</span>, <span style="color&#58; #483d8b;">&quot;File Glob&quot;</span>, <span style="color&#58; #483d8b;">&quot;*&#46;bmp&quot;</span><span style="color&#58; black;">&#41;</span>
		<span style="color&#58; black;">&#93;</span>,
		<span style="color&#58; black;">&#91;</span><span style="color&#58; black;">&#93;</span>,
		batch&#95;convert&#95;rgb<span style="color&#58; black;">&#41;</span>
&nbsp;
main<span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<span style="font-weight: bold;" class="mycode_b">batch-strip-color-space-info.py</span><br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;PYTHON-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="python" style="font-family&#58;monospace;"><span style="color&#58; #808080; font-style&#58; italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #dc143c;">math</span>, <span style="color&#58; #dc143c;">glob</span>, <span style="color&#58; #dc143c;">struct</span>
<span style="color&#58; #ff7700;font-weight&#58;bold;">from</span> gimpfu <span style="color&#58; #ff7700;font-weight&#58;bold;">import</span> <span style="color&#58; #66cc66;">*</span>
&nbsp;
<span style="color&#58; #dc143c;">gettext</span>&#46;<span style="color&#58; black;">install</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;gimp20-python&quot;</span>, gimp&#46;<span style="color&#58; black;">locale&#95;directory</span>, <span style="color&#58; #008000;">unicode</span>=<span style="color&#58; #008000;">True</span><span style="color&#58; black;">&#41;</span>
&nbsp;
V4&#95;HEADER&#95;SIZE = <span style="color&#58; #ff4500;">108</span>
COLOR&#95;INFO&#95;SIZE = <span style="color&#58; #ff4500;">68</span>
HEADER&#95;OFF = <span style="color&#58; #ff4500;">14</span>
DATA&#95;OFF&#95;FIELD = <span style="color&#58; #ff4500;">10</span>
SIZE&#95;OFF = <span style="color&#58; #ff4500;">2</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, new&#95;bmp&#95;name=<span style="color&#58; #008000;">None</span><span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> new&#95;bmp&#95;name <span style="color&#58; #ff7700;font-weight&#58;bold;">is</span> <span style="color&#58; #008000;">None</span>&#58;
		new&#95;bmp&#95;name = old&#95;bmp&#95;name
	data = bytearray<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>old&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;rb&quot;</span><span style="color&#58; black;">&#41;</span>&#46;<span style="color&#58; black;">read</span><span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	header&#95;size = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span>
	<span style="color&#58; #ff7700;font-weight&#58;bold;">if</span> header&#95;size == <span style="color&#58; #ff4500;">108</span>&#58;
		<span style="color&#58; #808080; font-style&#58; italic;"># Remove 68	 - the size for the extra data-chunk from both headers</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF&#58; HEADER&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, V4&#95;HEADER&#95;SIZE - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,
			<span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">unpack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>,data<span style="color&#58; black;">&#91;</span>DATA&#95;OFF&#95;FIELD&#58; DATA&#95;OFF&#95;FIELD + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span><span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#91;</span><span style="color&#58; #ff4500;">0</span><span style="color&#58; black;">&#93;</span> - COLOR&#95;INFO&#95;SIZE<span style="color&#58; black;">&#41;</span>
		<span style="color&#58; #808080; font-style&#58; italic;"># Offset image data&#58;</span>
		data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size - COLOR&#95;INFO&#95;SIZE&#58;<span style="color&#58; black;">&#93;</span> = data<span style="color&#58; black;">&#91;</span>HEADER&#95;OFF + header&#95;size&#58;<span style="color&#58; black;">&#93;</span>
		data<span style="color&#58; black;">&#91;</span>SIZE&#95;OFF&#58; SIZE&#95;OFF + <span style="color&#58; #ff4500;">4</span><span style="color&#58; black;">&#93;</span> = <span style="color&#58; #dc143c;">struct</span>&#46;<span style="color&#58; black;">pack</span><span style="color&#58; black;">&#40;</span><span style="color&#58; #483d8b;">&quot;I&quot;</span>, <span style="color&#58; #008000;">len</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span><span style="color&#58; black;">&#41;</span>
	with <span style="color&#58; #008000;">open</span><span style="color&#58; black;">&#40;</span>new&#95;bmp&#95;name, <span style="color&#58; #483d8b;">&quot;wb&quot;</span><span style="color&#58; black;">&#41;</span> as output&#95;file&#58;
		output&#95;file&#46;<span style="color&#58; black;">write</span><span style="color&#58; black;">&#40;</span>data<span style="color&#58; black;">&#41;</span>
&nbsp;
<span style="color&#58; #ff7700;font-weight&#58;bold;">def</span> batch&#95;strip&#95;color&#95;space&#95;info<span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
	<span style="color&#58; #ff7700;font-weight&#58;bold;">for</span> <span style="color&#58; #008000;">file</span> <span style="color&#58; #ff7700;font-weight&#58;bold;">in</span> <span style="color&#58; #dc143c;">glob</span>&#46;<span style="color&#58; #dc143c;">glob</span><span style="color&#58; black;">&#40;</span>pattern<span style="color&#58; black;">&#41;</span>&#58;
		strip&#95;color&#95;info<span style="color&#58; black;">&#40;</span><span style="color&#58; #008000;">file</span><span style="color&#58; black;">&#41;</span>
&nbsp;
register<span style="color&#58; black;">&#40;</span>
        <span style="color&#58; #483d8b;">&quot;batch&#95;strip&#95;color&#95;space&#95;info&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;Batch process files and strip color space informations&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;Batch process files and strip color space informations&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;NightmareX1337&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;2016&quot;</span>,
        <span style="color&#58; #483d8b;">&quot;&lt;Toolbox&gt;/LF2 Tools/Batch &#95;Strip Color Space Info&#46;&#46;&#46;&quot;</span>,
        <span style="color&#58; #008000;">None</span>,
        <span style="color&#58; black;">&#91;</span>
                <span style="color&#58; black;">&#40;</span>PF&#95;STRING, <span style="color&#58; #483d8b;">&quot;pattern&quot;</span>, <span style="color&#58; #483d8b;">&quot;File Glob&quot;</span>, <span style="color&#58; #483d8b;">&quot;*&#46;bmp&quot;</span><span style="color&#58; black;">&#41;</span>
        <span style="color&#58; black;">&#93;</span>,
        <span style="color&#58; black;">&#91;</span><span style="color&#58; black;">&#93;</span>,
        batch&#95;strip&#95;color&#95;space&#95;info<span style="color&#58; black;">&#41;</span>
&nbsp;
main<span style="color&#58; black;">&#40;</span><span style="color&#58; black;">&#41;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br />
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br />
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE<br />
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br />
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,<br />
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE<br />
SOFTWARE.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[solving problems in C program]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10369</link>
			<pubDate>Mon, 18 Jul 2016 03:55:57 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=3756">MnM</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10369</guid>
			<description><![CDATA[Hi guys, It must be weird to see me post in this section of the forum but anyways, I have studied both c program and c++ in my second and third semester respectively. I'm having campus placements now and most of the companies need people with strong problem solving capability. So, I'm wondering if there is a website you personally have used for learning C for example: Find out whether the string having the following characters '[',']','{','}','(',')' is balanced or not {[]()} etc, etc. I am looking for a website that gives me problem statements and also the solution. I might google and get some but I'm hoping the lot of you have personally tried out some. So yeah I'm waiting for your reply!]]></description>
			<content:encoded><![CDATA[Hi guys, It must be weird to see me post in this section of the forum but anyways, I have studied both c program and c++ in my second and third semester respectively. I'm having campus placements now and most of the companies need people with strong problem solving capability. So, I'm wondering if there is a website you personally have used for learning C for example: Find out whether the string having the following characters '[',']','{','}','(',')' is balanced or not {[]()} etc, etc. I am looking for a website that gives me problem statements and also the solution. I might google and get some but I'm hoping the lot of you have personally tried out some. So yeah I'm waiting for your reply!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[DC Algorithm in JavaScript (decrypt)]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10301</link>
			<pubDate>Fri, 15 Apr 2016 21:22:27 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=5400">MangaD</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10301</guid>
			<description><![CDATA[In response to someone's attempt to read a LF2 data file in JavaScript, I made a simple HTML page for this purpose.<br />
<br />
I based myself on <DVZ_ME#0>'s explanation for the DC algorithm:<br />
<br />
<div class="tborder spoiler"><div class="spoiler_header">DC Algorithm <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Click to View)';this.parentNode.className = 'spoiler_header';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Click to Hide)';;this.parentNode.className += ' spoiler_header_cornered';}">(Click to View)</a></div><div class="spoiler_body" style="display: none;">
<blockquote class="mycode_quote"><cite><span> (11-21-2015, 12:09 PM)</span>A-Man Wrote: <a href="https://lf-empire.de/forum/showthread.php?pid=198669#pid198669" class="quick_jump">&nbsp;</a></cite>1-Open the file for reading and store what's inside into a variable (or stream it, whatever you prefer/have available). The content of the file is gibberish (because it's encrypted).<br />
<br />
2-Skip over the first one hundred and twenty three characters and start going through all characters in the file. Since counting in computers starts from 0, this means you will start from the 124rd letter character (index 123).<br />
<br />
3-For every character you go through, convert it to its <a href="https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart" target="_blank" rel="noopener" class="mycode_url">ASCII code</a>, subtract from it the ASCII code of the <span style="text-decoration: underline;" class="mycode_u">N</span>th character in the key "odBearBecauseHeIsVeryGoodSiuHungIsAGo" (yes, the letters are shifted because there is a <a href="https://en.wikipedia.org/wiki/Caesar_cipher" target="_blank" rel="noopener" class="mycode_url">caeser cipher</a> step we can skip with using this shifted key).<br />
<br />
4- <span style="text-decoration: underline;" class="mycode_u">N</span> is an index in the key which keeps increasing for every character and restarts back to 0 when it reaches the end of the key.</blockquote></div></div>
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
<br />
&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;LF2 - Data Reader&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta charset="UTF-8" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta name="description" content="LF2 data files reader."&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta name="keywords" content="LF2, DC , data, algorithm, file, files, decypher"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta name="author" content="MangaD"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link rel="shortcut icon" href="http://www.lf-empire.de/favicon.ico" type="image/x-icon"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;style type="text/css"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;html, body {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:100%;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:100%;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border:0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding: 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-align:center;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#main {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin-top:30px;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-align:initial;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:inline-block;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#DCode {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:600px;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:400px;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/style&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script type="text/javascript"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var file;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function fileSupport() {// Check for the various File API support.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (window.File &amp;&amp; window.FileReader &amp;&amp; window.FileList &amp;&amp; window.Blob) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Great success! All the File APIs are supported.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('The File APIs are not fully supported in this browser.');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function openFile() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file = document.getElementById("fileInput").files[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var fileName = escape(file.name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var fileType = (file.type ? file.type : 'n/a');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var fileSize = file.size;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var lastModified = file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() : 'n/a';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(file.name.substring(file.name.lastIndexOf(".")) != ".dat" ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('LF2 data file only.');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileType = "LF2/data";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('details').innerHTML = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;strong&gt;' + fileName + '&lt;/strong&gt; (' + fileType + ') - ' +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileSize + ' bytes, last modified: ' + lastModified;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function decrypt() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var key = "odBearBecauseHeIsVeryGoodSiuHungIsAGo";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var reader = new FileReader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.onload = function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var data = reader.result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var text = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 123, j = 0; i &lt; data.length; i++, j++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text += String.fromCharCode(data.charCodeAt(i) - key.charCodeAt(j%key.length));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('DCode').innerHTML = text;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.readAsBinaryString(file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;body onload="fileSupport();"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="main"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;label for="fileInput"&gt;Open .dat file:&lt;/label&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input id="fileInput" type="file" onchange="if(openFile()) decrypt();"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;output id="details"&gt;&lt;/output&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;textarea id="DCode" wrap='off'&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
Download file <a href="http://www.mediafire.com/download/hy5vocv3w71m637/dc.html" target="_blank" rel="noopener" class="mycode_url">here</a>.]]></description>
			<content:encoded><![CDATA[In response to someone's attempt to read a LF2 data file in JavaScript, I made a simple HTML page for this purpose.<br />
<br />
I based myself on <DVZ_ME#0>'s explanation for the DC algorithm:<br />
<br />
<div class="tborder spoiler"><div class="spoiler_header">DC Algorithm <a href="javascript:void(0);" onclick="javascript:if(parentNode.parentNode.getElementsByTagName('div')[1].style.display=='block'){parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.innerHTML='(Click to View)';this.parentNode.className = 'spoiler_header';}else {parentNode.parentNode.getElementsByTagName('div')[1].style.display='block';this.innerHTML='(Click to Hide)';;this.parentNode.className += ' spoiler_header_cornered';}">(Click to View)</a></div><div class="spoiler_body" style="display: none;">
<blockquote class="mycode_quote"><cite><span> (11-21-2015, 12:09 PM)</span>A-Man Wrote: <a href="https://lf-empire.de/forum/showthread.php?pid=198669#pid198669" class="quick_jump">&nbsp;</a></cite>1-Open the file for reading and store what's inside into a variable (or stream it, whatever you prefer/have available). The content of the file is gibberish (because it's encrypted).<br />
<br />
2-Skip over the first one hundred and twenty three characters and start going through all characters in the file. Since counting in computers starts from 0, this means you will start from the 124rd letter character (index 123).<br />
<br />
3-For every character you go through, convert it to its <a href="https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart" target="_blank" rel="noopener" class="mycode_url">ASCII code</a>, subtract from it the ASCII code of the <span style="text-decoration: underline;" class="mycode_u">N</span>th character in the key "odBearBecauseHeIsVeryGoodSiuHungIsAGo" (yes, the letters are shifted because there is a <a href="https://en.wikipedia.org/wiki/Caesar_cipher" target="_blank" rel="noopener" class="mycode_url">caeser cipher</a> step we can skip with using this shifted key).<br />
<br />
4- <span style="text-decoration: underline;" class="mycode_u">N</span> is an index in the key which keeps increasing for every character and restarts back to 0 when it reaches the end of the key.</blockquote></div></div>
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
<br />
&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;LF2 - Data Reader&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta charset="UTF-8" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta name="description" content="LF2 data files reader."&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta name="keywords" content="LF2, DC , data, algorithm, file, files, decypher"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta name="author" content="MangaD"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link rel="shortcut icon" href="http://www.lf-empire.de/favicon.ico" type="image/x-icon"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;style type="text/css"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;html, body {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:100%;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:100%;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;border:0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;padding: 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-align:center;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#main {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin-top:30px;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text-align:initial;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display:inline-block;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#DCode {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:600px;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:400px;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/style&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script type="text/javascript"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var file;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function fileSupport() {// Check for the various File API support.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (window.File &amp;&amp; window.FileReader &amp;&amp; window.FileList &amp;&amp; window.Blob) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Great success! All the File APIs are supported.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('The File APIs are not fully supported in this browser.');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function openFile() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file = document.getElementById("fileInput").files[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var fileName = escape(file.name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var fileType = (file.type ? file.type : 'n/a');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var fileSize = file.size;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var lastModified = file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() : 'n/a';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(file.name.substring(file.name.lastIndexOf(".")) != ".dat" ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('LF2 data file only.');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileType = "LF2/data";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('details').innerHTML = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;strong&gt;' + fileName + '&lt;/strong&gt; (' + fileType + ') - ' +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileSize + ' bytes, last modified: ' + lastModified;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function decrypt() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var key = "odBearBecauseHeIsVeryGoodSiuHungIsAGo";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var reader = new FileReader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.onload = function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var data = reader.result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var text = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 123, j = 0; i &lt; data.length; i++, j++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text += String.fromCharCode(data.charCodeAt(i) - key.charCodeAt(j%key.length));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('DCode').innerHTML = text;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.readAsBinaryString(file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;body onload="fileSupport();"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id="main"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;label for="fileInput"&gt;Open .dat file:&lt;/label&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input id="fileInput" type="file" onchange="if(openFile()) decrypt();"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;output id="details"&gt;&lt;/output&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;textarea id="DCode" wrap='off'&gt;&lt;/textarea&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
Download file <a href="http://www.mediafire.com/download/hy5vocv3w71m637/dc.html" target="_blank" rel="noopener" class="mycode_url">here</a>.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[C++1z and Header Files]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10298</link>
			<pubDate>Wed, 06 Apr 2016 21:56:42 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=3949">A-Man</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10298</guid>
			<description><![CDATA[So there's been rumors C++1z will get a module system in a plan to silently kill the header file mechanism. Some say it won't make it in C++1z, but that there are plans to get it sooner or later into the standard. I like header files personally, despite the problems they cause (maybe just because I got used to them). What I fear is the leap happening so suddenly, and I get left behind with my projects following the then-old header file mechanism.<br />
<br />
From the looks of it, it seems people have somewhat began moving already; with how I see template generic types being implemented in .h(pp) files only. I still follow the trend of the .h(pp) .cpp pair since that feels "healthier" for the current standards, but I'm always burdened with having to declare the class for every (combination of) template argument(s).<br />
<br />
I don't know, I'm confused. How should I be doing it, and where's all of this going? What are some best practices of using .h(pp) files nowadays, and have anyone here got an idea on how this module system will likely work?]]></description>
			<content:encoded><![CDATA[So there's been rumors C++1z will get a module system in a plan to silently kill the header file mechanism. Some say it won't make it in C++1z, but that there are plans to get it sooner or later into the standard. I like header files personally, despite the problems they cause (maybe just because I got used to them). What I fear is the leap happening so suddenly, and I get left behind with my projects following the then-old header file mechanism.<br />
<br />
From the looks of it, it seems people have somewhat began moving already; with how I see template generic types being implemented in .h(pp) files only. I still follow the trend of the .h(pp) .cpp pair since that feels "healthier" for the current standards, but I'm always burdened with having to declare the class for every (combination of) template argument(s).<br />
<br />
I don't know, I'm confused. How should I be doing it, and where's all of this going? What are some best practices of using .h(pp) files nowadays, and have anyone here got an idea on how this module system will likely work?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[*TRUE* OOP and Other Paradigms]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10293</link>
			<pubDate>Thu, 31 Mar 2016 20:51:53 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=3949">A-Man</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10293</guid>
			<description><![CDATA[I'm not sure if it's just me being oblivious of this for so long until now, but lately, it seems there has been a greater number of people bashing the OOP style. I don't often involve myself into such discussion, but this one time I did say that OOP works better for games (I know because I've tried imperative for games, and things get messy rather quickly). So the discussion went on for a couple of posts, until one came up and said "but that's only because what you use is not "TRUE" OOP. That was when I thought that maybe I'd be talking out of turn if I continue arguing any further. <br />
<br />
So yes, what is true OOP anyway? What do you think of OOP in general, and what do you say of the "single responsibility principle"? The latter, in my opinion, might be sort of extreme and not practical. Would not strictly following it mean that you're not doing OOP?<br />
<br />
What are your thoughts on functional programming, also? I like it, even though I don't see how one can write an entire program with that if the program isn't a one-liner. I'm quite surprised to see people trying to enforce sticking to one style throughout. Why not mix as necessary?]]></description>
			<content:encoded><![CDATA[I'm not sure if it's just me being oblivious of this for so long until now, but lately, it seems there has been a greater number of people bashing the OOP style. I don't often involve myself into such discussion, but this one time I did say that OOP works better for games (I know because I've tried imperative for games, and things get messy rather quickly). So the discussion went on for a couple of posts, until one came up and said "but that's only because what you use is not "TRUE" OOP. That was when I thought that maybe I'd be talking out of turn if I continue arguing any further. <br />
<br />
So yes, what is true OOP anyway? What do you think of OOP in general, and what do you say of the "single responsibility principle"? The latter, in my opinion, might be sort of extreme and not practical. Would not strictly following it mean that you're not doing OOP?<br />
<br />
What are your thoughts on functional programming, also? I like it, even though I don't see how one can write an entire program with that if the program isn't a one-liner. I'm quite surprised to see people trying to enforce sticking to one style throughout. Why not mix as necessary?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[openMP not working]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10272</link>
			<pubDate>Tue, 08 Mar 2016 16:38:46 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=3056">empirefantasy</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10272</guid>
			<description><![CDATA[Hi guys!<br />
<br />
So what i am trying to do is using some directives from openMP in C programs. <br />
But he problem is that whenever i try to run the program it says:<br />
<br />
undefined reference to `omp_get_thread_num'<br />
<br />
I have been using various examples from internet and all of them have the same problem. It runs OK when there is not any 'omp_get_thread_num' or omp_get_wtime'. But of course i need these two in my programs.<br />
<br />
I have MinGW (2 versions: one about the end of 2013 and the other one downloaded less then 1 month ago). I have tried in eclipse, codeblock and commandline. when i try it to cmd it says "can't find -lpthread"<br />
<br />
i have tried in 2 different machines both Windows10 64bit<br />
<br />
i have been trying to find anything in internet for about one week but no result  <img src="https://lf-empire.de/forum/images/smilies/confused.gif" alt=":s" title=":s" class="smilie smilie_10" /> <br />
<br />
idk what i am missing here.]]></description>
			<content:encoded><![CDATA[Hi guys!<br />
<br />
So what i am trying to do is using some directives from openMP in C programs. <br />
But he problem is that whenever i try to run the program it says:<br />
<br />
undefined reference to `omp_get_thread_num'<br />
<br />
I have been using various examples from internet and all of them have the same problem. It runs OK when there is not any 'omp_get_thread_num' or omp_get_wtime'. But of course i need these two in my programs.<br />
<br />
I have MinGW (2 versions: one about the end of 2013 and the other one downloaded less then 1 month ago). I have tried in eclipse, codeblock and commandline. when i try it to cmd it says "can't find -lpthread"<br />
<br />
i have tried in 2 different machines both Windows10 64bit<br />
<br />
i have been trying to find anything in internet for about one week but no result  <img src="https://lf-empire.de/forum/images/smilies/confused.gif" alt=":s" title=":s" class="smilie smilie_10" /> <br />
<br />
idk what i am missing here.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Introducing the D Programming Language]]></title>
			<link>https://lf-empire.de/forum/showthread.php?tid=10268</link>
			<pubDate>Sun, 06 Mar 2016 15:09:39 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://lf-empire.de/forum/member.php?action=profile&uid=4900">NightmareX1337</a>]]></dc:creator>
			<guid isPermaLink="false">https://lf-empire.de/forum/showthread.php?tid=10268</guid>
			<description><![CDATA["D is a systems programming language with C-like syntax and static typing. It combines efficiency, control and modeling power with safety and programmer productivity"<br />
-<a href="http://dlang.org" target="_blank" rel="noopener" class="mycode_url">dlang.org</a><br />
<br />
First, let me tell you how I stumbled upon D language: I was upset by how C# source code can be retained from it's executable (or DLL) no matter if you use obfuscators and such. I was thinking why is it that much hard to interact with native APIs and being unable to do some low level stuff in C# was not fun. There was few other things I had in mind wondering why can't there be that kind of language... I tried my best to like C++, I really did. No matter how much I tell myself it's not that bad, I gave up. It's unnecessarily complicated with no win. So I started to look for some C like language that can handle anything from low level to high level, have an optional GC, feature rich, and plays well with other languages. After weeks of searching, I said to myself "I bet there is a language called D" and I googled "d programming language". First result was the <a href="http://dlang.org" target="_blank" rel="noopener" class="mycode_url">dlang.org</a>. When I clicked on it, I was no longer thinking about creating my own language. It was there, it was D.<br />
<br />
<span style="font-size: x-large;" class="mycode_size">Module system</span><br />
No painful header file sh*t. There is no confusion of declaration and definition, order of signatures don't have a side effect, and no need for maintaining two different signatures. Yet, D supports separate compilation in a much cleaner way than C/C++.<br />
Modules are simple:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">module</span> drone&#46;<span style="color&#58; #006600;">algorithm</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> quickSort<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> data<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">//Implementation&#46;&#46;&#46;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
Doing something similar to above will require you to name your file "algorithm.d" and put it in a directory called "drone". This way you're forced to do the right thing. Doing so makes other people to figure out your code easier and it makes the project more manageable in the long run.<br />
Here is how one can use modules:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">module</span> program<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> drone&#46;<span style="color&#58; #006600;">algorithm</span> <span style="color&#58; #66cc66;">&#58;</span> quickSort<span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">//import only the required function</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> stdio <span style="color&#58; #66cc66;">=</span> std&#46;<span style="color&#58; #006600;">stdio</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">//renamed import can help not to pollute global scope</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">algorithm</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">//just simply import</span>
<span style="color&#58; #993333;">void</span> main<span style="color&#58; #66cc66;">&#40;</span>string<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> args<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">conv</span> <span style="color&#58; #66cc66;">&#58;</span> to<span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">//scoped imports will only available in the function scope</span>
    <span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>e<span style="color&#58; #66cc66;">;</span> quickSort<span style="color&#58; #66cc66;">&#40;</span>args&#46;<span style="color&#58; #006600;">map</span><span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span>a <span style="color&#58; #66cc66;">=&gt;</span> a&#46;<span style="color&#58; #006600;">to</span><span style="color&#58; #66cc66;">!</span><span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
        stdio&#46;<span style="color&#58; #006600;">writeln</span><span style="color&#58; #66cc66;">&#40;</span>e<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<span style="font-size: x-large;" class="mycode_size">Compile times</span><br />
The official reference compiler DMD is incredibly fast. One reason is not having any preprocessor (hence the module system), the other one is Walter Bright's outstanding optimization skills. DMD doesn't usually produce highly optimized/fast code, it produce it fast. Thus, compile-run-test cycle becomes satisfying. Many C++ guys expect a compiler error in their first D code compilation but get surprised that it's successfully compiled at such speed. There are also <a href="https://github.com/ldc-developers/ldc" target="_blank" rel="noopener" class="mycode_url">LDC</a> (LLVM based D compiler) and <a href="http://gdcproject.org/" target="_blank" rel="noopener" class="mycode_url">GDC</a> (GCC based D compiler) which compiles slower but produces strongly optimized binaries.<br />
<br />
<span style="font-size: x-large;" class="mycode_size">Slices</span><br />
A slice in D seems like a dynamic array in almost all aspects of the concept -- when passed without adornments, the data referred to is passed by reference, and it supports all the properties and functions one would expect a dynamic array type to support. But there is one very important difference. A slice does not own the array, it references the array. That is, the slice is not responsible for allocation or deallocation of its data. The responsible party for managing a dynamic array's memory is the D runtime.<br />
<br />
So where is the true dynamic array type in D? It's hidden by the runtime, and in fact, has no formal type. Slices are good enough, and as it turns out, the runtime is smart enough about what you want to do with the data, that you almost never notice dynamic arrays are missing as a full-fledged type. In fact, most D coders consider the D slice to be the dynamic array type -- it's even listed as a dynamic array type in the spec!<br />
<br />
With the combined protection of having the length of the data, and the garbage collector to manage the memory backing the data, slices are an extremely powerful, dynamic concept that is safe from most memory corruption issues. With D slices, one can write high-performance code with elegant and concise syntax that is awkward or inefficient in almost any other language.<br />
<br />
Let's see some D slices in action:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">stdio</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #993333;">void</span> main<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> a<span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// a is a slice</span>
    a <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// allocate a dynamic array of integers that has at least 5 elements, and give me a slice to the first 5&#46; Note that all data in D is default assigned, int's are defaulted to 0, so this array contains five 0's</span>
    <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> b <span style="color&#58; #66cc66;">=</span> a<span style="color&#58; #66cc66;">&#91;</span>0<span style="color&#58; #66cc66;">&#46;&#46;</span>2<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// This is a 'slicing' operation&#46; b now refers to the first two elements of a&#46; Note that D uses open interval for the upper limit, so a&#91;2&#93; is not included in b&#46;</span>
    <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> c <span style="color&#58; #66cc66;">=</span> a<span style="color&#58; #66cc66;">&#91;</span>&#36;<span style="color&#58; #66cc66;">-</span>2<span style="color&#58; #66cc66;">&#46;&#46;</span>&#36;<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// c refers to the last two elements of a &#40;&#36; stands for length inside a slice or index operation&#41;&#46;</span>
    c<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">4</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// this also assigns a&#91;3&#93;</span>
    c<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// this also assigns a&#91;4&#93;</span>
    b<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">=</span> c<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// assign the first two elements of a&#91;&#93; to the value from the last two elements &#40;4, 5&#41;&#46;</span>
    writeln<span style="color&#58; #66cc66;">&#40;</span>a<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// prints &quot;&#91;4, 5, 0, 4, 5&#93;&quot;</span>
    <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">&#93;</span> d<span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// d is a fixed sized array, allocated on the stack</span>
    b <span style="color&#58; #66cc66;">=</span> d<span style="color&#58; #66cc66;">&#91;</span>0<span style="color&#58; #66cc66;">&#46;&#46;</span>2<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// slices can point at fixed sized arrays too!</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
reference: <a href="https://dlang.org/d-array-article.html" target="_blank" rel="noopener" class="mycode_url">D Array Article</a><br />
<br />
Here is an advanced LF2 data parser (tokenizer) I wrote a while ago, it runs blazingly fast because no string copying takes place:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">stdio</span> <span style="color&#58; #66cc66;">&#58;</span> File<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">traits</span> <span style="color&#58; #66cc66;">&#58;</span> isSomeString<span style="color&#58; #66cc66;">,</span> isArray<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">range</span> <span style="color&#58; #66cc66;">&#58;</span> isInfinite<span style="color&#58; #66cc66;">,</span> isIterable<span style="color&#58; #66cc66;">,</span> isInputRange<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">string</span> <span style="color&#58; #66cc66;">&#58;</span> startsWith<span style="color&#58; #66cc66;">;</span>
&nbsp;
<span style="color&#58; #993333;">enum</span> TokenState <span style="color&#58; #66cc66;">&#58;</span> <span style="color&#58; #993333;">ubyte</span>
<span style="color&#58; #66cc66;">&#123;</span>
	none<span style="color&#58; #66cc66;">,</span>
	xml<span style="color&#58; #66cc66;">,</span>
	token<span style="color&#58; #66cc66;">,</span>
	comment
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">enum</span> TokenType <span style="color&#58; #66cc66;">&#58;</span> <span style="color&#58; #993333;">ubyte</span>
<span style="color&#58; #66cc66;">&#123;</span>
	normal<span style="color&#58; #66cc66;">,</span>
	xml<span style="color&#58; #66cc66;">,</span>
	property<span style="color&#58; #66cc66;">,</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">struct</span> Token<span style="color&#58; #66cc66;">&#40;</span>S<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>isSomeString<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	S str<span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #993333;">size&#95;t</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">;</span>
	TokenType type<span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #993333;">bool</span> commentic<span style="color&#58; #66cc66;">;</span>
&nbsp;
	string toString<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #b1b100;">return</span> format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">`&quot;%s&quot;&#91;line&#58; %d col&#58; %d&#93;  `</span><span style="color&#58; #66cc66;">,</span> str<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
immutable string tokenHeads <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">'&lt;'</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenEnds <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">'&gt;'</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">'&#58;'</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenDelims <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">' '</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">'<span style="color&#58; #000099; font-weight&#58; bold;">\t</span>'</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> 
	lineEnds <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">'<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>'</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">'<span style="color&#58; #000099; font-weight&#58; bold;">\r</span>'</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #993333;">enum</span> <span style="color&#58; #993333;">char</span> lineCommentChar <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #ff0000;">'#'</span><span style="color&#58; #66cc66;">;</span>
&nbsp;
<span style="color&#58; #993333;">class</span> ParserException <span style="color&#58; #66cc66;">&#58;</span> <span style="color&#58; #aaaadd; font-weight&#58; bold;">Exception</span>
<span style="color&#58; #66cc66;">&#123;</span>
	<span style="color&#58; #000000; font-weight&#58; bold;">this</span><span style="color&#58; #66cc66;">&#40;</span>string msg<span style="color&#58; #66cc66;">,</span> string file <span style="color&#58; #66cc66;">=</span> &#95;&#95;FILE&#95;&#95;<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #993333;">size&#95;t</span> line <span style="color&#58; #66cc66;">=</span> &#95;&#95;LINE&#95;&#95;<span style="color&#58; #66cc66;">,</span> Throwable next <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">null</span><span style="color&#58; #66cc66;">&#41;</span> &#64;<span style="color&#58; #66cc66;">&#40;</span>safe<span style="color&#58; #66cc66;">,</span> nogc<span style="color&#58; #66cc66;">&#41;</span> pure nothrow
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #000000; font-weight&#58; bold;">super</span><span style="color&#58; #66cc66;">&#40;</span>msg<span style="color&#58; #66cc66;">,</span> file<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> next<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #009933; font-style&#58; italic;">/// This function tokenizes LF2 data and returns a slice-array of strings&#46; Returned slices point to the given string&#46;</span>
<span style="color&#58; #993333;">public</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> parseData<span style="color&#58; #66cc66;">&#40;</span>S<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#40;</span>S data<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #993333;">bool</span> includeComments <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>isSomeString<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	<span style="color&#58; #993333;">debug</span><span style="color&#58; #66cc66;">&#40;</span>LogFile<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		File parserLog <span style="color&#58; #66cc66;">=</span> File<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;parser&#46;log&quot;</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;wb&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
		scope<span style="color&#58; #66cc66;">&#40;</span>exit<span style="color&#58; #66cc66;">&#41;</span> parserLog&#46;<span style="color&#58; #006600;">close</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
	Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> slices <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">4</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span>
	slices&#46;<span style="color&#58; #006600;">reserve</span><span style="color&#58; #66cc66;">&#40;</span>data&#46;<span style="color&#58; #006600;">length</span> <span style="color&#58; #66cc66;">/</span> <span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// Pre-allocate an aprox memory we might need</span>
&nbsp;
	<span style="color&#58; #993333;">bool</span> commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">;</span>
	TokenState state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #993333;">size&#95;t</span> tokenStart <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">,</span> tokenCol <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> tokenLine <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> line <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> col <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">;</span>
Lforeach<span style="color&#58; #66cc66;">&#58;</span>
	<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>i<span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">;</span> data<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
	Lswitch<span style="color&#58; #66cc66;">&#58;</span>
		<span style="color&#58; #993333;">final</span> <span style="color&#58; #b1b100;">switch</span><span style="color&#58; #66cc66;">&#40;</span>state<span style="color&#58; #66cc66;">&#41;</span>
		<span style="color&#58; #66cc66;">&#123;</span>
			<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">&#58;</span>
				<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>lineEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenDelims&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenHeads&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &lt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">;</span>
					tokenStart <span style="color&#58; #66cc66;">=</span> i<span style="color&#58; #66cc66;">;</span>
					tokenCol <span style="color&#58; #66cc66;">=</span> col<span style="color&#58; #66cc66;">;</span>
					tokenLine <span style="color&#58; #66cc66;">=</span> line<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &gt; &#58;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token ending delimeter&#58; '%c' in line&#58; %d; at col&#58; %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> lineCommentChar<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// #</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span>
				    <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>includeComments<span style="color&#58; #66cc66;">&#41;</span>
						state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">comment</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">token</span><span style="color&#58; #66cc66;">;</span>
					tokenStart <span style="color&#58; #66cc66;">=</span> i<span style="color&#58; #66cc66;">;</span>
					tokenCol <span style="color&#58; #66cc66;">=</span> col<span style="color&#58; #66cc66;">;</span>
					tokenLine <span style="color&#58; #66cc66;">=</span> line<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">&#58;</span>
				<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>lineEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected line ending in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenDelims&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token delimeter in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenHeads&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &lt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token beginning delimeter '%c' in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenEnds<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">==</span> ch<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &gt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span> <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenEnds<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">==</span> ch<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &#58;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token ending delimeter '%c' in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> lineCommentChar<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// #</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>includeComments<span style="color&#58; #66cc66;">&#41;</span>
						<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected comment char '%c' in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">token</span><span style="color&#58; #66cc66;">&#58;</span>
				<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>lineEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenDelims&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenHeads&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &lt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">;</span>
					tokenStart <span style="color&#58; #66cc66;">=</span> i<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> tokenEnds<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &gt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token ending delimeter '%c' in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> tokenEnds<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &#58;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span> <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">property</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> lineCommentChar<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// #</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>includeComments<span style="color&#58; #66cc66;">&#41;</span>
					<span style="color&#58; #66cc66;">&#123;</span>
						slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span> <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
						state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">comment</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">comment</span><span style="color&#58; #66cc66;">&#58;</span>
				<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>lineEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #66cc66;">&#125;</span>
		<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #ff0000;">'<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>'</span><span style="color&#58; #66cc66;">&#41;</span>
		<span style="color&#58; #66cc66;">&#123;</span>
			line<span style="color&#58; #66cc66;">++;</span>
			col <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #66cc66;">&#125;</span>
		<span style="color&#58; #b1b100;">else</span>
			col<span style="color&#58; #66cc66;">++;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
	<span style="color&#58; #b1b100;">switch</span><span style="color&#58; #66cc66;">&#40;</span>state<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">token</span><span style="color&#58; #66cc66;">&#58;</span>
			slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> &#36;<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #b1b100;">break</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">&#58;</span>
			<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Reached end of file unexpectedly while parsing token <span style="color&#58; #000099; font-weight&#58; bold;">\&quot;</span>%s<span style="color&#58; #000099; font-weight&#58; bold;">\&quot;</span> in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> &#36;<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #000000; font-weight&#58; bold;">default</span><span style="color&#58; #66cc66;">&#58;</span>
			<span style="color&#58; #b1b100;">break</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
	<span style="color&#58; #993333;">debug</span><span style="color&#58; #66cc66;">&#40;</span>LogFile<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #993333;">size&#95;t</span> ln <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>t<span style="color&#58; #66cc66;">;</span> slices<span style="color&#58; #66cc66;">&#41;</span>
		<span style="color&#58; #66cc66;">&#123;</span>
			<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ln <span style="color&#58; #66cc66;">&lt;</span> t&#46;<span style="color&#58; #006600;">line</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				parserLog&#46;<span style="color&#58; #006600;">write</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;<span style="color&#58; #000099; font-weight&#58; bold;">\r</span><span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">,</span> t&#46;<span style="color&#58; #006600;">toString</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				ln <span style="color&#58; #66cc66;">=</span> t&#46;<span style="color&#58; #006600;">line</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span>
				parserLog&#46;<span style="color&#58; #006600;">write</span><span style="color&#58; #66cc66;">&#40;</span>t&#46;<span style="color&#58; #006600;">toString</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #66cc66;">&#125;</span>
		parserLog&#46;<span style="color&#58; #006600;">writeln</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;<span style="color&#58; #000099; font-weight&#58; bold;">\r</span><span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
		parserLog&#46;<span style="color&#58; #006600;">close</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
	<span style="color&#58; #b1b100;">return</span> slices<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<br />
<span style="font-size: x-large;" class="mycode_size">Compile time function evaluation</span><br />
This will describe the basics of a very powerful feature of the D programming language: the Compile-time Function Execution (CTFE), which allows complicated functions to be fully evaluated at compile-time, irrespective of the optimization levels.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">C optimizations</span><br />
If you are an average C programmer, you know that simple code can be trusted to be evaluated at compile-time thanks to optimizers. For instance, if you write something like:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;C-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="c" style="font-family&#58;monospace;"><span style="color&#58; #993333;">void</span> square<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">int</span> x<span style="color&#58; #009900;">&#41;</span> <span style="color&#58; #009900;">&#123;</span> <span style="color&#58; #b1b100;">return</span> x <span style="color&#58; #339933;">*</span> x<span style="color&#58; #339933;">;</span> <span style="color&#58; #009900;">&#125;</span>
<span style="color&#58; #993333;">void</span> foo<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">void</span><span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> k <span style="color&#58; #339933;">=</span> square<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #0000dd;">32</span><span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">/* &#46;&#46;&#46; */</span>
<span style="color&#58; #009900;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
You trust your compiler to evaluate the square at compile-time, when optimizations are on. When things get more hairy:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;C-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="c" style="font-family&#58;monospace;"><span style="color&#58; #993333;">int</span> factorial<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">int</span> x<span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> result <span style="color&#58; #339933;">=</span> x<span style="color&#58; #339933;">;</span>
    <span style="color&#58; #b1b100;">while</span> <span style="color&#58; #009900;">&#40;</span><span style="color&#58; #339933;">--</span>x<span style="color&#58; #009900;">&#41;</span>
        result <span style="color&#58; #339933;">*=</span> x<span style="color&#58; #339933;">;</span>
    <span style="color&#58; #b1b100;">return</span> result<span style="color&#58; #339933;">;</span>
<span style="color&#58; #009900;">&#125;</span>
<span style="color&#58; #993333;">void</span> foo<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">void</span><span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> k <span style="color&#58; #339933;">=</span> factorial<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #0000dd;">8</span><span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">/* &#46;&#46;&#46; */</span>
<span style="color&#58; #009900;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
C programmers get immediately less confident about what will happen at run-time. For instance, would you say that your compiler is able to expand the above code at compile-time or not? Actually, the answer is “yes” in this particular case (unless you are using a very old compiler), but the point is still valid: this is not C code that one would write if he wants to be sure that the whole calculation be folded at compile-time.<br />
<br />
There is also another issue: since the language does not mandate that the value is folded (and in fact, it is not folded when optimizations are disabled), you cannot create a constant out of it, such as by assigning it to a const variable.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">When things get hairy</span><br />
Now, let’s try with a (very naive and simple) solution of problem #1 of Project Euler:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;C-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="c" style="font-family&#58;monospace;"><span style="color&#58; #339933;">#include &lt;stdio&#46;h&gt;</span>
<span style="color&#58; #993333;">int</span> euler1<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">int</span> max<span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> i<span style="color&#58; #339933;">,</span> res <span style="color&#58; #339933;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #b1b100;">for</span> <span style="color&#58; #009900;">&#40;</span>i <span style="color&#58; #339933;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #339933;">;</span> i <span style="color&#58; #339933;">&lt;</span> max<span style="color&#58; #339933;">;</span> i<span style="color&#58; #339933;">++</span><span style="color&#58; #009900;">&#41;</span>
    <span style="color&#58; #009900;">&#123;</span>
        <span style="color&#58; #b1b100;">if</span> <span style="color&#58; #009900;">&#40;</span><span style="color&#58; #009900;">&#40;</span>i <span style="color&#58; #339933;">%</span> <span style="color&#58; #0000dd;">3</span><span style="color&#58; #009900;">&#41;</span> <span style="color&#58; #339933;">==</span> <span style="color&#58; #0000dd;">0</span> <span style="color&#58; #339933;">||</span> <span style="color&#58; #009900;">&#40;</span>i <span style="color&#58; #339933;">%</span> <span style="color&#58; #0000dd;">5</span><span style="color&#58; #009900;">&#41;</span> <span style="color&#58; #339933;">==</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #009900;">&#41;</span>
            res <span style="color&#58; #339933;">+=</span> i<span style="color&#58; #339933;">;</span>
    <span style="color&#58; #009900;">&#125;</span>
    <span style="color&#58; #b1b100;">return</span> res<span style="color&#58; #339933;">;</span>
<span style="color&#58; #009900;">&#125;</span>
<span style="color&#58; #993333;">int</span> main<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> r10 <span style="color&#58; #339933;">=</span> euler1<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #0000dd;">10</span><span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #993333;">int</span> r1000 <span style="color&#58; #339933;">=</span> euler1<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #0000dd;">1000</span><span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <a href="http&#58;//www&#46;opengroup&#46;org/onlinepubs/009695399/functions/printf&#46;html"><span style="color&#58; #000066;">printf</span></a><span style="color&#58; #009900;">&#40;</span><span style="color&#58; #ff0000;">&quot;%d %d<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #339933;">,</span> r10<span style="color&#58; #339933;">,</span> r1000<span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #b1b100;">return</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #339933;">;</span>
<span style="color&#58; #009900;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
This program simply calculates the sum of all divisors of 3 or 5 below 1000. But if you look at the generated code with GCC under -O3, you will see that the actual results are not computed at compile-time, but rather calculated at runtime. I believe any average C programmer would agree that we should not expect this code to be folded at compile time.<br />
<br />
Now, meet the equivalent D code:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #993333;">int</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span> max<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #993333;">int</span> i<span style="color&#58; #66cc66;">,</span> res <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #b1b100;">for</span> <span style="color&#58; #66cc66;">&#40;</span>i <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">;</span> i <span style="color&#58; #66cc66;">&lt;</span> max<span style="color&#58; #66cc66;">;</span> i<span style="color&#58; #66cc66;">++</span><span style="color&#58; #66cc66;">&#41;</span>
    <span style="color&#58; #66cc66;">&#123;</span>
        <span style="color&#58; #b1b100;">if</span> <span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#40;</span>i <span style="color&#58; #66cc66;">%</span> <span style="color&#58; #0000dd;">3</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #0000dd;">0</span> <span style="color&#58; #66cc66;">||</span> <span style="color&#58; #66cc66;">&#40;</span>i <span style="color&#58; #66cc66;">%</span> <span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#41;</span>
            res <span style="color&#58; #66cc66;">+=</span> i<span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #66cc66;">&#125;</span>
    <span style="color&#58; #b1b100;">return</span> res<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span>
<span style="color&#58; #993333;">int</span> main<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #993333;">int</span> r10 <span style="color&#58; #66cc66;">=</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">10</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #993333;">int</span> r1000 <span style="color&#58; #66cc66;">=</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">1000</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    printf<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;%d %d<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">,</span> r10<span style="color&#58; #66cc66;">,</span> r1000<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #b1b100;">return</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
Deja-vu? Yes, it is exactly the same, barring the initial include statement that is not required (actually, there is no preprocessor in D and modules refer to each other with the import statement, but printf is a builtin). Of course, the above example was hand-crafted to make it both valid C and D code, but being D an evolution of C, the basic syntax is the same.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Meet CTFE</span><br />
And now the hattrick: in D, we can request the compiler to evaluate euler1 at compile-time by simply using the static keyword at invocation time:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #993333;">static</span> <span style="color&#58; #993333;">int</span> r10 <span style="color&#58; #66cc66;">=</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">10</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #993333;">static</span> <span style="color&#58; #993333;">int</span> r1000 <span style="color&#58; #66cc66;">=</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">1000</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span></pre></code></div></div>
		</td></tr></table><br />
Great, isn’t it? Now the result of the above function call are evaluated by the compiler, irrespective of the optimization levels. If the function cannot be evaluated at compile-time (usually because it has side-effects, like any kind of I/O), it will trigger a compile-time error.<br />
<br />
We can verify that the above constants really do appear in the generated code by compiling with gdc -save-temps euler1.d and then inspecting euler1.s:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;ASM-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="asm" style="font-family&#58;monospace;">D6euler14mainFZi3r10i<span style="color&#58; #339933;">&#58;</span>
    <span style="color&#58; #339933;">&#46;</span>long <span style="color&#58; #0000ff;">23</span>
<span style="color&#58; #339933;">&#46;</span>globl &#95;D6euler14mainFZi5r1000i
    <span style="color&#58; #339933;">&#46;</span><span style="color&#58; #000000; font-weight&#58; bold;">align</span> <span style="color&#58; #0000ff;">4</span>
    <span style="color&#58; #339933;">&#46;</span><span style="color&#58; #000000; font-weight&#58; bold;">type</span> &#95;D6euler14mainFZi5r1000i<span style="color&#58; #339933;">,</span> &#64; object
    <span style="color&#58; #339933;">&#46;</span><span style="color&#58; #000000; font-weight&#58; bold;">size</span> &#95;D6euler14mainFZi5r1000i<span style="color&#58; #339933;">,</span> <span style="color&#58; #0000ff;">4</span>
&#95;D6euler14mainFZi5r1000i<span style="color&#58; #339933;">&#58;</span>
    <span style="color&#58; #339933;">&#46;</span>long <span style="color&#58; #0000ff;">233168</span>
    <span style="color&#58; #339933;">&#46;</span>section <span style="color&#58; #339933;">&#46;</span>rodata
<span style="color&#58; #339933;">&#46;</span>LC0<span style="color&#58; #339933;">&#58;</span>
    <span style="color&#58; #339933;">&#46;</span>string <span style="color&#58; #7f007f;">&quot;%d %d\n&quot;</span>
    <span style="color&#58; #339933;">&#46;</span>text
    <span style="color&#58; #339933;">&#46;</span>globl &#95;Dmain
    <span style="color&#58; #339933;">&#46;</span><span style="color&#58; #000000; font-weight&#58; bold;">type</span> &#95;Dmain<span style="color&#58; #339933;">,</span> &#64; function
&#95;Dmain<span style="color&#58; #339933;">&#58;</span>
<span style="color&#58; #339933;">&#46;</span>LFB3<span style="color&#58; #339933;">&#58;</span>
    pushq <span style="color&#58; #339933;">%</span>rbp
<span style="color&#58; #339933;">&#46;</span>LCFI3<span style="color&#58; #339933;">&#58;</span>
    movq <span style="color&#58; #339933;">%</span>rsp<span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span>rbp
<span style="color&#58; #339933;">&#46;</span>LCFI4<span style="color&#58; #339933;">&#58;</span>
    movl &#95;D6euler14mainFZi5r1000i<span style="color&#58; #009900; font-weight&#58; bold;">&#40;</span><span style="color&#58; #339933;">%</span>rip<span style="color&#58; #009900; font-weight&#58; bold;">&#41;</span><span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">edx</span>
    movl &#95;D6euler14mainFZi3r10i<span style="color&#58; #009900; font-weight&#58; bold;">&#40;</span><span style="color&#58; #339933;">%</span>rip<span style="color&#58; #009900; font-weight&#58; bold;">&#41;</span><span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">esi</span>
    movl &#36;<span style="color&#58; #339933;">&#46;</span>LC0<span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">edi</span>
    movl &#36;<span style="color&#58; #0000ff;">0</span><span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">eax</span>
    <span style="color&#58; #00007f; font-weight&#58; bold;">call</span> printf
    movl &#36;<span style="color&#58; #0000ff;">0</span><span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">eax</span>
    <span style="color&#58; #00007f; font-weight&#58; bold;">leave</span>
    <span style="color&#58; #00007f; font-weight&#58; bold;">ret</span></pre></code></div></div>
		</td></tr></table><br />
Notice how the compiler has calculated the values 23 and 233168 (respectively, results of euler1(10) and euler1(1000)) and put them in the data section of the executable.<br />
<br />
If you are curious of what happens when the compiler cannot do the whole evaluation at compile-time, it is sufficient to stick a printf() call somewhere in the euler() function. Since printf() does some I/O, it breaks CFTE, and the compiler will happily tell you about that:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>euler1.d:9: Error: cannot evaluate printf("hello, world!&#92;x0a") at compile time euler1.d:15: Error: cannot evaluate euler1(10) at compile time euler1.d:16: Error: cannot evaluate euler1(1000) at compile time</code></div></div><br />
CTFE is simple yet very powerful. The fact that it is triggered at the call site (rather than being an attribute of the function, like the inline keyword) is a very smart design choice: it makes perfectly sense for the same function to be used at both run-time and compile-time, depending on the inputs.<br />
<br />
For the C++ guys reading, C++0x has grown a constexpr keyword that, while looking superficially similar, it is a lot less powerful, since it can only be used on very simple functions (basically, one-liners). In fact, the keyword is meant to be used while declaring a function, and not at the call-site, so it has to apply only on small functions which can be proved to always yield a constant value.<br />
<br />
<br />
origin: <a href="http://giovanni.bajo.it/post/47209620364/compile-time-function-execution-in-d" target="_blank" rel="noopener" class="mycode_url">Compile Time Function Execution in D</a><br />
<br />
<br />
<span style="font-size: x-large;" class="mycode_size">Templates, Meta-programming, mixins, and CTFE combination</span><br />
Meta-programming in D is extremely powerful, yet easy to use and understand at the same time.<br />
Writing a generic code that works with any type is dead simple:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;">T<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> quickSort<span style="color&#58; #66cc66;">&#40;</span>T<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#40;</span>T<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> array<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">//template function with type argument T</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">//implementation&#46;&#46;&#46;</span>
<span style="color&#58; #66cc66;">&#125;</span>
<span style="color&#58; #993333;">struct</span> RefCounted<span style="color&#58; #66cc66;">&#40;</span>T <span style="color&#58; #66cc66;">&#58;</span> <span style="color&#58; #993333;">struct</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    T<span style="color&#58; #66cc66;">*</span> data<span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #993333;">size&#95;t</span> rc <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #993333;">void</span> inc<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">&#123;</span> rc<span style="color&#58; #66cc66;">++;</span> <span style="color&#58; #66cc66;">&#125;</span>
    <span style="color&#58; #993333;">void</span> dec<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
    <span style="color&#58; #66cc66;">&#123;</span>
        rc<span style="color&#58; #66cc66;">--;</span>
        <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>rc <span style="color&#58; #66cc66;">&lt;=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#41;</span>
            destroy<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">*</span>data<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #66cc66;">&#125;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">//&#46;&#46;&#46;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
Imagine the possibilities:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">stdio</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">traits</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">conv</span><span style="color&#58; #66cc66;">,</span> std&#46;<span style="color&#58; #006600;">algorithm</span><span style="color&#58; #66cc66;">,</span> std&#46;<span style="color&#58; #006600;">array</span><span style="color&#58; #66cc66;">,</span> std&#46;<span style="color&#58; #006600;">string</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">datetime</span><span style="color&#58; #66cc66;">;</span>
&nbsp;
<span style="color&#58; #993333;">public</span> <span style="color&#58; #993333;">struct</span> XmlIgnore <span style="color&#58; #66cc66;">&#123;</span> <span style="color&#58; #993333;">public</span> <span style="color&#58; #993333;">bool</span> ignore <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">public</span> <span style="color&#58; #993333;">struct</span> ComplexTestStruct <span style="color&#58; #66cc66;">&#123;</span>
&#64;<span style="color&#58; #66cc66;">&#40;</span>XmlIgnore<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
  <span style="color&#58; #993333;">int</span> myint<span style="color&#58; #66cc66;">;</span>
&#64;<span style="color&#58; #66cc66;">&#40;</span>XmlIgnore<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
  <span style="color&#58; #993333;">double</span> precision<span style="color&#58; #66cc66;">;</span>
&#64;<span style="color&#58; #66cc66;">&#40;</span>XmlIgnore<span style="color&#58; #66cc66;">&#41;</span>
  Duration thetime<span style="color&#58; #66cc66;">;</span>
  <span style="color&#58; #993333;">bool</span> truth<span style="color&#58; #66cc66;">;</span>
  string<span style="color&#58; #66cc66;">&#91;</span>string<span style="color&#58; #66cc66;">&#93;</span> properties
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">void</span> main<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #993333;">auto</span> data <span style="color&#58; #66cc66;">=</span> ComplexTestStruct<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">50</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58;#800080;">0&#46;4</span><span style="color&#58; #66cc66;">,</span> dur<span style="color&#58; #66cc66;">!</span><span style="color&#58; #ff0000;">&quot;msecs&quot;</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">100</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">&quot;one&quot;</span><span style="color&#58; #66cc66;">&#58;</span><span style="color&#58; #ff0000;">&quot;first&quot;</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;two&quot;</span><span style="color&#58; #66cc66;">&#58;</span><span style="color&#58; #ff0000;">&quot;second&quot;</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    writeXml<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">public</span> <span style="color&#58; #993333;">void</span> writeXml<span style="color&#58; #66cc66;">&#40;</span>T<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#40;</span>T obj<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #993333;">int</span> indentLevel <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">,</span> string name <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">null</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> name <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #000000; font-weight&#58; bold;">null</span> <span style="color&#58; #66cc66;">?</span> T&#46;<span style="color&#58; #006600;">stringof</span> <span style="color&#58; #66cc66;">&#58;</span> name<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>mem<span style="color&#58; #66cc66;">;</span> FieldNameTuple<span style="color&#58; #66cc66;">!</span>T<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #993333;">const</span> string mix <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #ff0000;">&quot;obj&#46;&quot;</span> <span style="color&#58; #66cc66;">~</span> mem<span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>hasUDA<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">mixin</span><span style="color&#58; #66cc66;">&#40;</span>mix<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">,</span> XmlIgnore<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">||</span> <span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>hasUDA<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">mixin</span><span style="color&#58; #66cc66;">&#40;</span>mix<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">,</span> XmlIgnore<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
		<span style="color&#58; #66cc66;">&#123;</span>
			<span style="color&#58; #993333;">const</span> string typeStr <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">mixin</span><span style="color&#58; #66cc66;">&#40;</span>mix<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>&#46;<span style="color&#58; #006600;">stringof</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #993333;">auto</span> var <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">mixin</span><span style="color&#58; #66cc66;">&#40;</span>mix<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>&#95;&#95;traits<span style="color&#58; #66cc66;">&#40;</span>isScalar<span style="color&#58; #66cc66;">,</span> var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> var<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>&#95;&#95;traits<span style="color&#58; #66cc66;">&#40;</span>isAssociativeArray<span style="color&#58; #66cc66;">,</span> var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>key<span style="color&#58; #66cc66;">,</span> val<span style="color&#58; #66cc66;">;</span> var<span style="color&#58; #66cc66;">&#41;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">2</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> key<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> val<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> key<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>isArray<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">&&</span> <span style="color&#58; #66cc66;">!</span>isSomeString<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				<span style="color&#58; #993333;">const</span> string arrayElementTypeStr <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span>&#46;<span style="color&#58; #006600;">stringof</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>isBuiltinType<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #808080; font-style&#58; italic;">//writeln&#40;arrayElementTypeStr&#41;;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>val<span style="color&#58; #66cc66;">;</span> var<span style="color&#58; #66cc66;">&#41;</span>
						writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">2</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> arrayElementTypeStr<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> val<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> arrayElementTypeStr<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #808080; font-style&#58; italic;">//writeln&#40;arrayElementTypeStr&#41;;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>val<span style="color&#58; #66cc66;">;</span> var<span style="color&#58; #66cc66;">&#41;</span>
						writeXml<span style="color&#58; #66cc66;">&#40;</span>val<span style="color&#58; #66cc66;">,</span> indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">2</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">is</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #993333;">struct</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">||</span> <span style="color&#58; #000000; font-weight&#58; bold;">is</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #993333;">class</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">||</span> <span style="color&#58; #000000; font-weight&#58; bold;">is</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #000000; font-weight&#58; bold;">interface</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				writeXml<span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">,</span> indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>&#95;&#95;traits<span style="color&#58; #66cc66;">&#40;</span>compiles<span style="color&#58; #66cc66;">,</span> to<span style="color&#58; #66cc66;">!</span>string<span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				<span style="color&#58; #808080; font-style&#58; italic;">//writeln&#40;typeStr&#41;;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> to<span style="color&#58; #66cc66;">!</span>string<span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				<span style="color&#58; #808080; font-style&#58; italic;">//writeln&#40;typeStr&#41;;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> var<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
		<span style="color&#58; #66cc66;">&#125;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
	writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> name <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #000000; font-weight&#58; bold;">null</span> <span style="color&#58; #66cc66;">?</span> T&#46;<span style="color&#58; #006600;">stringof</span> <span style="color&#58; #66cc66;">&#58;</span> name<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">private</span> <span style="color&#58; #993333;">void</span> writeIndented<span style="color&#58; #66cc66;">&#40;</span>T<span style="color&#58; #66cc66;">&#46;&#46;&#46;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span> level<span style="color&#58; #66cc66;">,</span> T text<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	makeIndent<span style="color&#58; #66cc66;">&#40;</span>level<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	write<span style="color&#58; #66cc66;">&#40;</span>text<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">private</span> <span style="color&#58; #993333;">void</span> makeIndent<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span> level<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	<span style="color&#58; #b1b100;">for</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span> i <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">;</span> i <span style="color&#58; #66cc66;">&lt;</span> level<span style="color&#58; #66cc66;">;</span> i<span style="color&#58; #66cc66;">++</span><span style="color&#58; #66cc66;">&#41;</span>
		write<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;  &quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<br />
As this post turned out to be too long, you can ask me to elaborate on things you couldn't understand.<br />
<br />
Have a nice day...]]></description>
			<content:encoded><![CDATA["D is a systems programming language with C-like syntax and static typing. It combines efficiency, control and modeling power with safety and programmer productivity"<br />
-<a href="http://dlang.org" target="_blank" rel="noopener" class="mycode_url">dlang.org</a><br />
<br />
First, let me tell you how I stumbled upon D language: I was upset by how C# source code can be retained from it's executable (or DLL) no matter if you use obfuscators and such. I was thinking why is it that much hard to interact with native APIs and being unable to do some low level stuff in C# was not fun. There was few other things I had in mind wondering why can't there be that kind of language... I tried my best to like C++, I really did. No matter how much I tell myself it's not that bad, I gave up. It's unnecessarily complicated with no win. So I started to look for some C like language that can handle anything from low level to high level, have an optional GC, feature rich, and plays well with other languages. After weeks of searching, I said to myself "I bet there is a language called D" and I googled "d programming language". First result was the <a href="http://dlang.org" target="_blank" rel="noopener" class="mycode_url">dlang.org</a>. When I clicked on it, I was no longer thinking about creating my own language. It was there, it was D.<br />
<br />
<span style="font-size: x-large;" class="mycode_size">Module system</span><br />
No painful header file sh*t. There is no confusion of declaration and definition, order of signatures don't have a side effect, and no need for maintaining two different signatures. Yet, D supports separate compilation in a much cleaner way than C/C++.<br />
Modules are simple:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">module</span> drone&#46;<span style="color&#58; #006600;">algorithm</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> quickSort<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> data<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">//Implementation&#46;&#46;&#46;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
Doing something similar to above will require you to name your file "algorithm.d" and put it in a directory called "drone". This way you're forced to do the right thing. Doing so makes other people to figure out your code easier and it makes the project more manageable in the long run.<br />
Here is how one can use modules:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">module</span> program<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> drone&#46;<span style="color&#58; #006600;">algorithm</span> <span style="color&#58; #66cc66;">&#58;</span> quickSort<span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">//import only the required function</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> stdio <span style="color&#58; #66cc66;">=</span> std&#46;<span style="color&#58; #006600;">stdio</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">//renamed import can help not to pollute global scope</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">algorithm</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">//just simply import</span>
<span style="color&#58; #993333;">void</span> main<span style="color&#58; #66cc66;">&#40;</span>string<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> args<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">conv</span> <span style="color&#58; #66cc66;">&#58;</span> to<span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">//scoped imports will only available in the function scope</span>
    <span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>e<span style="color&#58; #66cc66;">;</span> quickSort<span style="color&#58; #66cc66;">&#40;</span>args&#46;<span style="color&#58; #006600;">map</span><span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span>a <span style="color&#58; #66cc66;">=&gt;</span> a&#46;<span style="color&#58; #006600;">to</span><span style="color&#58; #66cc66;">!</span><span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
        stdio&#46;<span style="color&#58; #006600;">writeln</span><span style="color&#58; #66cc66;">&#40;</span>e<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<span style="font-size: x-large;" class="mycode_size">Compile times</span><br />
The official reference compiler DMD is incredibly fast. One reason is not having any preprocessor (hence the module system), the other one is Walter Bright's outstanding optimization skills. DMD doesn't usually produce highly optimized/fast code, it produce it fast. Thus, compile-run-test cycle becomes satisfying. Many C++ guys expect a compiler error in their first D code compilation but get surprised that it's successfully compiled at such speed. There are also <a href="https://github.com/ldc-developers/ldc" target="_blank" rel="noopener" class="mycode_url">LDC</a> (LLVM based D compiler) and <a href="http://gdcproject.org/" target="_blank" rel="noopener" class="mycode_url">GDC</a> (GCC based D compiler) which compiles slower but produces strongly optimized binaries.<br />
<br />
<span style="font-size: x-large;" class="mycode_size">Slices</span><br />
A slice in D seems like a dynamic array in almost all aspects of the concept -- when passed without adornments, the data referred to is passed by reference, and it supports all the properties and functions one would expect a dynamic array type to support. But there is one very important difference. A slice does not own the array, it references the array. That is, the slice is not responsible for allocation or deallocation of its data. The responsible party for managing a dynamic array's memory is the D runtime.<br />
<br />
So where is the true dynamic array type in D? It's hidden by the runtime, and in fact, has no formal type. Slices are good enough, and as it turns out, the runtime is smart enough about what you want to do with the data, that you almost never notice dynamic arrays are missing as a full-fledged type. In fact, most D coders consider the D slice to be the dynamic array type -- it's even listed as a dynamic array type in the spec!<br />
<br />
With the combined protection of having the length of the data, and the garbage collector to manage the memory backing the data, slices are an extremely powerful, dynamic concept that is safe from most memory corruption issues. With D slices, one can write high-performance code with elegant and concise syntax that is awkward or inefficient in almost any other language.<br />
<br />
Let's see some D slices in action:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">stdio</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #993333;">void</span> main<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> a<span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// a is a slice</span>
    a <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// allocate a dynamic array of integers that has at least 5 elements, and give me a slice to the first 5&#46; Note that all data in D is default assigned, int's are defaulted to 0, so this array contains five 0's</span>
    <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> b <span style="color&#58; #66cc66;">=</span> a<span style="color&#58; #66cc66;">&#91;</span>0<span style="color&#58; #66cc66;">&#46;&#46;</span>2<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// This is a 'slicing' operation&#46; b now refers to the first two elements of a&#46; Note that D uses open interval for the upper limit, so a&#91;2&#93; is not included in b&#46;</span>
    <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> c <span style="color&#58; #66cc66;">=</span> a<span style="color&#58; #66cc66;">&#91;</span>&#36;<span style="color&#58; #66cc66;">-</span>2<span style="color&#58; #66cc66;">&#46;&#46;</span>&#36;<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// c refers to the last two elements of a &#40;&#36; stands for length inside a slice or index operation&#41;&#46;</span>
    c<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">4</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// this also assigns a&#91;3&#93;</span>
    c<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// this also assigns a&#91;4&#93;</span>
    b<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">=</span> c<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// assign the first two elements of a&#91;&#93; to the value from the last two elements &#40;4, 5&#41;&#46;</span>
    writeln<span style="color&#58; #66cc66;">&#40;</span>a<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// prints &quot;&#91;4, 5, 0, 4, 5&#93;&quot;</span>
    <span style="color&#58; #993333;">int</span><span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">&#93;</span> d<span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// d is a fixed sized array, allocated on the stack</span>
    b <span style="color&#58; #66cc66;">=</span> d<span style="color&#58; #66cc66;">&#91;</span>0<span style="color&#58; #66cc66;">&#46;&#46;</span>2<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// slices can point at fixed sized arrays too!</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
reference: <a href="https://dlang.org/d-array-article.html" target="_blank" rel="noopener" class="mycode_url">D Array Article</a><br />
<br />
Here is an advanced LF2 data parser (tokenizer) I wrote a while ago, it runs blazingly fast because no string copying takes place:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">stdio</span> <span style="color&#58; #66cc66;">&#58;</span> File<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">traits</span> <span style="color&#58; #66cc66;">&#58;</span> isSomeString<span style="color&#58; #66cc66;">,</span> isArray<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">range</span> <span style="color&#58; #66cc66;">&#58;</span> isInfinite<span style="color&#58; #66cc66;">,</span> isIterable<span style="color&#58; #66cc66;">,</span> isInputRange<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">string</span> <span style="color&#58; #66cc66;">&#58;</span> startsWith<span style="color&#58; #66cc66;">;</span>
&nbsp;
<span style="color&#58; #993333;">enum</span> TokenState <span style="color&#58; #66cc66;">&#58;</span> <span style="color&#58; #993333;">ubyte</span>
<span style="color&#58; #66cc66;">&#123;</span>
	none<span style="color&#58; #66cc66;">,</span>
	xml<span style="color&#58; #66cc66;">,</span>
	token<span style="color&#58; #66cc66;">,</span>
	comment
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">enum</span> TokenType <span style="color&#58; #66cc66;">&#58;</span> <span style="color&#58; #993333;">ubyte</span>
<span style="color&#58; #66cc66;">&#123;</span>
	normal<span style="color&#58; #66cc66;">,</span>
	xml<span style="color&#58; #66cc66;">,</span>
	property<span style="color&#58; #66cc66;">,</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">struct</span> Token<span style="color&#58; #66cc66;">&#40;</span>S<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>isSomeString<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	S str<span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #993333;">size&#95;t</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">;</span>
	TokenType type<span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #993333;">bool</span> commentic<span style="color&#58; #66cc66;">;</span>
&nbsp;
	string toString<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #b1b100;">return</span> format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">`&quot;%s&quot;&#91;line&#58; %d col&#58; %d&#93;  `</span><span style="color&#58; #66cc66;">,</span> str<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
immutable string tokenHeads <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">'&lt;'</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenEnds <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">'&gt;'</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">'&#58;'</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenDelims <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">' '</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">'<span style="color&#58; #000099; font-weight&#58; bold;">\t</span>'</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> 
	lineEnds <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">'<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>'</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">'<span style="color&#58; #000099; font-weight&#58; bold;">\r</span>'</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #993333;">enum</span> <span style="color&#58; #993333;">char</span> lineCommentChar <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #ff0000;">'#'</span><span style="color&#58; #66cc66;">;</span>
&nbsp;
<span style="color&#58; #993333;">class</span> ParserException <span style="color&#58; #66cc66;">&#58;</span> <span style="color&#58; #aaaadd; font-weight&#58; bold;">Exception</span>
<span style="color&#58; #66cc66;">&#123;</span>
	<span style="color&#58; #000000; font-weight&#58; bold;">this</span><span style="color&#58; #66cc66;">&#40;</span>string msg<span style="color&#58; #66cc66;">,</span> string file <span style="color&#58; #66cc66;">=</span> &#95;&#95;FILE&#95;&#95;<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #993333;">size&#95;t</span> line <span style="color&#58; #66cc66;">=</span> &#95;&#95;LINE&#95;&#95;<span style="color&#58; #66cc66;">,</span> Throwable next <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">null</span><span style="color&#58; #66cc66;">&#41;</span> &#64;<span style="color&#58; #66cc66;">&#40;</span>safe<span style="color&#58; #66cc66;">,</span> nogc<span style="color&#58; #66cc66;">&#41;</span> pure nothrow
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #000000; font-weight&#58; bold;">super</span><span style="color&#58; #66cc66;">&#40;</span>msg<span style="color&#58; #66cc66;">,</span> file<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> next<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #009933; font-style&#58; italic;">/// This function tokenizes LF2 data and returns a slice-array of strings&#46; Returned slices point to the given string&#46;</span>
<span style="color&#58; #993333;">public</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> parseData<span style="color&#58; #66cc66;">&#40;</span>S<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#40;</span>S data<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #993333;">bool</span> includeComments <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>isSomeString<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	<span style="color&#58; #993333;">debug</span><span style="color&#58; #66cc66;">&#40;</span>LogFile<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		File parserLog <span style="color&#58; #66cc66;">=</span> File<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;parser&#46;log&quot;</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;wb&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
		scope<span style="color&#58; #66cc66;">&#40;</span>exit<span style="color&#58; #66cc66;">&#41;</span> parserLog&#46;<span style="color&#58; #006600;">close</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
	Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> slices <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">4</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">;</span>
	slices&#46;<span style="color&#58; #006600;">reserve</span><span style="color&#58; #66cc66;">&#40;</span>data&#46;<span style="color&#58; #006600;">length</span> <span style="color&#58; #66cc66;">/</span> <span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #808080; font-style&#58; italic;">// Pre-allocate an aprox memory we might need</span>
&nbsp;
	<span style="color&#58; #993333;">bool</span> commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">;</span>
	TokenState state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #993333;">size&#95;t</span> tokenStart <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">,</span> tokenCol <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> tokenLine <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> line <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> col <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">;</span>
Lforeach<span style="color&#58; #66cc66;">&#58;</span>
	<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>i<span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">;</span> data<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
	Lswitch<span style="color&#58; #66cc66;">&#58;</span>
		<span style="color&#58; #993333;">final</span> <span style="color&#58; #b1b100;">switch</span><span style="color&#58; #66cc66;">&#40;</span>state<span style="color&#58; #66cc66;">&#41;</span>
		<span style="color&#58; #66cc66;">&#123;</span>
			<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">&#58;</span>
				<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>lineEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenDelims&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenHeads&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &lt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">;</span>
					tokenStart <span style="color&#58; #66cc66;">=</span> i<span style="color&#58; #66cc66;">;</span>
					tokenCol <span style="color&#58; #66cc66;">=</span> col<span style="color&#58; #66cc66;">;</span>
					tokenLine <span style="color&#58; #66cc66;">=</span> line<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &gt; &#58;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token ending delimeter&#58; '%c' in line&#58; %d; at col&#58; %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> lineCommentChar<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// #</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span>
				    <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>includeComments<span style="color&#58; #66cc66;">&#41;</span>
						state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">comment</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">token</span><span style="color&#58; #66cc66;">;</span>
					tokenStart <span style="color&#58; #66cc66;">=</span> i<span style="color&#58; #66cc66;">;</span>
					tokenCol <span style="color&#58; #66cc66;">=</span> col<span style="color&#58; #66cc66;">;</span>
					tokenLine <span style="color&#58; #66cc66;">=</span> line<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">&#58;</span>
				<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>lineEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected line ending in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenDelims&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token delimeter in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenHeads&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &lt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token beginning delimeter '%c' in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenEnds<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">==</span> ch<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &gt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span> <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenEnds<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span> <span style="color&#58; #66cc66;">==</span> ch<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &#58;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token ending delimeter '%c' in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> lineCommentChar<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// #</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>includeComments<span style="color&#58; #66cc66;">&#41;</span>
						<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected comment char '%c' in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">token</span><span style="color&#58; #66cc66;">&#58;</span>
				<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>lineEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenDelims&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>tokenHeads&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &lt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">;</span>
					tokenStart <span style="color&#58; #66cc66;">=</span> i<span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> tokenEnds<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &gt;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Unexpected token ending delimeter '%c' in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> ch<span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> tokenEnds<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// &#58;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span> <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">property</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> lineCommentChar<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">// #</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>includeComments<span style="color&#58; #66cc66;">&#41;</span>
					<span style="color&#58; #66cc66;">&#123;</span>
						slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> <span style="color&#58; #006600;">i</span> <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
						state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">comment</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">comment</span><span style="color&#58; #66cc66;">&#58;</span>
				<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>lineEnds&#46;<span style="color&#58; #006600;">canFind</span><span style="color&#58; #66cc66;">&#40;</span>ch<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					commentness <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span>
					state <span style="color&#58; #66cc66;">=</span> TokenState&#46;<span style="color&#58; #006600;">none</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">break</span> Lswitch<span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #66cc66;">&#125;</span>
		<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ch <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #ff0000;">'<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>'</span><span style="color&#58; #66cc66;">&#41;</span>
		<span style="color&#58; #66cc66;">&#123;</span>
			line<span style="color&#58; #66cc66;">++;</span>
			col <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #66cc66;">&#125;</span>
		<span style="color&#58; #b1b100;">else</span>
			col<span style="color&#58; #66cc66;">++;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
	<span style="color&#58; #b1b100;">switch</span><span style="color&#58; #66cc66;">&#40;</span>state<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">token</span><span style="color&#58; #66cc66;">&#58;</span>
			slices <span style="color&#58; #66cc66;">~=</span> Token<span style="color&#58; #66cc66;">!</span>S<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> &#36;<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> tokenLine<span style="color&#58; #66cc66;">,</span> tokenCol<span style="color&#58; #66cc66;">,</span> TokenType&#46;<span style="color&#58; #006600;">normal</span><span style="color&#58; #66cc66;">,</span> commentness<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #b1b100;">break</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #b1b100;">case</span> TokenState&#46;<span style="color&#58; #006600;">xml</span><span style="color&#58; #66cc66;">&#58;</span>
			<span style="color&#58; #000000; font-weight&#58; bold;">throw</span> <span style="color&#58; #000000; font-weight&#58; bold;">new</span> ParserException<span style="color&#58; #66cc66;">&#40;</span>format<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;Reached end of file unexpectedly while parsing token <span style="color&#58; #000099; font-weight&#58; bold;">\&quot;</span>%s<span style="color&#58; #000099; font-weight&#58; bold;">\&quot;</span> in line %d; at col %d&quot;</span><span style="color&#58; #66cc66;">,</span> data<span style="color&#58; #66cc66;">&#91;</span>tokenStart <span style="color&#58; #66cc66;">&#46;&#46;</span> &#36;<span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">,</span> line<span style="color&#58; #66cc66;">,</span> col<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #000000; font-weight&#58; bold;">default</span><span style="color&#58; #66cc66;">&#58;</span>
			<span style="color&#58; #b1b100;">break</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
	<span style="color&#58; #993333;">debug</span><span style="color&#58; #66cc66;">&#40;</span>LogFile<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #993333;">size&#95;t</span> ln <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>t<span style="color&#58; #66cc66;">;</span> slices<span style="color&#58; #66cc66;">&#41;</span>
		<span style="color&#58; #66cc66;">&#123;</span>
			<span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>ln <span style="color&#58; #66cc66;">&lt;</span> t&#46;<span style="color&#58; #006600;">line</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				parserLog&#46;<span style="color&#58; #006600;">write</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;<span style="color&#58; #000099; font-weight&#58; bold;">\r</span><span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">,</span> t&#46;<span style="color&#58; #006600;">toString</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				ln <span style="color&#58; #66cc66;">=</span> t&#46;<span style="color&#58; #006600;">line</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span>
				parserLog&#46;<span style="color&#58; #006600;">write</span><span style="color&#58; #66cc66;">&#40;</span>t&#46;<span style="color&#58; #006600;">toString</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #66cc66;">&#125;</span>
		parserLog&#46;<span style="color&#58; #006600;">writeln</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;<span style="color&#58; #000099; font-weight&#58; bold;">\r</span><span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
		parserLog&#46;<span style="color&#58; #006600;">close</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
	<span style="color&#58; #b1b100;">return</span> slices<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<br />
<span style="font-size: x-large;" class="mycode_size">Compile time function evaluation</span><br />
This will describe the basics of a very powerful feature of the D programming language: the Compile-time Function Execution (CTFE), which allows complicated functions to be fully evaluated at compile-time, irrespective of the optimization levels.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">C optimizations</span><br />
If you are an average C programmer, you know that simple code can be trusted to be evaluated at compile-time thanks to optimizers. For instance, if you write something like:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;C-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="c" style="font-family&#58;monospace;"><span style="color&#58; #993333;">void</span> square<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">int</span> x<span style="color&#58; #009900;">&#41;</span> <span style="color&#58; #009900;">&#123;</span> <span style="color&#58; #b1b100;">return</span> x <span style="color&#58; #339933;">*</span> x<span style="color&#58; #339933;">;</span> <span style="color&#58; #009900;">&#125;</span>
<span style="color&#58; #993333;">void</span> foo<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">void</span><span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> k <span style="color&#58; #339933;">=</span> square<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #0000dd;">32</span><span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">/* &#46;&#46;&#46; */</span>
<span style="color&#58; #009900;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
You trust your compiler to evaluate the square at compile-time, when optimizations are on. When things get more hairy:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;C-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="c" style="font-family&#58;monospace;"><span style="color&#58; #993333;">int</span> factorial<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">int</span> x<span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> result <span style="color&#58; #339933;">=</span> x<span style="color&#58; #339933;">;</span>
    <span style="color&#58; #b1b100;">while</span> <span style="color&#58; #009900;">&#40;</span><span style="color&#58; #339933;">--</span>x<span style="color&#58; #009900;">&#41;</span>
        result <span style="color&#58; #339933;">*=</span> x<span style="color&#58; #339933;">;</span>
    <span style="color&#58; #b1b100;">return</span> result<span style="color&#58; #339933;">;</span>
<span style="color&#58; #009900;">&#125;</span>
<span style="color&#58; #993333;">void</span> foo<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">void</span><span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> k <span style="color&#58; #339933;">=</span> factorial<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #0000dd;">8</span><span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">/* &#46;&#46;&#46; */</span>
<span style="color&#58; #009900;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
C programmers get immediately less confident about what will happen at run-time. For instance, would you say that your compiler is able to expand the above code at compile-time or not? Actually, the answer is “yes” in this particular case (unless you are using a very old compiler), but the point is still valid: this is not C code that one would write if he wants to be sure that the whole calculation be folded at compile-time.<br />
<br />
There is also another issue: since the language does not mandate that the value is folded (and in fact, it is not folded when optimizations are disabled), you cannot create a constant out of it, such as by assigning it to a const variable.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">When things get hairy</span><br />
Now, let’s try with a (very naive and simple) solution of problem #1 of Project Euler:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;C-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="c" style="font-family&#58;monospace;"><span style="color&#58; #339933;">#include &lt;stdio&#46;h&gt;</span>
<span style="color&#58; #993333;">int</span> euler1<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #993333;">int</span> max<span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> i<span style="color&#58; #339933;">,</span> res <span style="color&#58; #339933;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #b1b100;">for</span> <span style="color&#58; #009900;">&#40;</span>i <span style="color&#58; #339933;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #339933;">;</span> i <span style="color&#58; #339933;">&lt;</span> max<span style="color&#58; #339933;">;</span> i<span style="color&#58; #339933;">++</span><span style="color&#58; #009900;">&#41;</span>
    <span style="color&#58; #009900;">&#123;</span>
        <span style="color&#58; #b1b100;">if</span> <span style="color&#58; #009900;">&#40;</span><span style="color&#58; #009900;">&#40;</span>i <span style="color&#58; #339933;">%</span> <span style="color&#58; #0000dd;">3</span><span style="color&#58; #009900;">&#41;</span> <span style="color&#58; #339933;">==</span> <span style="color&#58; #0000dd;">0</span> <span style="color&#58; #339933;">||</span> <span style="color&#58; #009900;">&#40;</span>i <span style="color&#58; #339933;">%</span> <span style="color&#58; #0000dd;">5</span><span style="color&#58; #009900;">&#41;</span> <span style="color&#58; #339933;">==</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #009900;">&#41;</span>
            res <span style="color&#58; #339933;">+=</span> i<span style="color&#58; #339933;">;</span>
    <span style="color&#58; #009900;">&#125;</span>
    <span style="color&#58; #b1b100;">return</span> res<span style="color&#58; #339933;">;</span>
<span style="color&#58; #009900;">&#125;</span>
<span style="color&#58; #993333;">int</span> main<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #009900;">&#41;</span>
<span style="color&#58; #009900;">&#123;</span>
    <span style="color&#58; #993333;">int</span> r10 <span style="color&#58; #339933;">=</span> euler1<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #0000dd;">10</span><span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #993333;">int</span> r1000 <span style="color&#58; #339933;">=</span> euler1<span style="color&#58; #009900;">&#40;</span><span style="color&#58; #0000dd;">1000</span><span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <a href="http&#58;//www&#46;opengroup&#46;org/onlinepubs/009695399/functions/printf&#46;html"><span style="color&#58; #000066;">printf</span></a><span style="color&#58; #009900;">&#40;</span><span style="color&#58; #ff0000;">&quot;%d %d<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #339933;">,</span> r10<span style="color&#58; #339933;">,</span> r1000<span style="color&#58; #009900;">&#41;</span><span style="color&#58; #339933;">;</span>
    <span style="color&#58; #b1b100;">return</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #339933;">;</span>
<span style="color&#58; #009900;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
This program simply calculates the sum of all divisors of 3 or 5 below 1000. But if you look at the generated code with GCC under -O3, you will see that the actual results are not computed at compile-time, but rather calculated at runtime. I believe any average C programmer would agree that we should not expect this code to be folded at compile time.<br />
<br />
Now, meet the equivalent D code:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #993333;">int</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span> max<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #993333;">int</span> i<span style="color&#58; #66cc66;">,</span> res <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #b1b100;">for</span> <span style="color&#58; #66cc66;">&#40;</span>i <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">;</span> i <span style="color&#58; #66cc66;">&lt;</span> max<span style="color&#58; #66cc66;">;</span> i<span style="color&#58; #66cc66;">++</span><span style="color&#58; #66cc66;">&#41;</span>
    <span style="color&#58; #66cc66;">&#123;</span>
        <span style="color&#58; #b1b100;">if</span> <span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#40;</span>i <span style="color&#58; #66cc66;">%</span> <span style="color&#58; #0000dd;">3</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #0000dd;">0</span> <span style="color&#58; #66cc66;">||</span> <span style="color&#58; #66cc66;">&#40;</span>i <span style="color&#58; #66cc66;">%</span> <span style="color&#58; #0000dd;">5</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#41;</span>
            res <span style="color&#58; #66cc66;">+=</span> i<span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #66cc66;">&#125;</span>
    <span style="color&#58; #b1b100;">return</span> res<span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span>
<span style="color&#58; #993333;">int</span> main<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #993333;">int</span> r10 <span style="color&#58; #66cc66;">=</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">10</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #993333;">int</span> r1000 <span style="color&#58; #66cc66;">=</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">1000</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    printf<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;%d %d<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">,</span> r10<span style="color&#58; #66cc66;">,</span> r1000<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #b1b100;">return</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
Deja-vu? Yes, it is exactly the same, barring the initial include statement that is not required (actually, there is no preprocessor in D and modules refer to each other with the import statement, but printf is a builtin). Of course, the above example was hand-crafted to make it both valid C and D code, but being D an evolution of C, the basic syntax is the same.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Meet CTFE</span><br />
And now the hattrick: in D, we can request the compiler to evaluate euler1 at compile-time by simply using the static keyword at invocation time:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #993333;">static</span> <span style="color&#58; #993333;">int</span> r10 <span style="color&#58; #66cc66;">=</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">10</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #993333;">static</span> <span style="color&#58; #993333;">int</span> r1000 <span style="color&#58; #66cc66;">=</span> euler1<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">1000</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span></pre></code></div></div>
		</td></tr></table><br />
Great, isn’t it? Now the result of the above function call are evaluated by the compiler, irrespective of the optimization levels. If the function cannot be evaluated at compile-time (usually because it has side-effects, like any kind of I/O), it will trigger a compile-time error.<br />
<br />
We can verify that the above constants really do appear in the generated code by compiling with gdc -save-temps euler1.d and then inspecting euler1.s:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;ASM-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="asm" style="font-family&#58;monospace;">D6euler14mainFZi3r10i<span style="color&#58; #339933;">&#58;</span>
    <span style="color&#58; #339933;">&#46;</span>long <span style="color&#58; #0000ff;">23</span>
<span style="color&#58; #339933;">&#46;</span>globl &#95;D6euler14mainFZi5r1000i
    <span style="color&#58; #339933;">&#46;</span><span style="color&#58; #000000; font-weight&#58; bold;">align</span> <span style="color&#58; #0000ff;">4</span>
    <span style="color&#58; #339933;">&#46;</span><span style="color&#58; #000000; font-weight&#58; bold;">type</span> &#95;D6euler14mainFZi5r1000i<span style="color&#58; #339933;">,</span> &#64; object
    <span style="color&#58; #339933;">&#46;</span><span style="color&#58; #000000; font-weight&#58; bold;">size</span> &#95;D6euler14mainFZi5r1000i<span style="color&#58; #339933;">,</span> <span style="color&#58; #0000ff;">4</span>
&#95;D6euler14mainFZi5r1000i<span style="color&#58; #339933;">&#58;</span>
    <span style="color&#58; #339933;">&#46;</span>long <span style="color&#58; #0000ff;">233168</span>
    <span style="color&#58; #339933;">&#46;</span>section <span style="color&#58; #339933;">&#46;</span>rodata
<span style="color&#58; #339933;">&#46;</span>LC0<span style="color&#58; #339933;">&#58;</span>
    <span style="color&#58; #339933;">&#46;</span>string <span style="color&#58; #7f007f;">&quot;%d %d\n&quot;</span>
    <span style="color&#58; #339933;">&#46;</span>text
    <span style="color&#58; #339933;">&#46;</span>globl &#95;Dmain
    <span style="color&#58; #339933;">&#46;</span><span style="color&#58; #000000; font-weight&#58; bold;">type</span> &#95;Dmain<span style="color&#58; #339933;">,</span> &#64; function
&#95;Dmain<span style="color&#58; #339933;">&#58;</span>
<span style="color&#58; #339933;">&#46;</span>LFB3<span style="color&#58; #339933;">&#58;</span>
    pushq <span style="color&#58; #339933;">%</span>rbp
<span style="color&#58; #339933;">&#46;</span>LCFI3<span style="color&#58; #339933;">&#58;</span>
    movq <span style="color&#58; #339933;">%</span>rsp<span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span>rbp
<span style="color&#58; #339933;">&#46;</span>LCFI4<span style="color&#58; #339933;">&#58;</span>
    movl &#95;D6euler14mainFZi5r1000i<span style="color&#58; #009900; font-weight&#58; bold;">&#40;</span><span style="color&#58; #339933;">%</span>rip<span style="color&#58; #009900; font-weight&#58; bold;">&#41;</span><span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">edx</span>
    movl &#95;D6euler14mainFZi3r10i<span style="color&#58; #009900; font-weight&#58; bold;">&#40;</span><span style="color&#58; #339933;">%</span>rip<span style="color&#58; #009900; font-weight&#58; bold;">&#41;</span><span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">esi</span>
    movl &#36;<span style="color&#58; #339933;">&#46;</span>LC0<span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">edi</span>
    movl &#36;<span style="color&#58; #0000ff;">0</span><span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">eax</span>
    <span style="color&#58; #00007f; font-weight&#58; bold;">call</span> printf
    movl &#36;<span style="color&#58; #0000ff;">0</span><span style="color&#58; #339933;">,</span> <span style="color&#58; #339933;">%</span><span style="color&#58; #00007f;">eax</span>
    <span style="color&#58; #00007f; font-weight&#58; bold;">leave</span>
    <span style="color&#58; #00007f; font-weight&#58; bold;">ret</span></pre></code></div></div>
		</td></tr></table><br />
Notice how the compiler has calculated the values 23 and 233168 (respectively, results of euler1(10) and euler1(1000)) and put them in the data section of the executable.<br />
<br />
If you are curious of what happens when the compiler cannot do the whole evaluation at compile-time, it is sufficient to stick a printf() call somewhere in the euler() function. Since printf() does some I/O, it breaks CFTE, and the compiler will happily tell you about that:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>euler1.d:9: Error: cannot evaluate printf("hello, world!&#92;x0a") at compile time euler1.d:15: Error: cannot evaluate euler1(10) at compile time euler1.d:16: Error: cannot evaluate euler1(1000) at compile time</code></div></div><br />
CTFE is simple yet very powerful. The fact that it is triggered at the call site (rather than being an attribute of the function, like the inline keyword) is a very smart design choice: it makes perfectly sense for the same function to be used at both run-time and compile-time, depending on the inputs.<br />
<br />
For the C++ guys reading, C++0x has grown a constexpr keyword that, while looking superficially similar, it is a lot less powerful, since it can only be used on very simple functions (basically, one-liners). In fact, the keyword is meant to be used while declaring a function, and not at the call-site, so it has to apply only on small functions which can be proved to always yield a constant value.<br />
<br />
<br />
origin: <a href="http://giovanni.bajo.it/post/47209620364/compile-time-function-execution-in-d" target="_blank" rel="noopener" class="mycode_url">Compile Time Function Execution in D</a><br />
<br />
<br />
<span style="font-size: x-large;" class="mycode_size">Templates, Meta-programming, mixins, and CTFE combination</span><br />
Meta-programming in D is extremely powerful, yet easy to use and understand at the same time.<br />
Writing a generic code that works with any type is dead simple:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;">T<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> quickSort<span style="color&#58; #66cc66;">&#40;</span>T<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#40;</span>T<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #66cc66;">&#93;</span> array<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #808080; font-style&#58; italic;">//template function with type argument T</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">//implementation&#46;&#46;&#46;</span>
<span style="color&#58; #66cc66;">&#125;</span>
<span style="color&#58; #993333;">struct</span> RefCounted<span style="color&#58; #66cc66;">&#40;</span>T <span style="color&#58; #66cc66;">&#58;</span> <span style="color&#58; #993333;">struct</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    T<span style="color&#58; #66cc66;">*</span> data<span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #993333;">size&#95;t</span> rc <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #993333;">void</span> inc<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">&#123;</span> rc<span style="color&#58; #66cc66;">++;</span> <span style="color&#58; #66cc66;">&#125;</span>
    <span style="color&#58; #993333;">void</span> dec<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
    <span style="color&#58; #66cc66;">&#123;</span>
        rc<span style="color&#58; #66cc66;">--;</span>
        <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>rc <span style="color&#58; #66cc66;">&lt;=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#41;</span>
            destroy<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">*</span>data<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    <span style="color&#58; #66cc66;">&#125;</span>
    <span style="color&#58; #808080; font-style&#58; italic;">//&#46;&#46;&#46;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
Imagine the possibilities:<br />

		<table width='100%' border='0' style='table-layout:fixed;'><tr><td>
		<div class="geshicode_h" style='padding: 5px; background-color: #888888; border: 1px solid #AAAAAA; color: #000000;'>&nbsp;&nbsp;&nbsp;&nbsp;D-Code:
			<div class="geshicode_b" style='background-color: #FFFFFF; padding-left: 5px; border: 1px solid #BBBBBB; overflow: auto; height: auto; max-height: 300px'><pre class="d" style="font-family&#58;monospace;"><span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">stdio</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">traits</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">conv</span><span style="color&#58; #66cc66;">,</span> std&#46;<span style="color&#58; #006600;">algorithm</span><span style="color&#58; #66cc66;">,</span> std&#46;<span style="color&#58; #006600;">array</span><span style="color&#58; #66cc66;">,</span> std&#46;<span style="color&#58; #006600;">string</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #000000; font-weight&#58; bold;">import</span> std&#46;<span style="color&#58; #006600;">datetime</span><span style="color&#58; #66cc66;">;</span>
&nbsp;
<span style="color&#58; #993333;">public</span> <span style="color&#58; #993333;">struct</span> XmlIgnore <span style="color&#58; #66cc66;">&#123;</span> <span style="color&#58; #993333;">public</span> <span style="color&#58; #993333;">bool</span> ignore <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">;</span> <span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">public</span> <span style="color&#58; #993333;">struct</span> ComplexTestStruct <span style="color&#58; #66cc66;">&#123;</span>
&#64;<span style="color&#58; #66cc66;">&#40;</span>XmlIgnore<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">false</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
  <span style="color&#58; #993333;">int</span> myint<span style="color&#58; #66cc66;">;</span>
&#64;<span style="color&#58; #66cc66;">&#40;</span>XmlIgnore<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
  <span style="color&#58; #993333;">double</span> precision<span style="color&#58; #66cc66;">;</span>
&#64;<span style="color&#58; #66cc66;">&#40;</span>XmlIgnore<span style="color&#58; #66cc66;">&#41;</span>
  Duration thetime<span style="color&#58; #66cc66;">;</span>
  <span style="color&#58; #993333;">bool</span> truth<span style="color&#58; #66cc66;">;</span>
  string<span style="color&#58; #66cc66;">&#91;</span>string<span style="color&#58; #66cc66;">&#93;</span> properties
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">void</span> main<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
    <span style="color&#58; #993333;">auto</span> data <span style="color&#58; #66cc66;">=</span> ComplexTestStruct<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">50</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58;#800080;">0&#46;4</span><span style="color&#58; #66cc66;">,</span> dur<span style="color&#58; #66cc66;">!</span><span style="color&#58; #ff0000;">&quot;msecs&quot;</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #0000dd;">100</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #ff0000;">&quot;one&quot;</span><span style="color&#58; #66cc66;">&#58;</span><span style="color&#58; #ff0000;">&quot;first&quot;</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;two&quot;</span><span style="color&#58; #66cc66;">&#58;</span><span style="color&#58; #ff0000;">&quot;second&quot;</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
    writeXml<span style="color&#58; #66cc66;">&#40;</span>data<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">public</span> <span style="color&#58; #993333;">void</span> writeXml<span style="color&#58; #66cc66;">&#40;</span>T<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#40;</span>T obj<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #993333;">int</span> indentLevel <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">,</span> string name <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">null</span><span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> name <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #000000; font-weight&#58; bold;">null</span> <span style="color&#58; #66cc66;">?</span> T&#46;<span style="color&#58; #006600;">stringof</span> <span style="color&#58; #66cc66;">&#58;</span> name<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>mem<span style="color&#58; #66cc66;">;</span> FieldNameTuple<span style="color&#58; #66cc66;">!</span>T<span style="color&#58; #66cc66;">&#41;</span>
	<span style="color&#58; #66cc66;">&#123;</span>
		<span style="color&#58; #993333;">const</span> string mix <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #ff0000;">&quot;obj&#46;&quot;</span> <span style="color&#58; #66cc66;">~</span> mem<span style="color&#58; #66cc66;">;</span>
		<span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>hasUDA<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">mixin</span><span style="color&#58; #66cc66;">&#40;</span>mix<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">,</span> XmlIgnore<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">||</span> <span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #66cc66;">!</span>hasUDA<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">mixin</span><span style="color&#58; #66cc66;">&#40;</span>mix<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">,</span> XmlIgnore<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">true</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
		<span style="color&#58; #66cc66;">&#123;</span>
			<span style="color&#58; #993333;">const</span> string typeStr <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">mixin</span><span style="color&#58; #66cc66;">&#40;</span>mix<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>&#46;<span style="color&#58; #006600;">stringof</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #993333;">auto</span> var <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">mixin</span><span style="color&#58; #66cc66;">&#40;</span>mix<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>&#95;&#95;traits<span style="color&#58; #66cc66;">&#40;</span>isScalar<span style="color&#58; #66cc66;">,</span> var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> var<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>&#95;&#95;traits<span style="color&#58; #66cc66;">&#40;</span>isAssociativeArray<span style="color&#58; #66cc66;">,</span> var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>key<span style="color&#58; #66cc66;">,</span> val<span style="color&#58; #66cc66;">;</span> var<span style="color&#58; #66cc66;">&#41;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">2</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> key<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> val<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> key<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>isArray<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">&&</span> <span style="color&#58; #66cc66;">!</span>isSomeString<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				<span style="color&#58; #993333;">const</span> string arrayElementTypeStr <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span>&#46;<span style="color&#58; #006600;">stringof</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>isBuiltinType<span style="color&#58; #66cc66;">!</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#91;</span><span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">&#93;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #808080; font-style&#58; italic;">//writeln&#40;arrayElementTypeStr&#41;;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>val<span style="color&#58; #66cc66;">;</span> var<span style="color&#58; #66cc66;">&#41;</span>
						writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">2</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> arrayElementTypeStr<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> val<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> arrayElementTypeStr<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
				<span style="color&#58; #b1b100;">else</span>
				<span style="color&#58; #66cc66;">&#123;</span>
					<span style="color&#58; #808080; font-style&#58; italic;">//writeln&#40;arrayElementTypeStr&#41;;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					<span style="color&#58; #b1b100;">foreach</span><span style="color&#58; #66cc66;">&#40;</span>val<span style="color&#58; #66cc66;">;</span> var<span style="color&#58; #66cc66;">&#41;</span>
						writeXml<span style="color&#58; #66cc66;">&#40;</span>val<span style="color&#58; #66cc66;">,</span> indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">2</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
					writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
				<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #993333;">static</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">is</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #993333;">struct</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">||</span> <span style="color&#58; #000000; font-weight&#58; bold;">is</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #993333;">class</span><span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">||</span> <span style="color&#58; #000000; font-weight&#58; bold;">is</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #000000; font-weight&#58; bold;">typeof</span><span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span> <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #000000; font-weight&#58; bold;">interface</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				writeXml<span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">,</span> indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span> <span style="color&#58; #b1b100;">if</span><span style="color&#58; #66cc66;">&#40;</span>&#95;&#95;traits<span style="color&#58; #66cc66;">&#40;</span>compiles<span style="color&#58; #66cc66;">,</span> to<span style="color&#58; #66cc66;">!</span>string<span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#41;</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				<span style="color&#58; #808080; font-style&#58; italic;">//writeln&#40;typeStr&#41;;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> to<span style="color&#58; #66cc66;">!</span>string<span style="color&#58; #66cc66;">&#40;</span>var<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
			<span style="color&#58; #b1b100;">else</span>
			<span style="color&#58; #66cc66;">&#123;</span>
				<span style="color&#58; #808080; font-style&#58; italic;">//writeln&#40;typeStr&#41;;</span>
				writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel <span style="color&#58; #66cc66;">+</span> <span style="color&#58; #0000dd;">1</span><span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;&quot;</span><span style="color&#58; #66cc66;">,</span> var<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> mem<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
			<span style="color&#58; #66cc66;">&#125;</span>
		<span style="color&#58; #66cc66;">&#125;</span>
	<span style="color&#58; #66cc66;">&#125;</span>
	writeIndented<span style="color&#58; #66cc66;">&#40;</span>indentLevel<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&lt;/&quot;</span><span style="color&#58; #66cc66;">,</span> name <span style="color&#58; #66cc66;">==</span> <span style="color&#58; #000000; font-weight&#58; bold;">null</span> <span style="color&#58; #66cc66;">?</span> T&#46;<span style="color&#58; #006600;">stringof</span> <span style="color&#58; #66cc66;">&#58;</span> name<span style="color&#58; #66cc66;">,</span> <span style="color&#58; #ff0000;">&quot;&gt;<span style="color&#58; #000099; font-weight&#58; bold;">\n</span>&quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">private</span> <span style="color&#58; #993333;">void</span> writeIndented<span style="color&#58; #66cc66;">&#40;</span>T<span style="color&#58; #66cc66;">&#46;&#46;&#46;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span> level<span style="color&#58; #66cc66;">,</span> T text<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	makeIndent<span style="color&#58; #66cc66;">&#40;</span>level<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
	write<span style="color&#58; #66cc66;">&#40;</span>text<span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span>
&nbsp;
<span style="color&#58; #993333;">private</span> <span style="color&#58; #993333;">void</span> makeIndent<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span> level<span style="color&#58; #66cc66;">&#41;</span>
<span style="color&#58; #66cc66;">&#123;</span>
	<span style="color&#58; #b1b100;">for</span><span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #993333;">int</span> i <span style="color&#58; #66cc66;">=</span> <span style="color&#58; #0000dd;">0</span><span style="color&#58; #66cc66;">;</span> i <span style="color&#58; #66cc66;">&lt;</span> level<span style="color&#58; #66cc66;">;</span> i<span style="color&#58; #66cc66;">++</span><span style="color&#58; #66cc66;">&#41;</span>
		write<span style="color&#58; #66cc66;">&#40;</span><span style="color&#58; #ff0000;">&quot;  &quot;</span><span style="color&#58; #66cc66;">&#41;</span><span style="color&#58; #66cc66;">;</span>
<span style="color&#58; #66cc66;">&#125;</span></pre></code></div></div>
		</td></tr></table><br />
<br />
<br />
As this post turned out to be too long, you can ask me to elaborate on things you couldn't understand.<br />
<br />
Have a nice day...]]></content:encoded>
		</item>
	</channel>
</rss>