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/باريس/ صوت العرب في بلجيكا Sun, 11 Jan 2026 08:10:09 +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/politique-immigration-france-debat/ https://www.arabvoice.be/politique-immigration-france-debat/#respond Tue, 25 Nov 2025 07:29:52 +0000 https://www.arabvoice.be/?p=6313 عاد ملف الهجرة إلى قلب الجدل السياسي في فرنسا، بعدما طُرحت مقترحات جديدة لتشديد الإجراءات، بينما طالبت منظمات حقوقية بمقاربة أكثر إنسانية. النقاش داخل الجمعية الوطنية يكشف انقساماً واسعاً حول مستقبل سياسة الهجرة.

The post باريس تعيد فتح الجدل حول سياسة الهجرة وسط ضغوط أمنية وسياسية appeared first on ArabVoice.be.

]]>
عاد ملف الهجرة ليتصدر النقاش العام في باريس بعد ظهور مقترحات سياسية جديدة أثارت موجة واسعة من الردود. النقاش هذه المرة بدا أكثر حدّة، خاصة داخل الجمعية الوطنية. عبّر نواب من اتجاهات مختلفة عن مواقف متباعدة، مما يعكس الانقسام القائم حول كيفية التعامل مع الهجرة. يحدث هذا في مرحلة يشهد فيها البلد توتراً اقتصادياً واجتماعياً متصاعداً.

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

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

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

المصدر: The Brussels Times بالتصرف

The post باريس تعيد فتح الجدل حول سياسة الهجرة وسط ضغوط أمنية وسياسية appeared first on ArabVoice.be.

]]>
https://www.arabvoice.be/politique-immigration-france-debat/feed/ 0 6313
الشرطة الفرنسية تعتقل مشتبهين في سرقة مجوهرات من متحف اللوفر https://www.arabvoice.be/%d8%b3%d8%b1%d9%82%d8%a9-%d9%85%d8%aa%d8%ad%d9%81-%d8%a7%d9%84%d9%84%d9%88%d9%81%d8%b1/ https://www.arabvoice.be/%d8%b3%d8%b1%d9%82%d8%a9-%d9%85%d8%aa%d8%ad%d9%81-%d8%a7%d9%84%d9%84%d9%88%d9%81%d8%b1/#respond Sun, 26 Oct 2025 18:59:03 +0000 https://www.arabvoice.be/?p=4926 في تطور جديد لقضية سرقة القرن من باريس، اعتقلت الشرطة الفرنسية رجلين يشتبه في مشاركتهما بسرقة مجوهرات ثمينة من متحف اللوفر. بلغت قيمة المسروقات نحو 88 مليون يورو، وأعادت القضية الجدل حول أمن المتاحف في فرنسا التي أصبحت تحت المجهر…

The post الشرطة الفرنسية تعتقل مشتبهين في سرقة مجوهرات من متحف اللوفر appeared first on ArabVoice.be.

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

سرقة جريئة تهز باريس

وقعت السرقة يوم 19 أكتوبر 2025 داخل قاعة Galerie d’Apollon الشهيرة. تضم القاعة مجموعة المجوهرات التاريخية العائدة للتاج الفرنسي، مما يجعلها هدفًا جذابًا لهؤلاء اللصوص الذين ارتكبوا سرقة متحف اللوفر. استغل اللصوص ازدحام الزوار وثغرات المراقبة ليدخلوا القاعة ويأخذوا القطع قبل أن يفرّوا بسرعة. تسبب الحادث في صدمة كبيرة لدى الرأي العام، خاصة أن القاعة تُعد من أكثر الأماكن حراسة في المتحف.

اعتقال المشتبهين في باريس والمطار

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

ثغرات أمنية تثير الغضب

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

مجوهرات التاج الفرنسي… إرث لا يُقدّر بثمن

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

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

The post الشرطة الفرنسية تعتقل مشتبهين في سرقة مجوهرات من متحف اللوفر appeared first on ArabVoice.be.

]]>
https://www.arabvoice.be/%d8%b3%d8%b1%d9%82%d8%a9-%d9%85%d8%aa%d8%ad%d9%81-%d8%a7%d9%84%d9%84%d9%88%d9%81%d8%b1/feed/ 0 4926