German umlauts in LCase and UCase?

Just starting out? Need help? Post your questions and find answers here.
User avatar
Michael Vogel
Addict
Addict
Posts: 2797
Joined: Thu Feb 09, 2006 11:27 pm
Contact:

German umlauts in LCase and UCase?

Post by Michael Vogel »

; Have anyone done a fast working lowercase function?

Debug LCase("ÖBB") ; does not bring up 'öbb'...

; in GFA, there UpperCase and LowerCase worked with an internal table, so even german, french and other chars from the "standard" windows set have been switched correctly...
Froggerprogger
Enthusiast
Enthusiast
Posts: 423
Joined: Fri Apr 25, 2003 5:22 pm
Contact:

Post by Froggerprogger »

Hmmm. In PB 3.94 all works fine. There was a bug-discussion about the 'ß' some time ago, but it was already fixed

Code: Select all

debug LCase("ÄÖÜß")
debug UCase("äöüß")
gives äöüß, ÄÖÜß (which is correct)
I don't have PB 4 here, so perhaps it is a bug in there ?

Otherwise you could use the following procedures:

Code: Select all

;- UCaseEx, LCaseEx
;- let you specify another charmap, e.g. for another language
;-
;- the char-mapping bases on hashmaps from the DataSection
;-
;- if you need other languages, please let me know, it's easy to
;- implement them using the LUCaseWrapper-tool on windows.
;-
;- by Froggerprogger 29.01.05
;-

;/ some constants
#CharTable_Western = 0 ; (default)
#CharTable_Greek   = 1

;/ the procedures
Procedure.s UCaseEx(p_str.s, p_tableID.l)
  Protected i.l, pos.l, tempB.b, offset.l
  If p_tableID = #CharTable_Greek
    offset = ?UCaseTableGreek
  Else
    offset = ?UCaseTableWestern
  EndIf
  For i=0 To Len(p_str)
    pos = @p_str + i
    PokeB(pos, PeekB(offset + PeekB(pos) & $FF) & $FF)
  Next
  ProcedureReturn p_str
EndProcedure

Procedure.s LCaseEx(p_str.s, p_tableID.l)
  Protected i.l, pos.l, tempB.b, offset.l
    If p_tableID = #CharTable_Greek
    offset = ?LCaseTableGreek
  Else
    offset = ?LcaseTableWestern
  EndIf
  For i=0 To Len(p_str)
    pos = @p_str + i
    PokeB(pos, PeekB(offset + PeekB(pos) & $FF) & $FF)
  Next
  ProcedureReturn p_str
EndProcedure
End

