Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extend andika builtin #82

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open

Commits on Mar 22, 2024

  1. style: Use gofmt to format the go code

    Cornform to the go coding style by using the `gofmt`
    tool to format the code.
    This makes the code more "readable" and "maintanable".
    
    Signed-off-by: Gekko Wrld <[email protected]>
    gekkowrld committed Mar 22, 2024
    Configuration menu
    Copy the full SHA
    4c2c282 View commit details
    Browse the repository at this point in the history
  2. chore: Successfully seperate the builtins

    The builtins are now in their own package.
    This is to ensure extendable functions as opposed
    to the previous method which they were in a "fixed" array.
    
    Accessing the functions still uses an array as before.
    This may be fixed to use a better way of accesing the
    builtins but that will be done later.
    
    Signed-off-by: Gekko Wrld <[email protected]>
    gekkowrld committed Mar 22, 2024
    Configuration menu
    Copy the full SHA
    9f22f37 View commit details
    Browse the repository at this point in the history

Commits on Mar 31, 2024

  1. chore: Create a basic string manipulation

    Now the basic code that does basic find and replace has been finalized.
    
    The following have yet to be implemented:
    
    - No type checks are done, anything is printed.
    - Only two types are supported
    - No error is raised on incorrect values.
    
    Other buitins have been moved to another file to create room to extend the `Andika` function.
    This is intended to other builtins.
    
    Signed-off-by: Gekko Wrld <[email protected]>
    gekkowrld committed Mar 31, 2024
    Configuration menu
    Copy the full SHA
    86117f0 View commit details
    Browse the repository at this point in the history
  2. style: Use gofmt to format the code

    Signed-off-by: Gekko Wrld <[email protected]>
    gekkowrld committed Mar 31, 2024
    Configuration menu
    Copy the full SHA
    632b9d9 View commit details
    Browse the repository at this point in the history
  3. fix: Add support for types

    Now types are checked before appending to the 'new string'.
    The '%' is truncated before being printed even if the syntax
    turns out to be wrong.
    
    An array is used to keep the type and subsequently checked against.
    This is ineffective speed and perfomance wise.
    A better solution _may be found_ in the future though.
    
    >> No error handling yet
    
    Signed-off-by: Gekko Wrld <[email protected]>
    gekkowrld committed Mar 31, 2024
    Configuration menu
    Copy the full SHA
    65073dd View commit details
    Browse the repository at this point in the history
  4. chore: Add more format specifiers and docs

    Now the code can handle gracefully:
    
    - boolean
    - arrays
    
    Error handling has been enhanced to acceptable level (whatever that is).
    Type mismatch is now reported appropriately.
    If there is a mismatch in format specifiers to the actual arguments, then an
    error is raised.
    This only happens if the format specifiers are more than the passed arguments.
    This doesn't apply the other way round.
    This is consistent with how C handles this same situation in lax situation
    (not tested in strict and golang though).
    
    Changed the allowed specifiers to match their swahili names, making it easier
    for swahili learners to pick up the specifiers.
    This can be reverted though as it is mostly convention and not hard rules.
    
    Code comments have been included to try and break down the code logic.
    Repetetive part(s) have only been explained once.
    This is to help maintainers and developers skim through the logic with the
    help of the comments and understand it.
    I know that this doensn't substitute clean readable code but it sure does help.
    
    Format specifiers:
    
    - %n -> Nambari
    - %t -> Tungo (ama neno)
    - %b -> Buliani (kweli, sikweli)
    - %s -> Safu (ama orodha)
    
    Signed-off-by: Gekko Wrld <[email protected]>
    gekkowrld committed Mar 31, 2024
    Configuration menu
    Copy the full SHA
    0409cb3 View commit details
    Browse the repository at this point in the history

Commits on Apr 2, 2024

  1. chore: Change format implementation

    Previous implementation used case to match the format to its implementation.
    Now it uses a map to do the matching.
    This method has a couple of upsides:
    
    - Now Flags can be handled easily
    - The formats supported can be changed without logic change
    - The 'main' function doesn't grow long with more implementations
    - Each format can be treated as its own entity
    
    Downsides:
    
    - More time is spent on matching than previous implementation.
    - More boiler plate code (not that much but adds up)
    - `if` is slower than `case` (in some cases :) though)
    
    Signed-off-by: Gekko Wrld <[email protected]>
    gekkowrld committed Apr 2, 2024
    Configuration menu
    Copy the full SHA
    b7a0829 View commit details
    Browse the repository at this point in the history

Commits on Apr 3, 2024

  1. chore: Add initial implementation of flags

    Now flags infrastructure has been set up fully.
    Addition of flags can be done now in few simple modifications.
    For now only the following flags have been implemented:
    
    - '+': Add a preceding '+' in integer values.
    - '.': Add a predefined number of zeroes to float (DESIMALI)
    - '!': Convert to uppercase the string passed (should be removed in the future).
    
    The above implementated flags are just for demonstration of the flags
    feature and not a concreate impelementation.
    
    '%d' Have been added to the list of supported flags.
    The flags represents "DESIMALI" type (e.g 2.4)
    
    Error reporting is still not at par but good enough to nudge the user
    in the right direction, but %.12 for example doesn't report any error.
    
    The code still doesn't actually follow the DRY principle.
    A lot of code is repeated.
    Not sure if this is the biggest concern as of now.
    
    Example usage as of now:
    
    >>> andika('Habari %!t\n', 'nuru')
    Habari NURU
    
    >>> andika('%+.5d\n', 2.3)
    +2.30000
    
    If the flag is not known they it is silently ignored (the same as in golang (partly though)).
    If the syntax is messed up, then undefined there will be undefied behaviour:
    e.g:
    
    >>> andika('%#.2_3d\n', 2.4)
    2.40
    
    This may or may not be the desired behaviour but the best that can be done (as of now).
    
    NOTE:
    Now andika() doesn't add an extra '\n' to the end of strings.
    This **may** break the previous implementations.
    This only happens if the first argument is a string, else the previous
    implementation still aplies.
    
    Signed-off-by: Gekko Wrld <[email protected]>
    gekkowrld committed Apr 3, 2024
    Configuration menu
    Copy the full SHA
    6e9f90b View commit details
    Browse the repository at this point in the history

Commits on Apr 5, 2024

  1. fix: Simplify the codebase, check for specifiers

    The Functions have been simplified.
    A loop over slices have been converted into a map.
    
    Flags are now resolved and the results passed to the functions
    directly.
    This reduces the boiler plate that was there before.
    Conversion to int64 then to int has been simplified to just
    an int.
    
    An error is returned if the string ends before any format
    specifier is found e.g
    
    >>> andika('%4', 3.4)
    Kosa: Siwezi kupata fomati inayofaa
    
    The 'substitution' array `must` be equal to the 'real' array
    
    >>> andika('Habari %t uko na miaka %n\n', 'Hana')
    Kosa: Safu mbadala ni chini ya safu halisi
    
    >>> andika('Habari %t uko na miaka %n\n', 'Hana', 21, ['a'])
    Kosa: Safu halisi ni chini ya safu mbadala
    
    Signed-off-by: Gekko Wrld <[email protected]>
    gekkowrld committed Apr 5, 2024
    Configuration menu
    Copy the full SHA
    f0fe309 View commit details
    Browse the repository at this point in the history