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/آرلون/ صوت العرب في بلجيكا Mon, 01 Dec 2025 06:47:20 +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/actualites-belgique-01-12-25/ https://www.arabvoice.be/actualites-belgique-01-12-25/#respond Mon, 01 Dec 2025 06:47:20 +0000 https://www.arabvoice.be/?p=6589 نشرة أخبار بلجيكا اليوم الاثنين 01-12-2025 تسلط الضوء على الفوترة الإلكترونية الإلزامية، اعتداء في محطة بروكسل ميدي، استمرار أزمة تشكيل الحكومة، جدل ميزانية والونيا، وحريق كبير في آرلون.

The post أخبار بلجيكا اليوم: تغييرات ضريبية، اعتداءات، وتعقيدات سياسية جديدة appeared first on ArabVoice.be.

]]>
تتصدر أخبار بلجيكا اليوم الاثنين 01-12-2025 مشهدا متنوعا بين قرارات اقتصادية ستغير حياة الشركات، وتطورات أمنية مقلقة في بروكسل، إلى جانب استمرار الجمود السياسي في العاصمة وتوترات الميزانية في والونيا.

الفوترة الإلكترونية تدخل حيز الإلزام في 2026

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

اعتداء داخل محطة بروكسل ميدي يثير الغضب

أمنيا، شهدت محطة بروكسل ميدي حادثة أثارت استياء واسعا بعد تعرض موظفتين في شبابيك السكك الحديدية البلجيكية لاعتداء مباشر خلال أداء عملهما. النقابات نددت بالعنف المتكرر داخل المحطات الكبرى، مطالبة بإجراءات حماية فورية وتعزيز الوجود الأمني.

مفاوضات حكومة بروكسل تقترب من رقم قياسي سلبي

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

جدل واسع حول ميزانية والونيا

في والونيا، فجرت تصريحات كريستي مورريال جدلا واسعا بعد انتقادها تحميل الجماعات المحلية 38% من مجهود ميزانية الإقليم. واعتبرت أن هذا التوزيع غير عادل، كما تحدثت عن غموض في صرف دعم المدن الكبرى.

حريق كبير في آرلون وإجلاء العشرات

في الجنوب، عاش سكان مدينة آرلون حالة استنفار بعد اندلاع حريق في عمارة سكنية من تسعة طوابق، ما استدعى إجلاء 28 شخصا، بعضهم عبر السلالم الآلية. الحصيلة لم تسجل ضحايا، لكن الخسائر المادية والتحقيقات لا تزال جارية.

انتقادات لاذعة لحزب “الملتزمون”

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

هكذا ترسم أخبار بلجيكا اليوم صورة مزدحمة بالتحولات الاقتصادية. إضافة إلى التحديات الأمنية، والضبابية السياسية. ننتظر ما ستحمله الأيام المقبلة من مستجدات قد تعيد ترتيب الأولويات.

لمتابعة سياق هذه التطورات، يمكنك الاطلاع على ملخص أخبار بلجيكا ليوم أمس.

تحرير: أبو ماسين | المصادر: The Brussels TimesLe SoirDe StandaardLe Libre بالتصرف

The post أخبار بلجيكا اليوم: تغييرات ضريبية، اعتداءات، وتعقيدات سياسية جديدة appeared first on ArabVoice.be.

]]>
https://www.arabvoice.be/actualites-belgique-01-12-25/feed/ 0 6589