| Age | Commit message (Collapse) | Author |
|
|
|
With help of spdxconv tool [1], we able to bulk update all files license
and copyright format to comply with SPDX formats.
[1] https://kilabit.info/project/spdxconv/
|
|
The Peek method take a look on n bytes inside the buffer without
using delimiters.
The returned bytes may empty or have length less than n.
|
|
This is to see the return value when no token can be parsed
and to make the test coverage become 100%.
|
|
Go 1.22 now support for-range on numeric value.
|
|
The "encoding/binary.BigEndian" in standard library provides method
PutXxx that do the same thing.
|
|
Package "encoding/binary" from standard library support reading integer
from bytes using BigEndian, LittleEndian variables.
|
|
Since Go 1.19, package "encoding/binary.BigEndian" support appending
byte order.
|
|
Since Go 1.20, the standard bytes package have the Copy function.
Since Go 1.22, the standard slices package have the Concat function.
|
|
Package hexdump implements reading and writing bytes from and into
hexadecimal number.
It support parsing output from hexdump(1) tool.
|
|
The AppendInt64 append an int64 value into slice of byte.
The AppendUint64 append an uint64 value into slice of byte.
|
|
If networkByteOrder is true, the ParseHexDump read each hex string
in network byte order or as order defined in text.
While at it, fix reading and parsing single byte hex.
|
|
The test initialize Parser with seven delimiters, '\t', '=', '\n', ' ',
'"', '(', and ')' and then Read token from multi lines contents.
|
|
HTTP request now implicitly create request with context.
Any false positive related to not closing HTTP response body has been
annotated with "nolint:bodyclose".
In the example code, use consistent "// Output:" comment format, by
prefixing with single space.
Any comment on code now also prefixing with single space.
An error returned without variables now use [errors.New] instead of
[fmt.Errorf].
Any error returned using [fmt.Errorf] now wrapped using "%w" instead of
"%s".
Also, replace error checking using [errors.Is] or [errors.As], instead
of using equal/not-equal operator.
Any statement like "x = x OP y" now replaced with "x OP= y".
Also, swap statement is simplified using "x, y = y, x".
Any switch statement with single case now replaced with if-condition.
Any call to defer on function or program that call [os.Exit], now
replaced by calling the deferred function directly.
Any if-else condition now replaced with switch statement, if possible.
|
|
There are several reasons that why we move from github.com.
First, related to the name of package.
We accidentally name the package with "share" a common word in English
that does not reflect the content of repository.
By moving to other repository, we can rename it to better and unique
name, in this "pakakeh.go".
Pakakeh is Minang word for tools, and ".go" suffix indicate that the
repository related to Go programming language.
Second, supporting open source.
The new repository is hosted under sourcehut.org, the founder is known
to support open source, and all their services are licensed under AGPL,
unlike GitHub that are closed sources.
Third, regarding GitHub CoPilot.
The GitHub Terms of Service [1], allow any public content that are hosted
there granted them to parse the content.
On one side, GitHub helps and flourish the open source, but on another
side have an issues regarding scraping the copyleft license [2].
[1]: https://docs.github.com/en/site-policy/github-terms/github-terms-of-service#4-license-grant-to-us
[2]: https://githubcopilotinvestigation.com
|
|
The %q will print the character itself if its printable or an hexadecimal
representation.
|
|
Unlike TrimSpaces, which only remove spaces on beginning and end,
RemoveSpaces remove all spaces including in between characters.
|
|
|
|
Using an example not only test the code but also provide example snippet
when opened in the godoc.
|
|
Package name in test Example should be different with the actual package.
This is to minimize leaking un-exported functions or methods.
|
|
The ReadLine method read until it found new line ('\n') or end of content,
ignoring all delimiters.
The returned line will not contain '\n'.
|
|
|
|
The Remaining method return the copy of un-parsed content.
|
|
The AddDelimiters method add another delimiters to the current parser.
The ReadNoSpace method read the next token by ignoring the leading spaces,
even if its one of the delimiter. The returned token will have no
trailing spaces.
The RemoveDelimiters method remove delimiters delims from current
delimiters.
The Reset method set all internal state to new content and
delimiters.
The SetDelimiters method replace the current delimiters with delims.
The SkipHorizontalSpaces method skip space (" "), tab ("\t"), carriage
return ("\r"), and form feed ("\f") characters; and return the first
non-space character or 0 if it reach end-of-content.
The SkipSpaces method skip all spaces character
(' ', '\f', '\n', '\r', '\t') and return the first non-space character
or 0 if it reach end-of-content.
The Stop method stop the parser, return the remaining unparsed content
and its last position, and then call Reset to reset the internal state
back to zero.
The UnreadN method unread N characters and return the character its
pointed to. If N greater than current position index, it will reset the
read pointer index back to zero.
|
|
The ParseHexDump parse the default output of [hexdump](1) utility from
parameter in back into stream of byte.
An example of default output of hexdump is
0000000 7865 5f70 6964 2f72 0000 0000 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0000
*
0000060 0000 0000 3030 3030 3537 0035 3030 3130
The first column is the address and the rest of the column is the data.
Each data column is 16-bit words in big-endian order, so in the above
example, the first byte would be 65, second byte is 78 and so on.
The asterisk "*" means that the address from 0000020 to 0000050 is equal to
the previous line, 0000010.
[hexdump]: https://man.archlinux.org/man/hexdump.1
|
|
The Parser type parse stream of byte using one or more delimiters as
separator between token.
|
|
The TrimNull function remove 0 value ("\0" or NULL in C) at leading
and trailing of input.
|
|
The change is to accommodate large bytes data, more than 0xFFFF.
The hex address in the first column is increased to 8 digits, the
characters compacted without space in between.
|
|
This is to prevent import cycle later when we use lib/test in bytes.
|
|
The DumpPrettyTable write each byte in slice data as hexadecimal, ASCII
character, and integer with 8 columns width.
|
|
The SplitEach funciton split the slice of byte into n number of bytes.
If n is less or equal than zero, it will return the data as chunks.
|
|
|
|
The bytes package, and many other packages in this module, is written
when I still learning and using the Go language for master thesis.
Some of the code, like function signature, does not follow the
Go idiom, at least not how the Go source code looks like.
A breaking changes,
* WriteUint16 and WriteUint32 accept slice only without pointer.
There is no need to pass slice as pointer to function if we want
to modify the content, as long as the backing storage is not
changed.
Bug fixes,
* PrintHex: fix print layout on the last line
* ReadHexByte: fix possible index out of range
* SkipAfterToken return -1 and false if no token found, as promised
in the comment, instead of the length of text.
We move all unit test to example so we have test and example in the
documentation at the same time.
This changes make all test coverage 100%.
|
|
Previously, we pass pointer to slice on AppendInt16, AppendInt32,
AppendUint16, and AppendUint32 functions. This model of function
signature is not a Go idiom. It is written when I am still new to
Go.
|
|
Previously, PrintHex only print the hex value of all bytes with
specified length.
This changes also print any printables ASCII characters (char 33 through
126) in the right side column to view readable contents.
|
|
Previously, the test.Assert and test.AssertBench functions has the
boolean parameter to print the stack trace of test in case its not equal.
Since this parameter is not mandatory and its usually always set to
"true", we remove them from function signature to simplify the call
to Assert and AssertBench.
|
|
|
|
The function MergeSpaces will convert sequences of white space into
single space ' '.
|
|
|
|
|
|
Unlike Indexes, the word parameter must be separated by space or placed
at beginning or end of string.
|
|
|
|
|
|
This library previously part of bytes package. To make it bytes package
consistent (only working with slice of byte), we move all ASCII related
constants, variables, and functions into new package.
|
|
The valid syntax to suppress linter warnings is "//nolint:<name>" with
no space between comment and "nolint" and between ":". Also, we move the
placement of nolint directive to the top of statements for multiple
nolint in the same scope.
While at it, fix and supress some linter warnings.
|
|
Non pointer slice is less confusing than with pointer.
|
|
|
|
|
|
Most of the warnings caused by update to linter which cause global
variables declared with grouping "( ... )" and that has been suppressed,
are become false-positive again.
|
|
If you familiar with go-bindata [1], this method is similar with that.
[1] github.com/shuLhan/go-bindata
|