def taf_line(line: TafLineData, units: Units) -> str:
speech = []<EOL>start = type_and_times(line.type, line.start_time, line.end_time, line.probability)<EOL>if line.wind_direction and line.wind_speed:<EOL><INDENT>speech.append(wind(line.wind_direction, line.wind_speed,<EOL>line.wind_gust, unit=units.wind_speed))<EOL><DEDENT>if line.wind_shear:<EOL><INDENT>speech.append(wind_shear(line.wind_shear, units.altimeter, units.wind_speed))<EOL><DEDENT>if line.visibility:<EOL><INDENT>speech.append(visibility(line.visibility, units.visibility))<EOL><DEDENT>if line.altimeter:<EOL><INDENT>speech.append(altimeter(line.altimeter, units.altimeter))<EOL><DEDENT>if line.other:<EOL><INDENT>speech.append(other(line.other))<EOL><DEDENT>speech.append(translate.clouds(line.clouds,<EOL>units.altitude).replace('<STR_LIT>', '<STR_LIT>'))<EOL>if line.turbulance:<EOL><INDENT>speech.append(translate.turb_ice(line.turbulance, units.altitude))<EOL><DEDENT>if line.icing:<EOL><INDENT>speech.append(translate.turb_ice(line.icing, units.altitude))<EOL><DEDENT>return start + '<STR_LIT:U+0020>' + ('<STR_LIT>'.join([l for l in speech if l])).replace('<STR_LIT:U+002C>', '<STR_LIT:.>')<EOL>
Convert TafLineData into a string for text-to-speech