Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <Lines-20240805135439@ram.dialup.fu-berlin.de>
Deutsch   English   Français   Italiano  
<Lines-20240805135439@ram.dialup.fu-berlin.de>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!npeer.as286.net!npeer-ng0.as286.net!fu-berlin.de!uni-berlin.de!not-for-mail
From: ram@zedat.fu-berlin.de (Stefan Ram)
Newsgroups: comp.text.tex
Subject: TeX's line breaking in the grub sesh
Date: 5 Aug 2024 13:09:16 GMT
Organization: Stefan Ram
Lines: 54
Expires: 1 Jul 2025 11:59:58 GMT
Message-ID: <Lines-20240805135439@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Trace: news.uni-berlin.de ghrsa/omSKf6tpfGXPoV4wyYytj9CHf6DcZSVWsNpBLWX6
Cancel-Lock: sha1:J7WsijoOh2Ttoyd3K6IR0vQ4HMU= sha256:xDiun4+erL9VetXwAHeMJOg++KOQG6h+2b/vhdTOjEs=
X-Copyright: (C) Copyright 2024 Stefan Ram. All rights reserved.
	Distribution through any means other than regular usenet
	channels is forbidden. It is forbidden to publish this
	article in the Web, to change URIs of this article into links,
        and to transfer the body without this notice, but quotations
        of parts in other Usenet posts are allowed.
X-No-Archive: Yes
Archive: no
X-No-Archive-Readme: "X-No-Archive" is set, because this prevents some
	services to mirror the article in the web. But the article may
	be kept on a Usenet archive server with only NNTP access.
X-No-Html: yes
Content-Language: en-US
Bytes: 3077

  During my grub sesh today, I crushed out TeX's line breaking
  in Python in like a hot minute - 36 to be exact. Tryna use
  it for plain text, like, monospaced fonts and whatnot. Natch,
  I stripped it down to the bare bones, but it's still hella
  tight. Already got that "parshape" action goin' on (which
  Knuth-Plass can't hang with, if I'm not trippin'). Next up,
  I'm finna tackle those "discretionary items" - that's gonna be
  gnarly! For sure there's some janky bugs in there, but peep this:

  wrap.py 

source = 'Ich habe das gebackene Profi-Bettuch bereits gesehen. '

active0 =[ 0, 0, 0, 0 ] # previous, position, quality, line_number
active =[ active0 ]
parshape =[ 10, 20, 20, 20, 20, 20, 20, 20 ]

p = 1
while p < len( source ):
    ch = source[ p ]
    if ch == ' ':
        new_active = []
        best_quality = -10000
        best_act = active[ 0 ]
        for act in active:
            a = act[ 1 ]
            line_number = act[ 3 ] 
            target_length = parshape[ line_number ]
            this_length = p - a
            if this_length > target_length:
                pass
            else:
                quality = this_length - target_length
                new_active.append( act )
                if quality > best_quality:
                    best_quality = quality
                    best_act = act
            new_active.append( [ best_act, p, best_quality, best_act[ 3 ]+1 ] )
        active = new_active
    p += 1
    act = active[ -1 ]
buff = []
while act[ 0 ]:
    prev = act[ 0 ]
    buff.append( source[ prev[1]: act[1] ])
    act = prev
for line in reversed( buff ):
    print(line)

  output

Ich habe das
 gebackene Profi-Bettuch
 bereits gesehen.