Code Monkey home page Code Monkey logo

pixapencil's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

pixapencil's Issues

[Bug] Iterative queue-based flood fill algorithm's 'expandToNeighborsWithMap()' function is unusually slow

Describe the bug

PyxlMoose uses an iterative queue-based flood fill algorithm in order to implement the fill (sometimes called paint bucket) tool.

Below is an exert of the expandToNeighborsWithMap() function which is an important part of the algorithm.

This function will return the index of the north, south, west, and east pixels from the xyPositionData list which contains XYPosition objects:

fun expandToNeighborsWithMap(instance: MyCanvasView, from: XYPosition): List<Int> {
    var asIndex1 = from.x
    var asIndex2 = from.x

    var asIndex3 = from.y
    var asIndex4 = from.y

    if (from.x > 1) {
        asIndex1 = rectangleDataMap!![XYPosition(from.x - 1, from.y)]!!
    }

    if (from.x < instance.spanCount) {
        asIndex2 =  rectangleDataMap!![XYPosition(from.x + 1, from.y)]!!
    }

    if (from.y > 1) {
        asIndex3 =  rectangleDataMap!![XYPosition(from.x, from.y - 1)]!!
    }

    if (from.y < instance.spanCount) {
        asIndex4 = rectangleDataMap!![XYPosition(from.x, from.y + 1)]!!
    }

    return listOf(asIndex1, asIndex2, asIndex3, asIndex4)
}

To Reproduce

This issue isn't exactly possible to reproduce unless you pinpoint which parts of the algorithm are taking the most time to complete.

I personally decided to test out which parts of the code are taking the most time to compile. I came to the conclusion that the expandToNeighborsWithMap() function is taking the most time out of all the other tasks in the algorithm.

Expected behavior

The expandToNeighborsWithMap() function should be much quicker to complete, it should not be taking seconds to finish as it is now.

[Bug] Pixel grid becomes thicker on larger canvases

Describe the bug

Currently, the pixel grid performs well on smaller canvases, but on larger canvases it looks strange - it appears that the borders are quite thick.

Here is an image which shows how it looks like on a canvas with a spanCount value of 170:

image

On the other hand, this is how the pixel grid looks like on a canvas with a spanCount value of 20:

image

To Reproduce

Steps to reproduce the behavior:

  1. Open PyxlMoose
  2. Create a new project
  3. Specify '170' as the span count
  4. Enable pixel grid from the toolbar

Expected behavior

The pixel grid should have the same border thickness regardless of the canvas size.

[Bug] Fix all 'undo' bugs

Describe the bug
The undo tool can be buggy at times. It may behave weirdly in certain scenarios.

To Reproduce
N/A

Expected behavior
The undo tool should behave smoothly at all times without any bugs.

[Feature request] Change app logo

Feature description

Currently, the app logo is just the default 'Android' icon. This should be changed to a custom app logo.

The current app logo on GitHub also needs to be changed to something more professional and eye-catching.

Why is this feature important to add?

Because it gives the app a unique flair, and differentiates it from other apps.

The GitHub current logo is also a bit bland.

[Improvement] Fix smelly fragment code

The current code for managing fragment transactions throughout the app is of poor quality and needs a revamp. Study through Google's documentation on Fragments and improve the code.

[Feature Request] Add ability to view the image after PNG export

Feature description

This feature will allow the user to view the image that they just saved (as a PNG).

Why is this feature important to add?

This can save the user time: instead of having to open the 'Files' app, and find the 'DCIM' folder, they can just press a button inside of the app.

[Feature Request] Square tool

Feature description

This feature will allow the user to create squares using the square tool.

Why is this feature important to add?

This feature is important to add because it makes it much easier to create rectangles with the same width and height, and will save the user time and hassle when compared to using the rectangle tool.

[Feature Request] Revamp ColorPickerFragment UI - add HSV option

Feature description

Add tabs in ColorPickerFragment with 'RGB', 'Hex', and add a new 'HSV' option.

