#cookie-notice { display: block; visibility: hidden; position: fixed; min-width: 100%; height: auto; z-index: 100000; font-size: 13px; line-height: 20px; left: 0; text-align: center; } .cn-top { top: 0; } .cn-bottom { bottom: 0; } .cookie-notice-container { padding: 10px; text-align: center; width: 100%; } .cookie-notice-revoke-container { position: absolute; bottom: 0; width: 100%; z-index: 1; visibility: hidden; } .cn-top .cookie-notice-revoke-container { top: 0; bottom: auto; } #cookie-notice .cn-revoke-cookie { margin: 0; } .cn-button.wp-default, .cn-button.wp-default:hover, .cn-button.bootstrap, .cn-button.bootstrap:hover { box-shadow: none; text-decoration: none; } #cookie-notice .cn-button { margin-left: 10px; } .cn-button.wp-default { font-family: sans-serif; line-height: 18px; padding: 2px 12px; background: linear-gradient(to bottom, #FEFEFE, #F4F4F4) repeat scroll 0 0 #F3F3F3; border-color: #BBB; color: #333; text-shadow: 0 1px 0 #FFF; -moz-box-sizing: border-box; border-radius: 3px 3px 3px 3px; border-style: solid; border-width: 1px; cursor: pointer; display: inline-block; font-size: 12px; font-style: normal; text-decoration: none; white-space: nowrap; outline: none; } .cn-button.wp-default:hover { background: linear-gradient(to bottom, #FFFFFF, #F3F3F3) repeat scroll 0 0 #F3F3F3; border-color: #999; color: #222; } .cn-button.bootstrap { font-family: sans-serif; display: inline-block; *display: inline; padding: 4px 12px; margin-right: .3em; margin-bottom: 0; *margin-left: .3em; line-height: 20px; color: #333; text-align: center; text-shadow: 0 1px 1px rgba(255, 255, 255, .75); font-style: normal; vertical-align: middle; cursor: pointer; color: #fff; text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); background-color: #006dcc; *background-color: #04c; background-image: -moz-linear-gradient(top, #0088cc, #0044cc); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); background-image: -o-linear-gradient(top, #0088cc, #0044cc); background-image: linear-gradient(to bottom, #0088cc, #0044cc); background-repeat: repeat-x; border-style: solid; border-width: 1px; border-color: #04c #04c #002a80; border-color: rgba(0, 0, 0, .1) rgba(0, 0, 0, .1) rgba(0, 0, 0, .25); box-shadow: 0 1px 0 rgba(255, 255, 255, .2) inset, 0 1px 2px rgba(0, 0, 0, .05); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); padding: 2px 10px; font-size: 12px; text-decoration: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; outline: none; } .cn-button.bootstrap:hover { color: #fff; background-color: #04c; *background-color: #003bb3; background-position: 0 -15px; -webkit-transition: background-position 0.1s linear; -moz-transition: background-position 0.1s linear; -o-transition: background-position 0.1s linear; transition: background-position 0.1s linear; }tween_number_and_unit', Zalomeni::default_between_number_and_unit); add_option('zalomeni_between_number_and_unit_list', Zalomeni::default_between_number_and_unit_list); add_option('zalomeni_spaces_in_scales', Zalomeni::default_spaces_in_scales); add_option('zalomeni_space_between_numbers', Zalomeni::default_space_between_numbers); add_option('zalomeni_space_after_ordered_number', Zalomeni::default_space_after_ordered_number); add_option('zalomeni_custom_terms', Zalomeni::default_custom_terms); self::update_matches_and_replacements(); } private function update_plugin_version() { $registered_version = get_option('zalomeni_version', '0'); if ($registered_version == '0') return; if (version_compare($registered_version, self::version, '<')) { if (version_compare($registered_version, '1.3', '<')) { $old_options = get_option('zalomeni_options'); update_option('zalomeni_prepositions', $old_options['zalomeni_prepositions']); update_option('zalomeni_prepositions_list', $old_options['zalomeni_prepositions_list']); update_option('zalomeni_conjunctions', $old_options['zalomeni_conjunctions']); update_option('zalomeni_conjunctions_list', $old_options['zalomeni_conjunctions_list']); if (!version_compare($registered_version, '1.1', '<')) { // these options were introduced in version 1.1 update_option('zalomeni_abbreviations', $old_options['zalomeni_abbreviations']); update_option('zalomeni_abbreviations_list', $old_options['zalomeni_abbreviations_list']); update_option('zalomeni_space_between_numbers', $old_options['zalomeni_numbers']); } delete_option('zalomeni_options'); } self::add_options(); update_option('zalomeni_version', self::version); } } protected static $this_plugin; function add_settings_to_plugin_actions($links, $file) { // Add settings link to plugin list for this plugin if (!self::$this_plugin) self::$this_plugin = plugin_basename(__FILE__); if ($file == self::$this_plugin) { $settings_link = '' . __('Settings') . ''; array_unshift( $links, $settings_link ); // before other links } return $links; } function admin_init() { $this->update_plugin_version(); add_filter('plugin_action_links', array($this, 'add_settings_to_plugin_actions'), 10, 2); // link from Plugins list admin page to settings of this plugin register_setting('reading', 'zalomeni_prepositions'); register_setting('reading', 'zalomeni_prepositions_list'); register_setting('reading', 'zalomeni_conjunctions'); register_setting('reading', 'zalomeni_conjunctions_list'); register_setting('reading', 'zalomeni_abbreviations'); register_setting('reading', 'zalomeni_abbreviations_list'); register_setting('reading', 'zalomeni_between_number_and_unit'); register_setting('reading', 'zalomeni_between_number_and_unit_list'); register_setting('reading', 'zalomeni_space_between_numbers'); register_setting('reading', 'zalomeni_space_after_ordered_number'); register_setting('reading', 'zalomeni_spaces_in_scales'); register_setting('reading', 'zalomeni_custom_terms'); add_settings_section('zalomeni_section', $this->texturize(__('Nevhodná slova a zalomení na konci řádku', 'zalomeni')), 'Zalomeni::settings_section_description', 'reading'); add_settings_field('zalomeni_prepositions', __('Předložky', 'zalomeni'), 'Zalomeni::settings_field_checkbox', 'reading', 'zalomeni_section', array('option'=>'prepositions', 'description'=>"Vkládat pevnou mezeru za následující předložky.", 'toggle_list_read_only'=>true)); add_settings_field('zalomeni_prepositions_list', '', 'Zalomeni::settings_field_textlist', 'reading', 'zalomeni_section', array('option'=>'prepositions', 'description'=>"(oddělte jednotlivé předložky čárkou)")); add_settings_field('zalomeni_conjunctions', __('Spojky', 'zalomeni'), 'Zalomeni::settings_field_checkbox', 'reading', 'zalomeni_section', array('option'=>'conjunctions', 'description'=>"Vkládat pevnou mezeru za následující spojky.", 'toggle_list_read_only'=>true)); add_settings_field('zalomeni_conjunctions_list', '', 'Zalomeni::settings_field_textlist', 'reading', 'zalomeni_section', array('option'=>'conjunctions', 'description'=>"(oddělte jednotlivé spojky čárkou)")); add_settings_field('zalomeni_abbreviations', __('Zkratky', 'zalomeni'), 'Zalomeni::settings_field_checkbox', 'reading', 'zalomeni_section', array('option'=>'abbreviations', 'description'=>"Vkládat pevnou mezeru za následující zkratky.", 'toggle_list_read_only'=>true)); add_settings_field('zalomeni_abbreviations_list', '', 'Zalomeni::settings_field_textlist', 'reading', 'zalomeni_section', array('option'=>'abbreviations', 'description'=>"(oddělte jednotlivé zkratky čárkou)")); add_settings_field('zalomeni_between_number_and_unit', __('Jednotky a míry', 'zalomeni'), 'Zalomeni::settings_field_checkbox', 'reading', 'zalomeni_section', array('option'=>'between_number_and_unit', 'description'=>"Vkládat pevnou mezeru mezi číslovku a jednotku míry (měrné jednotky, měna apod., např. 5 m nebo 10 kg).", 'toggle_list_read_only'=>true)); add_settings_field('zalomeni_between_number_and_unit_list', '', 'Zalomeni::settings_field_textlist', 'reading', 'zalomeni_section', array('option'=>'between_number_and_unit', 'description'=>"(oddělte jednotlivé míry čárkou)")); add_settings_field('zalomeni_space_between_numbers', __('Mezery uprostřed čísel', 'zalomeni'), 'Zalomeni::settings_field_checkbox', 'reading', 'zalomeni_section', array('option'=>'space_between_numbers', 'description'=>"Pokud jsou dvě čísla oddělena mezerou, předpokládat, že se jedná o formátování čísla pomocí mezery (např. telefonní číslo 800 123 456) a nahrazovat mezeru pevnou mezerou, aby nedošlo k zalomení řádku uprostřed čísla.")); add_settings_field('zalomeni_space_after_ordered_number', __('Řadové číslovky', 'zalomeni'), 'Zalomeni::settings_field_checkbox', 'reading', 'zalomeni_section', array('option'=>'space_after_ordered_number', 'description'=>"Zabránit zalomení řádku za řadovou číslovkou; díky tomu nedojde k zalomení řádku uprostřed data (např. 1. ledna) a v podobných případech (19. ročník, 3. svazek, 5. kapitola apod.)")); add_settings_field('zalomeni_spaces_in_scales', __('Měřítka a poměry', 'zalomeni'), 'Zalomeni::settings_field_checkbox', 'reading', 'zalomeni_section', array('option'=>'spaces_in_scales', 'description'=>"Pevné mezery v měřítkách a poměrech (např. 1 : 50 000)")); add_settings_field('zalomeni_custom_terms', __('Vlastní výrazy', 'zalomeni'), 'Zalomeni::settings_field_custom_terms', 'reading', 'zalomeni_section'); if (get_option('zalomeni_matches') == '') { Zalomeni::update_matches_and_replacements(); } $this->add_update_option_hooks(); } static public function settings_field_checkbox(array $args) { echo( ' ' . Zalomeni::texturize(__($args['description'], 'zalomeni')) ); } static public function settings_field_textlist(array $args) { echo( ' ' . Zalomeni::texturize(__($args['description'], 'zalomeni')) ); } static public function settings_field_custom_terms() { echo( Zalomeni::texturize(__('Zde můžete uvést vlastní termíny, v nichž mají být mezery nahrazeny pevnými mezerami tak, aby nedošlo k zalomení uvnitř těchto výrazů. Uveďte vždy každý výraz na samostatný řádek; pokud je výraz složen z více jak dvou slov, tedy je v něm více jak jedna mezera, pak všechny mezery budou nahrazeny za pevné mezery. Lze použít výrazu \\d pro libovolnou číslici (pro pokročilé administrátory: algoritmus používá Perl Compatible Regular Expressions, lze využít syntaxe této specifikace).', 'zalomeni')) . '

