C, 1493 bytes
#include<stdio.h>
#include<string.h>
#define P printf
char I[99999],*T[]={"b","i","u","s","code","url","img","color","size","quote"},A[999][256],t[256],a[256],*O[]={"strong","em","u","s","code"};int S[999],R[999],s,o[99999],c[99999],L,z,e,n,Y,x,d,i,k;int q(char*u,char*v){for(;*u&&*v;u++,v++)if((*u|32)!=(*v|32))return 0;return!*u&&!*v;}int y(char*m){for(k=0;k<10;k++)if(q(m,T[k]))return k;return-1;}int p(int r){int k=r+1;z=0;*a=0;if(I[k]==47)z=1,k++;n=0;while(I[k]&&I[k]-93&&I[k]-61&&I[k]-91)t[n++]=I[k++];t[n]=0;if(I[k]==61&&!z){k++;n=0;while(I[k]&&I[k]-93&&I[k]-91)a[n++]=I[k++];a[n]=0;}return I[k]==93?e=k+1:0;}int main(){L=fread(I,1,99999,stdin);for(i=0;i<L;i++)o[i]=c[i]=-1;for(i=0;i<L;i++)if(I[i]==91&&p(i)){Y=y(t);if(x){if(Y==4&&z&&!--d){x=0;if(s&&S[s-1]==4)s--,o[R[s]]=4,c[i]=4;}else if(Y==4&&!z)d++;continue;}if(~Y){if(z){if(s&&S[s-1]==Y)s--,o[R[s]]=Y,strcpy(A[R[s]],A[s]),c[i]=Y;}else{if((Y==7|Y==8)&&!*a)continue;S[s]=Y;strcpy(A[s],a);R[s++]=i;if(Y==4)x=1,d=1;}}}for(i=0;i<L;){if(~o[i]){Y=o[i];char*v=A[i];p(i);if(Y<5)P("<%s>",O[Y]);else if(Y<7){if(Y<6&&*v)P("<a href=\"%s\">",v);else{n=0;for(;e<L&&c[e]-Y;)t[n++]=I[e++];t[n]=0;Y<6?P("<a href=\"%s\">%s</a>",t,t):P("<img src=\"%s\">",t);p(e);i=e;goto N;}}else if(Y<9)P("<span style=\"%s:%s\">",Y<8?"color":"font-size",v);else{P("<blockquote>");if(*v)P("<cite>%s</cite>",v);}i=e;}else if(~c[i]){Y=c[i];p(i);Y<4?P("</%s>",O[Y]):Y<5?P("</code>"):Y<6?P("</a>"):Y<7?0:Y<9?P("</span>"):P("</blockquote>");i=e;}else putchar(I[i++]);N:;}}