From bd659b25fb6e2df5d02273ee1ce4699aa5723e2e Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Tue, 10 Oct 2000 12:36:36 +0000 Subject: [PATCH] Dekel language/encoding patch + a few fixes git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1096 a592a061-630c-0410-9148-cb99ea01b6c8 --- ChangeLog | 39 ++++ lib/Makefile.am | 3 +- lib/encodings | 214 ++++++++++++++++++ lib/languages | 48 ++++ po/Makefile.in.in | 1 + src/LaTeXFeatures.C | 4 +- src/Painter.C | 6 +- src/buffer.C | 54 +++-- src/buffer.h | 3 +- src/bufferparams.C | 28 +-- src/bufferparams.h | 4 +- src/bufferview_funcs.C | 6 +- src/encoding.C | 325 +++++++--------------------- src/encoding.h | 83 ++++--- src/font.C | 6 +- src/frontends/xforms/FormDocument.C | 22 +- src/insets/insetquotes.C | 4 +- src/language.C | 171 ++++++--------- src/language.h | 46 ++-- src/lyx_cb.C | 4 +- src/lyx_gui.C | 2 +- src/lyx_main.C | 47 +++- src/lyx_main.h | 4 + src/lyxfont.C | 13 +- src/paragraph.C | 39 ++-- src/screen.C | 4 +- src/spellchecker.C | 22 +- src/tabular.h | 6 +- src/text.C | 38 ++-- src/text2.C | 4 +- 30 files changed, 701 insertions(+), 549 deletions(-) create mode 100644 lib/encodings create mode 100644 lib/languages diff --git a/ChangeLog b/ChangeLog index dbb2a87832..b8a00d1959 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,41 @@ +2000-10-10 Jean-Marc Lasgouttes + + * lib/Makefile.am (pkgdata_DATA): add encoding and languages + + * src/tabular.h: add a few std:: qualifiers. + + * src/encoding.C: add using directive. + * src/language.C: ditto. + + * src/insets/insetquotes.C (Validate): use languages->lang() + instead of only language. + +2000-10-07 Dekel Tsur + + * lib/languages: New file. + + * lib/encodings: New file. + + * src/language.C (Languages): New class. + (read): New method. Reads the languages from the 'languages' file. + + * src/encoding.C (Encodings): New class. + (read): New method. Reads the encodings from the 'encodings' file. + + * src/lyx_main.C (init): Call to LyXSetStyle() after languages + initialization. + + * src/bufferparams.h and a lot of files: Deleted the member language, + and renamed language_info to language + + * src/buffer.C (makeLaTeXFile): Use babel() instead of lang() + * src/lyxfont.C (latexWriteStartChanges): ditto. + * src/paragraph.C (validate,TeXOnePar): ditto. + + * src/lyxfont.C (update): Restored deleted code. + + * src/frontends/xforms/FormDocument.C (build): Made the combox taller + 2000-10-10 Angus Leeming * src/BufferView_pimpl.C (buffer): cleaned up a little. @@ -28,6 +66,7 @@ *current_view->buffer(). This will change later, but this patch is way big enough already! +>>>>>>> 1.592 2000-10-09 Juergen Vigna * src/text.C (GetRow): small fix. diff --git a/lib/Makefile.am b/lib/Makefile.am index 3e28539aa7..115dc75363 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -26,7 +26,8 @@ LIBDISTFILES = $(BIND) $(CLIPART) $(DOCDIST) $(EXAMPLES) $(IMAGES) $(KBD) \ $(LAYOUT) $(TEMPL) $(UI) $(TEXSUPPORT) $(LYXSCRIPTS) pkgdata_DATA = lyxrc.example CREDITS chkconfig.ltx lyxrc.defaults \ - textclass.lst packages.lst external_templates + textclass.lst packages.lst external_templates \ + encodings languages LYXLIBDIRS = bind clipart doc examples images kbd layouts scripts \ templates tex ui diff --git a/lib/encodings b/lib/encodings new file mode 100644 index 0000000000..a3c1dc7cf4 --- /dev/null +++ b/lib/encodings @@ -0,0 +1,214 @@ +Encoding iso8859-2 latin2 + 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f + 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f + 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f + 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f + 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f + 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f + 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f + 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f + 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f + 00a0 0104 02d8 0141 00a4 013d 015a 00a7 + 00a8 0160 015e 0164 0179 00ad 017d 017b + 00b0 0105 02db 0142 00b4 013e 015b 02c7 + 00b8 0161 015f 0165 017a 02dd 017e 017c + 0154 00c1 00c2 0102 00c4 0139 0106 00c7 + 010c 00c9 0118 00cb 011a 00cd 00ce 010e + 0110 0143 0147 00d3 00d4 0150 00d6 00d7 + 0158 016e 00da 0170 00dc 00dd 0162 00df + 0155 00e1 00e2 0103 00e4 013a 0107 00e7 + 010d 00e9 0119 00eb 011b 00ed 00ee 010f + 0111 0144 0148 00f3 00f4 0151 00f6 00f7 + 0159 016f 00fa 0171 00fc 00fd 0163 02d9 +End + + +Encoding iso8859-3 latin3 + 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f + 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f + 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f + 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f + 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f + 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f + 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f + 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f + 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f + 00a0 0126 02d8 00a3 00a4 ffff 0124 00a7 + 00a8 0130 015e 011e 0134 00ad ffff 017b + 00b0 0127 00b2 00b3 00b4 00b5 0125 00b7 + 00b8 0131 015f 011f 0135 00bd ffff 017c + 00c0 00c1 00c2 ffff 00c4 010a 0108 00c7 + 00c8 00c9 00ca 00cb 00cc 00cd 00ce 00cf + ffff 00d1 00d2 00d3 00d4 0120 00d6 00d7 + 011c 00d9 00da 00db 00dc 016c 015c 00df + 00e0 00e1 00e2 ffff 00e4 010b 0109 00e7 + 00e8 00e9 00ea 00eb 00ec 00ed 00ee 00ef + ffff 00f1 00f2 00f3 00f4 0121 00f6 00f7 + 011d 00f9 00fa 00fb 00fc 016d 015d 02d9 +End + + +Encoding iso8859-4 latin4 + 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f + 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f + 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f + 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f + 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f + 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f + 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f + 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f + 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f + 00a0 0104 0138 0156 00a4 0128 013b 00a7 + 00a8 0160 0112 0122 0166 00ad 017d 00af + 00b0 0105 02db 0157 00b4 0129 013c 02c7 + 00b8 0161 0113 0123 0167 014a 017e 014b + 0100 00c1 00c2 00c3 00c4 00c5 00c6 012e + 010c 00c9 0118 00cb 0116 00cd 00ce 012a + 0110 0145 014c 0136 00d4 00d5 00d6 00d7 + 00d8 0172 00da 00db 00dc 0168 016a 00df + 0101 00e1 00e2 00e3 00e4 00e5 00e6 012f + 010d 00e9 0119 00eb 0117 00ed 00ee 012b + 0111 0146 014d 0137 00f4 00f5 00f6 00f7 + 00f8 0173 00fa 00fb 00fc 0169 016b 02d9 +End + + +Encoding iso8859-6 unknown + 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f + 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f + 0660 0661 0662 0663 0664 0665 0666 0667 + 0668 0669 003a 003b 003c 003d 003e 061f + 0040 fe80 fe81 fe83 fe85 fe87 fe89 fe8d + fe8f fe93 fe95 fe99 fe9d fea1 fea5 fea9 + feab fead feaf feb1 feb5 feb9 febd fec1 + fec5 fec9 fecd 005d 005c 005b 005e 005f + 0640 fed1 fed5 fed9 fedd fee1 fee5 fee9 + feed feef fef1 065b 065c 064d 064e 064f + 0650 0651 0652 0073 0074 0075 fef5 fef7 + fef9 fefb 007a 007b 007c 007d 007e 007f + 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f + fe71 0091 0092 fe77 fe79 fe7b fe7f fe7d + 0098 0099 009a 009b 009c 009d 009e 009f + fe8c fe82 fe84 fe86 fe88 fe8e feaa feac + feae feb0 feee fef0 fe91 fe92 fe90 fe97 + fe98 fe94 fe97 fe98 fe96 fe9b fe9c fe9a + fe9f fea0 fe9e fea3 fea4 fea2 fea7 fea8 + fea6 feb3 feb4 feb2 feb7 feb8 feb6 febb + febc feba febf fec0 febe fec3 fec4 fec2 + fec7 fec8 fec6 fecb fecc feca fecf fed0 + fece fed3 fed4 fed2 fed7 fed8 fed6 fedb + fedc feda fedf fee0 fede fee3 fee4 fee2 + fee7 fee8 fee6 feeb feec feea fef3 fef4 + fef2 00f1 00f2 00f3 00f4 00f5 00f6 00f7 + fe8b fe8a fef6 fefa fef8 fefc 00fe 00ff +End + + +Encoding iso8859-7 iso-8859-7 + 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f + 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f + 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f + 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f + 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f + 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f + 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f + 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f + 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f + 00a0 0371 0372 00a3 ffff ffff 00a6 00a7 + 00a8 00a9 ffff 00ab 00ac 00ad ffff 2015 + 00b0 00b1 00b2 00b3 03f3 03f4 0386 00b7 + 0388 0389 038a 00bb 038c 00bd 038e 038f + 0390 0391 0392 0393 0394 0395 0396 0397 + 0398 0399 039a 039b 039c 039d 039e 039f + 03a0 03a1 ffff 03a3 03a4 03a5 03a6 03a7 + 03a8 03a9 03aa 03ab 03ac 03ad 03ae 03af + 03b0 03b1 03b2 03b3 03b4 03b5 03b6 03b7 + 03b8 03b9 03ba 03bb 03bc 03bd 03be 03bf + 03c0 03c1 03c2 03c3 03c4 03c5 03c6 03c7 + 03c8 03c9 03ca 03cb 03cc 03cd 03ce ffff +End + + +Encoding iso8859-9 latin5 + 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f + 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f + 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f + 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f + 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f + 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f + 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f + 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f + 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f + 00a0 00a1 00a2 00a3 00a4 00a5 00a6 00a7 + 00a8 00a9 00aa 00ab 00ac 00ad 00ae 00af + 00b0 00b1 00b2 00b3 00b4 00b5 00b6 00b7 + 00b8 00b9 00ba 00bb 00bc 00bd 00be 00bf + 00c0 00c1 00c2 00c3 00c4 00c5 00c6 00c7 + 00c8 00c9 00ca 00cb 00cc 00cd 00ce 00cf + 011e 00d1 00d2 00d3 00d4 00d5 00d6 00d7 + 00d8 00d9 00da 00db 00dc 0130 015e 00df + 00e0 00e1 00e2 00e3 00e4 00e5 00e6 00e7 + 00e8 00e9 00ea 00eb 00ec 00ed 00ee 00ef + 011f 00f1 00f2 00f3 00f4 00f5 00f6 00f7 + 00f8 00f9 00fa 00fb 00fc 0131 015f 00ff +End + + +Encoding cp1255 cp1255 + 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f + 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f + 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f + 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f + 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f + 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f + 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f + 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f + 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f + 00a0 ffff 00a2 00a3 00a4 00a5 00a6 00a7 + 00a8 00a9 00d7 00ab 00ac 00ad 00ae 203e + 00b0 00b1 00b2 00b3 00b4 00b5 00b6 00b7 + 00b8 00b9 00f7 00bb 00bc 00bd 00be 00bf + 05b0 05b1 05b2 05b3 05b4 05b5 05b6 05b7 + 05b8 05b9 ffff 05bb 05bc 05bd 05be 05bf + 05c0 05c1 05c2 05c3 05f0 05f1 05f2 05f3 + 05f4 ffff ffff ffff ffff ffff ffff ffff + 05d0 05d1 05d2 05d3 05d4 05d5 05d6 05d7 + 05d8 05d9 05da 05db 05dc 05dd 05de 05df + 05e0 05e1 05e2 05e3 05e4 05e5 05e6 05e7 + 05e8 05e9 05ea ffff ffff ffff ffff ffff +End + + +Encoding koi8 koi8-r + 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f + 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f + 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f + 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f + 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f + 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f + 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f + 2500 2502 250c 2510 2514 2518 251c 2524 + 252c 2534 253c 2580 2584 2588 258c 2590 + 2591 2592 2593 2320 25a0 2219 221a 2248 + 2264 2265 00a0 2321 00b0 00b2 00b7 00f7 + 2550 2551 2552 0451 2553 2554 2555 2556 + 2557 2558 2559 255a 255b 255c 255d 255e + 255f 2560 2561 0401 2562 2563 2564 2565 + 2566 2567 2568 2569 256a 256b 256c 00a9 + 044e 0430 0431 0446 0434 0435 0444 0433 + 0445 0438 0439 043a 043b 043c 043d 043e + 043f 044f 0440 0441 0442 0443 0436 0432 + 044c 044b 0437 0448 044d 0449 0447 044a + 042e 0410 0411 0426 0414 0415 0424 0413 + 0425 0418 0419 041a 041b 041c 041d 041e + 041f 042f 0420 0421 0422 0423 0416 0412 + 042c 042b 0417 0428 042d 0429 0427 042a +End diff --git a/lib/languages b/lib/languages new file mode 100644 index 0000000000..039c7e8859 --- /dev/null +++ b/lib/languages @@ -0,0 +1,48 @@ +afrikaans afrikaans "Afrikaans" false iso8859-1 af_ZA +american american "American" false iso8859-1 en_US +arabic arabic "Arabic" true iso8859-6 ar_SA +austrian austrian "Austrian" false iso8859-1 de_AU +bahasa bahasa "Bahasa" false iso8859-1 in_ID +brazil brazil "Brazil" false iso8859-1 pt_BR +breton breton "Breton" false iso8859-1 br_FR +british british "British" false iso8859-1 en_GB +canadian canadian "Canadian" false iso8859-1 en_CA +canadien frenchb "French Canadian" false iso8859-1 fr_CA +catalan catalan "Catalan" false iso8859-1 ca_ES +croatian croatian "Croatian" false iso8859-2 hr +czech czech "Czech" false iso8859-2 cs_CZ +danish danish "Danish" false iso8859-1 da_DK +dutch dutch "Dutch" false iso8859-1 nl +english english "English" false iso8859-1 en +esperanto esperanto "Esperanto" false iso8859-3 eo +#and what country code should esperanto have?? (Garst) +estonian estonian "Estonian" false iso8859-4 et_EE +finnish finnish "Finnish" false iso8859-1 fi +frenchb frenchb "French" false iso8859-1 fr +french french "French (GUTenberg)" false iso8859-1 fr +galician galician "Galician" false iso8859-1 gl_ES +# There are two Galicia's one in Spain one in E.Europe. Because of +# the font encoding I am assuming this is the one in Spain. (Garst) +german german "German" false iso8859-1 de +greek greek "Greek" false iso8859-7 el_GR +hebrew hebrew "Hebrew" true cp1255 he_IL +#hungarian hungarian "Hungarian" false iso8859-2 "" +irish irish "Irish" false iso8859-1 ga_IE +italian italian "Italian" false iso8859-1 it +lsorbian lsorbian "Lsorbian" false iso8859-2 "" +# no ISO listing for lsorbian (Garst) +magyar magyar "Magyar" false iso8859-2 hu +norsk norsk "Norsk" false iso8859-1 no +polish polish "Polish" false iso8859-2 pl +portuges portuges "Portuges" false iso8859-1 pt +romanian romanian "Romanian" false iso8859-2 ro +russian russian "Russian" false koi8 ru +scottish scottish "Scottish" false iso8859-1 gd_GB +spanish spanish "Spanish" false iso8859-1 es +slovak slovak "Slovak" false iso8859-2 sk_SL +slovene slovene "Slovene" false iso8859-2 sl_SI +swedish swedish "Swedish" false iso8859-1 sv_SE +turkish turkish "Turkish" false iso8859-9 tr +usorbian usorbian "Usorbian" false iso8859-2 "" +# no ISO listing for usorbian (Garst) +welsh welsh "Welsh" false iso8859-1 cy_GB diff --git a/po/Makefile.in.in b/po/Makefile.in.in index 280c07fad8..6748cd1235 100644 --- a/po/Makefile.in.in +++ b/po/Makefile.in.in @@ -114,6 +114,7 @@ $(top_srcdir)/src/ext_l10n.h: $(top_srcdir)/lib/layouts/*.layout $(top_srcdir)/l awk '{printf "_(\"%s\");\n", $$0}' > $@ cat $(top_srcdir)/lib/layouts/*.layout $(top_srcdir)/lib/layouts/*.inc | grep -i -E "[ ]*style .+$$" | \ cut -d ' ' -f 2 | sort | uniq | awk '{printf "_(\"%s\");\n", $$0}' >> $@ + awk -F '"' '$2 {printf "_(\"%s\");\n", $2}' < $(top_srcdir)/lib/languages >> $@ install: install-exec install-data install-exec: diff --git a/src/LaTeXFeatures.C b/src/LaTeXFeatures.C index 6e1fec3c98..239f4bf5dc 100644 --- a/src/LaTeXFeatures.C +++ b/src/LaTeXFeatures.C @@ -146,8 +146,8 @@ string const LaTeXFeatures::getPackages() // makeidx.sty if (makeidx) { if (! tclass.provides(LyXTextClass::makeidx) - && params.language != "french") // french provides - // \index ! + && params.language->babel() != "french") // french provides + // \index ! packages += "\\usepackage{makeidx}\n"; packages += "\\makeindex\n"; } diff --git a/src/Painter.C b/src/Painter.C index 8ab7f4fb73..8b0e3e679c 100644 --- a/src/Painter.C +++ b/src/Painter.C @@ -283,9 +283,9 @@ PainterBase & Painter::text(int x, int y, char const * s, size_t ls, font2.setShape(LyXFont::UP_SHAPE); font = &font2; #endif - encoding = &symbol_encoding; + encoding = encodings.symbol_encoding(); } - for (int i = 0; i < ls; ++i) { + for (size_t i = 0; i < ls; ++i) { Uchar c = encoding->ucs(s[i]); xs[i].byte1 = c >> 8; xs[i].byte2 = c & 0xff; @@ -310,7 +310,7 @@ PainterBase & Painter::text(int x, int y, char const * s, size_t ls, smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE); char c; int tmpx = x; - for(int i = 0; i < ls; ++i) { + for(size_t i = 0; i < ls; ++i) { c = s[i]; if (islower(static_cast(c))) { c = toupper(c); diff --git a/src/buffer.C b/src/buffer.C index 742c469386..4caaed8059 100644 --- a/src/buffer.C +++ b/src/buffer.C @@ -246,8 +246,8 @@ bool Buffer::readLyXformat2(LyXLex & lex, LyXParagraph * par) bool the_end_read = false; LyXParagraph * return_par = 0; - LyXFont font(LyXFont::ALL_INHERIT, params.language_info); - if (format < 2.16 && params.language == "hebrew") + LyXFont font(LyXFont::ALL_INHERIT, params.language); + if (format < 2.16 && params.language->lang() == "hebrew") font.setLanguage(default_language); // If we are inserting, we cheat and get a token in advance @@ -363,8 +363,8 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, LyXParagraph *& par, par->footnotekind = footnotekind; #endif par->depth = depth; - font = LyXFont(LyXFont::ALL_INHERIT, params.language_info); - if (format < 2.16 && params.language == "hebrew") + font = LyXFont(LyXFont::ALL_INHERIT, params.language); + if (format < 2.16 && params.language->lang() == "hebrew") font.setLanguage(default_language); #ifndef NEW_INSETS } else if (token == "\\end_float") { @@ -379,8 +379,8 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, LyXParagraph *& par, pos = 0; lex.EatLine(); par->layout = LYX_DUMMY_LAYOUT; - font = LyXFont(LyXFont::ALL_INHERIT, params.language_info); - if (format < 2.16 && params.language == "hebrew") + font = LyXFont(LyXFont::ALL_INHERIT, params.language); + if (format < 2.16 && params.language->lang() == "hebrew") font.setLanguage(default_language); } else if (token == "\\begin_float") { int tmpret = lex.FindToken(string_footnotekinds); @@ -771,11 +771,11 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, LyXParagraph *& par, } else if (token == "\\lang") { lex.next(); string const tok = lex.GetString(); - Languages::iterator lit = languages.find(tok); - if (lit != languages.end()) { - font.setLanguage(&(*lit).second); + Language const * lang = languages.getLanguage(tok); + if (lang) { + font.setLanguage(lang); } else { - font.setLanguage(params.language_info); + font.setLanguage(params.language); lex.printError("Unknown language `$$Token'"); } } else if (token == "\\numeric") { @@ -1363,7 +1363,7 @@ void Buffer::writeFileAscii(string const & fname, int linelen) } LyXFont font1 = - LyXFont(LyXFont::ALL_INHERIT, params.language_info); + LyXFont(LyXFont::ALL_INHERIT, params.language); actcell = 0; for (i = 0, actpos = 1; i < par->size(); ++i, ++actpos) { if (!i && !footnoteflag && !noparbreak){ @@ -1571,7 +1571,7 @@ string const Buffer::asciiParagraph(LyXParagraph const * par, #endif } - font1 = LyXFont(LyXFont::ALL_INHERIT, params.language_info); + font1 = LyXFont(LyXFont::ALL_INHERIT, params.language); for (LyXParagraph::size_type i = 0; i < par->size(); ++i) { if (!i && !footnoteflag && !noparbreak){ if (linelen > 0) @@ -1831,17 +1831,21 @@ void Buffer::makeLaTeXFile(string const & fname, // language should be a parameter to \documentclass bool use_babel = false; - if (params.language_info->lang() == "hebrew") // This seems necessary + if (params.language->babel() == "hebrew") // This seems necessary features.UsedLanguages.insert(default_language); - if (params.language != "default" || +#ifdef DO_USE_DEFAULT_LANGUAGE + if (params.language->lang() != "default" || !features.UsedLanguages.empty() ) { +#endif use_babel = true; for (LaTeXFeatures::LanguageList::const_iterator cit = features.UsedLanguages.begin(); cit != features.UsedLanguages.end(); ++cit) - options += (*cit)->lang() + ","; - options += params.language_info->lang() + ','; + options += (*cit)->babel() + ","; + options += params.language->babel() + ','; +#ifdef DO_USE_DEFAULT_LANGUAGE } +#endif // the user-defined options if (!params.options.empty()) { @@ -1873,7 +1877,7 @@ void Buffer::makeLaTeXFile(string const & fname, if (params.inputenc == "auto") { string const doc_encoding = - params.language_info->encoding()->LatexName(); + params.language->encoding()->LatexName(); // Create a list with all the input encodings used // in the document @@ -2141,9 +2145,13 @@ void Buffer::makeLaTeXFile(string const & fname, texrow.newline(); } // only_body lyxerr.debug() << "preamble finished, now the body." << endl; - if (!lyxrc.language_auto_begin && params.language != "default") { +#ifdef DO_USE_DEFAULT_LANGUAGE + if (!lyxrc.language_auto_begin && params.language->lang() != "default") { +#else + if (!lyxrc.language_auto_begin) { +#endif ofs << subst(lyxrc.language_command_begin, "$$lang", - params.language) + params.language->babel()) << endl; texrow.newline(); } @@ -2154,9 +2162,13 @@ void Buffer::makeLaTeXFile(string const & fname, ofs << endl; texrow.newline(); - if (!lyxrc.language_auto_end && params.language != "default") { +#ifdef DO_USE_DEFAULT_LANGUAGE + if (!lyxrc.language_auto_end && params.language->lang() != "default") { +#else + if (!lyxrc.language_auto_end) { +#endif ofs << subst(lyxrc.language_command_end, "$$lang", - params.language) + params.language->babel()) << endl; texrow.newline(); } diff --git a/src/buffer.h b/src/buffer.h index a81c0efaaa..106ed852be 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -38,6 +38,7 @@ class LyXRC; class TeXErrors; class LaTeXFeatures; class auto_mem_buffer; +class Language; /// struct DEPCLEAN { @@ -176,7 +177,7 @@ public: bool nice, bool only_body = false); /// returns the main language for the buffer (document) - string const GetLanguage() const { + Language const * GetLanguage() const { return params.language; } diff --git a/src/bufferparams.C b/src/bufferparams.C index 1059010789..c3418377fc 100644 --- a/src/bufferparams.C +++ b/src/bufferparams.C @@ -50,8 +50,7 @@ BufferParams::BufferParams() use_amsmath = false; secnumdepth = 3; tocdepth = 3; - language = default_language->lang(); - language_info = default_language; + language = default_language; fonts = "default"; inputenc = "auto"; graphicsDriver = "default"; @@ -88,7 +87,7 @@ void BufferParams::writeFile(ostream & os) const } /* then the text parameters */ - os << "\\language " << language + os << "\\language " << language->lang() << "\n\\inputencoding " << inputenc << "\n\\fontscheme " << fonts << "\n\\graphics " << graphicsDriver << '\n'; @@ -202,21 +201,14 @@ void BufferParams::readLanguage(LyXLex & lex) string tmptok = lex.GetString(); // check if tmptok is part of tex_babel in tex-defs.h - Languages::iterator lit = languages.find(tmptok); - if (lit != languages.end()) { - // found it - language = tmptok; - language_info = &(*lit).second; - } else { - // not found - language = default_language->lang(); - language_info = default_language; - if (tmptok != "default") { - lyxerr << "Warning: language `" - << tmptok << "' not recognized!\n" - << " Setting language to `default'." - << endl; - } + language = languages.getLanguage(tmptok); + if (!language) { + // Language tmptok was not found + language = default_language; + lyxerr << "Warning: language `" + << tmptok << "' not recognized!\n" + << " Setting language to `" << language->lang() + << "'." << endl; } } diff --git a/src/bufferparams.h b/src/bufferparams.h index ddff969787..4f611a7c8d 100644 --- a/src/bufferparams.h +++ b/src/bufferparams.h @@ -174,9 +174,7 @@ public: /// int tocdepth; /// - string language; - /// - Language const * language_info; + Language const * language; /// string inputenc; /// diff --git a/src/bufferview_funcs.C b/src/bufferview_funcs.C index cf6cc4abce..2888c2a573 100644 --- a/src/bufferview_funcs.C +++ b/src/bufferview_funcs.C @@ -92,9 +92,9 @@ void Number(BufferView * bv) void Lang(BufferView * bv, string const & l) { LyXFont font(LyXFont::ALL_IGNORE); - Languages::iterator lit = languages.find(l); - if (lit != languages.end()) { - font.setLanguage(&(*lit).second); + Language const * lang = languages.getLanguage(l); + if (lang) { + font.setLanguage(lang); ToggleAndShow(bv, font); } else WriteAlert(_("Error! unknown language"),l); diff --git a/src/encoding.C b/src/encoding.C index f8350dd1db..ff31f0f047 100644 --- a/src/encoding.C +++ b/src/encoding.C @@ -15,6 +15,11 @@ #endif #include "encoding.h" +#include "debug.h" + +using std::endl; + +Encodings encodings; static Uchar tab_iso8859_1[256] = { @@ -36,231 +41,6 @@ Uchar tab_iso8859_1[256] = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; - -static -Uchar tab_iso8859_2[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, - 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, - 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, - 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, - 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, - 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, - 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, - 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, - 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, - 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 -}; - - -static -Uchar tab_iso8859_3[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0xffff, 0x0124, 0x00a7, - 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0xffff, 0x017b, - 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, - 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0xffff, 0x017c, - 0x00c0, 0x00c1, 0x00c2, 0xffff, 0x00c4, 0x010a, 0x0108, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0xffff, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, - 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0xffff, 0x00e4, 0x010b, 0x0109, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0xffff, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, - 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9, -}; - - -static -Uchar tab_iso8859_4[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, - 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, - 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, - 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, - 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, - 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, - 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, - 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, - 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, - 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9 -}; - - -static -Uchar tab_iso8859_6_16[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, - 0x0668, 0x0669, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x061f, - 0x0040, 0xfe80, 0xfe81, 0xfe83, 0xfe85, 0xfe87, 0xfe89, 0xfe8d, - 0xfe8f, 0xfe93, 0xfe95, 0xfe99, 0xfe9d, 0xfea1, 0xfea5, 0xfea9, - 0xfeab, 0xfead, 0xfeaf, 0xfeb1, 0xfeb5, 0xfeb9, 0xfebd, 0xfec1, - 0xfec5, 0xfec9, 0xfecd, 0x005d, 0x005c, 0x005b, 0x005e, 0x005f, - 0x0640, 0xfed1, 0xfed5, 0xfed9, 0xfedd, 0xfee1, 0xfee5, 0xfee9, - 0xfeed, 0xfeef, 0xfef1, 0x065b, 0x065c, 0x064d, 0x064e, 0x064f, - 0x0650, 0x0651, 0x0652, 0x0073, 0x0074, 0x0075, 0xfef5, 0xfef7, - 0xfef9, 0xfefb, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0xfe71, 0x0091, 0x0092, 0xfe77, 0xfe79, 0xfe7b, 0xfe7f, 0xfe7d, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0xfe8c, 0xfe82, 0xfe84, 0xfe86, 0xfe88, 0xfe8e, 0xfeaa, 0xfeac, - 0xfeae, 0xfeb0, 0xfeee, 0xfef0, 0xfe91, 0xfe92, 0xfe90, 0xfe97, - 0xfe98, 0xfe94, 0xfe97, 0xfe98, 0xfe96, 0xfe9b, 0xfe9c, 0xfe9a, - 0xfe9f, 0xfea0, 0xfe9e, 0xfea3, 0xfea4, 0xfea2, 0xfea7, 0xfea8, - 0xfea6, 0xfeb3, 0xfeb4, 0xfeb2, 0xfeb7, 0xfeb8, 0xfeb6, 0xfebb, - 0xfebc, 0xfeba, 0xfebf, 0xfec0, 0xfebe, 0xfec3, 0xfec4, 0xfec2, - 0xfec7, 0xfec8, 0xfec6, 0xfecb, 0xfecc, 0xfeca, 0xfecf, 0xfed0, - 0xfece, 0xfed3, 0xfed4, 0xfed2, 0xfed7, 0xfed8, 0xfed6, 0xfedb, - 0xfedc, 0xfeda, 0xfedf, 0xfee0, 0xfede, 0xfee3, 0xfee4, 0xfee2, - 0xfee7, 0xfee8, 0xfee6, 0xfeeb, 0xfeec, 0xfeea, 0xfef3, 0xfef4, - 0xfef2, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0xfe8b, 0xfe8a, 0xfef6, 0xfefa, 0xfef8, 0xfefc, 0x00fe, 0x00ff -}; - - -static -Uchar tab_iso8859_7[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0x00a0, 0x0371, 0x0372, 0x00a3, 0xffff, 0xffff, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0xffff, 0x00ab, 0x00ac, 0x00ad, 0xffff, 0x2015, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x03f3, 0x03f4, 0x0386, 0x00b7, - 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, - 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, - 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, - 0x03a0, 0x03a1, 0xffff, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, - 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, - 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, - 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, - 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, - 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0xffff -}; - - -static -Uchar tab_iso8859_9[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, - 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, - 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, - 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, - 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, - 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, - 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, - 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, -}; - - -static -Uchar tab_cp1255[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0x00a0, 0xffff, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x203e, - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, - 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, - 0x05b8, 0x05b9, 0xffff, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf, - 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3, - 0x05f4, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, - 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x05ea, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff -}; - - -static -Uchar tab_koi8[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, - 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, - 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, - 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, - 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, - 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, - 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, - 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9, - 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, - 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, - 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, - 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, - 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, - 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, - 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, - 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a -}; - - #ifdef USE_UNICODE_FOR_SYMBOLS static Uchar tab_symbol[256] = { @@ -457,32 +237,15 @@ unsigned char arabic_table[63][2] = { {0,0} // 0xff }; -Encoding iso8859_1("latin1",tab_iso8859_1); -Encoding iso8859_2("latin2",tab_iso8859_2); -Encoding iso8859_3("latin3",tab_iso8859_3); -Encoding iso8859_4("latin4",tab_iso8859_4); -Encoding iso8859_6("unknown",tab_iso8859_6_16); -Encoding iso8859_7("iso-8859-7",tab_iso8859_7); -Encoding iso8859_9("latin5",tab_iso8859_9); -Encoding cp1255("cp1255",tab_cp1255); -Encoding koi8("koi8-r",tab_koi8); - - -#ifdef USE_UNICODE_FOR_SYMBOLS -Encoding symbol_encoding("",tab_symbol); -#else -Encoding symbol_encoding("",tab_iso8859_1); -#endif - -bool Encoding::IsComposeChar_hebrew(unsigned char c) +bool Encodings::IsComposeChar_hebrew(unsigned char c) { return c <= 0xd2 && c >= 0xc0 && c != 0xce && c != 0xd0; } -bool Encoding::IsComposeChar_arabic(unsigned char c) +bool Encodings::IsComposeChar_arabic(unsigned char c) { return c >= 0xeb && c <= 0xf2; } @@ -492,14 +255,14 @@ static unsigned char const arabic_start = 0xc1; -bool Encoding::is_arabic(unsigned char c) +bool Encodings::is_arabic(unsigned char c) { return c >= arabic_start && arabic_table[c-arabic_start][0]; } -unsigned char Encoding::TransformChar(unsigned char c, - Encoding::Letter_Form form) +unsigned char Encodings::TransformChar(unsigned char c, + Encodings::Letter_Form form) { if (!is_arabic(c)) return c; @@ -509,3 +272,71 @@ unsigned char Encoding::TransformChar(unsigned char c, else return arabic_table[c-arabic_start][form >> 1]; } + + +Encoding const * Encodings::getEncoding(string const & encoding) const +{ + EncodingList::const_iterator it = encodinglist.find(encoding); + if (it != encodinglist.end()) + return &(*it).second; + else + return 0; +} + +Encodings::Encodings() +{ + encodinglist["iso8859-1"] = Encoding("iso8859-1", "latin1", tab_iso8859_1); + symbol_encoding_ = +#ifdef USE_UNICODE_FOR_SYMBOLS + Encoding("symbol", "", tab_symbol); +#else + Encoding("symbol", "", tab_iso8859_1); +#endif +} + +void Encodings::read(string const & filename) +{ + enum Encodingtags { + et_encoding = 1, + et_end, + et_last + }; + + struct keyword_item encodingtags[et_last - 1] = { + { "encoding", et_encoding }, + { "end", et_end } + }; + + LyXLex lex(encodingtags, et_last - 1); + lex.setFile(filename); + while (lex.IsOK()) { + switch (lex.lex()) { + case et_encoding: + { + lex.next(); + string name = lex.GetString(); + lex.next(); + string latexname = lex.GetString(); + lyxerr[Debug::INIT] << "Reading encoding " << name << endl; + Uchar table[256]; + for (unsigned int i = 0; i < 256; ++i) { + lex.next(); + string tmp = lex.GetString(); + table[i] = ::strtol(tmp.c_str(), 0 , 16); + } + encodinglist[name] = Encoding(name, latexname, table); + if (lex.lex() != et_end) + lex.printError("Encodings::read: " + "missing end"); + break; + } + case et_end: + lex.printError("Encodings::read: Misplaced end"); + break; + default: + lex.printError("Encodings::read: " + "Unknown tag: `$$Token'"); + break; + } + } +} diff --git a/src/encoding.h b/src/encoding.h index eb37f642ad..42ade25ab7 100644 --- a/src/encoding.h +++ b/src/encoding.h @@ -25,6 +25,52 @@ typedef unsigned short int Uchar; /// class Encoding { public: + /// + Encoding() {} + /// + Encoding(string const & n, string const & l, Uchar const * e) + : Name_(n), LatexName_(l) { + for (int i = 0; i < 256; ++i) + encoding_table[i] = e[i]; + } + /// + string const & Name() const { + return Name_; + } + /// + string const & LatexName() const { + return LatexName_; + } + /// + Uchar ucs(unsigned char c) const { + return encoding_table[c]; + } +private: + /// + string Name_; + /// + string LatexName_; + /// + Uchar encoding_table[256]; +}; + +extern Encoding symbol_encoding; + +class Encodings { +public: + /// + typedef std::map EncodingList; + /// + Encodings(); + /// + void read(string const & filename); + /// + Encoding const * getEncoding(string const & encoding) const; + /// + Encoding const * symbol_encoding() { + return &symbol_encoding_; + } + /// enum Letter_Form { /// @@ -37,17 +83,6 @@ public: FORM_MEDIAL }; /// - Encoding(string const & l, Uchar const * e) - : LatexName_(l) , encoding_table(e) {} - /// - string const & LatexName() const { - return LatexName_; - } - /// - Uchar ucs(unsigned char c) const { - return encoding_table[c]; - } - /// static bool IsComposeChar_hebrew(unsigned char c); /// @@ -59,32 +94,14 @@ public: /// static unsigned char TransformChar(unsigned char c, Letter_Form form); + private: /// - string LatexName_; + EncodingList encodinglist; /// - Uchar const * encoding_table; + Encoding symbol_encoding_; }; -/// -extern Encoding iso8859_1; -/// -extern Encoding iso8859_2; -/// -extern Encoding iso8859_3; -/// -extern Encoding iso8859_4; -/// -extern Encoding iso8859_6; -/// -extern Encoding iso8859_7; -/// -extern Encoding iso8859_9; -/// -extern Encoding cp1255; -/// -extern Encoding koi8; -/// -extern Encoding symbol_encoding; +extern Encodings encodings; #endif diff --git a/src/font.C b/src/font.C index ab56101240..a66b9ebafd 100644 --- a/src/font.C +++ b/src/font.C @@ -117,9 +117,9 @@ int lyxfont::width(char const * s, size_t n, LyXFont const & f) font2.setShape(LyXFont::UP_SHAPE); font = &font2; #endif - encoding = &symbol_encoding; + encoding = encodings.symbol_encoding(); } - for (int i = 0; i < n; ++i) { + for (size_t i = 0; i < n; ++i) { Uchar c = encoding->ucs(s[i]); xs[i].byte1 = c >> 8; xs[i].byte2 = c & 0xff; @@ -137,7 +137,7 @@ int lyxfont::width(char const * s, size_t n, LyXFont const & f) char c; LyXFont smallfont(f); smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE); - for (int i = 0; i < n; ++i) { + for (size_t i = 0; i < n; ++i) { c = s[i]; // when islower is a macro, the cast is needed (JMarc) if (islower(static_cast(c))) { diff --git a/src/frontends/xforms/FormDocument.C b/src/frontends/xforms/FormDocument.C index bc4b542485..c7e32b1ae6 100644 --- a/src/frontends/xforms/FormDocument.C +++ b/src/frontends/xforms/FormDocument.C @@ -139,7 +139,7 @@ void FormDocument::build() obj = class_->choice_doc_class; fl_addto_form(class_->form); combo_doc_class = new Combox(FL_COMBOX_DROPLIST); - combo_doc_class->add(obj->x, obj->y, obj->w, obj->h, 200); + combo_doc_class->add(obj->x, obj->y, obj->w, obj->h, 400); combo_doc_class->shortcut("#C",1); combo_doc_class->setcallback(ComboInputCB, this); fl_end_form(); @@ -197,7 +197,7 @@ void FormDocument::build() obj = language_->choice_language; fl_addto_form(language_->form); combo_language = new Combox(FL_COMBOX_DROPLIST); - combo_language->add(obj->x, obj->y, obj->w, obj->h, 200); + combo_language->add(obj->x, obj->y, obj->w, obj->h, 400); combo_language->shortcut("#L",1); combo_language->setcallback(ComboInputCB, this); fl_end_form(); @@ -205,7 +205,7 @@ void FormDocument::build() #ifdef DO_USE_DEFAULT_LANGUAGE combo_language->addto("default"); #endif - for(Languages::iterator cit = languages.begin(); + for(Languages::const_iterator cit = languages.begin(); cit != languages.end(); ++cit) { combo_language->addto((*cit).second.lang().c_str()); } @@ -556,14 +556,10 @@ bool FormDocument::language_apply() else params.quotes_times = InsetQuotes::DoubleQ; - Language const * old_language = params.language_info; - params.language = combo_language->getline(); - Languages::iterator lit = languages.find(params.language); - - Language const * new_language; - if (lit != languages.end()) - new_language = &(*lit).second; - else + Language const * old_language = params.language; + Language const * new_language = + languages.getLanguage(combo_language->getline()); + if (!new_language) new_language = default_language; if (old_language != new_language @@ -573,7 +569,7 @@ bool FormDocument::language_apply() if (old_language != new_language) { redo = true; } - params.language_info = new_language; + params.language = new_language; params.inputenc = fl_get_choice_text(language_->choice_inputenc); return redo; @@ -716,7 +712,7 @@ void FormDocument::language_update(BufferParams const & params) if (!language_) return; - combo_language->select_text(params.language.c_str()); + combo_language->select_text(params.language->lang().c_str()); fl_set_choice_text(language_->choice_inputenc, params.inputenc.c_str()); fl_set_choice(language_->choice_quotes_language, params.quotes_language + 1); fl_set_button(language_->radio_single, 0); diff --git a/src/insets/insetquotes.C b/src/insets/insetquotes.C index 54a709292f..a9b6769188 100644 --- a/src/insets/insetquotes.C +++ b/src/insets/insetquotes.C @@ -230,7 +230,7 @@ void InsetQuotes::Read(Buffer const *, LyXLex & lex) int InsetQuotes::Latex(Buffer const * buf, ostream & os, bool /*fragile*/, bool) const { - string doclang = buf->GetLanguage(); + string doclang = buf->GetLanguage()->lang(); int quoteind = quote_index[side][language]; string qstr; @@ -291,7 +291,7 @@ void InsetQuotes::Validate(LaTeXFeatures & features) const { char type = quote_char[quote_index[side][language]]; - if (features.bufferParams().language == "default" + if (features.bufferParams().language->lang() == "default" && lyxrc.fontenc != "T1") { if (times == InsetQuotes::SingleQ) switch (type) { diff --git a/src/language.C b/src/language.C index 02c9040372..909768ba07 100644 --- a/src/language.C +++ b/src/language.C @@ -19,128 +19,81 @@ #include "encoding.h" #include "lyxrc.h" #include "lyx_gui_misc.h" +#include "lyxlex.h" +#include "debug.h" + +using std::endl; Languages languages; Language const * default_language; Language ignore_lang("ignore", "ignore", "Ignore", false, 0, "ignore"); Language const * ignore_language = &ignore_lang; -/// -class LangInit { -public: - /// - LangInit() { - if (!init) initL(); - init = true; - } -private: - /// - void initL(); - /// - static bool init; -}; +void Languages::setDefaults() +{ + languagelist["english"] = Language("english", "english", N_("English"), + false, + encodings.getEncoding("iso8859-1"), + "en"); + default_language = &languagelist["english"]; +} +void Languages::read(string const & filename) +{ + LyXLex lex(0, 0); + lex.setFile(filename); + while (lex.IsOK()) { + string lang, babel, display, encoding_str, code; + bool rtl = false; -struct lang_item { - char const * lang; - char const * babel; - char const * display; - bool rtl; - Encoding const * encoding; - char const * code; -}; + if (lex.next()) + lang = lex.GetString(); + else + break; + lyxerr[Debug::INIT] << "Reading language " << lang << endl; + if (lex.next()) + babel = lex.GetString(); + if (lex.next()) + display = lex.GetString(); + if (lex.next()) + rtl = lex.GetBool(); + if (lex.next()) + encoding_str = lex.GetString(); + if (lex.next()) + code = lex.GetString(); -void LangInit::initL() -{ - // Use this style of initialization to lower compilation times. - // Same method is used in LyXAction.C (Lgb) + Encoding const * encoding = encodings.getEncoding(encoding_str); + if (!encoding) { + encoding = encodings.getEncoding("iso8859-1"); + lyxerr << "Unknown encoding " << encoding_str << endl; + } + + languagelist[lang] = Language(lang, babel, display, rtl, encoding, code); + } - lang_item items[] = { - { "afrikaans", "afrikaans", N_("Afrikaans"), false, &iso8859_1, "af_ZA" }, - { "american", "american", N_("American"), false, &iso8859_1, "en_US" }, - { "arabic", "arabic", N_("Arabic"), true, &iso8859_6, "ar_SA" }, - { "austrian", "austrian", N_("Austrian"), false, &iso8859_1, "de_AU" }, - { "bahasa", "bahasa", N_("Bahasa"), false, &iso8859_1, "in_ID" }, - { "brazil", "brazil", N_("Brazil"), false, &iso8859_1, "pt_BR" }, - { "breton", "breton", N_("Breton"), false, &iso8859_1, "br_FR" }, - { "british", "british", N_("British"), false, &iso8859_1, "en_GB" }, - { "canadian", "canadian", N_("Canadian"), false, &iso8859_1, "en_CA" }, - { "canadien", "frenchb", N_("French Canadian"), false, &iso8859_1, "fr_CA" }, - { "catalan", "catalan", N_("Catalan"), false, &iso8859_1, "ca_ES" }, - { "croatian", "croatian", N_("Croatian"), false, &iso8859_2, "hr" }, - { "czech", "czech", N_("Czech"), false, &iso8859_2, "cs_CZ" }, - { "danish", "danish", N_("Danish"), false, &iso8859_1, "da_DK" }, #ifdef DO_USE_DEFAULT_LANGUAGE - { "default", "default", N_("Document wide language"), false, &iso8859_1, "" }, + languagelist["default"] = Language("default", "default", + N_("Document wide language"), + false, &iso8859_1, ""); #endif - { "dutch", "dutch", N_("Dutch"), false, &iso8859_1, "nl" }, - { "english", "english", N_("English"), false, &iso8859_1, "en" }, - { "esperanto", "esperanto", N_("Esperanto"), false, &iso8859_3, "eo" }, - // and what country code should esperanto have?? (Garst) - { "estonian", "estonian", N_("Estonian"), false, &iso8859_4, "et_EE" }, - { "finnish", "finnish", N_("Finnish"), false, &iso8859_1, "fi" }, - { "frenchb", "frenchb", N_("French"), false, &iso8859_1, "fr" }, - { "french", "french", N_("French (GUTenberg)"), false, &iso8859_1, "fr" }, - { "galician", "galician", N_("Galician"), false, &iso8859_1, "gl_ES" }, - /*There are two Galicia's, one in Spain, one in E.Europe. Because of - the font encoding, I am assuming this is the one in Spain. (Garst) - */ - { "german", "german", N_("German"), false, &iso8859_1, "de" }, - { "greek", "greek", N_("Greek"), false, &iso8859_7, "el_GR" }, - { "hebrew", "hebrew", N_("Hebrew"), true, &cp1255, "he_IL" }, - /* According to Zrubecz Laszlo , - "magyar" is better. I kept it here in case we want - to provide aliasing of languages. (JMarc) - */ - //{ "hungarian", "hungarian", N_("Hungarian"), false, &iso8859_2, "" }, - { "irish", "irish", N_("Irish"), false, &iso8859_1, "ga_IE" }, - { "italian", "italian", N_("Italian"), false, &iso8859_1, "it" }, - { "lsorbian", "lsorbian", N_("Lsorbian"), false, &iso8859_2, "" }, - // no ISO listing for lsorbian (Garst) - { "magyar", "magyar", N_("Magyar"), false, &iso8859_2, "hu" }, - { "norsk", "norsk", N_("Norsk"), false, &iso8859_1, "no" }, - { "polish", "polish", N_("Polish"), false, &iso8859_2, "pl" }, - { "portuges", "portuges", N_("Portuges"), false, &iso8859_1, "pt" }, - { "romanian", "romanian", N_("Romanian"), false, &iso8859_2, "ro" }, - { "russian", "russian", N_("Russian"), false, &koi8, "ru" }, - { "scottish", "scottish", N_("Scottish"), false, &iso8859_1, "gd_GB" }, - { "spanish", "spanish", N_("Spanish"), false, &iso8859_1, "es" }, - { "slovak", "slovak", N_("Slovak"), false, &iso8859_2, "sk_SL" }, - { "slovene", "slovene", N_("Slovene"), false, &iso8859_2, "sl_SI" }, - { "swedish", "swedish", N_("Swedish"), false, &iso8859_1, "sv_SE" }, - { "turkish", "turkish", N_("Turkish"), false, &iso8859_9, "tr" }, - { "usorbian", "usorbian", N_("Usorbian"), false, &iso8859_2, "" }, - // no ISO listing for usorbian (Garst) - { "welsh", "welsh", N_("Welsh"), false, &iso8859_1, "cy_GB" }, - { 0, 0, 0, false, 0, 0 } - }; - - int i = 0; - while (items[i].lang) { - languages[items[i].lang] = - Language(items[i].lang, items[i].babel, - items[i].display, items[i].rtl, - items[i].encoding, items[i].code); - ++i; + default_language = getLanguage(lyxrc.default_language); + if (!default_language) { + lyxerr << "Default language \"" << lyxrc.default_language + << "\" not found!" << endl; + default_language = getLanguage("english"); + if (!default_language) + default_language = &(*languagelist.begin()).second; + lyxerr << "Using \"" << default_language->lang() + << "\" instead!" << endl; } -#if 0 - // This code does not make sense as it is run even before - // main() is invoked. (JMarc) - if (languages.find(lyxrc.default_language) == languages.end()) { - string l1 = _("Default language \"") + lyxrc.default_language + - _("\" not found!"); - WriteAlert(l1.c_str(), _("Using \"english\" instead!"),""); - default_language = &languages["english"]; - } else - default_language = &languages[lyxrc.default_language]; -#else - default_language = &languages["english"]; -#endif } - -static -LangInit langinit; - -bool LangInit::init = false; +Language const * Languages::getLanguage(string const & language) const +{ + const_iterator it = languagelist.find(language); + if (it != languagelist.end()) + return &(*it).second; + else + return 0; +} diff --git a/src/language.h b/src/language.h index 7015a59f79..8124285382 100644 --- a/src/language.h +++ b/src/language.h @@ -71,30 +71,36 @@ private: string code_; }; -#if 0 -/// -bool operator==(Language const & l1, Language const & l2) +class Languages { - return l1.lang == l2.lang - && l1.display_ == l2.display_ - && l1.RightToLeft_ == l2.RightToLeft_ - && l1.encoding_ == l2.encoding_; -} - -/// -bool operator!=(Language const l1, Language const & l2) -{ - return !(l1 == l2); +public: + /// + typedef std::map LanguageList; + /// + typedef LanguageList::const_iterator const_iterator; + /// + void read(string const & filename); + /// + void setDefaults(); + /// + Language const * getLanguage(string const & language) const; + /// + const_iterator begin() const { + return languagelist.begin(); + } + /// + const_iterator end() const { + return languagelist.end(); + } + /// + +private: + /// + LanguageList languagelist; +}; -} -#endif -/// -typedef std::map Languages; -/// extern Languages languages; -/// extern Language const * default_language; -/// extern Language const *ignore_language; #endif diff --git a/src/lyx_cb.C b/src/lyx_cb.C index 7878bb0fb9..7e9cbb003a 100644 --- a/src/lyx_cb.C +++ b/src/lyx_cb.C @@ -736,9 +736,9 @@ LyXFont const UserFreeFont(BufferParams const & params) if (choice == 1) font.setLanguage(ignore_language); else if (choice == 2) - font.setLanguage(params.language_info); + font.setLanguage(params.language); else - font.setLanguage(&languages[combo_language2->getline()]); + font.setLanguage(languages.getLanguage(combo_language2->getline())); return font; } diff --git a/src/lyx_gui.C b/src/lyx_gui.C index 80e99b21f0..f04e2645bc 100644 --- a/src/lyx_gui.C +++ b/src/lyx_gui.C @@ -329,7 +329,7 @@ void LyXGUI::create_forms() // build up the combox entries combo_language2->addto(_("No change")); combo_language2->addto(_("Reset")); - for(Languages::iterator cit = languages.begin(); + for(Languages::const_iterator cit = languages.begin(); cit != languages.end(); ++cit) { #ifdef DO_USE_DEFAULT_LANGUAGE if ((*cit).second.lang() != "default") diff --git a/src/lyx_main.C b/src/lyx_main.C index 84378364bc..3d40729c10 100644 --- a/src/lyx_main.C +++ b/src/lyx_main.C @@ -38,6 +38,7 @@ #include "MenuBackend.h" #include "ToolbarDefaults.h" #include "lyxlex.h" +#include "encoding.h" using std::endl; @@ -365,13 +366,6 @@ void LyX::init(int */*argc*/, char **argv, bool gui) // Check that user LyX directory is ok. queryUserLyXDir(explicit_userdir); - // - // Load the layouts first - // - - lyxerr[Debug::INIT] << "Reading layouts..." << endl; - LyXSetStyle(); - // // Shine up lyxrc defaults // @@ -410,6 +404,15 @@ void LyX::init(int */*argc*/, char **argv, bool gui) if (!ReadRcFile("preferences")) ReadRcFile("lyxrc"); + // Read encodings + ReadEncodingsFile("encodings"); + // Read languages + ReadLangugesFile("languages"); + + // Load the layouts + lyxerr[Debug::INIT] << "Reading layouts..." << endl; + LyXSetStyle(); + // Ensure that we have really read a bind file, so that LyX is // usable. if (!lyxrc.hasBindFile) @@ -612,6 +615,7 @@ void LyX::ReadUIFile(string const & name) if (ui_path.empty()) { lyxerr[Debug::INIT] << "Could not find " << name << endl; + menubackend.defaults(); return; } @@ -646,6 +650,35 @@ void LyX::ReadUIFile(string const & name) } +// Read the languages file `name' +void LyX::ReadLangugesFile(string const & name) +{ + lyxerr[Debug::INIT] << "About to read " << name << "..." << endl; + + string lang_path = LibFileSearch(string(), name); + if (lang_path.empty()) { + lyxerr[Debug::INIT] << "Could not find " << name << endl; + languages.setDefaults(); + return; + } + languages.read(lang_path); +} + + +// Read the encodings file `name' +void LyX::ReadEncodingsFile(string const & name) +{ + lyxerr[Debug::INIT] << "About to read " << name << "..." << endl; + + string enc_path = LibFileSearch(string(), name); + if (enc_path.empty()) { + lyxerr[Debug::INIT] << "Could not find " << name << endl; + return; + } + encodings.read(enc_path); +} + + // Set debugging level and report result to user void setDebuggingLevel(string const & dbgLevel) { diff --git a/src/lyx_main.h b/src/lyx_main.h index ba5db6b409..ba840c422f 100644 --- a/src/lyx_main.h +++ b/src/lyx_main.h @@ -74,6 +74,10 @@ private: bool ReadRcFile(string const & name); /// Read the ui file `name' void ReadUIFile(string const & name); + /// Read the languages file `name' + void ReadLangugesFile(string const & name); + /// Read the encodings file `name' + void ReadEncodingsFile(string const & name); /// bool easyParse(int * argc, char * argv[]); }; diff --git a/src/lyxfont.C b/src/lyxfont.C index 065a5d8d72..0c783cb148 100644 --- a/src/lyxfont.C +++ b/src/lyxfont.C @@ -292,7 +292,10 @@ void LyXFont::update(LyXFont const & newfont, setNumber(setMisc(newfont.number(), number())); if (newfont.language() == language() && toggleall) - setLanguage(document_language); + if (language() == document_language) + setLanguage(default_language); + else + setLanguage(document_language); else if (newfont.language() != ignore_language) setLanguage(newfont.language()); @@ -404,12 +407,11 @@ string const LyXFont::stateText(BufferParams * params) const ost << _("Latex ") << _(GUIMiscNames[latex()]) << ", "; if (bits == inherit) ost << _("Default") << ", "; - if (!params || (language() != params->language_info)) + if (!params || (language() != params->language)) ost << _("Language: ") << _(language()->display().c_str()) << ", "; if (number() != OFF) ost << _(" Number ") << _(GUIMiscNames[number()]); - string buf(ost.str().c_str()); buf = strip(buf, ' '); buf = strip(buf, ','); @@ -676,7 +678,8 @@ int LyXFont::latexWriteStartChanges(ostream & os, LyXFont const & base, int count = 0; bool env = false; - if (language() != base.language() && language() != prev.language()) { + if (language()->babel() != base.language()->babel() && + language()->babel() != prev.language()->babel()) { if (isRightToLeft() != prev.isRightToLeft()) { if (isRightToLeft()) { os << "\\R{"; @@ -688,7 +691,7 @@ int LyXFont::latexWriteStartChanges(ostream & os, LyXFont const & base, } else { string tmp = '{' + subst(lyxrc.language_command_begin, - "$$lang", language()->lang()); + "$$lang", language()->babel()); os << tmp; count += tmp.length(); } diff --git a/src/paragraph.C b/src/paragraph.C index e822a99261..6fb5e4bd27 100644 --- a/src/paragraph.C +++ b/src/paragraph.C @@ -242,7 +242,7 @@ void LyXParagraph::writeFile(Buffer const * buf, ostream & os, if (bibkey) bibkey->Write(buf, os); - LyXFont font1(LyXFont::ALL_INHERIT, params.language_info); + LyXFont font1(LyXFont::ALL_INHERIT, params.language); int column = 0; for (size_type i = 0; i < size(); ++i) { @@ -342,7 +342,7 @@ void LyXParagraph::validate(LaTeXFeatures & features) const features.layout[GetLayout()] = true; // then the fonts - Language const * doc_language = params.language_info; + Language const * doc_language = params.language; for (FontList::const_iterator cit = fontlist.begin(); cit != fontlist.end(); ++cit) { @@ -368,10 +368,10 @@ void LyXParagraph::validate(LaTeXFeatures & features) const } Language const * language = (*cit).font.language(); - if (language != doc_language) { + if (language->babel() != doc_language->babel()) { features.UsedLanguages.insert(language); lyxerr[Debug::LATEX] << "Found language " - << language->lang() << endl; + << language->babel() << endl; } } @@ -2262,12 +2262,13 @@ LyXParagraph * LyXParagraph::TeXOnePar(Buffer const * buf, } Language const * language = getParLanguage(bparams); - Language const * doc_language = bparams.language_info; + Language const * doc_language = bparams.language; Language const * previous_language = previous ? previous->getParLanguage(bparams) : doc_language; - if (language != doc_language && language != previous_language) { + if (language->babel() != doc_language->babel() && + language->babel() != previous_language->babel()) { os << subst(lyxrc.language_command_begin, "$$lang", - language->lang()) + language->babel()) << endl; texrow.newline(); } @@ -2375,15 +2376,15 @@ LyXParagraph * LyXParagraph::TeXOnePar(Buffer const * buf, os << "{\\" << font.latexSize() << " \\par}"; } - if (language != doc_language && + if (language->babel() != doc_language->babel() && (!par #ifndef NEW_INSETS || (footnoteflag != NO_FOOTNOTE && par->footnoteflag != footnoteflag) #endif - || par->getParLanguage(bparams) != language)) { + || par->getParLanguage(bparams)->babel() != language->babel())) { os << endl << subst(lyxrc.language_command_end, "$$lang", - doc_language->lang()); + doc_language->babel()); } switch (style.latextype) { @@ -2547,7 +2548,7 @@ bool LyXParagraph::SimpleTeXOnePar(Buffer const * buf, case LYX_ALIGN_SPECIAL: break; case LYX_ALIGN_LEFT: - if (getParLanguage(bparams)->lang() != "hebrew") { + if (getParLanguage(bparams)->babel() != "hebrew") { os << "\\raggedright "; column+= 13; } else { @@ -2556,7 +2557,7 @@ bool LyXParagraph::SimpleTeXOnePar(Buffer const * buf, } break; case LYX_ALIGN_RIGHT: - if (getParLanguage(bparams)->lang() != "hebrew") { + if (getParLanguage(bparams)->babel() != "hebrew") { os << "\\raggedleft "; column+= 12; } else { @@ -3866,15 +3867,19 @@ LyXParagraph::getParLanguage(BufferParams const & bparams) const else #endif if (size() > 0) { +#ifdef DO_USE_DEFAULT_LANGUAGE Language const * lang = GetFirstFontSettings().language(); - if (lang->lang() == default_language->lang()) - return bparams.language_info; + if (lang->lang() == "default") + return bparams.language; return lang; +#else + return GetFirstFontSettings().language(); +#endif } else if (previous) return previous->getParLanguage(bparams); - - return bparams.language_info; + else + return bparams.language; } @@ -3900,7 +3905,7 @@ void LyXParagraph::ChangeLanguage(BufferParams const & bparams, bool LyXParagraph::isMultiLingual(BufferParams const & bparams) { - Language const * doc_language = bparams.language_info; + Language const * doc_language = bparams.language; for (FontList::const_iterator cit = fontlist.begin(); cit != fontlist.end(); ++cit) if ((*cit).font.language() != doc_language) diff --git a/src/screen.C b/src/screen.C index 8887775dac..2e29133e43 100644 --- a/src/screen.C +++ b/src/screen.C @@ -202,9 +202,9 @@ void LyXScreen::ShowCursor(LyXText const * text) if (!cursor_visible) { Cursor_Shape shape = BAR_SHAPE; if (text->real_current_font.language() != - owner.owner()->buffer()->params.language_info + owner.owner()->buffer()->params.language || text->real_current_font.isVisibleRightToLeft() - != owner.owner()->buffer()->params.language_info->RightToLeft()) + != owner.owner()->buffer()->params.language->RightToLeft()) shape = (text->real_current_font.isVisibleRightToLeft()) ? REVERSED_L_SHAPE : L_SHAPE; ShowManualCursor(text, text->cursor.x(), text->cursor.y(), diff --git a/src/spellchecker.C b/src/spellchecker.C index 355782c764..fa208ce363 100644 --- a/src/spellchecker.C +++ b/src/spellchecker.C @@ -395,7 +395,7 @@ void init_spell_checker(BufferParams const & params, string const & lang) if (lyxrc.isp_use_input_encoding && params.inputenc != "default") { string enc = (params.inputenc == "auto") - ? params.language_info->encoding()->LatexName() + ? params.language->encoding()->LatexName() : params.inputenc; string::size_type n = enc.length(); tmp = new char[3]; @@ -806,20 +806,18 @@ bool RunSpellChecker(BufferView * bv) #ifdef USE_PSPELL string tmp = (lyxrc.isp_use_alt_lang) ? - lyxrc.isp_alt_lang : bv->buffer()->params.language_info->code(); + lyxrc.isp_alt_lang : bv->buffer()->params.language->code(); #else string tmp = (lyxrc.isp_use_alt_lang) ? - lyxrc.isp_alt_lang : bv->buffer()->GetLanguage(); + lyxrc.isp_alt_lang : bv->buffer()->params.language->lang(); #endif -#warning This is not good we should find a way to identify a rtl-language in a more general way. Please have a look Dekel! (Jug) -// For now I'll change this to a bit more general solution but -// Please comment on this if you don't like it. We probaly need -// anoter flag something like lyxrc.isp_use_alt_lang_rtl (true/false)! - bool rtl; - if (lyxrc.isp_use_alt_lang) - rtl = (tmp == "hebrew" || tmp == "arabic"); - else - rtl = bv->buffer()->params.language_info->RightToLeft(); + bool rtl = false; + if (lyxrc.isp_use_alt_lang) { + Language const * lang = languages.getLanguage(tmp); + if (lang) + rtl = lang->RightToLeft(); + } else + rtl = bv->buffer()->params.language->RightToLeft(); int oldval = 0; /* used for updating slider only when needed */ float newval = 0.0; diff --git a/src/tabular.h b/src/tabular.h index c7c74d9cd0..241a8fe43e 100644 --- a/src/tabular.h +++ b/src/tabular.h @@ -283,13 +283,13 @@ public: // helper function for Latex returns number of newlines /// int AsciiTopHLine(std::ostream &, int row, - vector const &) const; + std::vector const &) const; /// int AsciiBottomHLine(std::ostream &, int row, - vector const &) const; + std::vector const &) const; /// int AsciiPrintCell(Buffer const *, std::ostream &, int cell, int row, - int column, vector const &) const; + int column, std::vector const &) const; /// int Ascii(Buffer const *, std::ostream &) const; /// diff --git a/src/text.C b/src/text.C index 9c59142848..ea0c60ace1 100644 --- a/src/text.C +++ b/src/text.C @@ -57,7 +57,7 @@ int LyXText::workWidth(BufferView * bview) const unsigned char LyXText::TransformChar(unsigned char c, LyXParagraph * par, LyXParagraph::size_type pos) const { - if (!Encoding::is_arabic(c)) + if (!Encodings::is_arabic(c)) if (lyxrc.font_norm_type == LyXRC::ISO_8859_6_8 && isdigit(c)) return c + (0xb0 - '0'); else @@ -66,21 +66,21 @@ unsigned char LyXText::TransformChar(unsigned char c, LyXParagraph * par, unsigned char prev_char = pos > 0 ? par->GetChar(pos-1) : ' '; unsigned char next_char = ' '; for (LyXParagraph::size_type i = pos+1; i < par->Last(); ++i) - if (!Encoding::IsComposeChar_arabic(par->GetChar(i))) { + if (!Encodings::IsComposeChar_arabic(par->GetChar(i))) { next_char = par->GetChar(i); break; } - if (Encoding::is_arabic(next_char)) { - if (Encoding::is_arabic(prev_char)) - return Encoding::TransformChar(c, Encoding::FORM_MEDIAL); + if (Encodings::is_arabic(next_char)) { + if (Encodings::is_arabic(prev_char)) + return Encodings::TransformChar(c, Encodings::FORM_MEDIAL); else - return Encoding::TransformChar(c, Encoding::FORM_INITIAL); + return Encodings::TransformChar(c, Encodings::FORM_INITIAL); } else { - if (Encoding::is_arabic(prev_char)) - return Encoding::TransformChar(c, Encoding::FORM_FINAL); + if (Encodings::is_arabic(prev_char)) + return Encodings::TransformChar(c, Encodings::FORM_FINAL); else - return Encoding::TransformChar(c, Encoding::FORM_ISOLATED); + return Encodings::TransformChar(c, Encodings::FORM_ISOLATED); } } @@ -128,12 +128,12 @@ int LyXText::SingleWidth(BufferView * bview, LyXParagraph * par, if (font.language()->lang() == "arabic" && (lyxrc.font_norm_type == LyXRC::ISO_8859_6_8 || lyxrc.font_norm_type == LyXRC::ISO_10646_1)) - if (Encoding::IsComposeChar_arabic(c)) + if (Encodings::IsComposeChar_arabic(c)) return 0; else c = TransformChar(c, par, pos); else if (font.language()->lang() == "hebrew" && - Encoding::IsComposeChar_hebrew(c)) + Encodings::IsComposeChar_hebrew(c)) return 0; } return lyxfont::width(c, font); @@ -512,7 +512,7 @@ void LyXText::draw(BufferView * bview, Row const * row, ++vpos; if (lyxrc.mark_foreign_language && - font.language() != bview->buffer()->params.language_info) { + font.language() != bview->buffer()->params.language) { int y = offset + row->height() - 1; pain.line(int(tmpx), y, int(x), y, LColor::language); @@ -541,12 +541,12 @@ void LyXText::draw(BufferView * bview, Row const * row, LyXParagraph::size_type last = RowLastPrintable(row); if (font.language()->lang() == "hebrew") { - if (Encoding::IsComposeChar_hebrew(c)) { + if (Encodings::IsComposeChar_hebrew(c)) { int width = lyxfont::width(c, font2); int dx = 0; for (LyXParagraph::size_type i = pos-1; i >= 0; --i) { c = row->par()->GetChar(i); - if (!Encoding::IsComposeChar_hebrew(c)) { + if (!Encodings::IsComposeChar_hebrew(c)) { if (IsPrintableNonspace(c)) { int width2 = SingleWidth(bview, row->par(), i, c); dx = (c == 'ø' || c == 'ã') // dalet / resh @@ -562,7 +562,7 @@ void LyXText::draw(BufferView * bview, Row const * row, while (vpos <= last && (pos = vis2log(vpos)) >= 0 && IsPrintableNonspace(c = row->par()->GetChar(pos)) - && !Encoding::IsComposeChar_hebrew(c) + && !Encodings::IsComposeChar_hebrew(c) && font2 == GetFont(bview->buffer(), row->par(), pos)) { textstring += c; ++vpos; @@ -575,14 +575,14 @@ void LyXText::draw(BufferView * bview, Row const * row, } else if (font.language()->lang() == "arabic" && (lyxrc.font_norm_type == LyXRC::ISO_8859_6_8 || lyxrc.font_norm_type == LyXRC::ISO_10646_1)) { - if (Encoding::IsComposeChar_arabic(c)) { + if (Encodings::IsComposeChar_arabic(c)) { c = TransformChar(c, row->par(), pos); textstring = c; int width = lyxfont::width(c, font2); int dx = 0; for (LyXParagraph::size_type i = pos-1; i >= 0; --i) { c = row->par()->GetChar(i); - if (!Encoding::IsComposeChar_arabic(c)) { + if (!Encodings::IsComposeChar_arabic(c)) { if (IsPrintableNonspace(c)) { int width2 = SingleWidth(bview, row->par(), i, c); dx = (width2 - width) / 2; @@ -598,7 +598,7 @@ void LyXText::draw(BufferView * bview, Row const * row, while (vpos <= last && (pos = vis2log(vpos)) >= 0 && IsPrintableNonspace(c = row->par()->GetChar(pos)) - && !Encoding::IsComposeChar_arabic(c) + && !Encodings::IsComposeChar_arabic(c) && font2 == GetFont(bview->buffer(), row->par(), pos)) { c = TransformChar(c, row->par(), pos); textstring += c; @@ -623,7 +623,7 @@ void LyXText::draw(BufferView * bview, Row const * row, } if (lyxrc.mark_foreign_language && - font.language() != bview->buffer()->params.language_info) { + font.language() != bview->buffer()->params.language) { int y = offset + row->height() - 1; pain.line(int(tmpx), y, int(x), y, LColor::language); diff --git a/src/text2.C b/src/text2.C index 94e06a769b..3071fa4997 100644 --- a/src/text2.C +++ b/src/text2.C @@ -870,7 +870,7 @@ void LyXText::SetFont(BufferView * bview, LyXFont const & font, bool toggleall) layoutfont = GetFont(bview->buffer(), cursor.par(),-1); // Update current font real_current_font.update(font, - bview->buffer()->params.language_info, + bview->buffer()->params.language, toggleall); // Reduce to implicit settings @@ -914,7 +914,7 @@ void LyXText::SetFont(BufferView * bview, LyXFont const & font, bool toggleall) LyXFont newfont = GetFont(bview->buffer(), cursor.par(), cursor.pos()); newfont.update(font, - bview->buffer()->params.language_info, + bview->buffer()->params.language, toggleall); SetCharFont(bview->buffer(), cursor.par(), cursor.pos(), newfont); -- 2.39.2