/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * The below code uses the @ operator before parse_url() calls because in PHP * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ * operator is usually a pretty strong indicator of code smell, but please don't * judge me by it in this case; ordinarily, I despise its use, but I can't find * a cleaner way to avoid this problem (using set_error_handler() could work, * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of * Pathologic. * @see https://drupal.org/node/2104849 * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = @parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $cached_settings = &drupal_static(__FUNCTION__, array()); if (!isset($cached_settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = @parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… // @todo: This is pretty horrible. Can this be simplified? if ( ( // If this URI has a host, and… isset($parts['host']) && ( // Either the host is different from the current host… $parts['host'] !== $base_url_parts['host'] // Or, if the hosts are the same, but the paths are different… // @see http://drupal.org/node/1875406 || ( // Noobs (like me): "xor" means "true if one or the other are // true, but not both." (isset($parts['path']) xor isset($base_url_parts['path'])) || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) ) ) ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; $cached_settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $cached_settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $cached_settings['current_settings'] = &$cached_settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the base path. global $base_path; // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $cached_settings later and not have the changes be "permanent." $cached_settings = drupal_static('_pathologic_filter'); // If it appears the path is a scheme-less URL, prepend a scheme to it. // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it // looks like Pathologic can't handle the URL, it will return the scheme-less // original. // @see https://drupal.org/node/1617944 // @see https://drupal.org/node/2030789 if (strpos($matches[2], '//') === 0) { if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { $matches[2] = 'https:' . $matches[2]; } else { $matches[2] = 'http:' . $matches[2]; } } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = @parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE || ( // If there's a scheme part and it doesn't look useful, bail out. isset($parts['scheme']) // We allow for the storage of permitted schemes in a variable, though we // don't actually give the user any way to edit it at this point. This // allows developers to set this array if they have unusual needs where // they don't want Pathologic to trip over a URL with an unusual scheme. // @see http://drupal.org/node/1834308 // "files" and "internal" are for Path Filter compatibility. && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) ) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. // @todo Should we still try to do path correction on these files too? if (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $cached_settings['is_file'] = TRUE; } else { $cached_settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } // Is this is a root-relative url (no host) that didn't match above? // Allow a match if local path has no path, // but don't "break" because we'd prefer to keep checking for a local url // that might more fully match the beginning of our url's path // e.g.: if our url is /foo/bar we'll mark this as a match for // http://example.com but want to keep searching and would prefer a match // to http://example.com/foo if that's configured as a local path elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { $found = TRUE; } } // If the path is not within the drupal root return original url, unchanged if (!$found) { return $matches[0]; } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. $parts['path'] = ltrim($parts['path'],'/'); // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // If we didn't previously identify this as a file, check to see if the file // exists now that we have the correct path relative to DRUPAL_ROOT if (!$cached_settings['is_file']) { $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); } // Okay, deal with language stuff. if ($cached_settings['is_file']) { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } else { // Let's see if we can split off a language prefix from the path. if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $cached_settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are disabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($cached_settings['is_file'])) { $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = @parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return " {$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Добавить комментарий | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Добавить комментарий

Работал страстно и восторженно (к столетию со Дня рождения Ивана Шамякина)

В литературу этому одаренному, чуткому, внимательному, восприимчивому человеку суждено было прийти в достаточно молодом возрасте. Потому-то, прожив большую жизнь, на её закате, он с гордостью будет говорить о том, что отдал писательскому труду свыше шести десятилетий. И эти долгие годы были для Ивана Шамякина, чей столетний юбилей со дня рождения приходится на последние январские дни 2021 года, необычайно плодотворными. Он умел трудиться самозабвенно, ударно, отдаваясь творчеству всецело, не жалея ни времени, ни сил. Писательство было для Ивана Петровича не просто работой, пусть и любимой, а высоким призванием, скорее даже, – служением, жить без которого самобытный художник не мог. Да и жил он споро, с огоньком, постоянно вникая в проблемы повседневности, пытаясь их понять, давая им исчерпывающие оценки и неизменно проникая в существо бытовавших в обществе явлений. Оттого и были его произведения предельно реалистичны, им верилось, достоверность излагаемого в книгах писателя не вызывала, даже при некоторой романтичности и закрученности сюжетов, никаких сомнений. Собственно, в том-то и состоит заслуга Шамякина перед белорусской и всей многонациональной советской литературой, что он смог удачно, выпукло и правдиво показать в своих произведениях само время, в котором жил, любил, творил, созидал и которое, уже давно, плотно ассоциируется и с его светлым и добрым именем.

За более чем шестьдесят лет преданной службы национальной литературе Шамякиным, которого долгие годы уважительно называли «живым классиком», было написано много крупных произведений художественной прозы, пьес и сценариев, издано несколько книг публицистики, которые вошли в сокровищницу белорусской национальной культуры. При этом Шамякин, автор таких широко известных в республике книг, как «Криницы», «Тревожное счастье», «Сердце на ладони», «Снежные зимы», «Атланты и кариатиды», «Петроград – Брест» был и крупной общественно-политической фигурой с ярко выраженной гражданственностью. Посему он и посвящал свой огромный талант служению стране и народу, белорусской литературе, которую любил искренне и которой не уставал восхищаться. Но и Советская власть не забывала благодарить талантливого литератора. За большие достижения в литературной и общественной деятельности Шамякин был удостоен высокого звания Героя Социалистического Труда, награжден орденами Ленина, Октябрьской Революции, трижды орденом Трудового Красного Знамени, орденами «Знак Почета» и Дружбы народов, Отечественной войны II степени. Награждала писателя и независимая Белоруссия. Он кавалер ордена Отечества III степени. Также Шамякин удостаивался Сталинской премии третьей степени, Государственной премии БССР, литературных премий БССР имени Якуба Коласа и Министерства обороны СССР, премии Союзного государства в области литературы и искусства. С 1972 года он – народный писатель Белорусской ССР, а с 1994 года – академик Национальной академии наук Беларуси.

Писатель всегда умел держать руку на пульсе времени. Для своих произведений он выбирал актуальные темы, волновавшие общество и со всей силой таланта, а также и обостренным чувством гражданского долга перед государством, поднимал важнейшие социальные и морально-этические проблемы современности. Романы «Криницы», «Сердце на ладони», «Снежные зимы», «Атланты и кариатиды», «Возьму твою боль», «Зенит» и другие книги писателя свидетельствуют о том, что Шамякин был и тонким философом, и психологом, и знатоком человеческих характеров, и гуманистом, отстаивавшим подлинные человеческие ценности и готовым за них побороться.

Важно подчеркнуть и то, что Шамякину удалось в своем творчестве отобразить основные, характерные черты грандиозной эпохи, в которой ему пришлось жить, творить и созидать. И надо сказать, что он не восхвалял её бездумно, что называется, по инерции, закрывая глаза на имевшиеся в стране и обществе проблемы, хотя и был по-настоящему советским, партийным писателем. Поднимать же на-гора проблемные вопросы, обозначая контуры их решения, критиковать существовавшие негативные явления и практики, складывавшиеся во властных, в том числе и партийных структурах, литератор считал своим писательским и гражданским долгом. А исполнение долга, как известно, не терпит замешательств. Потому-то и в произведениях, всегда проблемных, остроконфликтных, наполненных глубокими раздумьями, Шамякин часто представлял крайне сложные столкновения людей далеко не простых, а интеллигентных, часто наделенных полномочиями и властью. Среди них, как показывал нам писатель, также находились люди непорядочные, алчные, лживые, преследовавшие корыстные цели, стремившиеся правдами и неправдами делать карьеру и решать меркантильные интересы. Примерно таким мы видим того же Семена Гукана, председателя горисполкома из романа «Сердце на ладони». Однозначно в негативных тонах перед нами предстает и секретарь райкома партии из романа «Криницы» Артем Бородка. Не до конца уверенным в себе наблюдаем мы и первого секретаря горкома партии Игнатовича из одного из самых известных романов Шамякина «Атланты и кариатиды».

Почему заостряю внимание на этих образах? Что, Шамякин писал лишь о советских и партийных руководителях и работниках? Нет, конечно. Писал он и о мужественных партизанах, подпольщиках, колхозниках, рабочих, учителях, директорах школ, врачах, писателях, архитекторах, и, в целом, – о современной ему интеллигенции. Но, при этом, партийным работникам в его творчестве было, тем не менее, отведено заметное место. И не только потому, что писатель сам был крупной фигурой в партийной и государственной иерархии БССР. Скорее всего, внимание к ним было вызвано самой жизнью, современностью, о которой писатель создал большинство своих произведений.

Самым же существенным в показе партийных работников было то, что Шамякин их образы никогда не упрощал, не приукрашивал и не возвеличивал. Они на страницах его произведений выглядели вполне естественно и правдоподобно. И среди них, говорит нам писатель, были и те, кто не оправдал доверия, кто не достоин тех должностей, на которые были поставлены. Вместе с тем, и особенно это просматривается в романе «Атланты и кариатиды», Шамякин смог в широком плане показать жизнь советских и партийных учреждений, их деятельность и конфликты, зарождавшиеся в той среде. Заметны были и такие ситуации, когда принципиальность, чувство долга сталкивались с откровенным расчетом, или боязнью последствий и нежеланием ввязываться в бой за правду и судьбу конкретного человека. То бишь, ситуации, касавшиеся партийных функционеров, писателем описывались разные, неоднозначные, сложные. Впрочем, достойные конкретных героев, кому писатель и доверял их реализацию.

Показателен в этом плане эпизод из романа «Атланты и кариатиды», в котором первый секретарь обкома партии Сосновский беседует с главным героем романа, архитектором Карначем, попавшим, в силу ряда обстоятельств, в непростую ситуацию, заканчивавшуюся тем, что его снимают с должности главного архитектора города. Итак, Сосновский говорит Карначу:

«– Не иронизируйте над нашим братом. Мы не универсалы. И не боги. Мы люди, и каждый из нас может ошибиться.
– Я не иронизирую.
– По нашему самолюбию и гордости бьют иной раз и похлестче.
– Я знаю».

Кстати, что для нашего времени может показаться не совсем правдоподобным, в романе первое лицо в области, Сосновский, навещает Карнача, снятого с должности главного архитектора города, на его даче, где тот, обиженный на решение бюро горкома партии, решает спрятаться от преследующих его неприятностей. Трудно представить, чтобы сегодня кто-нибудь из губернаторов поехал на беседу к снятому с должности руководителю местного пошиба, дабы разобраться в существе вопроса и найти для человека необходимые ему добрые и ободряющие слова. Всё же, в советские годы, при всех негативных явлениях, сопутствовавших им, партийные руководители, в большинстве своем, были скромнее и добрее нынешних небожителей. Да и к людям они относились более внимательно, чутко, стараясь помочь…

Коль уж речь зашла о политических акцентах в творчестве писателя, то не могу не сказать и о том, что в одном из лучших своих исторических романов «Петроград – Брест», Шамякин обратиться и к образу В.И. Ленина. Сам мастер коротко так охарактеризует это произведение: «Роман «Петроград – Брест» роман политический, главная тема – тема борьбы за мир, тема очень драматическая, – и все необходимо было подчинить этой теме!.. Это не биография Ленина. Это самый драматический эпизод его борьбы за укрепление Советской Республики».

Глава Советской России показан в романе в суровое время выбора, когда, увлекшись псевдореволюционной фразой, колебались даже его наиболее последовательные сторонники. И не каждому из них дано было увидеть в грабительском и «похабном» Брестском мире единственное условие сохранение главного завоевания Октябрьской революции. Не в силах они оказались разобраться и в тонкостях складывавшейся политической обстановки и поверить в то, что вопиющая несправедливость Брестского договора оборачивалась в итоге, против собственных хищнических устремлений германских империалистов. На этом фоне Ленина мы видим в непрерывной работе, в размышлениях, на заседаниях ЦК и Совнаркома, во время короткого отдыха, в разговорах с представителями иностранных держав, друзьями, рабочими, крестьянами, солдатами.

Убедительно смог Шамякин отобразить и накал борьбы Ленина с теми, кто противился заключению мира и этим ставил молодую Советскую республику в крайне тяжелое положение. Вождь пролетариата предстает нашему взору в самый напряженный момент борьбы за мир, когда убедительным доводам его противостоял мощный хор мелкобуржуазных ура-патриотов, сомкнувшихся с открытой контрреволюцией, стремившейся к реваншу и сворачиванию победоносной революционной октябрьской поступи. Концентрируя самое главное, то, что заставляло Ленина непрестанно искать ответы на волновавший его вопрос о мире, писатель показывает нам его во всей гениальности, прозорливости, способности давать исчерпывающие оценки и выводы. Вот как описывал он Ленина в судьбоносный день 18 февраля 1918 года: «Он думал об исстрадавшихся солдатах, которых по всей бывшей Российской империи ждут матери, жены, дети. И – земля! Как им хочется потрудиться на земле! Спасение одно – мир. Только мир. Другого выхода нет. Но немцы наверняка продиктуют более жесткие условия. Принимать любые условия! Для этого – объявить войну революционному фразерству, политике Троцкого, который, по существу, не верит ни в русский пролетариат, ни в немецкий, игнорирует крестьянство. Нужно повести открытую борьбу с фразерами и политическими дилетантами, путаниками. Чтобы знали партия, рабочий класс, армия!»

Удалось писателю, насытив повествование выдержками из ленинских произведений, официальных документов, протоколов ЦК РСДРП(б), воспоминаний очевидцев, создать не только достоверную картину того периода жизни вождя революции и молодого социалистического государства, но, и, благодаря своей авторской позиции, показать Ильича с разных сторон, особое внимание придав масштабу его государственной деятельности. Важно и то, что Шамякин попытался осветить и вопрос об отношении Ленина к соратникам по большевистской партии и Совнаркому, причем и к таким противоречивым, одиозным фигурам, как Л. Троцкий и Н. Бухарин. И видим мы не однобокое сравнение или лобовое столкновение мнений и позиций. Автор дает нам возможность проследить мысль Ленина в отношении этих деятелей и их политического прожектерства. Мы, как будто, вместе с ним анализируем их поступки, давая им принципиальные оценки. К слову, такой композиционный подход свойственен и другим сюжетным линиям романа. Неизменно же одно – через ленинские оценки и выводы, через череду его рассуждений и диалогов, переживаний и чувств, нам и предстает реальная картина событий тех лет и та грандиозная роль, которая и принадлежит Ленину в их разрешении.

Не преследуя цель кого бы то ни было в чем-то убеждать и за те, или иные идеи агитировать, пишу об этой стороне творчества Шамякина лишь для того, дабы читатель представлял все стороны его многогранного писательского труда. Не мало важно и то, что в современной Белоруссии, эти произведения политического характера не замалчиваются. Как известно, руководство республики не стало отказываться от своего советского прошлого. Следовательно, нет оснований ставить под сомнение и те произведения Шамякина, в которых на передний план он выводил Ленина и партийных работников.

Если же говорить в общем и целом, то Шамякина следует считать художником, рисовавшим современность. Большинство его произведений посвящено ей. Он умел прекрасно видеть и слышать время. Да и сам облик современного человека, его чувства, переживания, психологические и нравственные аспекты в личностном развитии, художника всегда очень интересовали. Причем он пытался посмотреть на моральный облик своих героев в их движении, развитии, не раз задаваясь вопросом: а может ли человек меняться в лучшую сторону? Способен ли человек идти на решительные поступки, отстаивая свои убеждения и взгляды?

Интересовали писателя и вопросы, связанные с сугубо личной стороной в жизни человека. Практически во всех своих произведениях он писал о любви, о зарождении этого прекрасного чувства, о семейных отношениях, о тех проблемах, которые могут образоваться порою даже в благополучных семьях. При этом Шамякин придавал огромное значение в описании отношений любящих друг друга людей моральной составляющей данного вопроса. К тому же, о чем не раз говорил нам мастер, зачастую трещину во взаимоотношения любящих людей вносил мещанский быт, как это случилось, например, у Максима Карнача и его жены – эгоистки и закоренелой мещанки Даши из романа «Атланты и кариатиды». Последняя, кстати, предстает в романе озабоченной лишь тем, чтобы сделать побольше неприятностей мужу, уходящему от нее. Она то, из чувства мести, и напишет письмо в высокую партийную инстанцию, давшее ход дальнейшим событиям, поставившим Карнача в крайне тяжелое положение.

В этой связи интересен ход мысли главного героя, архитектора Карнача. Приведу его, так как в нем четко просматривается и позиция самого писателя: «На какой-то миг почувствовал, что ему все еще жаль эту женщину. При всей своей напористости, проворстве и хитрости в жизни она довольно беспомощный человек, потому что живет не естественной жизнью, а играет. Играет плохо, по-глупому, и это всем видно, но до сих пор ей прощали эту игру из уважения к нему, к его авторитету. Когда останется одна, почувствует, как все изменится вокруг, и ей будет нелегко. А не поздно ли учить ее таким жестоким способом? Снова вспомнились слова, которые прочел где-то: «Распад брака обнажает самые дурные черты обоих супругов».

Шамякин бесспорно являлся дитем своего бурного, непростого, но и судьбоносного, героического времени. Появился он на свет 30 января 1921 года в деревне Корма Добрушского района Гомельской области в семье лесника. Детство будущего писателя прошло в родном селе, было оно не простым, рано Ивану пришлось постигать и трудовые обязанности, тем не менее закалившие его. В 1940 году Шамякин окончил Гомельский техникум строительных материалов, учась в котором он начал писать стихи, раскритикованные и повлиявшие на то, что за них Иван больше никогда не возьмется; и был призван на службу в ряды Красной Армии. Во время Великой Отечественной он воевал на Севере, на Карельском фронте, участвовал в боях под Мурманском, в освобождении Польши. Отличался Иван и воинской доблестью, и немалыми организаторскими способностями, о чем свидетельствуют его боевые награды, а также и то, что войну начал сержантом, затем был комсомольским вожаком, а в 1944 году стал комиссаром отдельного зенитно-артиллерийского дивизиона, офицером-политработником.

Уже с тех молодых лет Шамякин стал выделяться среди сослуживцев. Был он более грамотным, теоретически подкованным и знающим пропагандистом, интересным рассказчиком, человеком увлеченным и легким на подъем. Замечали это и бойцы, его благодарные слушатели. Умел он недурно обращаться и с письменностью, составляя всевозможные рапорты, выпуская стенгазету, боевые листки.

Воинскую часть, в которую входил 33-й отдельный зенитный дивизион, в начале 1945 года перебросили в польскую Познань, а несколько позже и в Германию, где на Одере Шамякин и встретил долгожданную Победу.

На полях битв Великой Отечественной войны Шамякин по-настоящему возмужал. Получил он на войне и большой жизненный опыт. К нему писатель не раз вернется в своих произведениях. Рассказать же о бессмертных подвигах народа в Великой Отечественной войне станет для него большой и насущной задачей. В 1965 году, отвечая на анкету журнала «Вопросы литературы», писатель напишет: «И я, имеющий основание считать себя писателем, исследующим современность, не могу дать кому бы то ни было гарантий, что и в будущем романе, работу над которым начинаю, не затрону вновь тему войны прямо или косвенно, в каких-то новых аспектах, хоть роман будет рассказывать о событиях нашего времени…» Это признание автора окажется, что называется, пророческим.

Демобилизовавшись осенью 1945 года и вернувшись в родные края, Шамякин, бывший с 1943 года членом ВКП(б), стал работать учителем языка и литературы, а вечерами проводить в колхозе семинары агитаторов. Ночами, живя в полуразрушенной землянке, при керосиновой лампе он начинает писать рассказы и повести о минувшей войне. Умудрялся Шамякин к тому же и учиться на заочном отделении Гомельского педагогического института имени В.П. Чкалова. Позже закончит он и Республиканскую партийную школу при ЦК КП(б)Б.

Иван Шамякин одним из первых в советской литературе начнет разрабатывать тему о Великой Отечественной войне. Так и появится в 1944 году первый его рассказ «В снежной пустыне», повествующий о военных буднях на Севере. Войне он посвятит и свою раннюю, достаточно философичную повесть «Месть», рассказывающую о событиях военного лихолетья и о том, как майор Романенко, которому жена наказывала отомстить фашистскому преступнику, находит в Германии дом этого палача, но отказывается мстить его жене и детям. Хотя, все же он мстит, но мстит гуманно, как и было присуще советскому солдату-победителю – Романенко рассказывает правду о фашистском живодере его близким, показывая тем самым истинное нутро негодяя и обрекая последнего к вечному позору и призрению.

Важным событием в жизни начинающего писателя станет участие в работе первого послевоенного пленума правления Союза писателей БССР, состоявшегося в декабре 1945 года. Вспоминая годы спустя о нем, Шамякин писал: «Пленум… чрезвычайно обогатил меня. Личное знакомство с писателями, в подавляющем большинстве своем людьми искренними, чуткими, сердечными, окунуло меня в литературную жизнь. Я ехал с пленума с одним твердым намерением: писать, писать и еще раз писать, не останавливаясь ни на минуту. И, приехав домой, действительно с хорошей энергией взялся за работу. Я вспоминаю то время с удовольствием. Откуда брались энергия, сила, порыв? Днем я работал в школе, чуть ли не каждый вечер шел в один из шести колхозов сельсовета на собрание или проводил семинар агитаторов, занятия с коммунистами. А потом поздно ночью возвращался домой и писал при свете коптилки. Жили мы в то время очень бедно. Сквозь окна, половину стекол в которых заменяла фанера, а остаток был склеен из осколков стекла, за ночь наметало в комнату снега, и больше всего его было на столе, который нельзя было передвинуть – он еле держался. Я, жена и дочь Лина спали на печке. Зарплату выплачивали несвоевременно и учителям, и еще хуже медработникам, и под весну 1946 года мы буквально голодали. Но никакие трудности не могли помешать мне в работе, я с вдохновением, с творческим волнением и горением собирал материал для будущего романа о белорусских партизанах».

В 1947 году Шамякин назначается старшим редактором Белорусского государственного издательства, а затем и главным редактором альманаха «Советская Отчизна». В том же году он становится членом республиканской писательской организации.

По романам и повестям Шамякина можно проследить военную и послевоенную историю нашей страны. Всенародная борьба против фашистских захватчиков стала темой и первого романа писателя «Глубокое течение», сделавшего молодого прозаика знаменитым. Это написанное в 1948 году широкое полотно было высоко оценено читателями и критикой. Перу Шамякина принадлежит и самое масштабное в белорусской советской литературе произведение о войне – пенталогия «Тревожное счастье», основанная на фактах из собственной жизни писателя и судеб близких ему людей. В этот замечательный цикл вошли повести «Неповторимая весна», «Ночные зарницы», «Огонь и снег», «Поиски встречи», «Мост».

Писал Шамякин также и литературно-критические статьи, воспоминания и портреты, которые вошли в книги «Разговор с читателем», «Корни и ветви», дневниковые записки «Ночные воспоминания» и другие издания. Достойное место в наследии писателя занимают и созданные им пьесы «Не верьте тишине», «Дети одного дома», «Баталия на лугу», «Экзамен на осень», «И смолкли птицы», «Золотая медаль».

В 1990-е годы одна за другой выходят в свет его роман «Злая звезда», повести «Сатанинский тур», «Повести Ивана Андреевича», «Падение», «Одна на подмостках», «Бумеранг», в которых писатель поднимал проблему сохранения общечеловеческих духовных и моральных ценностей. Известен Шамякин и как историк. В романе «Петроград-Брест» он раскроет неизвестные страницы истории, связанные с Брестским миром. А в историческом романе «Великая княгиня», написанном в 1996 году, писатель поднимет проблему возвращения к Богу.

Не менее творчески, плодотворно и самоотверженно народный писатель Белоруссии Шамякин работал и в последние годы жизни. Написанные им повести «Выкормыш», «Завихрение», «Поиски приюта», роман «Губернатор» стали ярким явлением в современной белорусской прозе. Многие факты, положенные в основу произведений писателя, были взяты им из самой жизни. Наиболее же очевидным обращением к жизненному опыту представляются его дневниковые записи «Размышления на последнем перегоне».

В общей сложности Шамякин написал 12 романов, 26 повестей, 10 пьес, несколько десятков рассказов, дневниковые записи, огромное количество статей, очерков. За более чем шестьдесят лет творческой деятельности вышли в свет 130 книг писателя общим тиражом свыше 25 миллионов экземпляров.

Творчество Шамякина получило всенародное признание и любовь как в Белоруссии, так и за ее пределами. Его романы, повести и рассказы переведены на многие языки мира. По произведениям писателя созданы кинофильмы и театральные постановки. Экранизированы повести Шамякина «Брачная ночь», «Торговка и поэт», романы «Криницы», «Сердце на ладони», «Атланты и кариатиды», «Возьму твою боль», «Глубокое течение» и «Снежные зимы». А по киноповести «Эшелон в Германию» был снят фильм «Хлеб пахнет порохом».

Шамякин был также и активным общественным деятелем. В 1971-1985 годах он возглавлял Верховный Совет БССР, неоднократно избирался депутатом Верховного Совета СССР и БССР, был кандидатом в члены и членом ЦК КПБ, председателем Белорусского комитета защиты мира. В 1963 году писатель посетил США в составе белорусской делегации на XVIII сессии Генеральной Ассамблеи ООН, свои впечатления от поездки он воспроизвел в дневнике «Два месяца в Нью-Йорке».

Более двадцати лет работал Шамякин и в руководстве Союза писателей БССР. Долгие годы был он и членом правления Союза писателей СССР. В 1980-1992 годах писатель являлся главным редактором издательства «Белорусская Энциклопедия» имени П. Бровки.

Вместе с признанием и народной любовью, пришлось Шамякину пережить и личное горе. Он рано потерял родителей, познал весь ужас войны, тяжело пережил преждевременную смерть сына Александра и утрату единственной и любимой жены Марии Филатовны, с которой прожил 58 лет. Ей писатель посвятил свою раннюю повесть «Неповторимая весна» и одну из последних повестей «Славься, Мария», написанную после смерти супруги, которой не стало в 1998 году.

Следует отметить и то, что в семье писателя вырос и профессиональный литератор. Его дочь Татьяна стала авторитетным критиком, мемуаристом, специалистом по белорусской литературе, мировой культуре и мифологии, заведующей кафедрой белорусской литературы и культуры Белорусского государственного университета, профессором, доктором филологических наук.

По воспоминаниям дочери Татьяны Ивановны, писателя «подкосил… и развал Советского Союза. Он тяжело переживал разобщенность в писательской среде, распад личных отношений со многими литераторами из-за политических расхождений».

В вечность писатель ушел в 2004 году. А в 2006 году появится распоряжение Президента Белоруссии А. Лукашенко «Об увековечении памяти народного писателя Беларуси Шамякина Ивана Петровича». Его именем названа одна из улиц в столичном микрорайоне «Сухарево-4». В Минске на фасаде дома № 11 по улице Янки Купалы установлена мемориальная доска. В этом доме писатель прожил 35 лет, с 1969 по 2004 год. На родине писателя в деревне Корма Добрушского района в 2006 году установлен бюст, автором которого стал талантливый гомельский скульптор Д. Попов. Имя Шамякина носит Мозырский государственный педагогический университет. Для студентов филологических факультетов вузов установлена стипендия имени Ивана Шамякина. О талантливом писателе сняты документальные фильмы «Пока есть сила» и «Мгновения жизни».

В 2014 году на родине писателя было издано наиболее полное из всех ранее существовавших и первое научно комментированное собрание сочинений Шамякина в 23 томах. Подготовкой издания литературного наследия белорусского классика занимались исследователи творчества Шамякина — научные сотрудники Института языка и литературы имени Якуба Коласа и Янки Купалы НАН Белоруссии, филологического факультета Белорусского государственного университета, Могилевского государственного университета имени А. Кулешова. Многотомное собрание сочинений вышло в издательстве «Художественная литература». Оно и представило творчество писателя целиком.

Актуально ли в наши дни творчество Ивана Шамякина? Да, безусловно. Ведь в нем сконцентрирован правдивый рассказы о времени и людях, ставших его олицетворением.

Разве не стоит сегодня читать книги о Великой Отечественной войне, тем более написанные ее участником? Или может быть нет оснований вновь прикоснуться к славной истории белорусского партизанского и подпольного движения? А неужто не интересно заглянуть во внутренний, непростой, в чем-то и противоречивый мир советской интеллигенции, как сельской, так и городской, бывшей в расцвете сил и возможностей на рубеже 50 – 80-х годов минувшего столетия? Аль совсем пропала заинтересованность в изучении революционных событий и последовавшей за ними гражданской войны? Конечно же, нет. Все эти темы по-прежнему важны и взглянуть на них через призму дня сегодняшнего тем более полезно.

Особо пристально следует вчитываться и в произведения белорусского советского классика, написанные им после развала СССР. В них новый взгляд, свежие мысли человека многое повидавшего и прекрасно знавшего жизнь, людские характеры и психологию взаимоотношений. Вне всякого сомнения, они требуют и детального изучения, разбора, незаангажированных оценок.

А посему – читайте Ивана Шамякина, писателя плодовитого, работавшего восторженно, страстно, в полной мере вживавшегося в мир своих героев и оставившего потомкам большое, высоконравственное и высокохудожественное наследие.

Руслан СЕМЯШКИН,
публицист, кандидат в члены ЦС СКП-КПСС,
лауреат премии "Слово к народу" газеты "Советская Россия"

газета "Литературная Россия" от 26.01.2021

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.