s. * @param array $blocks The blocks array to add to. * @param array, content: string}> $code_blocks The code blocks array to add to. * * @return void */ private function process_content( $element, &$blocks, $code_blocks ): void { // Build a list of elements that should be skipped (already in code blocks). $skip_elements = $this->content_processor->determine_elements_to_skip( $code_blocks ); // PHASE 1: First pass to identify nested list groups and track positions. $nested_list_data = $this->nested_list_creator->process_nested_lists( $element ); $list_groups = $nested_list_data['list_groups']; $nodes_to_skip = $nested_list_data['nodes_to_skip']; // Determine Google Document TOC nodes to be skipped and considered as paragraph elements. $toc_sections = $this->content_processor->get_toc_nodes( $element ); // Combine the TOC nodes into the nodes to skip. foreach ( $toc_sections as $toc_section ) { $toc_nodes = \array_column( $toc_section, 'node' ); $nodes_to_skip = \array_merge( $nodes_to_skip, $toc_nodes ); } // PHASE 2: Process all content and create positioned blocks. // This array allows us to maintain correct ordering of mixed content types. $positioned_blocks = []; // Reset position counter for the main content processing pass. $current_position = 0; if ( $element->childNodes->length !== 0 ) { foreach ( $element->childNodes as $node ) { // Skip non-element nodes. if ( $node->nodeType !== \XML_ELEMENT_NODE ) { continue; } // Check if this is the position where a list group should be inserted. foreach ( $list_groups as $group_index => $group ) { if ( isset( $group['position'] ) && $group['position'] === $current_position ) { $positioned_blocks[] = [ 'content' => $this->nested_list_creator->create_nested_list_block( $group['lists'], $this->content_processor, $this->dom_processor ), 'position' => $current_position, ]; // Remove this group so we don't process it again. unset( $list_groups[ $group_index ] ); break; } } // Add the TOC block if it exists and is at the current position. foreach ( $toc_sections as $toc_section ) { // Only check if the first position of the section is encountered. if ( $toc_section[0]['position'] === $current_position ) { $positioned_blocks[] = [ 'content' => $this->content_processor->create_toc_block( $element ), 'position' => $current_position, ]; } } // Keep track of position for element nodes. ++$current_position; // Skip elements that are part of code blocks. if ( \in_array( $node, $skip_elements, true ) ) { // If this is the last element of a code block, add the code block. foreach ( $code_blocks as $code_block ) { $last_element = \end( $code_block['elements'] ); if ( $node === $last_element ) { $positioned_blocks[] = [ 'content' => $this->content_processor->create_code_block( $code_block['content'] ), 'position' => ( $current_position - 1 ), ]; break; } } continue; } // Skip nodes that will be processed as part of nested lists. if ( \in_array( $node, $nodes_to_skip, true ) ) { continue; } // Check for paragraphs with only an image. if ( $node->nodeName === 'p' ) { $spans = $node->getElementsByTagName( 'span' ); $processed = false; if ( $spans->length !== 0 ) { foreach ( $spans as $span ) { if ( $span->getElementsByTagName( 'img' )->length > 0 ) { $image_block = $this->content_processor->extract_image_from_paragraph( $node ); if ( $image_block !== '' ) { $positioned_blocks[] = [ 'content' => $image_block, 'position' => ( $current_position - 1 ), ]; $processed = true; break; } } } } // If already processed as an image block, continue. if ( $processed ) { continue; } // Check for bookmark paragraph structure - any paragraph with span + anchor with ID. $bookmark_block = $this->content_processor->create_bookmark_paragraph( $node ); if ( $bookmark_block !== '' ) { $positioned_blocks[] = [ 'content' => $bookmark_block, 'position' => ( $current_position - 1 ), ]; continue; } } // Process regular lists (ul or ol) that aren't part of a nested group. if ( ( $node->nodeName === 'ul' || $node->nodeName === 'ol' ) && ! \in_array( $node, $nodes_to_skip, true ) ) { $positioned_blocks[] = [ 'content' => $this->content_processor->create_list_block( $node, $this->dom_processor ), 'position' => ( $current_position - 1 ), ]; continue; } // Process table elements. if ( $node->nodeName === 'table' ) { $positioned_blocks[] = [ 'content' => $this->content_processor->create_table_block( $node, $this->dom_processor ), 'position' => ( $current_position - 1 ), ]; continue; } // Process horizontal line. if ( $node->nodeName === 'hr' ) { $positioned_blocks[] = [ 'content' => $this->content_processor->create_separator_block(), 'position' => ( $current_position - 1 ), ]; continue; } // Process links. if ( $node->nodeName === 'a' ) { $positioned_blocks[] = [ 'content' => $this->content_processor->create_paragraph_with_link( $node ), 'position' => ( $current_position - 1 ), ]; continue; } // Process headings. if ( \preg_match( '/h[1-6]/', $node->nodeName ) ) { $positioned_blocks[] = [ 'content' => $this->content_processor->create_heading_block( $node, $this->dom_processor ), 'position' => ( $current_position - 1 ), ]; continue; } // Process paragraphs that weren't already processed as image blocks. if ( $node->nodeName === 'p' && \trim( $node->textContent ) !== '' ) { $positioned_blocks[] = [ 'content' => $this->content_processor->create_paragraph_block( $node, $this->dom_processor ), 'position' => ( $current_position - 1 ), ]; continue; } } } // Add any remaining list groups that weren't processed in the main loop. foreach ( $list_groups as $group ) { $positioned_blocks[] = [ 'content' => $this->nested_list_creator->create_nested_list_block( $group['lists'], $this->content_processor, $this->dom_processor ), 'position' => $group['position'], ]; } /** * Sort all blocks by position to maintain the original document order. * This ensures elements appear in the same order as they did in the source HTML. * Which is essential for preserving content flow and semantic relationships. */ \usort( $positioned_blocks, static function ( $a, $b ) { return ( $a['position'] - $b['position'] ); }, ); if ( ! empty( $positioned_blocks ) ) { // Finally, add all blocks to the output array in correct sequence. foreach ( $positioned_blocks as $block ) { // Revert escaped script tags. if ( \strpos( $block['content'], '[encoded_script_open]' ) !== false ) { $block['content'] = \str_replace( [ '[encoded_script_open]', '[encoded_script_close]' ], [ '<script>', '</script>' ], $block['content'], ); } $blocks[] = $block['content']; } } } }
Warning: Cannot modify header information - headers already sent by (output started at /htdocs/wp-content/plugins/wordpress-seo/src/llms-txt/infrastructure/file/wordpress-file-system-adapter.php:1) in /htdocs/wp-includes/feed-rss2.php on line 8
المزارعون Archives - ArabVoice.be https://www.arabvoice.be/tag/المزارعون/ صوت العرب في بلجيكا Thu, 08 Jan 2026 07:45:41 +0000 ar hourly 1 https://www.arabvoice.be/wp-content/uploads/2025/08/ArabVoice-icon-512.jpg المزارعون Archives - ArabVoice.be https://www.arabvoice.be/tag/المزارعون/ 32 32 248800160 تصعيد جديد للمزارعين في بلجيكا يهدد حركة المرور في فلاندرز https://www.arabvoice.be/manifestations-agriculteurs-belgique/ https://www.arabvoice.be/manifestations-agriculteurs-belgique/#respond Thu, 08 Jan 2026 07:45:41 +0000 https://www.arabvoice.be/?p=7622 تعود احتجاجات المزارعين في بلجيكا إلى الواجهة، مع إغلاقات مرتقبة لطرق رئيسية في فلاندرز. التحركات تأتي قبيل تصويت أوروبي حساس حول اتفاق ميركوسور، وسط مخاوف من منافسة غير عادلة تهدد مستقبل الزراعة المحلية.

The post تصعيد جديد للمزارعين في بلجيكا يهدد حركة المرور في فلاندرز appeared first on ArabVoice.be.

]]>
تتجه بلجيكا نحو يوم مشحون على الطرق، مع إعلان المزارعين عن تحركات احتجاجية واسعة في فلاندرز. الإغلاقات المرتقبة ليست مفاجئة. فهي تأتي في لحظة سياسية دقيقة، قبل نقاش أوروبي حساس حول اتفاقيات تجارية يراها الفلاحون تهديدا مباشرا لمهنتهم ولمستقبل الغذاء المحلي.

