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