Word wrap: Difference between revisions

Content added Content deleted
No edit summary
No edit summary
Line 2,376: Line 2,376:
{def wrap1
{def wrap1
{lambda {:n}
{lambda {:n}
pre {@ style="width::npx; // the line width
pre {@ style="width::npx; // the line width in pixels
white-space:pre-wrap; "}}} // the word-wrap rule
white-space:pre-wrap; "}}} // the word-wrap rule
-> wrap1
-> wrap1


{{wrap1 380} {text}}
{{wrap1 500} {text}}
->
->
Personne n’a sans doute oublié le
Personne n’a sans doute oublié le terrible coup de vent de nord-est
qui se déchaîna au milieu de l’équinoxe de cette année, et pendant
terrible coup de vent de nord-est qui se déchaîna
lequel le baromètre tomba à sept cent dix millimètres. Ce fut un
au milieu de l’équinoxe de cette année, et pendant
ouragan, sans intermittence, qui dura du 18 au 26 mars. Les ravages
lequel le baromètre tomba à sept cent dix
qu’il produisit furent immenses en Amérique, en Europe, en Asie, sur
millimètres. Ce fut un ouragan, sans
une zone large de dix-huit cents milles, qui se dessinait obliquement
intermittence, qui dura du 18 au 26 mars. Les
à l’équateur, depuis le trente-cinquième parallèle nord jusqu’au
ravages qu’il produisit furent immenses en
quarantième parallèle sud ! (L’île mystérieuse / Jules Verne)
Amérique, en Europe, en Asie, sur une zone large
de dix-huit cents milles, qui se dessinait
obliquement à l’équateur, depuis le
trente-cinquième parallèle nord jusqu’au
quarantième parallèle sud ! (L’île mystérieuse /
Jules Verne)
</lang>
</lang>


Line 2,401: Line 2,396:
A translation from the Kotlin entry:
A translation from the Kotlin entry:
<lang scheme>
<lang scheme>
{def wrap2 // the function's name
{def wrap2

{def wrap2.r
{def wrap2.r // recursive "loop"
{lambda {:linewidth :arr :spaceleft :sb}
{lambda {:linewidth :a1 :spaceleft :a2}
{if {A.empty? :arr}
{if {A.empty? :a1} // it's the end so ...
then {S.rest :sb}
then {A.toS :a2} // ... return the sentence
else {let { {:linewidth :linewidth}
{:arr :arr}
else {let { {:linewidth :linewidth} // local variables
{:spaceleft :spaceleft}
{:spaceleft :spaceleft} // lambdatalk has no closure
{:word {A.first :arr}}
{:a1 :a1} // so we recall outers values
{:length {W.length {A.first :arr}}}
{:a2 :a2} // ... manually
{:sb :sb}
{:word {A.first :a1}} // get the first word
} {wrap2.r :linewidth
{:length {W.length {A.first :a1}}} // compute its length
{A.rest :arr}
} {wrap2.r // do it again with
{if {> {+ :length 1} :spaceleft}
:linewidth // the linewidth unchanged
then {- :linewidth :length} :sb{br}:word
{A.rest :a1} // the rest of array
else {- :spaceleft {+ :length 1}} :sb :word} }}}}}
{if {> {+ :length 1} :spaceleft} // if ...
then {- :linewidth :length} // then update spaceleft and
{lambda {:linewidth :text}
{A.addlast! {br}:word :a2} // push a breakline and the word
{wrap2.r :linewidth
else {- :spaceleft {+ :length 1}} // else update spaceleft and
{A.new :text}
{- :linewidth {W.length {S.get 0 :text}}}
{A.addlast! :word :a2}} }}}}} // push the word

#}}}
{lambda {:linewidth :text} // a function with 2 arguments
{wrap2.r :linewidth // call the recursive "loop"
{A.rest {A.new :text}} // the input as an array minus first word
{- :linewidth {W.length {S.get 0 :text}}} // compute spaceleft
{A.new {S.get 0 :text}}}}} // the output as an array plus first word
-> wrap2
-> wrap2


{wrap2 70 {text}} ->
{wrap2 70 {text}} ->
Personne n’a sans doute oublié le terrible coup de vent de
Personne n’a sans doute oublié le terrible coup de vent de
nord-est qui se déchaîna au milieu de l’équinoxe de cette année, et
nord-est qui se déchaîna au milieu de l’équinoxe de cette
pendant lequel le baromètre tomba à sept cent dix millimètres. Ce fut
année, et pendant lequel le baromètre tomba à sept cent dix
un ouragan, sans intermittence, qui dura du 18 au 26 mars. Les ravages
millimètres. Ce fut un ouragan, sans intermittence, qui dura
du 18 au 26 mars. Les ravages qu’il produisit furent
qu’il produisit furent immenses en Amérique, en Europe, en Asie, sur
immenses en Amérique, en Europe, en Asie, sur une zone large
une zone large de dix-huit cents milles, qui se dessinait obliquement
de dix-huit cents milles, qui se dessinait obliquement à
à l’équateur, depuis le trente-cinquième parallèle nord jusqu’au
l’équateur, depuis le trente-cinquième parallèle nord
quarantième parallèle sud ! (L’île mystérieuse / Jules Verne)
jusqu’au quarantième parallèle sud ! (L’île mystérieuse /
Jules Verne)
</lang>
</lang>