Difference between revisions of "Wrapping"

From Wiki
Jump to navigation Jump to search
m (right closing tag)
(temporary workaround for hyphenating SHA sums)
Line 1: Line 1:
 
Very long continuous strings (such as SHA512 keys or DNA sequences) might have to be broken after any character, independent from the current hyphenation scheme.
 
Very long continuous strings (such as SHA512 keys or DNA sequences) might have to be broken after any character, independent from the current hyphenation scheme.
  
== Example SHA512 ==
+
== Line breaking with SHA512 sums ==
This is Hans’ trick from the list for SHA512 keys
+
 
 +
Hans provided a way of breaking SHA512 sums in lines (now being checked).<ref>There might be an issue with the custom hyphenator that needs to be reviewed, since the first characters in the new line are missing.
  
 
<context source="yes">
 
<context source="yes">
Line 104: Line 105:
 
}
 
}
  
 +
\stopTEXpage
 +
</context>
 +
</ref>
 +
 +
As a workaround, a simpler way to break SHA sums in lines, but without any character would be (abusing both {{cmd|handletokens}} and {{cmd|softhyphen}}):
 +
 +
<context source="yes">
 +
\define[1]\SHA{{\tt\handletokens #1\with\SHABreak}}
 +
\define[1]\SHABreak{#1\softhyphen\hskip 0pt}
 +
\startTEXpage[offset=1em, width=15em]
 +
SHA sum \SHA{8b2f3c087046c3943ace0dc4f958ef2138e58a51b40e%
 +
ef6fab6fa1aeb845cc257a410ab1b914bc399b4293f%
 +
31c76fc2c73e5be5ea4d329f9e6820984688efec2}
 
\stopTEXpage
 
\stopTEXpage
 
</context>
 
</context>
Line 148: Line 162:
 
<context source="yes">
 
<context source="yes">
 
\define[1]\DNA{\handletokens #1\with\DNAspacer}
 
\define[1]\DNA{\handletokens #1\with\DNAspacer}
\define[1]\DNAspacer{#1\hskip 2.3pt plus .1pt}
+
\define[1]\DNAspacer{#\hskip 2.3pt plus .1pt}
  
  
Line 164: Line 178:
  
 
== Help from ConTeXt-Mailinglist/Forum ==
 
== Help from ConTeXt-Mailinglist/Forum ==
 +
 
All issues with:
 
All issues with:
 
{{Forum|SHA512}}
 
{{Forum|SHA512}}
 
{{Forum|Linebreak after x characters}}
 
{{Forum|Linebreak after x characters}}
  
 +
== Footnotes ==
 
[[Category:Basics]]
 
[[Category:Basics]]

Revision as of 18:32, 15 February 2023

Very long continuous strings (such as SHA512 keys or DNA sequences) might have to be broken after any character, independent from the current hyphenation scheme.

Line breaking with SHA512 sums

Hans provided a way of breaking SHA512 sums in lines (now being checked).[1]

As a workaround, a simpler way to break SHA sums in lines, but without any character would be (abusing both \handletokens and \softhyphen):

\define[1]\SHA{{\tt\handletokens #1\with\SHABreak}}
\define[1]\SHABreak{#1\softhyphen\hskip 0pt}
\startTEXpage[offset=1em, width=15em]
SHA sum \SHA{8b2f3c087046c3943ace0dc4f958ef2138e58a51b40e%
ef6fab6fa1aeb845cc257a410ab1b914bc399b4293f%
31c76fc2c73e5be5ea4d329f9e6820984688efec2}
\stopTEXpage

Example DNA sequences

This is an adoption from Wolfang using Lua:

\startluacode

    local shared = {
        start  = 1,
        length = 1,
        before = nil,
        after  = nil,
        left   = false,
        right  = false,
    }

    local all = table.setmetatableindex({ }, function(t,k)
        return shared
    end)

    languages.hyphenators.traditional.installmethod("dna",
        function(dictionary,word,n)
            return all
        end
    )
\stopluacode

\definehyphenationfeatures
 [dna]
 [characters=all,
  alternative=dna]

\startframedtext[width=6cm,style=mono]
 \sethyphenationfeatures[dna]
 \setuphyphenation[method=traditional]
 GATTGCTTACTCCTGGTTGGTGGGGCTTACATTCTGTCGCCTCAAAACTACTAGAGCCGGCATATTCTAGAAGGGCCGCCTTCATGTGG
\stopframedtext

And a solution using \handletokens by Rik:

\define[1]\DNA{\handletokens #1\with\DNAspacer}
\define[1]\DNAspacer{#\hskip 2.3pt plus .1pt}


\startframedtext[width=6cm,style=mono]
\DNA{GATTGCTTACTCCTGGTTGGTGGGGCTTACATTCTGTCGCCTCAAAACTACTAGAGCCGGCATATTCTAGAAGGGCCGCCTTCATGTGG}
\stopframedtext

One caveat, however: this method always adds the spacer value, and can result in a blank line at the end in some cases, even when the spacer value is zero. This is not the case with the lua mechanism.

See also

Verbatim with line breaks for another solution to the problem above.

Help from ConTeXt-Mailinglist/Forum

All issues with:

Footnotes

  1. There might be an issue with the custom hyphenator that needs to be reviewed, since the first characters in the new line are missing.
    \startluacode
    
         -- local shared = {
         --     start  = 1,
         --     length = 1,
         --     left   = false,
         --     right  = false,
         -- }
    
         local shared = {
             start  = 1,
             length = 1,
             before = utf.char(0xB7),
             after  = nil,
             left   = false,
             right  = false,
         }
    
         -- languages.hyphenators.traditional.installmethod("sha",
         --     function(dictionary,word,n)
         --         local t = { }
         --         for i=1,#word do
         --             t[i] = shared
         --         end
         --         return t
         --     end
         -- )
    
         -- or more efficient when used often:
    
         -- local all = { }
         -- for i=1,512 do
         --     all[i] = shared
         -- end
         -- languages.hyphenators.traditional.installmethod("sha",
         --     function(dictionary,word,n)
         --         return all
         --     end
         -- )
    
         -- or more obscure:
    
         -- local all = table.setmetatableindex({ }, function(t,k)
         --     t[k] = shared
         --     return shared
         -- end)
         --
         -- languages.hyphenators.traditional.installmethod("sha",
         --     function(dictionary,word,n)
         --         return all
         --     end
         -- )
    
         -- or just (lua is fast enough anyway)
    
         local all = table.setmetatableindex({ }, function(t,k)
             return shared
         end)
    
         languages.hyphenators.traditional.installmethod("sha",
             function(dictionary,word,n)
                 return all
             end
         )
    \stopluacode
    
    \definehyphenationfeatures
       [sha]
       [characters=all,
        alternative=sha]
    
    % \unexpanded\def\sha#1%
    %   {\begingroup
    %    \sethyphenationfeatures[sha]%
    %    #1%
    %    \endgroup}
    %
    % \setuphyphenation[method=traditional]
    
    \unexpanded\def\sha#1%
       {\begingroup
        \sethyphenationfeatures[sha]%
        \setuphyphenation[method=traditional]%
        #1%
        \endgroup}
    
    \showframe
    
    \startTEXpage[offset=3em]
    
    \setupalign[tolerant,stretch]
    
    \dorecurse {10} {%
         some sha
         \sha{8b2f3c087046c3943ace0dc4f958ef2138e58a51b40e%
    ef6fab6fa1aeb845cc257a410ab1b914bc399b4293f%
    31c76fc2c73e5be5ea4d329f9e6820984688efec2} and
    }
    
    \stopTEXpage