# C, 585 <del>611</del> <del>615</del> <del>623</del> <del>673</del> <del>707</del> bytes

Source code:
<!-- language-all: lang-c -->

    j,c,p[256][256]={0},r;char*a,*b,*y,Y[999],*X="j,c,p[256][256]={0},r;char*a,*b,*y,Y[999],*X=\"@\";main(){a=b=X;for(y=Y;*a-64;)*y++=*a++;for(;*b;*y++=*b++)if(*b==34)*y++=92;for(a++;*a;)*y++=*a++;*y=0;for(;Y-y--;)p[c=*y][*(y+1)]++;while(c){putchar(c);for(r=j=0;j<256;j++)r+=p[c][j];r=rand()%r;for(j=0;j<256;j++){r-=p[c][j];if(r<0)break;}c=j;}}";main(){a=b=X;for(y=Y;*a-64;)*y++=*a++;for(;*b;*y++=*b++)if(*b==34)*y++=92;for(a++;*a;)*y++=*a++;*y=0;for(;Y-y--;)p[c=*y][*(y+1)]++;while(c){putchar(c);for(r=j=0;j<256;j++)r+=p[c][j];r=rand()%r;for(j=0;j<256;j++){r-=p[c][j];if(r<0)break;}c=j;}}

With newlines and whitespace added for legibility/explanation:

	01	j,c,p[256][256]={0},r;
	02	char*a,*b,*y,Y[999],*X="j,c,p[256][256]={0},r;char*a,*b,*y,Y[999],*X=\"@\";main(){a=b=X;for(y=Y;*a-64;)*y++=*a++;for(;*b;*y++=*b++)if(*b==34)*y++=92;for(a++;*a;)*y++=*a++;*y=0;for(;Y-y--;)p[c=*y][*(y+1)]++;while(c){putchar(c);for(r=j=0;j<256;j++)r+=p[c][j];r=rand()%r;for(j=0;j<256;j++){r-=p[c][j];if(r<0)break;}c=j;}}";
	03	main(){
	04		a=b=X;
	05		for(y=Y;*a-64;) *y++=*a++;
	06		for(;*b;*y++=*b++) if(*b==34) *y++=92;
	07		for(a++;*a;) *y++=*a++;
	08		*y=0;
	09		for(;Y-y--;) p[c=*y][*(y+1)]++;
	10		while(c){
	11			putchar(c);
	12			for(r=j=0;j<256;j++) r+=p[c][j];
	13			r=rand()%r;
	14			for(j=0;j<256;j++){
	15				r-=p[c][j];
	16				if(r<0) break;
	17			}
	18			c=j;
	19		}
	20	}

The variable `p[][]` will contain the occurrences of each character following another. `X` contains the entire source, with `'@'` substituted for the value of `X`, in quotes.

The for-loops on lines `05`, `06`, and `07` replace the `'@'` in `X` with the content of `X`, escaping double quotes, and stores it in `Y`.

Line `09` tallies the occurrences of one character following another and starts the Markov model at the first character of the program (`'j'`).

The while loop from `10` to `19` first outputs the current state of the Markov model, then finds the next state using a random number within the range of all successive occurrences.

Sample output:

`j;Y[256;ma=";f(r(j<256]=r(y]++++){a+;*()*b=p[c],p[chile(j,*y+++++=0;fora=p[j=Y-;f()*a+;){an(ak;Y;j],p[c][c=99][256;for=*a=r;j=*a;*ar;for(y-----y=34)%r()p[256][*a+)*y][99][c=*b;for+)*(r(y+=*y+;for=0;forea+=0;f(c)if(r;*(;}"j<256];fore(y++=*y-y+;f(j++)ifor(;*a+;c];*y++++)*b=*a-;for*ak;*y+1)*br(c)*y+)*y=0;for<256][j][2564;f(r+="@\"j<256;*ar<0;Y[c];j+=p[c)r(y],*a,r(r==*X;ma-6]+++;}`