View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0017809 | Scribus | Typography | public | 2026-05-06 10:35 | 2026-05-10 16:53 |
| Reporter | Fahad | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | new | Resolution | open | ||
| Product Version | 1.7.4.svn | ||||
| Summary | 0017809: [PATCH] RTL: wrong bulleted list character offset | ||||
| Description | the character offset of bullet char is wrong in RTL mode. Right now, the offset goes before the bullet char which is wrong. It should be after the bullet char. I attached a simple file to test. | ||||
| Steps To Reproduce | - create a bulleted list of three items - set RTL direction - set bulleted list character offset for example 0.5 in notice the different. | ||||
| Tags | No tags attached. | ||||
| Attached Files | bulleted list.sla (22,338 bytes)
<?xml version="1.0" encoding="UTF-8"?>
<SCRIBUSUTF8NEW Version="1.7.4.svn">
<Document PageCount="1" PageWidth="612" PageHeight="792" BorderLeft="40" BorderRight="40" BorderTop="40" BorderBottom="40" MarginPreset="0" BleedTop="0" BleedLeft="0" BleedRight="0" BleedBottom="0" PageOrientation="0" PageSize="US_Letter" FirstPageNumber="1" PagePositioning="0" BindingDirection="0" AutomaticTextFrameColumnCount="1" AutomaticTextFrameColumnGap="11" UnitIndex="2" FontFace="Arial Regular" FontSize="12" TextColumnCount="1" TextColumnGap="0" TabFillCharacter="" TabWidth="36" TextDistanceLeft="0" TextDistanceRight="0" TextDistanceBottom="0" TextDistanceTop="0" FirstLineOffset="1" DocumentInfoAuthor="" DocumentInfoComments="" DocumentInfoKeywords="" DocumentInfoPublisher="" DocumentInfoDate="" DocumentInfoType="" DocumentInfoFormat="" DocumentInfoIdentifier="" DocumentInfoSource="" DocumentInfoLanguage="" DocumentInfoRelation="" DocumentInfoCoverage="" DocumentInfoRights="" DocumentInfoContributors="" DocumentInfoTitle="" DocumentInfoSubject="" SuperScriptDisplacement="33" SuperScriptScaling="66" SubScriptDisplacement="33" SubScriptScaling="66" SmallCapsScaling="75" BaselineGridSpacing="14.4" BaselineGridOffset="0" AutoLineSpacingPct="100" UnderlinePosition="-1" UnderlineWidth="-1" StrikeThruPosition="-1" StrikeThruWidth="-1" GroupCounter="1" DocumentHasCMS="0" SoftProofOn="0" SoftProofFullOn="0" ColorManagementActive="0" GamutCheck="0" BlackPoint="1" DefaultPrinterProfile="ISO Coated v2 300% (basICColor)" DefaultImageRGBProfile="sRGB display profile (ICC v2.2)" DefaultImageCMYKProfile="ISO Coated v2 300% (basICColor)" DefaultSolidColorRGBProfile="sRGB display profile (ICC v2.2)" DefaultSolidColorCMYKProfile="ISO Coated v2 300% (basICColor)" DefaultIntentColors="1" DefaultIntentImages="0" ActiveLayer="0" Language="en_US" AutomaticHyphenation="1" AutomaticHyphenationCheck="0" GuideLock="0" SnapToGuides="0" SnapToGrid="0" SnapToItems="0" MinorGridSpacing="20.002" MajorGridSpacing="100.001" ShowGrid="0" ShowGuides="1" ShowColumnBorders="1" ShowFrames="1" ShowControls="0" ShowLayerMarkers="0" ShowMargins="1" ShowBaselineGrid="0" ShowImages="1" ShowLinks="0" RulerMode="1" ShowRulers="1" ShowBleed="1" RulerXOffset="0" RulerYOffset="0" GuideRadius="10" GrabRadius="4" PolygonCorners="4" PolygonFactor="0.502" PolygonRotation="0" PolygonInnerRotation="0" PolygonCurvature="0" PolygonOuterCurvature="0" PolygonUseFactor="0" ArcStartAngle="30" ArcSweepAngle="300" SpiralStartAngle="0" SpiralEndAngle="1080" SpiralFactor="1.2" AutoSave="1" AutoSaveTime="600000" AutoSaveCount="1" AutoSaveKeep="0" AutoSaveInDocumentDirectory="1" AutoSaveDirectory="" ScratchBottom="20.002" ScratchLeft="100.001" ScratchRight="100.001" ScratchTop="20.002" GapHorizontal="0" GapVertical="40.003" LineStartArrow="0" LineEndArrow="0" ShapeLineColor="Black" ShapeFillColor="None" LineColor="Black" TextColor="Black" TextStrokeColor="Black" TextBackgroundColor="None" TextLineColor="None" TextBackgroundColorShade="100" TextLineColorShade="100" TextColorShade="100" TextStrokeColorShade="100" ShapeLineStyle="1" LineStyle="1" ShapeLineWidth="1" LineWidth="1" ShapeLineColorShade="100" LineColorShade="100" ShapeFillColorShade="100" ImageFillColor="None" ImageFillColorShade="100" ImageStrokeColor="None" ImageStrokeColorShade="100" ImageScaleX="1" ImageScaleY="1" ImageScaleType="1" ImageAspectRatio="1" ImageUseEmbeddedPath="0" ImageLowResType="1" DisplayOffsetX="10.001" DisplayOffsetY="10.001" RotationConstrainAngle="15" MinorGridColor="#00ff00" MajorGridColor="#00ff00" GuidesColor="#000080" BaselineGridColor="#c0c0c0" RenderStack="2 0 4 1 3" GridType="0" PageColor="#ffffff" MarginColor="#0000ff" ShowMarginsFilled="0" CurrentProfile="PDF 1.4" CalligraphicPenFillColor="Black" CalligraphicPenLineColor="Black" CalligraphicPenFillColorShade="100" CalligraphicPenLineColorShade="100" CalligraphicPenLineWidth="1" CalligraphicPenAngle="0" CalligraphicPenWidth="10" CalligraphicPenStyle="1">
<CheckProfile Name="PDF 1.3" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="1" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
<CheckProfile Name="PDF 1.4" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="0" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
<CheckProfile Name="PDF 1.5" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="0" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
<CheckProfile Name="PDF 1.6" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="0" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="0" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
<CheckProfile Name="PDF/X-1a" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="1" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="1" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="1" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
<CheckProfile Name="PDF/X-3" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="1" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="1" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="1" CheckFontNotEmbedded="1" CheckFontIsOpenType="1" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
<CheckProfile Name="PDF/X-4" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="0" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="1" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="1" CheckFontNotEmbedded="1" CheckFontIsOpenType="0" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
<CheckProfile Name="PostScript" IgnoreErrors="0" AutoCheck="1" CheckGlyphs="1" CheckOrphans="1" CheckOverflow="1" CheckPictures="1" CheckPartFilledImageFrames="0" CheckResolution="1" CheckTransparency="1" MinimumResolution="144" MaximumResolution="2400" CheckAnnotations="0" CheckRasterPDF="1" CheckForGIF="1" IgnoreOffLayers="0" CheckNotCMYKOrSpot="0" CheckDeviceColorsAndOutputIntent="0" CheckFontNotEmbedded="0" CheckFontIsOpenType="0" CheckAppliedMasterDifferentSide="1" CheckEmptyTextFrames="1" CheckImageHasProgressiveEncoding="1"/>
<Color Name="Black" Space="CMYK" C="0" M="0" Y="0" K="100"/>
<Color Name="Blue" Space="RGB" R="0" G="0" B="255"/>
<Color Name="Cool Black" Space="CMYK" C="60" M="0" Y="0" K="100"/>
<Color Name="Cyan" Space="CMYK" C="100" M="0" Y="0" K="0"/>
<Color Name="Green" Space="RGB" R="0" G="255" B="0"/>
<Color Name="Magenta" Space="CMYK" C="0" M="100" Y="0" K="0"/>
<Color Name="Red" Space="RGB" R="255" G="0" B="0"/>
<Color Name="Registration" Space="CMYK" C="100" M="100" Y="100" K="100" Register="1"/>
<Color Name="Rich Black" Space="CMYK" C="60" M="40" Y="40" K="100"/>
<Color Name="Warm Black" Space="CMYK" C="0" M="60" Y="29.8039215686275" K="100"/>
<Color Name="White" Space="CMYK" C="0" M="0" Y="0" K="0"/>
<Color Name="Yellow" Space="CMYK" C="0" M="0" Y="100" K="0"/>
<Hyphenator/>
<CharacterStyle Name="Default Character Style" DefaultStyle="1" Font="Arial Regular" FontSize="12" FontFeatures="" Features="inherit" FontColor="Black" FillShade="100" HyphenWordMinimum="3" StrokeColor="Black" BackgroundColor="None" BackgroundShade="100" StrokeShade="100" TextShadowXOffset="5" TextShadowYOffset="-5" TextOutlineWidth="1" TextUnderlineOffset="-0.1" TextUnderlineWidth="-0.1" TextStrikeThroughOffset="-0.1" TextStrikeThroughWidth="-0.1" ScaleHorizontal="100" ScaleVertical="100" BaselineOffset="0" Kerning="0" Language="en_US"/>
<ParagraphStyle Name="Default Paragraph Style" DefaultStyle="1" Alignment="0" Direction="0" LineSpacingMode="0" LineSpacing="15" LeftMargin="0" RightMargin="0" FirstIndent="0" GapBefore="0" GapAfter="0" ParagraphEffectOffset="0" HasDropCap="0" DropCapLines="2" Bullet="0" Numeration="0" HyphenConsecutiveLines="2" ParagraphBackgroundColor="None" ParagraphBackgroundColorShade="100"/>
<TableStyle Name="Default Table Style" DefaultStyle="1" FillColor="None" FillShade="100">
<TableBorderLeft>
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
</TableBorderLeft>
<TableBorderRight>
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
</TableBorderRight>
<TableBorderTop>
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
</TableBorderTop>
<TableBorderBottom>
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
</TableBorderBottom>
</TableStyle>
<CellStyle Name="Default Cell Style" DefaultStyle="1" FillColor="None" FillShade="100" LeftPadding="1" RightPadding="1" TopPadding="1" BottomPadding="1">
<TableBorderLeft>
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
</TableBorderLeft>
<TableBorderRight>
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
</TableBorderRight>
<TableBorderTop>
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
</TableBorderTop>
<TableBorderBottom>
<TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
</TableBorderBottom>
</CellStyle>
<Layers Number="0" Level="0" Name="Background" IsViewable="1" IsPrintable="1" IsEditable="1" IsSelectable="0" FlowControl="1" Transparency="1" BlendMode="0" OutlineMode="0" LayerColor="#000000"/>
<Printer firstUse="1" toFile="0" useAltPrintCommand="0" outputSeparations="0" useSpotColors="1" useColor="1" mirrorH="0" mirrorV="0" useICC="0" doGCR="0" doClip="0" setDevParam="0" useDocBleeds="1" cropMarks="0" bleedMarks="0" registrationMarks="0" colorMarks="0" includePDFMarks="1" PSLevel="3" PrintEngine="3" markLength="20.0016" markOffset="0" BleedTop="0" BleedLeft="0" BleedRight="0" BleedBottom="0" printer="ملف" filename="" separationName="All" printerCommand=""/>
<PDF firstUse="1" Thumbnails="0" Articles="0" Bookmarks="0" Compress="1" CMethod="0" Quality="0" EmbedPDF="0" MirrorH="0" MirrorV="0" Clip="0" rangeSel="0" rangeTxt="" RotateDeg="0" PresentMode="0" RecalcPic="0" FontEmbedding="0" Grayscale="0" RGBMode="1" UseProfiles="0" UseProfiles2="0" Binding="0" PicRes="300" Resolution="300" Version="14" Intent="1" Intent2="0" SolidP="sRGB display profile (ICC v2.2)" ImageP="sRGB display profile (ICC v2.2)" PrintP="ISO Coated v2 300% (basICColor)" InfoString="" BTop="0" BLeft="0" BRight="0" BBottom="0" useDocBleeds="1" cropMarks="0" bleedMarks="0" registrationMarks="0" colorMarks="0" docInfoMarks="0" markLength="20.0016" markOffset="0" ImagePr="0" PassOwner="" PassUser="" Permissions="-4" Encrypt="0" UseLayers="0" UseLpi="0" UseSpotColors="1" doMultiFile="0" displayBookmarks="0" displayFullscreen="0" displayLayers="0" displayThumbs="0" hideMenuBar="0" hideToolBar="0" fitWindow="0" openAfterExport="0" PageLayout="0" openAction="">
<LPI Color="Black" Frequency="133" Angle="45" SpotFunction="3"/>
<LPI Color="Cyan" Frequency="133" Angle="105" SpotFunction="3"/>
<LPI Color="Magenta" Frequency="133" Angle="75" SpotFunction="3"/>
<LPI Color="Yellow" Frequency="133" Angle="90" SpotFunction="3"/>
</PDF>
<DocItemAttributes/>
<Indexes/>
<TablesOfContents/>
<NotesStyles>
<notesStyle Name="Default" Start="1" Endnotes="0" Type="Type_1_2_3" Range="0" Prefix="" Suffix=")" AutoHeight="1" AutoWidth="1" AutoRemove="1" AutoWeld="1" SuperNote="1" SuperMaster="1" MarksStyle="" NotesStyle=""/>
</NotesStyles>
<OpticalMarginSets>
<Set Id="preset_0" Type="preset" Name="Default">
<Rules>
<Rule Left="0" Right="0.5" Unit="7" Characters="U+003A,U+003B,U+2013,U+2033"/>
<Rule Left="0" Right="0.75" Unit="7" Characters="U+002C,U+002D,U+002E,U+2010,U+2032"/>
<Rule Left="0.25" Right="0.25" Unit="7" Characters="U+2014"/>
<Rule Left="0.5" Right="0" Unit="7" Characters="U+2036"/>
<Rule Left="0.5" Right="0.5" Unit="7" Characters="U+0022,U+0028,U+0029,U+005B,U+005D,U+00AB,U+00BB,U+201C,U+201D,U+201E,U+201F"/>
<Rule Left="0.75" Right="0" Unit="7" Characters="U+2035"/>
<Rule Left="0.75" Right="0.75" Unit="7" Characters="U+0027,U+002A,U+0060,U+007E,U+00B4,U+2018,U+2019,U+201A,U+201B,U+2039,U+203A"/>
</Rules>
</Set>
</OpticalMarginSets>
<PageSets>
<Set Name="Single Page" FirstPage="0" Rows="1" Columns="1"/>
<Set Name="Facing Pages" FirstPage="1" Rows="1" Columns="2">
<PageNames Name="Left Page"/>
<PageNames Name="Right Page"/>
</Set>
<Set Name="3-Fold" FirstPage="0" Rows="1" Columns="3">
<PageNames Name="Left Page"/>
<PageNames Name="Middle"/>
<PageNames Name="Right Page"/>
</Set>
<Set Name="4-Fold" FirstPage="0" Rows="1" Columns="4">
<PageNames Name="Left Page"/>
<PageNames Name="Middle Left"/>
<PageNames Name="Middle Right"/>
<PageNames Name="Right Page"/>
</Set>
</PageSets>
<Sections>
<Section Number="0" Name="Section 1" From="0" To="0" Type="Type_1_2_3" Start="1" Reversed="0" Active="1" FillChar="0" FieldWidth="0"/>
</Sections>
<MasterPage PageXPosition="100.001" PageYPosition="20.002" PageWidth="612" PageHeight="792" BorderLeft="40" BorderRight="40" BorderTop="40" BorderBottom="40" PageNumber="0" PageName="Normal" MasterPageName="" Size="US_Letter" Orientation="0" LeftPage="0" Preset="0" VerticalGuides="" HorizontalGuides="" AutoGuideHorizontalGap="0" AutoGuideVerticalGap="0" AutoGuideHorizontalCount="0" AutoGuideVerticalCount="0" AutoGuideHorizontalReference="0" AutoGuideVerticalReference="0" AutoGuideSelection="0 0 0 0" PageEffectDuration="1" PageViewDuration="1" PageEffectType="0" PageEffectLineDirection="0" PageEffectInsideOutside="0" PageEffectDirection="0"/>
<Page PageXPosition="100.001" PageYPosition="20.002" PageWidth="612" PageHeight="792" BorderLeft="40" BorderRight="40" BorderTop="40" BorderBottom="40" PageNumber="0" PageName="" MasterPageName="Normal" Size="US_Letter" Orientation="0" LeftPage="0" Preset="0" VerticalGuides="" HorizontalGuides="" AutoGuideHorizontalGap="0" AutoGuideVerticalGap="0" AutoGuideHorizontalCount="0" AutoGuideVerticalCount="0" AutoGuideHorizontalReference="0" AutoGuideVerticalReference="0" AutoGuideSelection="0 0 0 0" PageEffectDuration="1" PageViewDuration="1" PageEffectType="0" PageEffectLineDirection="0" PageEffectInsideOutside="0" PageEffectDirection="0"/>
<PageObject XPosition="475.521739130435" YPosition="216.913043478261" OwnPage="0" ItemID="1723594466" ItemType="4" Width="190.95652173913" Height="77.4782608695652" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L190.957 0 L190.957 77.4783 L0 77.4783 L0 0 Z" ContourLinePath="M0 0 L190.957 0 L190.957 77.4783 L0 77.4783 L0 0 Z" gXpos="475.521739130435" gYpos="216.913043478261" gWidth="0" gHeight="0" Alignment="0" Layer="0" NextItem="-1" BackItem="-1">
<StoryText>
<DefaultStyle Alignment="0" Direction="0" ParagraphEffectCharStyle="" ParagraphEffectOffset="9" ParagraphEffectIndent="1" HasDropCap="0" DropCapLines="2" Bullet="1" BulletStr="–" Numeration="0" NumerationFormat="0" NumerationName="<local block>" NumerationLevel="0" NumerationPrefix="" NumerationSuffix="." NumerationStart="1" NumerationOther="1" NumerationHigher="1"/>
<Content Chars="test 1"/>
<para Alignment="0" Direction="0" ParagraphEffectCharStyle="" ParagraphEffectOffset="9" ParagraphEffectIndent="1" HasDropCap="0" DropCapLines="2" Bullet="1" BulletStr="–" Numeration="0" NumerationFormat="0" NumerationName="<local block>" NumerationLevel="0" NumerationPrefix="" NumerationSuffix="." NumerationStart="1" NumerationOther="1" NumerationHigher="1"/>
<Content Chars="test 2"/>
<para Alignment="0" Direction="0" ParagraphEffectCharStyle="" ParagraphEffectOffset="9" ParagraphEffectIndent="1" HasDropCap="0" DropCapLines="2" Bullet="1" BulletStr="–" Numeration="0" NumerationFormat="0" NumerationName="<local block>" NumerationLevel="0" NumerationPrefix="" NumerationSuffix="." NumerationStart="1" NumerationOther="1" NumerationHigher="1"/>
<Content Chars="test3"/>
<para Alignment="0" Direction="0" ParagraphEffectCharStyle="" ParagraphEffectOffset="9" ParagraphEffectIndent="1" HasDropCap="0" DropCapLines="2" Bullet="1" BulletStr="–" Numeration="0" NumerationFormat="0" NumerationName="<local block>" NumerationLevel="0" NumerationPrefix="" NumerationSuffix="." NumerationStart="1" NumerationOther="1" NumerationHigher="1"/>
</StoryText>
</PageObject>
<PageObject XPosition="480.739130434783" YPosition="305.695652173913" OwnPage="0" ItemID="1776325500" ItemType="4" Width="185.478260869565" Height="119.739130434783" FrameType="0" ClipEdited="0" LineWidth="1" LinePenStyle="1" ImageScaleX="1" ImageScaleY="1" ImageOffsetX="0" ImageOffsetY="0" ImageRotation="0" ImageVisible="1" ImageScaleType="1" ImageRatio="1" Columns="1" ColumnGap="0" AutomaticTextFrame="0" TextToFrameDistanceLeft="0" TextToFrameDistanceTop="0" TextToFrameDistanceBottom="0" TextToFrameDistanceRight="0" VerticalAlignment="0" FirstLineOffset="1" PathTextShowPath="0" PathTextDistanceFromPath="0" TextPathType="0" TextPathFlipped="0" Path="M0 0 L185.478 0 L185.478 119.739 L0 119.739 L0 0 Z" ContourLinePath="M0 0 L185.478 0 L185.478 119.739 L0 119.739 L0 0 Z" gXpos="480.739130434783" gYpos="305.695652173913" gWidth="0" gHeight="0" Alignment="2" Layer="0" NextItem="-1" BackItem="-1">
<StoryText>
<DefaultStyle Alignment="2" Direction="1" ParagraphEffectOffset="9" ParagraphEffectIndent="1" HasDropCap="0" Bullet="1" BulletStr="–" Numeration="0" NumerationFormat="0" NumerationName="<local block>" NumerationLevel="0" NumerationPrefix="" NumerationSuffix="." NumerationStart="1" NumerationOther="1" NumerationHigher="1"/>
<Content Chars="تجربة 1"/>
<para ParagraphEffectOffset="9" ParagraphEffectIndent="1" HasDropCap="0" Bullet="1" BulletStr="–" Numeration="0" NumerationFormat="0" NumerationName="<local block>" NumerationLevel="0" NumerationPrefix="" NumerationSuffix="." NumerationStart="1" NumerationOther="1" NumerationHigher="1"/>
<Content Chars="تجربة 2"/>
<para ParagraphEffectOffset="9" ParagraphEffectIndent="1" HasDropCap="0" Bullet="1" BulletStr="–" Numeration="0" NumerationFormat="0" NumerationName="<local block>" NumerationLevel="0" NumerationPrefix="" NumerationSuffix="." NumerationStart="1" NumerationOther="1" NumerationHigher="1"/>
<Content Chars="تجربة 3"/>
<trail ParagraphEffectOffset="9" ParagraphEffectIndent="1" HasDropCap="0" Bullet="1" BulletStr="–" Numeration="0" NumerationFormat="0" NumerationName="<local block>" NumerationLevel="0" NumerationPrefix="" NumerationSuffix="." NumerationStart="1" NumerationOther="1" NumerationHigher="1"/>
</StoryText>
</PageObject>
</Document>
</SCRIBUSUTF8NEW>
| ||||
| Patch | Yes | ||||
|
|
Here is my analysis of this problem. ========================================================== Problem: Bullet Offset in RTL Text In Scribus, when a paragraph has RTL direction (Arabic, Hebrew) with bullet/number, the offset (parEffectOffset) between the bullet and text does not appear between them. Instead, the offset appears before the bullet (on the right side of the bullet), but still inside the frame. The bullet and text remain adjacent with no gap between them. Original Code (LTR - works correctly) In pageitem_textframe.cpp, function layout(), inside the if ((DropCmode || BulNumMode) && !outs) block (~line 2365): ---------------------------------------------------------------------------------------------------------------------- if ((DropCmode || BulNumMode) && !outs) { current.xPos += style.parEffectOffset(); for (int j = 0; j < current.glyphs.size(); j++) { if (j != currentIndex) { GlyphCluster& currentGlyph = current.glyphs[j]; current.xPos -= currentGlyph.extraWidth; currentGlyph.extraWidth = 0.0; } } current.glyphs[currentIndex].extraWidth += style.parEffectOffset(); // ... } ---------------------------------------------------------------------------------------------------------------------- In LTR: bullet is the first visual box. xPos += offset moves cursor right. extraWidth += offset makes bullet wider. Next glyph starts after bullet+offset. Visual result: bullet → gap → text ✓ The Same Code (RTL - broken) The same code runs for RTL. But after putInVisualOrder in createLineBox() (~line 990): ---------------------------------------------------------------------------------------------------------------------- LineBox* createLineBox() { // ... for (const GlyphCluster& run : ShapedTextFeed::putInVisualOrder(glyphs, 0, ...)) { addBox(result, run); } return result; } ---------------------------------------------------------------------------------------------------------------------- In RTL, putInVisualOrder reverses glyphs: text boxes come first, bullet comes last (far right). Root Cause: m_naturalWidth Always Moves Rightward In boxes.cpp, LineBox::update(): ---------------------------------------------------------------------------------------------------------------------- void LineBox::update() { m_naturalWidth = 0; for (int i = 0; i < m_boxes.count(); ++i) { box->moveTo(m_naturalWidth, box->y()); m_naturalWidth += box->width(); // always increases rightward } } ---------------------------------------------------------------------------------------------------------------------- m_naturalWidth += box->width() always moves rightward, regardless of text direction. Boxes are placed left-to-right: text at x=0, bullet at x=text_width (far right). Bullet's width() includes the extraWidth we added. Since bullet is the last box and m_naturalWidth only grows rightward, the extra width goes to the right of the bullet (before the bullet visually in RTL). But the text is on the left of the bullet. So the offset appears before the bullet (inside the frame), not between bullet and text. The bullet and text remain adjacent. |
|
|
my idea to fix this to move bullet glyph to far most right to create gap between bullet and text. in this way, RTL line will start with bullet char then offset space then the text. fix_#17809-v1.patch (4,452 bytes)
Subject: [PATCH] fix #17809: RTL: wrong bulleted list character offset
---
Index: scribus/text/boxes.cpp
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/scribus/text/boxes.cpp b/scribus/text/boxes.cpp
--- a/scribus/text/boxes.cpp (revision 27561)
+++ b/scribus/text/boxes.cpp (date 1778421910516)
@@ -337,6 +337,17 @@
m_naturalAscent = qMax(m_naturalAscent, box->naturalAsc());
m_naturalDescent = qMin(m_naturalDescent, box->naturalDescent());
}
+ // RTL bullet offset: shift the last box (bullet) right to create gap between bullet and text
+ if (m_boxes.count() >= 2)
+ {
+ GlyphBox* lastBox = dynamic_cast<GlyphBox*>(m_boxes.last());
+ if (lastBox && lastBox->glyphRun().hasFlag(ScLayout_RTLBulletOffset))
+ {
+ double offset = lastBox->glyphRun().extraWidth;
+ lastBox->moveTo(lastBox->x() + offset, lastBox->y());
+ m_naturalWidth = qMax(m_naturalWidth, lastBox->x() + lastBox->width());
+ }
+ }
}
#if 0
Index: scribus/pageitem_textframe.cpp
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/scribus/pageitem_textframe.cpp b/scribus/pageitem_textframe.cpp
--- a/scribus/pageitem_textframe.cpp (revision 27561)
+++ b/scribus/pageitem_textframe.cpp (date 1778421910686)
@@ -2361,22 +2361,29 @@
}
if ((DropCmode || BulNumMode) && !outs)
{
- current.xPos += style.parEffectOffset();
- // for bulleted lists, make sure offset is applied only after last bullet char
- // for numbered lists, make sure that offset is applied only after the suffix
- // loop over previous current.glyphs and set their extraWidth to 0.0
- for (int j = 0; j < current.glyphs.size(); j++)
- {
- if (j != currentIndex)
- {
- GlyphCluster& currentGlyph = current.glyphs[j];
- current.xPos -= currentGlyph.extraWidth;
- currentGlyph.extraWidth = 0.0;
- }
- }
- // set the offset for Drop Cap, Bullet & Number List
- current.glyphs[currentIndex].extraWidth += style.parEffectOffset();
-
+ if (style.direction() == ParagraphStyle::RTL)
+ {
+ current.glyphs[currentIndex].setFlag(ScLayout_RTLBulletOffset);
+ current.glyphs[currentIndex].extraWidth += style.parEffectOffset();
+ }
+ else
+ {
+ current.xPos += style.parEffectOffset();
+ // for bulleted lists, make sure offset is applied only after last bullet char
+ // for numbered lists, make sure that offset is applied only after the suffix
+ // loop over previous current.glyphs and set their extraWidth to 0.0
+ for (int j = 0; j < current.glyphs.size(); j++)
+ {
+ if (j != currentIndex)
+ {
+ GlyphCluster ¤tGlyph = current.glyphs[j];
+ current.xPos -= currentGlyph.extraWidth;
+ currentGlyph.extraWidth = 0.0;
+ }
+ }
+ // set the offset for Drop Cap, Bullet & Number List
+ current.glyphs[currentIndex].extraWidth += style.parEffectOffset();
+ }
if (DropCmode)
{
DropCmode = false;
Index: scribus/sctextstruct.h
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/scribus/sctextstruct.h b/scribus/sctextstruct.h
--- a/scribus/sctextstruct.h (revision 27561)
+++ b/scribus/sctextstruct.h (date 1778421910623)
@@ -46,6 +46,7 @@
ScLayout_ImplicitSpace = 1 << 3, // marks an implicit space
ScLayout_TabLeaders = 1 << 4, // marks a tab with fillchar
ScLayout_HyphenationPossible = 1 << 7, // marks possible hyphenation point
+ ScLayout_RTLBulletOffset = 1 << 10,
ScLayout_DropCap = 1 << 11,
ScLayout_SuppressSpace = 1 << 12, // internal use in PageItem (Suppresses spaces when in Block alignment)
ScLayout_SoftHyphenVisible = 1 << 13, // marks when a possible hyphenation point is used (st end of line)
|
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-05-06 10:35 | Fahad | New Issue | |
| 2026-05-06 10:35 | Fahad | File Added: Screenshot_٢٠٢٦٠٥٠٦_١٤٢٠٣٩.png | |
| 2026-05-06 10:35 | Fahad | File Added: bulleted list.sla | |
| 2026-05-10 04:41 | Fahad | Note Added: 0053678 | |
| 2026-05-10 14:29 | Fahad | Note Added: 0053681 | |
| 2026-05-10 14:29 | Fahad | File Added: fix_#17809-v1.patch | |
| 2026-05-10 14:29 | Fahad | File Added: bullet-offset-rtl.png | |
| 2026-05-10 16:53 | ale | Summary | RTL: wrong bulleted list character offset => [PATCH] RTL: wrong bulleted list character offset |
| 2026-05-10 16:53 | ale | Patch | No => Yes |