Why is this feature important to add?

Because the user might want to input an HSV value instead of an RGB or hexadecimal value.

Revamping the UI with tabs will make the user experience much more intuitive as well.

[Feature Request] More brushes

Feature description

Currently, the user can only use the default brush which is just a square.

In the future, we could add a 'Brushes' tab in CanvasActivity in which the user can select the brush they want from a predefined list of brushes.

Why is this feature important to add?

To create more complex artwork, the user will probably want to use a variety of different brushes in their creation instead of just the regular 1x1 square brush. Most other pixel art editors give the user the option to select from other brushes - currently PyxlMoose does not, so this will undoubtedly be a good feature addition.

[Feature Request] Rectangle tool

Feature description

This feature will allow the user to create a bordered/filled-in rectangle of their chosen size.

Why is this feature important to add?

Because currently it's quite difficult to draw perfect rectangles in the app. Not to mention that most commercial pixel art editors already have a rectangle tool, so this would be a good addition to the app.

[Feature Request] Add a color picker to ColorPickerFragment

Feature description

Currently, if the user wants to select custom colors they can play around with three sliders which represent red, green, and blue.

Most standard editors have a color picker that the user can select colors from, this would be a good addition to the app.

The color picker could go alongside the RGB sliders, as some might prefer one over another.

Why is this feature important to add?

Because it gives the user more options in terms of what color they want to select. A color picker has a much simpler interface when compared to RGB sliders, and I personally almost always use a color picker when I want to select custom colors.

[Bug] Pixel grid should only show on large canvases when user has zoomed in enough

Describe the bug

This isn't exactly a bug, more of a feature/bug mix.

Say the user creates a canvas with a span count of 100, and then they enable the pixel grid - it is hardly visible and looks strange:

image

The quality of the grid only increases once we zoom in:

image

This should be fixed by only enabling the pixel grid on larger canvases when the user has zoomed in to a point in which it can be visible.

To Reproduce

Steps to reproduce the behavior:

  1. Open PyxlMoose
  2. Create a new project
  3. Specify '100' as the span count
  4. Turn on the pixel grid
  5. Observe the result

Expected behavior

Once this issue has been resolved, the pixel grid should only be showing on larger canvases when the user has zoomed in to a point in which it can be visible.

[Feature Request] Pixel perfect mode

Feature description

This feature removes 'the middle pixel of an L shape':

Why is this feature important to add?

Because some users prefer to have this mode on for certain types of drawings: one of the reasons is that it can improve the appearance of curves. Although it should be noted that it's just a matter of preference for most cases, that is why the feature will be off by default, and certain users which prefer pixel perfect mode could turn it on.

[Feature Request] Reset zoom option

Feature description

This feature will allow the user to reset their zoom factor to the default value.

Why is this feature important to add?

Because users who have zoomed in/out too much and want to get back to the original zoom value would save a tremendous amount of time with this feature.

[Bug] Flooding glitch when filling in areas from saved canvases

Describe the bug

If you open a canvas that has already been saved, and use the fill tool, it will not flood properly.

Here is an image for reference:

Before:

image

After flood fill:

image

To Reproduce

Steps to reproduce the behavior:

  1. Open PyxlMoose
  2. Create a new project
  3. Specify '50' as the span count
  4. Draw a circle
  5. Save the project
  6. Open the project again
  7. Try to fill in the circle, and observe the glitch

Expected behavior

The fill tool should function properly on saved canvases, it should not glitch as it is now.

[Improvement] Dialog verifying that the user really wants to delete their project

Improvement description

Add a dialog verifying that the user really wants to delete their project.

Why is this improvement important to add?

Because a user might accidentally long press on one of their projects without the intention of deleting their project, this could make them very frustrated - especially if they'd worked on the project for some time.

[Bug] There is no indication as to which tool has been selected

Describe the bug

Whenever you select a different tool from the 'Tools' tab and press on it, there is no indication that you have selected that specific tool.

