code: func UnicodeTranslator(r io.Reader) (f func(string) string, err error) {
  	m := make(map[rune]byte)
  	var uPos, cPos uint32
  	var lineStr, nameStr string
  	sc := bufio.NewScanner(r)
  	for sc.Scan() {
  		lineStr = sc.Text()
  		lineStr = strings.TrimSpace(lineStr)
  		if len(lineStr) > 0 {
  			_, err = fmt.Sscanf(lineStr, "!%2X U+%4X %s", &cPos, &uPos, &nameStr)
  			if err == nil {
  				if cPos >= 0x80 {
  					m[rune(uPos)] = byte(cPos)
  				}
  			}
  		}
  	}
  	if err == nil {
  		f = repClosure(m)
  	} else {
  		f = doNothing
  	}
  	return
  }
docs: // UnicodeTranslator returns a function that can be used to translate, where
  // possible, utf-8 strings to a form that is compatible with the specified code
  // page. The returned function accepts a string and returns a string.
  //
  // r is a reader that should read a buffer made up of content lines that
  // pertain to the code page of interest. Each line is made up of three
  // whitespace separated fields. The first begins with "!" and is followed by
  // two hexadecimal digits that identify the glyph position in the code page of
  // interest. The second field begins with "U+" and is followed by the unicode
  // code point value. The third is the glyph name. A number of these code page
  // map files are packaged with the gfpdf library in the font directory.
  //
  // An error occurs only if a line is read that does not conform to the expected
  // format. In this case, the returned function is valid but does not perform
  // any rune translation.