Create the shortest BitShift Introduction

BitShift is an esolang, created by me, to output strings. Sounds boring, is boring. However, the only instructions available to BitShift are 0 and 1. Therefore it can be challenging to golf in it. To make matters even more interesting, the language only supports 4 bitshifting instructions, a clear, a print and an input instruction.

How it works

BitShift is written by alternating 0 and 1 characters. Once the interpreter finds 2 of the same characters in a row, it will perform an instruction based on the amount of non-alternating characters preceding it.

010010110001010 will perform the operations 3 4 2 1 5
010 0101 10 0 01010 here, the non-alternating characters are seperated by a spacebar for readability.

The interpreter can be found here

Operations

All operations are performed on one single value. BitShift does not know of a stack.
BitShift programs initially start with a value of 0. This value can range from 0-255 and overflows at -1 and 256

1   Shift the value 1 bit to the left (0000 0001 &gt; 0000 0010)
2   Shift the value 1 bit to the right (0000 0010 &gt; 0000 0001)
3   XOR the value with 1 (0000 0000 &gt; 0000 0001)
4   XOR the value with 128 (0000 0000 &gt; 1000 0000)
5   Set the value to 0
6   Convert the value to a character and print it
7   Read a character from user input and set the value to it


Challenge

Your task is to create a program which can convert an input string to the shortest possible BitShift program which will output that string when run.

Rules


You are not allowed to use the 7 operation
Your program takes only one input argument, which is the string to convert
Your program will output the translated BitShift program to STDOUT
You can use any kind of built-in function in your preffered language
You can use any kind of language, as long as it's created before this date


Scoring

This is a metagolf.

The person who can create the shortest BitShift program will win this challenge. In case of a tie, the lowest byte count will win.

The input string (ISO 8859-1) you should base your answer on is:
This is a string, meant to test the effectiveness of your program. Here are some special characters to make matters interesting: Æ Ø ß. How meta! :D

The special characters used are &amp;#198; &amp;#216; &amp;#223;  

Please post the output of your program in your answer, so that it can be tested for validation.



The following is an example solution. Obviously, this is a terrible solution.  

Javascript, 594 bytes, 4275 characters

var flag = true;
var input = prompt();
var output = ""
for (n in input) {
    var c = input.charCodeAt(n).toString(2);
    while (c.length &lt; 8) {
        c = "0" + c;
    }
    for (var i = 0; i &lt; 8; i++) {
        if (c[i] == "1") {
            output += flag ? "010" : "101";
        }
        if (i &lt; 7) output += flag ? "0" : "1";
    }
    for (var z = 0; z &lt; 6; z++) {
        output += flag ? "0" : "1";
        flag = !flag;
    }
    flag = !flag;
    for (var z = 0; z &lt; 5; z++) {
        output += flag ? "0": "1";
        flag = !flag;
    }
    flag = !flag;
}
console.log(output);
Mathematica, 343 bytes, 2573 characters
B=BitXor;t[a_]:={Mod[2a,256],⌊a/2⌋,a~B~1,a~B~128,0};w[a_,b_]:=Position[t@a,b][[1,1]];f=FindShortestPath[Graph[0~Range~255,e=Join@@Table[a#&amp;/@({}⋃t@a),{a,m=c=0,255}],EdgeWeight(w@@#&amp;/@e)],All,All];o=&quot;&quot;;u[a_,b_]:=(Do[o=o&lt;&gt;ToString[m=1-m],{If[a==b,6,a~w~f[a,b][[2]]]}];m=1-m);While[c~u~y;c!=y,c=f[c,y][[2]]]~Do~{y,ToCharacterCode@i};o

This is my first code competition. This program should generate the shortest possible program for any string. It effectively calculates a lookup table given the current state of the accumulator and the goal byte to find the shortest sequence of the five operations to get from any one to another, carrying the accumulator over characters and taking advantage of the size difference between instructions. Uses Mathematica 8's Graph infrastructure for calculating shortest paths (alternatives being to roll one's own or just embed the 256 x 256 table of instructions).
Ungolfed version (the first i = &quot;...&quot; line is also present, but not counted in the golfed version since it is the input):
i = &quot;This is a string, meant to test the effectiveness of your program. Here are some special characters to make matters interesting: Æ Ø ß. How meta! :D&quot;;
B = BitXor;
t[a_] := {Mod[2 a, 256], Quotient[a, 2], B[a, 1], B[a, 128], 0}
w[a_, b_] := Position[t[a], b][[1, 1]]
g = Graph[Range[0, 255], 
  e = Join @@ Table[DirectedEdge[a, #] &amp; /@ Union@t@a, {a, 0, 255}], 
  EdgeWeight -&gt; (w @@ # &amp; /@ e)];
f = FindShortestPath[g, All, All]; c = m = 0; o = &quot;&quot;;
u[a_, b_] := (Do[
   o = o &lt;&gt; ToString[m = 1 - m], {If[a == b, 6, w[a, f[a, b][[2]]]]}];
   m = 1 - m);
Do[While[u[c, y]; c != y, c = f[c, y][[2]]], {y, ToCharacterCode[i]}];
o

Output:
10111101111011110101000010110010101101101010000010110010110010010101101111110101001011001011001001010111110100110100110110101001000000101011101001101101010000000101011011101110111110111011010100110010000101011001101110111010100100001000001001010110011011101110101000010001000011011010100110100110010101111111001101010010001000010001000010010101101110111101101010011001000010010101100110010001000100010101110111101010000001101010010110010110010110010101100100010000110110101000000000110010101101001101001101001101010001000001011001001010110100110110101001100100001010111111001010110100110100110100110101000011010100100000101100100101011011111010100110100110100110110101001101110101001010110010001001010111011111101110110101000100001000010101111001001010110100110010001010111101111011010100010001000010110010101111011111001001010110100110110101001010110111111010100100010000100010001000100101011111011101111001010110010000001010110111011101110111110110101001101001101001101010010001000010010101100110111011101010000001010111010011010011010100110111010100110100110100110110101000001000100001101101010000010001010110111111101101010011010011010011011010100110111110011010100000000110010101100101100101011010011011010100101100101011110010010101101111101010001011001001010110100110010001010111100100101011011111010100100010001000001000100101011001011001011001001010110010001001010110111011110110101001000001010110111011101111101110110101001101110101001101111100100101011101111110111011010100001000001001010111011111110110101001101001101001101010000000110010101100100001011001001010111101111101010000010110010010101101001100100010101101111111011010100110111011010100010000100001010111011111010011011010100101100101011011010100100000010101101001101001101001101010011011101111001001010111111111001101010010001000010001000010010101101111101101010011001101111011101101010000010000100101011011111010100100010000100010000100101011011111011010100101100110010000101011010100010000010110010010101101001101010010010101101111110101001011001011001001010110011011101110101000100001010111011111010011011010100101100101011110010010101101001101101010011001000010101111001001010110011011101110101000010001000011011010100001000101011111110010101100100010001011010100110111111010100010110011010011010010101111110011010100100001000100010001000100101101010001100100101011111111001101010011010011010100110111011101111010011011010100101100101011111111100110101001000100001000100001001010110111011110110101001011001100100001010111111010011011010100001100101011011010100100010001000010001010111110111101010