To Reproduce

Steps to reproduce the behavior:

  1. Open PyxlMoose
  2. Create a new project
  3. Specify any span count you wish
  4. Press on one of the tools and you will observe that there isn't any indication that you have selected that specific tool

Expected behavior

There should be an indication that the user has selected a specific tool.

[Feature Request] Export to JPG

Feature description

This feature will allow the user to export their project to a JPG image.

Why is this feature important to add?

Because some users might want to export their images to a JPG format instead of the standard PNG format.

won't run

Describe the bug
the log is down below.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
2022-02-11 09:37:18.733 12671-12671/com.realtomjoney.pyxlmoose E/AndroidRuntime: FATAL EXCEPTION: main Process: com.realtomjoney.pyxlmoose, PID: 12671 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.realtomjoney.pyxlmoose/com.realtomjoney.pyxlmoose.activities.main.MainActivity}: android.view.InflateException: Binary XML file line #36 in com.realtomjoney.pyxlmoose:layout/activity_main: Binary XML file line #36 in com.realtomjoney.pyxlmoose:layout/activity_main: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3340) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3489) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2073) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:225) at android.app.ActivityThread.main(ActivityThread.java:7563) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:994) Caused by: android.view.InflateException: Binary XML file line #36 in com.realtomjoney.pyxlmoose:layout/activity_main: Binary XML file line #36 in com.realtomjoney.pyxlmoose:layout/activity_main: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView Caused by: android.view.InflateException: Binary XML file line #36 in com.realtomjoney.pyxlmoose:layout/activity_main: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:858) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1014) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1144) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1105) at android.view.LayoutInflater.inflate(LayoutInflater.java:686) at android.view.LayoutInflater.inflate(LayoutInflater.java:538) at com.realtomjoney.pyxlmoose.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:68) at com.realtomjoney.pyxlmoose.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:62) at com.realtomjoney.pyxlmoose.activities.main.MainActivity_setBindingsKt.setBindings(MainActivity+setBindings.kt:6) at com.realtomjoney.pyxlmoose.activities.main.MainActivity.onCreate(MainActivity.kt:23) at android.app.Activity.performCreate(Activity.java:7893) at android.app.Activity.performCreate(Activity.java:7880) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3315) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3489) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2073) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:225) at android.app.ActivityThread.main(ActivityThread.java:7563) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:994) 2022-02-11 09:37:18.733 12671-12671/com.realtomjoney.pyxlmoose E/AndroidRuntime: Caused by: java.lang.IllegalArgumentException: This component requires that you specify a valid TextAppearance attribute. Update your app theme to inherit from Theme.MaterialComponents (or a descendant). at com.google.android.material.internal.ThemeEnforcement.checkTextAppearance(ThemeEnforcement.java:185) at com.google.android.material.internal.ThemeEnforcement.obtainTintedStyledAttributes(ThemeEnforcement.java:116) at com.google.android.material.navigation.NavigationBarView.<init>(NavigationBarView.java:149) at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:108) at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:103) at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:98) ... 28 more 2022-02-11 09:37:18.770 12671-12671/com.realtomjoney.pyxlmoose I/Process: Sending signal. PID: 12671 SIG: 9

[Bug] Flooding glitch with fill tool

Describe the bug

This issue is quite strange, say I draw a line like the following on my pixel grid:

image

Whenever I try to fill in area A it will flood to area B for an unknown reason:

image

On the other hand, filling in area B won't make it flood into area A:

image

For some reason, if I draw a perfect diagonal line like so and I try to fill in area A or B it works perfectly:

image

image

image

For some reason if the line is meeting at both edges of the screen it works fine, but if they don't, it won't fill it in properly.

Tried to debug this for some time, also couldn't figure out why this is happening. Very strange - I'm not sure if this is a common issue or not. It could be an issue with the expandToNeighbors function, although I haven't debugged this enough to be sure?

To Reproduce

