Now the module mod_braille works correctly. The function ConvertUTF8HtmlTexttoBraille gets an html file a returns the same file, but with the texts translated. It uses the Braille space (which has length 3) instead of the traditional one (which has length 1).

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2082 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
anavaleije
2011-10-19 18:00:31 +00:00
parent faece44df9
commit 467647591c

View File

@ -27,7 +27,6 @@ type
function ConvertUTF8TextToBraille(Line: string): string; function ConvertUTF8TextToBraille(Line: string): string;
function ConvertUTF8HtmlTextToBraille(AInput: string): string; function ConvertUTF8HtmlTextToBraille(AInput: string): string;
function ConvertUTF8TextToBrailleNew(AInput: string): string;
implementation implementation
@ -67,29 +66,6 @@ const
{u + acute} chr($be), {u + circumflex} 'TODO', {u + diaeresis} chr($b3), {u + acute} chr($be), {u + circumflex} 'TODO', {u + diaeresis} chr($b3),
{y + acute} 'TODO', {thorn} 'TODO', {y + diaeresis} 'TODO', ''); {y + acute} 'TODO', {thorn} 'TODO', {y + diaeresis} 'TODO', '');
function ConvertUTF8TextToBrailleNew(AInput: string): string;
var
lInput: PChar;
lPos: Integer;
lCharSize: Integer;
lCurChar: string;
begin
Result := '';
lInput := PChar(AInput);
lPos := 0;
while lPos < Length(AInput) do
begin
lCharSize := LCLProc.UTF8CharacterLength(lInput);
SetLength(lCurChar, lCharSize);
Move(lCurChar[1], lInput^, lCharSize);
{Result := Result + ConvertUTF8CharacterToBraille(lCurChar);}
Inc(lInput, lCharSize);
Inc(lPos, lCharSize);
end;
end;
function ConvertUTF8TextToBraille(Line: string): string; function ConvertUTF8TextToBraille(Line: string): string;
var var
lCharSize, count, n, next_n, len: integer; lCharSize, count, n, next_n, len: integer;
@ -238,7 +214,7 @@ end;
function ConvertUTF8HtmlTextToBraille(AInput: string): string; function ConvertUTF8HtmlTextToBraille(AInput: string): string;
var var
i, j, lCharSize: integer; i, lCharSize: integer;
output, aux_string, end_string: string; output, aux_string, end_string: string;
is_text: boolean; is_text: boolean;
Pline : PChar; Pline : PChar;
@ -255,41 +231,44 @@ begin
end_string := ''; end_string := '';
while is_text and (i <= length(AInput)) do while is_text and (i <= length(AInput)) do
begin begin
if (AInput[i] = '<') then if (AInput[i] = '<') then { an instruction comes next }
begin begin
is_text := False; is_text := False;
i := i + 1; i := i + 1;
Inc(Pline, 1); Inc(Pline, 1);
end_string := '<'; end_string := '<';
if (copy(AInput, i, 6) = 'script') then { if it's a script, go through it and
keep reading the text}
begin
i := i + 6;
Inc(Pline, 6);
end_string := end_string + 'script';
while (copy(AInput, i, 9) <> '</script>') do
begin
end_string := end_string + AInput[i];
i := i + 1;
Inc(Pline, 1);
end;
is_text := True;
end;
break; break;
end
else
begin
if ((AInput[i] = '/') and (AInput[i+1] = '/') and (AInput[i+2] = '<')) then
begin
is_text := False;
i := i + 3;
Inc(Pline, 3);
end_string := '//<';
break
end
end; end;
{ Read the next UTF8 character add it to aux_string }
lCharSize := LCLProc.UTF8CharacterLength(Pline); lCharSize := LCLProc.UTF8CharacterLength(Pline);
for j := 0 to lCharSize - 1 do aux_string := aux_string + AInput[i + j]; aux_string := aux_string + copy(AInput, i, lCharSize);
i := i + lCharSize; i := i + lCharSize;
Inc(Pline, lCharSize); Inc(Pline, lCharSize);
end; end;
{ Translate aux_string to Braille and add it to output }
output := output + ConvertUTF8TextToBraille(aux_string) + end_string; output := output + ConvertUTF8TextToBraille(aux_string) + end_string;
aux_string := ''; aux_string := '';
while (not is_text) and (i <= length(AInput))do while (not is_text) and (i <= length(AInput))do
begin begin
if (AInput[i] = '>') then if (AInput[i] = '>') then { End of instruction }
begin begin
is_text := True; is_text := True;
i := i + 1; i := i + 1;
@ -297,9 +276,11 @@ begin
output := output + '>'; output := output + '>';
break break
end; end;
{ Add the next UTF8 character straight to output, without translating it }
lCharSize := LCLProc.UTF8CharacterLength(Pline); lCharSize := LCLProc.UTF8CharacterLength(Pline);
for j := 0 to lCharSize - 1 do output := output + copy(AInput, i, lCharSize);
output := output + AInput[i + j];
i := i + lCharSize; i := i + lCharSize;
Inc(Pline, lCharSize); Inc(Pline, lCharSize);
end; end;