محاور استراتيجية تحت الضغط

التحركات ستركّز على ثلاث نقاط مرورية أساسية في فلاندرز. الأمر يتعلق بدوّار Wommelgem شرق أنتويرب، والتوربودوّار في Gent، إضافة إلى الدوّار فوق الطريق السريع A11 في Zeebrugge. ومن المنتظر أن تبدأ الإغلاقات يوم الخميس ابتداء من الساعة 11 صباحا. Algemeen Boerensyndicaat يتحدث عن “إغلاقات مفلترة”، أي شلل بطيء ومقصود لحركة السير. التقديرات تشير إلى مشاركة مكثفة للجرارات، خصوصا في Wommelgem وGent، مع صعوبة تقدير الحجم في Zeebrugge.

خلفية الغضب الفلاحي

سبب الاحتجاج واضح لدى المزارعين. يوم الجمعة ينتظر تصويت أوروبي جديد حول اتفاقية التجارة مع دول Mercosur، التي تضم الأرجنتين والبرازيل وباراغواي وأوروغواي. المزارعون يخشون فتح السوق الأوروبية أمام منتجات زراعية أقل كلفة، ولا تخضع لنفس المعايير البيئية والصحية. بالنسبة لهم، هذا ليس نقاشا نظريا. بل مسألة بقاء. “الغذاء ليس تجارة فقط”، هكذا تختصر النقابات موقفها، مطالبة بأسعار عادلة وقواعد لعب متساوية.

انقسام سياسي ودعم مدني

سياسيا، لا يزال الاتفاق بعيدا عن الإجماع. فرنسا وبولندا عبّرتا عن تحفظات واضحة. كما جددت الحكومة الوالونية رفضها. وزيرة الزراعة الوالونية Anne-Catherine Dalcq حذّرت من مخاطر حقيقية على القطاع الفلاحي وعلى الأمن الغذائي. في المقابل، دعت حركة Code Rood إلى دعم الإغلاقات، معتبرة أنها جزء من ضغط مشروع على السياسات الأوروبية. كما نفذت Boerenbond تحركا رمزيا، عبر تقديم “آخر طبق من الطعام البلجيكي” لعضوة البرلمان الأوروبي Liesbeth Sommen، في رسالة مباشرة مفادها أن الخطر لم يعد نظريا.

يتوقع أن تشهد الطرق اختناقات حادة، وقد يمتد تأثيرها إلى محاور أخرى. السائقون مدعوون إلى التخطيط المسبق، أو تغيير المسارات إن أمكن. أما الرسالة السياسية، فهي أبسط من ذلك بكثير: غضب المزارعين لم يهدأ، والضغط سيتواصل ما دامت المخاوف قائمة.

المصدر nieuwsblad بالتصرف

The post تصعيد جديد للمزارعين في بلجيكا يهدد حركة المرور في فلاندرز appeared first on ArabVoice.be.

]]>
https://www.arabvoice.be/manifestations-agriculteurs-belgique/feed/ 0 7622