Steps to reproduce the behavior:

  1. Open PyxlMoose
  2. Create a new project
  3. Specify '50' as the span count
  4. Draw a line similar to the one I've shown in the images (with area A and B)
  5. Fill in area A, and observe how it floods into area B

Expected behavior

The fill tool should function properly without flooding into unwanted regions.

[Feature Request] Add abilty to rotate canvas

Feature description

This feature will allow the user to rotate the canvas (90 degrees or 180 degrees).

Why is this feature important to add?

This feature is important to add becuase most other pixel art editors have this feature, and for certain situations it can be useful.

[Feature Request] Dither tool

Feature description

This feature will allow the user to 'dither'/color their art in a checkerboard pattern.

Why is this feature important to add?

This feature is important to add because most other pixel art editors already have this feature, and it can be useful when shading.

APK availability

Is your feature request related to a problem? Please describe.
Looking where the app can be found so users can install it 😃

Describe the solution you'd like
git tag releases so they show up here, then have the release *.apk attached to the release.

Describe alternatives you've considered
Directly bringing it to F-Droid – would require tags as well but not necessarily APK files attached to them.

Additional context
A nice FOSS app like this would be nice to find where Android FOSS apps are at home (F-Droid), but should at least be available outside walled gardens (haven't checked whether your app is listed in any of the latter, though). So looking forward to have it available. Thanks in advance!

[Feature Request] Support for a rectangular canvas

Feature description

This feature will allow the user to create a rectangular canvas, they will be able to specify a width and height value instead of simply a spanCount value.

Why is this feature important to add?

It is an important feature to add because not everybody will just want to create a square canvas, users need more options and given the fact that most pixel art editors support rectangular canvases, it would be a good feature to add.

[Bug] Fix canvas dimension/size bug on Samsung devices

Describe the bug
The size of the canvas/custom-view does not scale to that of the Bitmap, I experienced this bug on a Samsung Galaxy A10 (not on the emulator). For some strange reason, it only scales to the size of the Bitmap when you open up an already-saved project. The bug is only observable if you create a completely new project.

If you're reading this, here's some good advice:

DO NOT RELY ON THE EMULATOR ITSELF TO RELEASE AN APP!

To Reproduce

  1. Open PyxlMoose on a Samsung device (the bug might also occur on other device types, though I haven't tested this out).
  2. Create a new project of any arbitrary width and height.
  3. Observe the incorrect custom-view scaling.

Expected behavior
The custom view should scale to the Bitmap dimensions correctly without any blank space.

[Improvement] Indicate as to whether the user has selected the primary or secondary color

Improvement description

Add an indicator (it could be a simple border) as to whether or not the user has selected the primary or secondary color.

Why is this improvement important to add?

Because some users are getting confused as to whether they have selected the primary or secondary color, and for it to be clear they would have to draw on the canvas.

[Feature Request] Redo tool

Feature description

This feature will allow the user to redo their changes.

Why is this feature important to add?

Currently, the user can only undo their changes. The user may have accidentally pressed undo too many times, and currently they have no option of redoing their changes - so adding a redo feature is a good idea.

[Feature Request] Line tool

Feature description

This feature will allow the user to create a line of their chosen dimensions.

Why is this feature important to add?

Currently, it's hard to draw perfectly accurate lines - so this would make it a useful feature to add.

[Feature Request] Polygon tool

Feature description

This feature will allow the user to create polygons using the polygon tool

Why is this feature important to add?

This feature is important to add as most other pixel art editors have a polygon tool, and it is a useful feature when you need to draw custom shapes faster.

Final bugs to fix before release 🥳

Final bugs to fix before PixaPencil gets released...

Fix the states not being saved when the user rotates the device, such as:

  • The primary/secondary color, and color which the user is selecting (primary/secondary)
  • The currently selected tool
  • The currently selected tab
  • Undo/redo state? For some reason undo/redo isn't working when the user rotates the device.
  • Fix not being able to convert the art to a .png or .jpg on newer Android versions.

[Feature Request] Circle tool

Feature description

This feature will allow the user to create a bordered/filled-in circle of their chosen size.

Why is this feature important to add?

Because currently the user has no way of drawing circles in the app, which is something might users want the ability to do.

[Improvement] Add clear labeling to the 'FindAndReplaceFragment'

Improvement description

Add clear labelling to the 'FindAndReplaceFragment' showing which color will be found, and which color it will be replaced with.

Why is this improvement important to add?

Because some users are getting confused as to what the two blocks represent at the bottom of the 'FindAndReplaceFragment'.

[Bug] App crashes if user inputs '0' or any negative number as the span count value

Describe the bug

If the user inputs '0' or any negative number as the span count value the app crashes.

To Reproduce

Steps to reproduce the behavior:

  1. Open PyxlMoose
  2. Create a new project
  3. Specify '0' or any negative number as the span count
  4. Observe the result

Expected behavior

The app should not crash - but rather show a Snackbar detailing the problem if the user inputs '0' or any negative number as the span count value.

[Bug] Spaces appear between each pixel when the user swipes fast

Describe the bug

If the user swipes fast while using the pencil tool, there will be spaces between each pixel, like so:

image

To Reproduce

Steps to reproduce the behavior:

  1. Open PyxlMoose
  2. Create a new project
  3. Specify any span count you wish
  4. Swipe fast using the pencil tool, and observe the space in between each pixel

Expected behavior

The pencil tool should not contain any spaces between pixels.

Since hardware input rate is not infinite, the solution would be to connect the pixels together using Bresenham's line algorithm.

[Feature Request] Spray tool

Feature description

This feature will allow to use to emulate how a spray paint works in real life, but on a pixel art canvas inside the app.

The user can edit options such as 'radius' or 'strength' to their liking.

Why is this feature important to add?

This feature is important to add as I've seen a couple of similar apps that have this feature, and it can be used when generating random pieces of 'information' is needed.

[Feature Request] Add ability to rotate canvas clockwise/anti-clockwise

Feature description

This feature will give the user the ability to rotate the canvas either clockwise or anti-clockwise.

Why is this feature important to add?

Because currently the user can only rotate the canvas clockwise, and some might want to rotate it anti-clockwise for certain situations.

[Bug] Fix all landscape configuration change bugs

Describe the bug
The undo tool can be buggy at times. It may behave weirdly in certain scenarios.

To Reproduce

  1. Open PyxlMoose.
  2. Create a new project of any arbitrary width and height.
  3. Rotate your screen to landscape mode.
  4. Observe the result.

Expected behavior
The app should be able to handle configuration changes smoothy without exceptions.

[Improvement] Change icons for darken/lighten tool

Improvement description

Change the current icon of the darken/lighten tool to something more clear.

Why is this improvement important to add?

Because some users are getting confused by the icons as to what the tools do.

[Improvement] Choose different icon for the line tool

Improvement description

Change the current icon of the line tool to something more clear (a line, for instance).

Why is this improvement important to add?

Because some users are getting confused by the icon as to what the tool does.

[Feature Request] Export to PNG

Feature description

This feature will allow the user to export their project to a PNG image.

Why is this feature important to add?

Because currently the user has no way of viewing their project as a PNG, this means that to save the photo for future reference they would need to take a screenshot of their phone. This would also give users an easier way to share their projects to their friends.

[Bug] Blur canvas on Android Oreo or API 27

Describe the bug
When run on android 8 (oreo sdk 27) canvas showing blurry, and when draw color to canvas its also blurred

To Reproduce
Steps to reproduce the behavior:

  1. Open PyxlMoose.
  2. Create new project or Edit Existing Project
  3. Canvas showing blur, draw color also blur

Expected behavior
Canvas not blur, but show sharp pixel

Screenshots
image

Smartphone (please complete the following information):

  • Emulator Android Studio
  • Android version 8, oreo SDK 27

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.