;/ the hashmaps
DataSection
  UCaseTableWestern:
  ;/////  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..
  Data.b   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
  ;/////      !!  ""  ##  $$  %%  &&  ''  ((  ))  **  ++  ,,  --  ..  //  00  11  22  33  44  55  66  77  88  99  ::  ;;  <<  ==  >>  ??
  Data.b  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  ;/////  @@  AA  BB  CC  DD  EE  FF  GG  HH  II  JJ  KK  LL  MM  NN  OO  PP  QQ  RR  SS  TT  UU  VV  WW  XX  YY  ZZ  [[  \\  ]]  ^^  __
  Data.b  64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95
  ;/////  ``  aA  bB  cC  dD  eE  fF  gG  hH  iI  jJ  kK  lL  mM  nN  oO  pP  qQ  rR  sS  tT  uU  vV  wW  xX  yY  zZ  {{  ||  }}  ~~  
  Data.b  96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127
  ;/////  €€  ��  ‚‚  ƒƒ  „„  ……  ††  ‡‡  ˆˆ  ‰‰  ŠŠ  ‹‹  ŒŒ  ��  ŽŽ  ��  ��  ‘‘  ’’  ““  ””  ••  ––  ——  ˜˜  ™™  šŠ  ››  œŒ  ��  žŽ  ŸŸ
  Data.b 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,138,155,140,157,142,159
  ;/////      ¡¡  ¢¢  ££  ¤¤  ¥¥  ¦¦  §§  ¨¨  ©©  ªª  ««  ¬¬  ­­  ®®  ¯¯  °°  ±±  ²²  ³³  ´´  µµ  ¶¶  ··  ¸¸  ¹¹  ºº  »»  ¼¼  ½½  ¾¾  ¿¿
  Data.b 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191
  ;/////  ÀÀ  ÁÁ  ÂÂ  ÃÃ  ÄÄ  ÅÅ  ÆÆ  ÇÇ  ÈÈ  ÉÉ  ÊÊ  ËË  ÌÌ  ÍÍ  ÎÎ  ÏÏ  ÐÐ  ÑÑ  ÒÒ  ÓÓ  ÔÔ  ÕÕ  ÖÖ  ××  ØØ  ÙÙ  ÚÚ  ÛÛ  ÜÜ  ÝÝ  ÞÞ  ßß
  Data.b 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223
  ;/////  àÀ  áÁ  â  ãà  äÄ  åÅ  æÆ  çÇ  èÈ  éÉ  êÊ  ëË  ìÌ  íÍ  îÎ  ïÏ  ðÐ  ñÑ  òÒ  óÓ  ôÔ  õÕ  öÖ  ÷÷  øØ  ùÙ  úÚ  ûÛ  üÜ  ýÝ  þÞ  ÿŸ
  Data.b 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,247,216,217,218,219,220,221,222,159
  
  LcaseTableWestern:
  ;/////  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..
  Data.b   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
  ;/////      !!  ""  ##  $$  %%  &&  ''  ((  ))  **  ++  ,,  --  ..  //  00  11  22  33  44  55  66  77  88  99  ::  ;;  <<  ==  >>  ??
  Data.b  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  ;/////  @@  Aa  Bb  Cc  Dd  Ee  Ff  Gg  Hh  Ii  Jj  Kk  Ll  Mm  Nn  Oo  Pp  Qq  Rr  Ss  Tt  Uu  Vv  Ww  Xx  Yy  Zz  [[  \\  ]]  ^^  __
  Data.b  64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95
  ;/////  ``  aa  bb  cc  dd  ee  ff  gg  hh  ii  jj  kk  ll  mm  nn  oo  pp  qq  rr  ss  tt  uu  vv  ww  xx  yy  zz  {{  ||  }}  ~~  
  Data.b  96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127
  ;/////  €€  ��  ‚‚  ƒƒ  „„  ……  ††  ‡‡  ˆˆ  ‰‰  Šš  ‹‹  Œœ  ��  Žž  ��  ��  ‘‘  ’’  ““  ””  ••  ––  ——  ˜˜  ™™  šš  ››  œœ  ��  žž  Ÿÿ
  Data.b 128,129,130,131,132,133,134,135,136,137,154,139,156,141,158,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,255
  ;/////      ¡¡  ¢¢  ££  ¤¤  ¥¥  ¦¦  §§  ¨¨  ©©  ªª  ««  ¬¬  ­­  ®®  ¯¯  °°  ±±  ²²  ³³  ´´  µµ  ¶¶  ··  ¸¸  ¹¹  ºº  »»  ¼¼  ½½  ¾¾  ¿¿
  Data.b 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191
  ;/////  Àà  Áá  Ââ  Ãã  Ää  Åå  Ææ  Çç  Èè  Éé  Êê  Ëë  Ìì  Íí  Îî  Ïï  Ðð  Ññ  Òò  Óó  Ôô  Õõ  Öö  ××  Øø  Ùù  Úú  Ûû  Üü  Ýý  Þþ  ßß
  Data.b 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,215,248,249,250,251,252,253,254,223
  ;/////  àà  áá  ââ  ãã  ää  åå  ææ  çç  èè  éé  êê  ëë  ìì  íí  îî  ïï  ðð  ññ  òò  óó  ôô  õõ  öö  ÷÷  øø  ùù  úú  ûû  üü  ýý  þþ  ÿÿ
  Data.b 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255

  UCaseTableGreek:
  ;/////  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..
  Data.b   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
  ;/////      !!  ""  ##  $$  %%  &&  ''  ((  ))  **  ++  ,,  --  ..  //  00  11  22  33  44  55  66  77  88  99  ::  ;;  <<  ==  >>  ??
  Data.b  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  ;/////  @@  AA  BB  CC  DD  EE  FF  GG  HH  II  JJ  KK  LL  MM  NN  OO  PP  QQ  RR  SS  TT  UU  VV  WW  XX  YY  ZZ  [[  \\  ]]  ^^  __
  Data.b  64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95
  ;/////  ``  aA  bB  cC  dD  eE  fF  gG  hH  iI  jJ  kK  lL  mM  nN  oO  pP  qQ  rR  sS  tT  uU  vV  wW  xX  yY  zZ  {{  ||  }}  ~~  
  Data.b  96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127
  ;/////  ¤¤  ??  ‚‚  ƒƒ  „„  ……  ††  ‡‡  ˆˆ  ‰‰  ŠŠ  ‹‹  ŒŒ  ??  ŽŽ  ??  ??  ‘‘  ’’  ““  ””  ••  ––  ——  ˜˜  ™™  šš  ››  œœ  ??  žž  ŸŸ
  Data.b 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159
  ;/////      ¡¡  ¢¢  ££  ¤¤  ¥¥  ¦¦  §§  ¨¨  ©©  ªª  ««  ¬¬  ­­  ®®  ¯¯  °°  ±±  ²²  ³³  ´´  µµ  ¶¶  ··  ¸¸  ¹¹  ºº  »»  ¼¼  ½½  ¾¾  ¿¿
  Data.b 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191
  ;/////  ÀÀ  ÁÁ    Ãà  ÄÄ  ÅÅ  ÆÆ  ÇÇ  ÈÈ  ÉÉ  ÊÊ  ËË  ÌÌ  ÍÍ  ÎÎ  ÏÏ  ÐÐ  ÑÑ  ÒÒ  ÓÓ  ÔÔ  ÕÕ  ÖÖ  ××  ØØ  ÙÙ  ÚÚ  ÛÛ  Ü¢  ݸ  Þ¹  ߺ
  Data.b 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,162,184,185,186
  ;/////  àà  áÁ  â  ãà  äÄ  åÅ  æÆ  çÇ  èÈ  éÉ  êÊ  ëË  ìÌ  íÍ  îÎ  ïÏ  ðÐ  ñÑ  òÓ  óÓ  ôÔ  õÕ  öÖ  ÷×  øØ  ùÙ  úÚ  ûÛ  ü¼  ý¾  þ¿  ÿÿ
  Data.b 224,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,211,211,212,213,214,215,216,217,218,219,188,190,191,255
  
  LCaseTableGreek:
  ;/////  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..  ..
  Data.b   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
  ;/////      !!  ""  ##  $$  %%  &&  ''  ((  ))  **  ++  ,,  --  ..  //  00  11  22  33  44  55  66  77  88  99  ::  ;;  <<  ==  >>  ??
  Data.b  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  ;/////  @@  Aa  Bb  Cc  Dd  Ee  Ff  Gg  Hh  Ii  Jj  Kk  Ll  Mm  Nn  Oo  Pp  Qq  Rr  Ss  Tt  Uu  Vv  Ww  Xx  Yy  Zz  [[  \\  ]]  ^^  __
  Data.b  64, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122, 91, 92, 93, 94, 95
  ;/////  ``  aa  bb  cc  dd  ee  ff  gg  hh  ii  jj  kk  ll  mm  nn  oo  pp  qq  rr  ss  tt  uu  vv  ww  xx  yy  zz  {{  ||  }}  ~~  
  Data.b  96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127
  ;/////  ¤¤  ??  ‚‚  ƒƒ  „„  ……  ††  ‡‡  ˆˆ  ‰‰  ŠŠ  ‹‹  ŒŒ  ??  ŽŽ  ??  ??  ‘‘  ’’  ““  ””  ••  ––  ——  ˜˜  ™™  šš  ››  œœ  ??  žž  ŸŸ
  Data.b 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159
  ;/////      ¡¡  ¢Ü  ££  ¤¤  ¥¥  ¦¦  §§  ¨¨  ©©  ªª  ««  ¬¬  ­­  ®®  ¯¯  °°  ±±  ²²  ³³  ´´  µµ  ¶¶  ··  ¸Ý  ¹Þ  ºß  »»  ¼ü  ½½  ¾ý  ¿þ
  Data.b 160,161,220,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,221,222,223,187,252,189,253,254
  ;/////  ÀÀ  Áá  Ââ  Ãã  Ää  Åå  Ææ  Çç  Èè  Éé  Êê  Ëë  Ìì  Íí  Îî  Ïï  Ðð  Ññ  ÒÒ  Óó  Ôô  Õõ  Öö  ×÷  Øø  Ùù  Úú  Ûû  ÜÜ  ÝÝ  ÞÞ  ßß
  Data.b 192,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,210,243,244,245,246,247,248,249,250,251,220,221,222,223
  ;/////  àà  áá  ââ  ãã  ää  åå  ææ  çç  èè  éé  êê  ëë  ìì  íí  îî  ïï  ðð  ññ  òò  óó  ôô  õõ  öö  ÷÷  øø  ùù  úú  ûû  üü  ýý  þþ  ÿÿ
  Data.b 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255

  ; Table-Preset for your own tables (for importing complete CharsetTranslations you might use the tool "LUCaseWrapper" by Froggerprogger:
  ; Data.b   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
  ; Data.b  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  ; Data.b  64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95
  ; Data.b  96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127
  ; Data.b 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159
  ; Data.b 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191
  ; Data.b 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223
  ; Data.b 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
EndDataSection
Last edited by Froggerprogger on Fri Mar 03, 2006 1:38 pm, edited 1 time in total.
%1>>1+1*1/1-1!1|1&1<<$1=1
Piotr
New User
New User
Posts: 8
Joined: Tue Nov 25, 2003 12:37 pm
Location: Poland
Contact:

Re: German umlauts in LCase and UCase?

Post by Piotr »

PB 4.beta5 (polish chars):

Debug LCase("ĄŚĘŻŹĆŃŁÓ") = ĄŚĘŻŹĆŃŁÓ
Debug UCase("ąśężźćńłó") = ąśĘżźĆŃłÓ

PB 3.94

Debug LCase("ĄŚĘŻŹĆŃŁÓ") = ĄŚęŻŹćńŁó
Debug UCase("ąśężźćńłó") = ąśĘżźĆŃłÓ

Windows XP Pro (Eng).

Piotr
Post Reply