' ); } private function add_update_option_hooks() { foreach (array('update_option_zalomeni_prepositions', 'update_option_zalomeni_prepositions_list', 'update_option_zalomeni_conjunctions', 'update_option_zalomeni_conjunctions_list', 'update_option_zalomeni_abbreviations', 'update_option_zalomeni_abbreviations_list', 'update_option_zalomeni_between_number_and_unit', 'update_option_zalomeni_between_number_and_unit_list', 'update_option_zalomeni_space_between_numbers', 'update_option_zalomeni_space_after_ordered_number', 'update_option_zalomeni_spaces_in_scales', 'update_option_zalomeni_custom_terms') as $i) { add_action($i, array($this, 'update_matches_and_replacements')); } } public function update_matches_and_replacements() { update_option('zalomeni_matches', Zalomeni::prepare_matches()); update_option('zalomeni_replacements', Zalomeni::prepare_replacements()); } private function prepare_matches() { $return_array = array(); $word_matches = ''; foreach (array('prepositions', 'conjunctions', 'abbreviations') as $i) { if (get_option('zalomeni_'.$i, constant('Zalomeni::default_'.$i)) == 'on') { $temp_array = explode(',', get_option('zalomeni_'.$i.'_list', constant('Zalomeni::default_'.$i.'_list'))); foreach ($temp_array as $j) { $j = mb_strtolower(trim($j)); $word_matches .= ($word_matches == '' ? '' : '|') . $j; } } } if ($word_matches != '') { $return_array['words'] = '@($|;| | |\(|\n)('.$word_matches.') @i'; } $word_matches = ''; if (get_option('zalomeni_between_number_and_unit', Zalomeni::default_between_number_and_unit) == 'on') { $temp_array = explode(',', get_option('zalomeni_between_number_and_unit_list', Zalomeni::default_between_number_and_unit_list)); foreach ($temp_array as $j) { $j = mb_strtolower(trim($j)); $word_matches .= ($word_matches == '' ? '' : '|') . $j; } } if ($word_matches != '') { $return_array['units'] = '@(\d) ('.$word_matches.')(^|[;\.!:]| | |\?|\n|\)|<|\010|\013|$)@i'; } if (get_option('zalomeni_space_between_numbers', Zalomeni::default_space_between_numbers) == 'on') { $return_array['numbers'] = '@(\d) (\d)@i'; } if (get_option('zalomeni_spaces_in_scales', Zalomeni::default_spaces_in_scales) == 'on') { $return_array['scales'] = '@(\d) : (\d)@i'; } if (get_option('zalomeni_space_after_ordered_number', Zalomeni::default_space_after_ordered_number) == 'on') { $return_array['orders'] = '@(\d\.) ([0-9a-záčďéěíňóřšťúýž])@'; } if (get_option('zalomeni_custom_terms', Zalomeni::default_custom_terms) != '') { $term_counter = 1; $custom_terms = explode(chr(10), str_replace(chr(13), '', get_option('zalomeni_custom_terms', Zalomeni::default_custom_terms))); foreach ($custom_terms as $i) { if (strpos($i, ' ') !== false) { $term = ''; $words_split = explode(' ', $i); foreach ($words_split as $j) { $term .= ($term == '' ? '(' : ' (') . str_replace(array('/', '(', ')'), array('\\/', '\\(', '\\)'), $j) . ')'; } $term = '/' . $term . '/i'; $return_array['customterm' . $term_counter++] = $term; } } } return $return_array; } private function prepare_replacements() { $return_array = array(); foreach (array('prepositions', 'conjunctions', 'abbreviations') as $i) { if (get_option('zalomeni_'.$i, constant('Zalomeni::default_'.$i)) == 'on') { $return_array['words'] = '$1$2 '; break; } } if (get_option('zalomeni_between_number_and_unit', Zalomeni::default_between_number_and_unit) == 'on') { $return_array['units'] = '$1 $2$3'; } if (get_option('zalomeni_space_between_numbers', Zalomeni::default_space_between_numbers) == 'on') { $return_array['numbers'] = '$1 $2'; } if (get_option('zalomeni_spaces_in_scales', Zalomeni::default_spaces_in_scales) == 'on') { $return_array['scales'] = '$1 : $2'; } if (get_option('zalomeni_space_after_ordered_number', Zalomeni::default_space_after_ordered_number) == 'on') { $return_array['orders'] = '$1 $2'; } if (get_option('zalomeni_custom_terms', Zalomeni::default_custom_terms) != '') { $term_counter = 1; $custom_terms = explode(chr(10), str_replace(chr(13), '', get_option('zalomeni_custom_terms', Zalomeni::default_custom_terms))); foreach ($custom_terms as $i) { if (strpos($i, ' ') !== false) { $term = ''; $words_split = explode(' ', $i); $word_counter = 1; foreach ($words_split as $j) { $term .= ($term == '' ? '' : ' ') . '$' . $word_counter++; } $return_array['customterm' . $term_counter++] = $term; } } } return $return_array; } static public function settings_section_description() { echo( '
' . '

Plugin Zalomení
Autor: Honza Skýpala

' . '
' . '

' . Zalomeni::texturize(__('Upravujeme-li písemný dokument, radí nám Pravidla českého pravopisu nepsat neslabičné předložky v, s, z, k na konec řádku, ale psát je na stejný řádek se slovem, které nese přízvuk (např. ve spojení k mostu, s bratrem, v Plzni, z nádraží). Typografické normy jsou ještě přísnější: podle některých je nepatřičné ponechat na konci řádku jakékoli jednopísmenné slovo, tedy také předložky a spojky a, i, o, u;. Někteří pisatelé dokonce nechtějí z estetických důvodů ponechávat na konci řádků jakékoli jednoslabičné výrazy (např. ve, ke, ku, že, na, do, od, pod).', 'zalomeni')) . '

' . '

' . Zalomeni::texturize(__('Více informací na webu Ústavu pro jazyk český, Akademie věd ČR.', 'zalomeni')) . '

' . '

' . Zalomeni::texturize(__('Tento plugin řeší některé z uvedených příkladů: v textu nahrazuje běžné mezery za pevné tak, aby nedošlo k zalomení řádku v nevhodném místě.', 'zalomeni')) . '

' ); } static public function texturize($text) { if (get_option('zalomeni_matches') == '') return $text; // no settings? then fall-back to just return the content $output = ''; $curl = ''; $textarr = preg_split('/(<.*>|\[.*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE); $stop = count($textarr); $no_texturize_tags = apply_filters('no_texturize_tags', array('pre', 'code', 'kbd', 'style', 'script', 'tt')); $no_texturize_shortcodes = apply_filters('no_texturize_shortcodes', array('code')); $no_texturize_tags_stack = array(); $no_texturize_shortcodes_stack = array(); for ($i = 0; $i < $stop; $i++) { $curl = $textarr[$i]; if (!empty($curl)) { global $wp_version; if ('<' != $curl{0} && '[' != $curl{0} && empty($no_texturize_shortcodes_stack) && empty($no_texturize_tags_stack)) { // If it's not a tag $curl = preg_replace(get_option('zalomeni_matches'), get_option('zalomeni_replacements'), $curl); $curl = preg_replace(get_option('zalomeni_matches'), get_option('zalomeni_replacements'), $curl); } else if (version_compare($wp_version, '2.9', '<')) { wptexturize_pushpop_element($curl, $no_texturize_tags_stack, $no_texturize_tags, '<', '>'); wptexturize_pushpop_element($curl, $no_texturize_shortcodes_stack, $no_texturize_shortcodes, '[', ']'); } else { _wptexturize_pushpop_element($curl, $no_texturize_tags_stack, $no_texturize_tags, '<', '>'); _wptexturize_pushpop_element($curl, $no_texturize_shortcodes_stack, $no_texturize_shortcodes, '[', ']'); } } $output .= $curl; } return $output; } } $wpZalomeni = new Zalomeni(); ?>