Before you read this post press the hard refresh button on your browser (e.g., CTRL-F5).
The A.cc HTML mockup (yes, a bad pun on markup) code has been overhauled. Almost everything is different, so you really do need to pay attention to the changes. This is not an attempt to fix any shortcomings in the implementation of the previous version. Instead, the focus was on modernizing the language itself to be less whimsical than the bbcode-ish variety.
For the impatient, refer to the Cheat Sheet. <-- IF YOU ONLY HAVE A FEW MOMENTS TO LIVE, READ THIS
I wrote the thing entirely over the past weekend. As always, I do no advanced testing. Edge cases are particularly prone to doing weird things. If you come across something that isn't displayed properly, then tell me about it. But first make sure it isn't by-design behavior by reading how everything is supposed to work.
If you have comments, concerns, or questions, then ask (after reading all of the material).
It is not backward compatible; don't ask for it to be.
HTML tags replace old [square bracket] tags
Think <b> instead of [b], <quote> instead of [quote], etc. All tags must be well formed XHTML. This means:
All attributes have a name and a value
All attribute values must be quoted with double quotes.
All tags must be closed, and in the proper sequence.
The following are errors:
<foo bar> - bar has no value.
<foo bar=1> - bar's value is not quoted.
<foo><bar></foo></bar> - foo is closed before <bar>
<img src="foo.png"> - The tag is not closed. It can be closed with a trailing slash: <img src="foo.png" />
Unlike real XHTML, all errors are ignored. This allows you to not have to worry about escaping XHTML characters. e.g., you can safely enter fake tags like <grin> or invalid sequence like <a-b>.
There are limitations on what tags can hold. It should be obvious, but things like <a><quote> are not allowed. The invalid inner tags will just be printed out as-is.
The escape character: \
In some situations, you may want to disable transformations from taking place. To do that, you can prefix them with a \ character. The escape sequence only goes into effect if the next character can be escaped. So both a single \ and double \\ will show up just fine, as there's nothing to escape. It's meant for something like \<b> to be displayed as <b>.
Again, the goal is for it to just work. If you find yourself wanting to escape a character, it will probably work. If not, it will probably show up as-is.
One exception is that smileys cannot be escaped. However, they now must be preceded by whitespace. Thus Foo::Par doesn't trigger a smiley, nor does a bewildered question???
Paragraphs and new lines automatically inserted. A technicality: <p> tags are now generated in place of double <br /> tags.
Note that most inline tags do not support spacing. This is by design! If you try to put line breaks inside (e.g.) <b> tags, nothing will happen (other than a single whitespace character).
Most of the tags can be triggered via wiki-like symbols. e.g., *bold* -> bold, /italics/ -> italics, _underline_ -> underline. It especially makes lists easy to use.
Refer to the cheat sheet for the full list.
The <h1> ... <h5> tags are now implemented. Handle with care!
Very few posts need them. Unless you are composing a very complex document with logical sub-sections, do not use them.
And when you do use them, don't feel compelled to start out with <h1> or <h2>. They both add horizontal lines which may be distracting in a small post. <h3> is more appropriate to divide a medium sized post up into a few sections.
The <pre> tag now works exactly like it does in regular HTML. All inline tags that do not change the size of the font can be used inside it.
There is a new <terminal> tag that can be used to display output from a terminal, compiler, etc. It will likely replace most usage of <pre>. It scrolls like a <code> box, but does not get colored.
Back up your
madeup facts with references via the <ref> tag. e.g.:
The Honan Chapel is located in Cork, Ireland. 
"Spoiler" text can be hidden via the <spoiler> tag. The contents will be hidden until you click the "reveal" link.
Multimedia can be embedded via the <object> tag. By default, embedded content will be an image. Clicking on the image will create the embedded object's widget.
You can adjust the default behavior in one of two ways (not implemented yet):
More Strict: Embedded objects are always displayed as text links, or
Less Strict: Embedded objects are automatically activated. (Not to be confused with automatically playing.)
Embedding an image is the same thing as using the <img> tag, so none of the above applies to them.
Currently, not much is actually implemented other than an mp3 player. But the idea is that it could support any type of embedded content.
There are a few subtle changes to the images:
Clicking on thumbnails will not ever display any image larger than 1024 pixels. I'm tired of people uploading five billion megapixel images showing off grains and blurs. To display the super-full sized image, you will have to shift-click on it.
If a thumbnail is also a link, you can activate the link via ctrl-clicking on the image. Those thumbnails will have blue borders. (But I still don't recommend putting images inside links.)
Images from attachments are no longer cached! If you upload an attachment, link to it, and then delete it, the original full size image will be gone.
Also, strictly to save disk space, images are no longer double cached. Displaying the same image from multiple sources will result in a single cached instance.
Inline images (e.g., BMP) that are not web-friendly are converted to PNG files.
The wiki style is easy to use, yet doesn't get in the way when you don't want it. You can generally mix and match wiki marks with XHTML without any problems.
One basic restriction that applies to all wiki marks is that they only work on a single line.
There are four font styles that can be activated via wiki marks:
*bold* -> bold
/italics/ -> italics
_underline_ -> underline
To prevent accidental transformations, they are only triggered if they wrap words or phrases. Even a space before or after (e.g., * foo * ) will prevent anything from happening. Punctuation is not considered to start a word.
As a side effect of that, you cannot nest them one after the other: */bold italics?/* becomes /bold italics?/. However, there will likely be an exception added to allow that.
The wiki marks for the headers are an equal number of equal signs that begin and end a line.
= H1 =
== H2 ==
The end lines are relative to the original text format. Something like this will not work:
<quote>= H1 =</quote>
Lists are much easier to use with wiki marks than with XHTML tags.
The first character must be an asterisk followed by a single space.
* line one
* line two
You can double space lists as exepected.
* line one
* line two
* double space
Each nested layer must line up precisely under the previous layer. Anything else will 'break' the list.
Lists with Paragraphs
You can use paragraphs with wiki lists as long as you maintain the indentation level.
* First Paragraph.
* Next point.
Replace the asterisk with a pound (#) sign to use number lists.
# Point #1
# Point #2
As before, any plain text link will be transformed into an active web link.
If you wish to give a link a name, you can use the following format:
[http://www.allegro.cc Allegro.cc] -> Allegro.cc
The caption portion is not optional! If you don't want a caption, then don't included the brackets. To learn why, read the next section...
To create a reference, simply use a wiki link with no caption.
SDL sucks! [http://www.allegro.cc] -> SDL sucks! 
The link must be to an HTML or plain text page. To learn why, read the next section...
Images and Embedded Objects
To embed an image or supported object, just do this:
Why did the chicken cross the road?
Because he wanted to get hit by a car!
D:\CodeBlocks\allegro>cmake -G "MinGW Makefiles" -DSHARED=on
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: D:/CodeBlocks/MinGW/bin/gcc.exe
-- Check for working C compiler: D:/CodeBlocks/MinGW/bin/gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: D:/CodeBlocks/MinGW/bin/g++.exe
-- Check for working CXX compiler: D:/CodeBlocks/MinGW/bin/g++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Using MINGDIR: D:/CodeBlocks/MinGW/bin
-- Performing Test HAVE_DM_POSITION
-- Performing Test HAVE_DM_POSITION - Success
-- Check if the system is big endian
-- Searching 16 bit integer
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Using unsigned short
-- Check if the system is big endian - little endian
-- Looking for include files ALLEGRO_HAVE_DIRENT_H
-- Looking for include files ALLEGRO_HAVE_DIRENT_H - found
-- Looking for include files ALLEGRO_HAVE_INTTYPES_H
-- Looking for include files ALLEGRO_HAVE_INTTYPES_H - found
-- Looking for include files ALLEGRO_HAVE_LINUX_JOYSTICK_H
-- Looking for include files ALLEGRO_HAVE_LINUX_JOYSTICK_H - not found.
-- Looking for include files ALLEGRO_HAVE_STDBOOL_H
-- Looking for include files ALLEGRO_HAVE_STDBOOL_H - found
-- Looking for include files ALLEGRO_HAVE_STDINT_H
-- Looking for include files ALLEGRO_HAVE_STDINT_H - found
-- Looking for include files ALLEGRO_HAVE_SYS_IO_H
-- Looking for include files ALLEGRO_HAVE_SYS_IO_H - not found.
-- Looking for include files ALLEGRO_HAVE_SYS_STAT_H
-- Looking for include files ALLEGRO_HAVE_SYS_STAT_H - found
-- Looking for include files ALLEGRO_HAVE_SYS_TIME_H
-- Looking for include files ALLEGRO_HAVE_SYS_TIME_H - found
-- Looking for include files ALLEGRO_HAVE_TIME_H
-- Looking for include files ALLEGRO_HAVE_TIME_H - found
-- Looking for include files ALLEGRO_HAVE_SYS_UTSNAME_H
-- Looking for include files ALLEGRO_HAVE_SYS_UTSNAME_H - not found.
-- Looking for include files ALLEGRO_HAVE_SYS_TYPES_H
-- Looking for include files ALLEGRO_HAVE_SYS_TYPES_H - found
-- Looking for include files ALLEGRO_HAVE_SOUNDCARD_H
-- Looking for include files ALLEGRO_HAVE_SOUNDCARD_H - not found.
-- Looking for include files ALLEGRO_HAVE_SYS_SOUNDCARD_H
-- Looking for include files ALLEGRO_HAVE_SYS_SOUNDCARD_H - not found.
-- Looking for include files ALLEGRO_HAVE_MACHINE_SOUNDCARD_H
-- Looking for include files ALLEGRO_HAVE_MACHINE_SOUNDCARD_H - not found.
-- Looking for include files ALLEGRO_HAVE_LINUX_SOUNDCARD_H
-- Looking for include files ALLEGRO_HAVE_LINUX_SOUNDCARD_H - not found.
-- Looking for include files ALLEGRO_HAVE_OSATOMIC_H
-- Looking for include files ALLEGRO_HAVE_OSATOMIC_H - not found.
-- Looking for getexecname
-- Looking for getexecname - not found
-- Looking for mkstemp
-- Looking for mkstemp - not found
-- Looking for mmap
-- Looking for mmap - not found
-- Looking for mprotect
-- Looking for mprotect - found
-- Looking for sched_yield
-- Looking for sched_yield - not found
-- Looking for stricmp
-- Looking for stricmp - found
-- Looking for strlwr
-- Looking for strlwr - found
-- Looking for strupr
-- Looking for strupr - found
-- Looking for sysconf
-- Looking for sysconf - not found
-- Looking for fseeko
-- Looking for fseeko - not found
-- Looking for ftello
-- Looking for ftello - not found
-- Check size of _Bool
-- Check size of _Bool - done
-- Performing Test ALLEGRO_HAVE_PROCFS_ARGCV
-- Performing Test ALLEGRO_HAVE_PROCFS_ARGCV - Failed
-- Performing Test ALLEGRO_HAVE_SV_PROCFS_H
-- Performing Test ALLEGRO_HAVE_SV_PROCFS_H - Failed
-- Performing Test ALLEGRO_HAVE_VA_COPY
-- Performing Test ALLEGRO_HAVE_VA_COPY - Success
-- Check if constructors are supported - yes
-- Found DINPUT: D:/CodeBlocks/MinGW/include
-- Found D3D9: D:/CodeBlocks/MinGW/include
-- Found DSOUND: D:/CodeBlocks/MinGW/include
-- Found ZLIB: D:/CodeBlocks/MinGW/lib/libz.a
-- Found PNG: D:/CodeBlocks/MinGW/lib/libpng.a
-- Found JPEG: D:/CodeBlocks/MinGW/lib/libjpeg.a
-- Found FLAC: D:/CodeBlocks/MinGW/include
-- Performing Test FLAC_COMPILES
-- Performing Test FLAC_COMPILES - Success
-- Found VORBIS: D:/CodeBlocks/MinGW/include
-- Performing Test VORBIS_COMPILES
-- Performing Test VORBIS_COMPILES - Success
-- Found SNDFILE: D:/CodeBlocks/MinGW/include
-- Found Freetype: D:/CodeBlocks/MinGW/lib/libfreetype.dll.a
-- Configuring done
-- Generating done
-- Build files have been written to: D:/CodeBlocks/allegro
Scanning dependencies of target allegro
[ 0%] Building C object CMakeFiles/allegro.dir/src/allegro.c.obj
[ 1%] Building C object CMakeFiles/allegro.dir/src/bitmap_new.c.obj
[ 1%] Building C object CMakeFiles/allegro.dir/src/blenders.c.obj
[ 2%] Building C object CMakeFiles/allegro.dir/src/config.c.obj
[ 2%] Building C object CMakeFiles/allegro.dir/src/convert.c.obj
[ 3%] Building C object CMakeFiles/allegro.dir/src/display_new.c.obj
[ 3%] Building C object CMakeFiles/allegro.dir/src/display_settings.c.obj
[ 4%] Building C object CMakeFiles/allegro.dir/src/dtor.c.obj
[ 4%] Building C object CMakeFiles/allegro.dir/src/events.c.obj
[ 5%] Building C object CMakeFiles/allegro.dir/src/evtsrc.c.obj
[ 5%] Building C object CMakeFiles/allegro.dir/src/fshook.c.obj
[ 6%] Building C object CMakeFiles/allegro.dir/src/fshook_stdio.c.obj
[ 6%] Building C object CMakeFiles/allegro.dir/src/graphics.c.obj
[ 7%] Building C object CMakeFiles/allegro.dir/src/inline.c.obj
[ 7%] Building C object CMakeFiles/allegro.dir/src/joynu.c.obj
[ 8%] Building C object CMakeFiles/allegro.dir/src/keybdnu.c.obj
[ 8%] Building C object CMakeFiles/allegro.dir/src/libc.c.obj
[ 9%] Building C object CMakeFiles/allegro.dir/src/math.c.obj
[ 9%] Building C object CMakeFiles/allegro.dir/src/memblit.c.obj
[ 10%] Building C object CMakeFiles/allegro.dir/src/memdraw.c.obj
D:\CodeBlocks\allegro\src\memdraw.c:67: warning: '_hline8' defined but not used
D:\CodeBlocks\allegro\src\memdraw.c:68: warning: '_hline16' defined but not used
D:\CodeBlocks\allegro\src\memdraw.c:69: warning: '_hline24' defined but not used
[ 10%] Building C object CMakeFiles/allegro.dir/src/memory.c.obj
[ 11%] Building C object CMakeFiles/allegro.dir/src/mousenu.c.obj
[ 11%] Building C object CMakeFiles/allegro.dir/src/path.c.obj
[ 12%] Building C object CMakeFiles/allegro.dir/src/pixels.c.obj
[ 13%] Building C object CMakeFiles/allegro.dir/src/rotate.c.obj
[ 13%] Building C object CMakeFiles/allegro.dir/src/system_new.c.obj
[ 14%] Building C object CMakeFiles/allegro.dir/src/threads.c.obj
[ 14%] Building C object CMakeFiles/allegro.dir/src/timernu.c.obj
[ 15%] Building C object CMakeFiles/allegro.dir/src/tls.c.obj
[ 15%] Building C object CMakeFiles/allegro.dir/src/unicode.c.obj
[ 16%] Building C object CMakeFiles/allegro.dir/src/utf8.c.obj
[ 16%] Building C object CMakeFiles/allegro.dir/src/misc/bstrlib.c.obj
[ 17%] Building C object CMakeFiles/allegro.dir/src/misc/vector.c.obj
[ 17%] Building C object CMakeFiles/allegro.dir/src/win/winput.c.obj
[ 18%] Building C object CMakeFiles/allegro.dir/src/win/wjoydrv.c.obj
[ 18%] Building C object CMakeFiles/allegro.dir/src/win/wjoydxnu.c.obj
[ 19%] Building C object CMakeFiles/allegro.dir/src/win/wkeybdnu.c.obj
[ 19%] Building C object CMakeFiles/allegro.dir/src/win/wmcursor.c.obj
[ 20%] Building C object CMakeFiles/allegro.dir/src/win/wmouse.c.obj
[ 20%] Building C object CMakeFiles/allegro.dir/src/win/wnewsys.c.obj
[ 21%] Building C object CMakeFiles/allegro.dir/src/win/wnewwin.c.obj
[ 21%] Building C object CMakeFiles/allegro.dir/src/win/wthread.c.obj
[ 22%] Building C object CMakeFiles/allegro.dir/src/win/wtime.c.obj
[ 22%] Building C object CMakeFiles/allegro.dir/src/win/wxthread.c.obj
[ 23%] Building CXX object CMakeFiles/allegro.dir/src/win/d3d_bmp.cpp.obj
[ 23%] Building CXX object CMakeFiles/allegro.dir/src/win/d3d_disp.cpp.obj
D:\CodeBlocks\allegro\src\win\d3d_disp.cpp:873: warning: unused parameter 'flags'
D:\CodeBlocks\allegro\src\win\d3d_disp.cpp:606: warning: unused parameter 'flags'
[ 24%] Building C object CMakeFiles/allegro.dir/src/opengl/extensions.c.obj
[ 25%] Building C object CMakeFiles/allegro.dir/src/opengl/ogl_bitmap.c.obj
[ 25%] Building C object CMakeFiles/allegro.dir/src/opengl/ogl_draw.c.obj
[ 26%] Building C object CMakeFiles/allegro.dir/src/opengl/ogl_display.c.obj
[ 26%] Building C object CMakeFiles/allegro.dir/src/win/wgl_disp.c.obj
Linking CXX shared library lib\liballegro-4.9.9.dll
Creating library file: lib\liballegro-4.9.9.dll.a
CMakeFiles\allegro.dir\src\win\wjoydxnu.c.obj: In function `joystick_enum_callback':
D:/CodeBlocks/allegro/src/win/wjoydxnu.c:594: undefined reference to `_c_dfDIJoystick'
CMakeFiles\allegro.dir\src\win\wjoydxnu.c.obj: In function `joydx_init_joystick':
D:/CodeBlocks/allegro/src/win/wjoydxnu.c:712: undefined reference to `_DirectInput8Create@20'
CMakeFiles\allegro.dir\src\win\wkeybdnu.c.obj: In function `wkeybd_init_keyboard':
D:/CodeBlocks/allegro/src/win/wkeybdnu.c:508: undefined reference to `_DirectInput8Create@20'
D:/CodeBlocks/allegro/src/win/wkeybdnu.c:522: undefined reference to `_c_dfDIKeyboard'
CMakeFiles\allegro.dir\src\win\wmouse.c.obj: In function `mouse_directx_init':
D:/CodeBlocks/allegro/src/win/wmouse.c:752: undefined reference to `_DirectInput8Create@20'
D:/CodeBlocks/allegro/src/win/wmouse.c:773: undefined reference to `_c_dfDIMouse'
CMakeFiles\allegro.dir\src\win\d3d_disp.cpp.obj: In function `_al_d3d_init_display':
D:/CodeBlocks/allegro/src/win/d3d_disp.cpp:804: undefined reference to `_Direct3DCreate9@4'
collect2: ld returned 1 exit status
mingw32-make: *** [lib/liballegro-4.9.9.dll] Error 1
mingw32-make: *** [CMakeFiles/allegro.dir/all] Error 2
mingw32-make: *** [all] Error 2
BMP to PNG conversion
The following image's native format is BMP, but it has been converted to PNG for inline display.
This image is 1600x1200, so it is larger than the 1024 pixel cut off. To view the original, shift-click on it.
Audio can be embedded, including hit songs like Jesus Lives, Do This Dance, Judas' Ants:
Currently only Youtube videos are supported. There is no embedded widget yet.